图5-19 RTL图2
--解1:实现图5-19 RTL图的VHDL程序mux21a.vhd底层设计描述 -- 用WHEN_ELSE实现2选1多路选择器程序(mux21a.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21a IS
PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS BEGIN
y<=a WHEN s='0' ELSE b; END ARCHITECTURE one;
--解2:实现图5-19 RTL图的VHDL程序DFF_PRE_CLR.vhd顶层设计描述 -- 带预置、清零和输出使能的上升沿D触发器程序(DFF_PRE_CLR.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_PRE_CLR_ENA IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END;
ARCHITECTURE bhv OF DFF_PRE_CLR_ENA IS
SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN
PROCESS(CLK,D,Q1,ENA,PRE,CLR) BEGIN
IF CLR='1' THEN Q1<='0'; ELSIF PRE='1' THEN Q1<='1';
ELSIF CLK'EVENT AND CLK='1' AND ENA='1' THEN Q1<=D; END IF;
--IF EN='1' THEN Q<=Q1; --将内部的暂存数据向端口输出 --END IF;
Q<=Q1; --将内部的暂存数据向端口输出 END PROCESS; END bhv;
-- 5-6 给出图5-19 RTL图的VHDL描述。
--解3:实现图5-19 RTL图的VHDL程序T5_19.vhd顶层设计描述 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY T5_19 IS
PORT(RST,D,CLK : IN STD_LOGIC; Q,DOUT : OUT STD_LOGIC); END ENTITY T5_19;
ARCHITECTURE one OF T5_19 IS
COMPONENT DFF_PRE_CLR_ENA --调用D触发器声明语句 PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END COMPONENT;
COMPONENT mux21a --调用D触发器声明语句 PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT;
SIGNAL DD,DDD: STD_LOGIC; --定义1个信号作为内部的连接线。 BEGIN
u1: mux21a PORT MAP(D,'0',RST,DD); DDD<=D XOR DD;
u2: DFF_PRE_CLR_ENA PORT MAP(CLK,DDD,DOUT,'1','0','0'); u3: DFF_PRE_CLR_ENA PORT MAP(CLK,DD,Q,'1','0','0'); END ARCHITECTURE one;
5-7 用VHDL设计一个功能类似74LS160(异步复位和同步使能加载的十进制加法计数器)的计数器。
--5-7 用VHDL设计一个功能类似74LS160(异步复位和同步使能加载、计数的十进制加法计数器)的计数器。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS
PORT(CLK,RST,EN,LOAD : IN STD_LOGIC;
DATA : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --4位预置数
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数值输出 COUT : OUT STD_LOGIC); --计数进位输出 END CNT10;
ARCHITECTURE behav OF CNT10 IS BEGIN
PROCESS(CLK,RST,EN,LOAD)
VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF RST='0' THEN Q:=(OTHERS =>'0'); --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿
IF EN='1' THEN --检测是否允许计数或加载(同步使能) IF LOAD='0' THEN Q:=DATA; --允许加载 ELSE
IF Q<9 THEN Q:=Q+1; --允许计数,检测是否小于9
ELSE Q:=(OTHERS=>'0'); --大于等于9时,计数值清零 END IF; END IF; END IF; END IF;
IF Q=9 THEN COUT<='1'; --计数大于9,输出进位信号 ELSE COUT<='0'; END IF;
DOUT<=Q; --将计数值向端口输出 END PROCESS; END behav;
5-8 给出含有异步清0和计数使能的16位二进制加减可控计数器的VHDL描述。
--解:5-8 给出含有异步清零和计数使能的16位二进制加减可控计数器(带预置数)的VHDL描述。 -- 用VHDL实现含有异步清零和计数使能的16位二进制加减可控计数器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADD_SUB_LOAD_16 IS
PORT (CLK,RST,ADD_EN,SUB_EN,LOAD : IN STD_LOGIC;
DATA : IN STD_LOGIC_VECTOR(15 DOWNTO 0) ; CQ : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ; COUT : OUT STD_LOGIC);
END ENTITY ADD_SUB_LOAD_16;
ARCHITECTURE A_S_16 OF ADD_SUB_LOAD_16 IS BEGIN
PROCESS(CLK,RST,ADD_EN,SUB_EN,LOAD)
VARIABLE CQI: STD_LOGIC_VECTOR(15 DOWNTO 0); --VARIABLE LS_LOAD : STD_LOGIC; BEGIN
--LS_LOAD:=LOAD;
IF RST = '1' THEN CQI:=(OTHERS => '0');--计数器异步复位
ELSIF LOAD = '1' THEN CQI:=DATA; --LS_LOAD:='0'; --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿 IF ADD_EN='1'THEN --检测是否允许计数(同步他能)
IF CQI<16#FFFF# THEN CQI:=CQI+1; --允许计数,检测是否小于65535 ELSE CQI:=(OTHERS => '0'); --大于65535,计数值清零 END IF;
IF CQI=16#FFFF# THEN COUT<='1'; --计数大于9,输出进位信号 ELSE COUT <= '0'; END IF; END IF;
IF SUB_EN='1'THEN --检测是否允许计数(同步他能)
IF CQI>0 THEN CQI:=CQI-1; --允许计数,检测是否小于65535 ELSE CQI:=(OTHERS => '1'); --大于65535,计数值清零 END IF;
IF CQI=0 THEN COUT<='1'; --计数大于9,输出进位信号 ELSE COUT <= '0'; END IF; END IF; END IF;
CQ<=CQI; --将计数值向端口输出 END PROCESS;
END ARCHITECTURE A_S_16; 5-9 基于原理图输入方式,用D触发器构成按循环码(000->001->011->111->101->100->000)规律工作的六进制同步计数器。
5-10 基于原理图输入方式,应用4位全加器(74283)和74374(8D触发器)构成4位二进制
加法计数器。如果使用74299(8位通用移位寄存器)、74373(8D锁存器)、D触发器和非门来完成上述功能,应该有怎样的电路?
5-11 (1) (2) 基于原理图输入方式,用一片74163(可预置4位二进制计数器)和两片74138(3线-8线译码器)构成一个具有12路脉冲输出的数据分配器。要求在原理图上标明第1路到第12路输出的位置。若改用一片74195(4位通用移位寄存器)代替以上的74163 (可预置4位二进制计数器),试完成同样的设计。