《EDA技术实用教程(第五版)》习题答案(第1~10章)--潘 下载本文

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位二进制计数器),试完成同样的设计。

5-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。当5位输入中1的数目为奇数时,在最后一位的时刻输出1。(同步复位) (异步复位)

--解1(同步复位):5-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。 -- 当5位输入中1的数目为奇数时,在最后一位的时刻输出1。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY odd_even_p_RXD_5 IS

PORT (CLK,RST,S_in: IN STD_LOGIC;--CLK、RST、S_in:时钟、复位、串行输入数据 P_out: OUT STD_LOGIC_VECTOR(4 DOWNTO 0);--P_out:并行输出数据 o_e_out: OUT STD_LOGIC); --o_e_out:奇校验输出位 END ENTITY odd_even_p_RXD_5;

ARCHITECTURE one OF odd_even_p_RXD_5 IS BEGIN

PROCESS(CLK,RST)

VARIABLE shift_Q : STD_LOGIC_VECTOR(4 DOWNTO 0);--shift_Q:移位寄存器 VARIABLE shift_cnt : STD_LOGIC_VECTOR(2 DOWNTO 0);--shift_cnt:移位计数器 BEGIN

IF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿

IF RST = '1' THEN shift_cnt:=\ --移位寄存器和计数器复位 ELSE

IF shift_cnt=4 THEN --检测到接收5位串行输入数据

shift_cnt:=\ --移位计数器清零,为接收下一组数据做准备。 P_out<=shift_Q;--接收数据并行输出

o_e_out<=shift_Q(4) XOR shift_Q(3) XOR shift_Q(2) XOR shift_Q(1) XOR shift_Q(0);--奇校验输出

shift_Q:=S_in & shift_Q(4 DOWNTO 1);--采样移位串行输入 ELSE