13
3. 4位2进制加法计数器 (1)代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT4 IS
PORT(clk: IN STD_LOGIC;
Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY CNT4;
ARCHITECTURE rt1 OF CNT4 IS
SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
PROCESS(clk) BEGIN
IF(clk='1' AND clk'EVENT) THEN Q1<=Q1+1; END IF;
END PROCESS ; Q<=Q1;
END ARCHITECTURE rt1;
(2)波形图
4.表3是带控制端的二进制加法计数器功能表。计数器的最大计数值是W,并且计数到W后输出进位‘1’。 仿真要求:计数初值设定为W-3,CLK周期是W,插入TIME BAR,把时间填入下表。
表3 二进制加法计数器控制端功能表
CLK RST EN LOAD Q 时间
0 0 1 5 上升沿 载入初值
0 0 0 15~60 上升沿 计数
35 输出进位
X 0 1 X 90~110 不变
X 1 X X 0 60
13
14
下面波形图中的W值是136。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNTM IS
PORT(clk, rst, en, load : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); Cout : OUT STD_LOGIC); END ENTITY CNTM ;
ARCHITECTURE rt1 OF CNTM IS BEGIN
PROCESS (clk, rst, en ,load)
Variable Q : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
If rst ='1' then Q:=\
ElsIF (clk='1' AND clk' EVENT ) THEN if en='0' then
if load ='1' then Q:=d ; else if q<136 then q:=q+1; else Q:=\ end if; END IF; END IF; END IF;
If q<136 then cout<='0'; else cout<='1'; END IF; QOUT <= q;
END PROCESS ; END ARCHITECTURE rt1;
14
15
5. 加减计数器74193 (1)代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JSQ193 IS
PORT(CLR,LOADN,CPU,CPD: IN STD_LOGIC;
DATA: IN STD_LOGIC_VECTOR(3 DOWNTO 0); QA,QB,Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); QCCN,QCBN: OUT STD_LOGIC); END ENTITY JSQ193;
ARCHITECTURE rt1 OF JSQ193 IS --例化T触发器
COMPONENT tFF1 IS
PORT(RSTN,CLRN,clk: IN STD_LOGIC; T: IN STD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT TFF1;
SIGNAL QTA,QTB:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL M,CLK:STD_LOGIC;
BEGIN
CLK<=CPU AND CPD; --加法器
P1:PROCESS(CLR,LOADN,CPU,CPD,DATA,QTA,QTB)
BEGIN
if CLR ='1' then QTA<=\
ELSIF LOADN='0' THEN QTA<=DATA; ELSIF(CPU='1' AND CPU'EVENT) THEN qTA<=qTA+1; END IF;
QCCN<=CPU OR (NOT QTA(3)) OR (NOT QTA(2)) OR (NOT QTA(1)) OR( NOT QTA(0)) OR (NOT CPD); QA<=QTA;
END PROCESS ; --减法器
P2:PROCESS(CLR,LOADN,CPU,CPD,DATA,QTA,QTB)
BEGIN
if CLR ='1' then QTB<=\
15
16
ELSIF LOADN='0' THEN QTB<=DATA; ELSIF(CPD='1' AND CPD'EVENT) THEN qTB<=qTB-1; END IF;
QCBN<=CPD OR QTB(3) OR QTB(2) OR QTB(1) OR QTB(0) OR(NOT CPU); QB<=QTB;
END PROCESS ;
U1:tFF1 PORT map (CPD,CPU,CLK,'0',M);
--选择器
P3:PROCESS(QTB,QTA,M) BEGIN
IF M='1' THEN Q<=QTB; ELSE Q<=QTA;END IF; END PROCESS ;
END ARCHITECTURE rt1; (2)波形图
表4 加减计数器功能 CLR LOADN CPU 0 0 1 0 0
16
CPD X Q 时间(单位NS) 0 1 x 0 1 X 1011 0 加法 20~70 70 0 120 上升沿 1 x X 1 X X 输出进位标志 0 0010 140 210 上升沿 减法 140~210 输出借位标志 0
相关推荐: