?? mcu.vhd
字號:
--作為單片機和CPLD的簡單示例,演示如何采用地址數據總線方式和CPLD通訊
--單片機讀取撥碼開關值,并將其開關狀態用寫入cpld
--cpld的led顯示
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MCU IS
PORT (
rst : IN std_logic;
clk : IN std_logic;
--********單片機接口信號********--
data : INOUT std_logic_vector(7 DOWNTO 0); --數據地址總線,
--即單片機的P0端口
mcu_ale : IN std_logic; -- mcu的ALE 地址鎖存信號
mcu_nrd : IN std_logic; -- mcu的rd
mcu_nwr : IN std_logic; -- mcu的wr
--*******外圍控制器件接口*******--
dial : IN std_logic_vector(7 downto 0);
ledout : OUT std_logic_vector(7 downto 0)
-- EN : buffer std_logic_vector(1 downto 0);
-- segdata : OUT std_logic_vector(7 downto 0)
);
END MCU;
ARCHITECTURE arch OF MCU IS
attribute clock_buffer : string;
attribute clock_buffer of mcu_ale :signal is "ibuf";
attribute clock_buffer of mcu_nwr :signal is "ibuf";
SIGNAL LA: std_logic_vector(1 DOWNTO 0); --低位地址鎖存信號
SIGNAL state : std_logic_vector(4 DOWNTO 0);
SIGNAL DIN : std_logic_vector(7 DOWNTO 0);--總線輸入
SIGNAL DOUT : std_logic_vector(7 DOWNTO 0);--總線輸出
SIGNAL REG2 : std_logic_vector(7 DOWNTO 0);--led燈狀態寄存器
BEGIN
process(mcu_ale)
begin
if(mcu_ale='1')THEN
LA<=DIN(1 DOWNTO 0);
END IF;
END PROCESS;
ledout <=reg2;
DOUT<= dial WHEN LA ="00" ELSE
"11111111";
DIN <= DATA;
DATA <= DOUT WHEN mcu_nrd ='0' AND mcu_ale='0' ELSE "ZZZZZZZZ";
READ :PROCESS(mcu_nwr,rst)
BEGIN
IF rst='0' THEN
REG2<="00000000";
ELSIF mcu_nwr'EVENT AND mcu_nwr='0' THEN
CASE LA IS --- Address input
WHEN "10"=>
REG2 <= DIN;
WHEN OTHERS =>
END CASE;
END IF;
END PROCESS READ;
END arch;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -