内容发布更新时间 : 2024/12/22 10:11:08星期一 下面是文章的全部内容请认真阅读。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF1 IS
PORT(CLK,RST,EN,D: IN STD_LOGIC; Q: OUT STD_LOGIC); END;
ARCHITECTURE bhv OF DFF1 IS
SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN
PROCESS (CLK,Q1,RST,EN) BEGIN
IF RST='1' THEN Q1<='0';
ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1' THEN Q1<=D; END IF; END IF;
END PROCESS;
Q<=Q1; --将内部的暂存数据向端口输出 END bhv;
--解2:5-1【5-5】含同步复位控制的D触发器 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF1 IS
PORT(CLK,RST,D: IN STD_LOGIC; Q: OUT STD_LOGIC); END;
ARCHITECTURE bhv OF DFF1 IS
SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN
PROCESS(CLK,Q1,RST) BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF RST='1' THEN Q1<='0';ELSE Q1<=D;END IF; END IF; END PROCESS;
Q<=Q1; --将内部的暂存数据向端口输出 END bhv; 5-2 举例(【例5-1】)说明,为什么使用条件叙述不完整的条件句能导致产生时序模块的综合结果。
由于不完整条件句具有对输出信号不做处理(即保持现状)的行为,而导致时序电路综合结果。(P121)
--解:5-2【例5-1】D触发器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF1 IS
PORT(CLK: IN STD_LOGIC; D: IN STD_LOGIC; Q:OUT STD_LOGIC); END;
ARCHITECTURE bhv OF DFF1 IS
SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN
PROCESS(CLK,Q1) BEGIN
IF CLK'EVENT AND CLK='1' --上升沿触发锁存 THEN Q1<=D; END IF; END PROCESS;
Q<=Q1; --将内部的暂存数据向端口输出 END bhv;
5-3 设计一个具有同步置1,异步清0的D触发器。 --5-3 设计一个具有同步置1,异步清0的D触发器。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF1 IS
PORT(CLK,RST,SET,D: IN STD_LOGIC; Q: OUT STD_LOGIC); END;
ARCHITECTURE bhv OF DFF1 IS
SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN
PROCESS (CLK,Q1,RST,SET) BEGIN
IF RST='1' THEN Q1<='0';
ELSIF CLK'EVENT AND CLK='1' THEN IF SET='1' THEN Q1<='1'; ELSE Q1<=D; END IF; END IF;
END PROCESS;
Q<=Q1; --将内部的暂存数据向端口输出 END bhv;
5-4 把例5-15(异步复位和同步加载十进制加法计数器)改写成一异步清0,同步时钟使能和异步数据加载型8位二进制加法计数器。
--5-4 异步清0,同步时钟使能和异步数据加载型8位二进制加法计数器。 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 LOAD='0' THEN Q:=DATA; --允许加载
ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿
IF EN='1' THEN --检测是否允许计数或加载(同步使能) IF Q<9 THEN Q:=Q+1; --允许计数,检测是否小于9 ELSE Q:=(OTHERS=>'0'); --大于等于9时,计数值清零 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-5 试对习题5-4的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16(4)位二进制数计数器,即一个l6(4)位可控的分频器,并说明工作原理。设输入频率fi=4MHz,输出频率f0=(516.5±1)Hz(允许误差±0.1Hz),求16位加载数值。
--5-5 试对习题5-4的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起, --构成一个自动加载型16(4)位二进制数计数器,即一个l6(4)位可控的分频器,并说明工作原理。 --设输入频率fi=4MHz,输出频率f0=(516.5±1)Hz(允许误差±0.1Hz),求16位加载数值。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS
PORT(CLK,RST,EN : IN STD_LOGIC;
DATA : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --4位预置数 DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数值输出 COUT : BUFFER STD_LOGIC); --计数进位输出 END CNT10;
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;