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

ARCHITECTURE behav OF CNT10 IS BEGIN

PROCESS(CLK,RST,EN,COUT)

VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0); --SIGNAL BEGIN

IF RST='0' THEN Q:=(OTHERS =>'0'); --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿

IF EN='1' THEN --检测是否允许计数或加载(同步使能) IF COUT='1' 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-6 分别给出RTL图(图5-19和图5-19)的VHDL描述,注意其中的D触发器和锁存器的表述。

图5-18 RTL图1

--解1:图5-18 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-18 RTL图的VHDL程序DFF6.vhd底层设计描述。 -- 电平触发D型触发器程序(DFF6.vhd) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF6 IS

PORT(CLK: IN STD_LOGIC; D: IN STD_LOGIC; Q:OUT STD_LOGIC); END;

ARCHITECTURE bhv OF DFF6 IS BEGIN

PROCESS(CLK,D) BEGIN

IF CLK='1'

THEN Q<=D; END IF; END PROCESS; END bhv;

-- 5-6 给出图5-18 RTL图的VHDL描述。

--解3:实现图5-18 RTL图的VHDL程序T5_18.vhd顶层设计描述。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY T5_18 IS

PORT(D1,D2,CLK : IN STD_LOGIC; Q : OUT STD_LOGIC); END ENTITY T5_18;

ARCHITECTURE one OF T5_18 IS

COMPONENT mux21a --调用2选1多路选择器声明语句 PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT;

COMPONENT DFF6 --调用电平型D触发器声明语句 PORT(CLK: IN STD_LOGIC; D: IN STD_LOGIC; Q:OUT STD_LOGIC); END COMPONENT;

SIGNAL DD: STD_LOGIC; --定义1个信号作为内部的连接线。 BEGIN

u1: mux21a PORT MAP(CLK,D2,D1,DD); u2: DFF6 PORT MAP(CLK,DD,Q); END ARCHITECTURE one;

图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位预置数