VHDL复习题
的双向总线缓冲器有两个数据输入/输出端A和B,一个方向控制端DIR和一个选通端EN。EN=0时双向缓冲器选通。若DIR=0,则A=B,反之则B=A。
BIDIRENDIRA[7..0]ENDIRA[7..0]
【例3.9.9】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY BIDIR IS
PORT(A,B:INOUTSTD_LOGIC_VECTOR(7 DOWNTO 0); EN,DIR:IN STD_STD_LOGIC); END ENTITY BIDIR;
ARCHITECTURE ART OF BIDIR IS
SIGNA AOUT,BOUT: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS(A,EN,DIR) IS --A为输入 BEGIN
IF((EN=‘0’)AND (DIR=‘1’))THEN BOUT<=A; ELSE BOUT<=\; END IF ;
B<=BOUT; --B为输出 END PROCESS;
PROCESS(B,EN,DIR) IS --B为输入 BEGIN
IF((EN=‘0’)AND (DIR=‘1’))THEN AOUT<=B; ELSE AOUT<=\; END IF ;
A<=AOUT; --A为输出 END PROCESS;
END ARCHITECTURE ART; 5. 时序逻辑电路设计
本节的时序电路设计主要有触发器、寄存器、计数器、序列信号发生器和序列信号检测器等的设计实例。 1.触发器
1) D触发器 【例3.9.10】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY DCFQ IS
B[7..0]B[7..0]VHDL复习题
PORT(D,CLK:IN STD_LOGIC; Q:OUT STD_LOGIC); END ENTITY DCFQ;
ARCHITECTURE ART OF DCFQ IS BEGIN
PROCESS(CLK) IS BEGIN
IF (CLK'EVENT AND CLK=‘1’)THEN
-- 时钟上升沿触发 Q<=D; END IF;
END PROCESS;
END ARCHITECTURE ART; 4) JK触发器 【例3.9.13】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY JKCFQ IS
PORT(J,K,CLK:IN STD_LOGIC; Q,QB:BUFFER STD_LOGIC); END ENTITY JKCFQ;
ARCHITECTURE ART OF JKCFQ IS SIGNA Q_S,QB_S:STD_LOGIC; BEGIN
PROCESS(CLK,J,K) IS BEGIN
IF (CLK'EVENT AND CLK=‘1’)THEN IF(J=‘0’ AND K=‘1’) THEN Q_S<=‘0’; QB_S<=‘1’;
ELSIF (J=‘1’ AND K=‘0’) THEN Q_S<=‘1’; QB_S<=‘0’;
ELSIF (J=‘1’ AND K=‘1’) THEN Q_S<=NOT Q_S;
QB_S<=NOT QB_S; END IF; END IF ; Q<=Q_S; QB<=QB_S; END PROCESS;
END ARCHITECTURE ART;
6. 触发器的同步和非同步复位
触发器的初始状态应由复位信号来设置。按复位信号对触发器复位的操作
VHDL复习题
不同,可以分为同步复位和非同步复位两种。所谓同步复位,就是当复位信号有效且在给定的时钟边沿到来时,触发器才被复位;非同步复位,也称异步复位,则是当复位信号有效时,触发器就被复位,不用等待时钟边沿信号。下面以D触发器为例分别予以举例。 1) 非同步复位/置位的D触发器 【例3.9.14】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY ASYNDCFQ IS
PORT(CLK,D,PRESET,CLR:IN STD_LOGIC;
Q:OUT STD_LOGIC); END ENTITY ASYNDCFQ;
ARCHITECTURE ART OF ASYNDCFQ IS BEGIN
PROCESS(CLK,PRESET,CLR) IS BEGIN
IF(PRESET='1')THEN --置位信号为1,则触发器被置位 Q<='1';
ELSIF(CLR='1')THEN --复位信号为1,则触发器被复位 Q<='0';
ELSIF(CLK'EVENT AND CLK=‘1’)THEN Q<=D; END IF; END PROCESS;
END ARCHITECTURE ART; 2) 同步复位的D触发器 【例3.9.15】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY SYNDCFQ IS
PORT(D, CLK,RESET:IN STD_LOGIC;
Q:OUT STD_LOGIC); END ENTITY SYNDCFQ;
ARCHITECTURE ART OF SYNDCFQ IS BEGIN
PROCESS(CLK) IS BEGIN
IF(CLK'EVENT AND CLK=‘1’)THEN IF(PRESET=‘0’)THEN
Q<=‘0’; --时钟边沿到来且有复位信号,触发器被复位 ELSE Q<=D; END IF; END IF;
END PROCESS;
VHDL复习题
END ARCHITECTURE ART; 7. 计数器
计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。 1) 同步计数器
下面是一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。 【例3.9.18】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNTM60 IS
PORT(CI:IN STD_LOGIC; --计数控制
NRESET:IN STD_LOGIC; --异步复位控制 LOAD:IN STD_LOGIC; --置数控制 D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC;
CO:OUT STD_LOGIC; --进位输出
QH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); --输出高4位 QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); --输出低4位 END ENTITY CNTM60; ARCHITECTURE ART OF CNTM60 IS BEGIN
CO<=‘1’WHEN(QH=\ QL=\‘1’)ELSE'0'; --进位输出的产生 PROCESS(CLK,NRESET) IS BEGIN
IF(NRESET=‘0’)THEN --异步复位
QH<=\; QL<=\;
ELSIF(CLK'EVENT AND CLK=‘1’)THEN --同步置数 IF(LOAD=‘1’)THEN
QH<=D(7 DOWNTO 4); Q L<=D(3 DOWNTO 0); ELSIF(CI=‘1’)THEN --模60的实现 IF(QL=9)THEN
QL<=\; IF(QH=5)THEN
QH<=\;
ELSE --计数功能的实现
QH<=QH+1;
END IF; ELSE
QL<=QL+1; END IF;
VHDL复习题
END IF; --END IF LOAD END IF; END PROCESS;
END ARCHITECTURE ART; 8. 序列信号发生器
在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号。产生序列信号的电路称为序列信号发生器。 1) “”序列发生器
该电路可由计数器与数据选择器构成,其VHDL描述如下: 【例3.9.20】 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SENQGEN IS
PORT(CLK,CLR,CLOCK:IN STD_LOGIC;
ZO:OUT STD_LOGIC); END ENTITY SENQGEN;
ARCHITECTURE ART OF SENQGEN IS
SIGNA COUNT:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNA Z:STD_LOGIC :=‘0’; BEGIN
PROCESS(CLK,CLR) IS --注意各进程间的并行性 BEGIN
IF(CLR=‘1’)THEN COUNT<=\; ELSE
IF(CLK=‘1’AND CLK'EVENT)THEN
IF(COUNT=\; ELSE COUNT<=COUNT +‘1’; END IF; END IF; END IF; END PROCESS; PROCESS(COUNT) IS BEGIN
CASE COUNT IS
WHEN \‘0’; WHEN \‘1’; WHEN \‘1’; WHEN \‘1’; WHEN \‘1’; WHEN \‘1’; WHEN \‘1’; WHEN OTHERS=>Z<=‘0’;