第7节 VHDL时序逻辑设计
第7节 VHDL时序逻辑设计
时序电路设计
- 时序电路中,任一时刻的输出信号不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还和以前的输入有关。即时序逻辑电路具有”记忆”功能。
- 常见的时序电路:
--触发器
--寄存器
--移位寄存器
--计数器
--存储器
---……
时钟信号
- 时序逻辑电路分两类:
--同步时序逻辑
--异步时序逻辑
- 在时序逻辑电路中,时钟信号是重要的驱动信号,是时序逻辑电路的执行条件和同步信号。
- 时序电路以时钟信号为驱动信号,时序电路仅在时钟信号的边沿到来时,其状态才发生改变。
时钟沿描述
- 时钟脉冲上升沿描述:
IF (clk′EVENT AND clk=′1′) THEN
WAIT UNTIL clk=‘1’;
IF (clk’last_value=‘0’ AND clk’event AND clk=‘1’)THEN
IF (risin_edge(clk)) THEN
- 时钟脉冲下降沿描述:
IF (clk′EVENT AND clk=′0′) THEN
WAIT UNTIL clk=‘0’;
IF (clk’last_value=‘1’ AND clk’event AND clk=‘0’) THEN
IF (falling_edge(clk)) THEN
复位信号
- 同步复位,就是当复位信号有效且在给定的时钟边沿到来时,触发器才被复位。换一句话说,即使复位信号有效,如果时钟脉冲边沿未到来,触发器也不会复位。
- 非同步复位(异步复位)则不同,一旦复位信号有效,触发器就立即复位。
- 同步复位的VHDL描述
PROCESS(clock_signal)
BEGIN
IF(clock_edge_condition) THEN
IF(reset_condition) THEN
Signal_out<=reset_value;
ELSE
Signal_out<=signal_in;
┇
END IF;
END IF;
END PROCESS;
- 非同步复位的VHDL语言描述
PROCESS(clock_signal, reset_signal)
BEGIN
IF(reset_condition) THEN
Signal_out<=reset_value;
ELSIF(clock_edge_condition) THEN
Signal_out<=signal_in;
┇
END IF;
END PROCESS;
触发器
- 时序逻辑电路的输出与输入的历史有关,因此必须具有记忆功能。
- 触发器:能存储一位信号的基本单元电路。
--D触发器
--JK触发器
--T触发器
--RS触发器
--……
D触发器
- 基本的上升沿D触发器
- 带异步复位的D触发器
- 带同步复位的D触发器
- 带异步置位/复位的D触发器
- 带同步置位/复位的D触发器
基本的上升沿D触发器
- ENTITY dff1 IS
PORT (clk,d:IN STD_LOGIC;
q:OUT STD_LOGIC);
END dff1;
ARCHITECTURE rtl OF dff1 IS
BEGIN
PROCESS (clk)
BEGIN
IF (clk′EVENT AND clk=′1′) THEN
q<=d;
END IF;
END PROCESS;
END rtl
- ENTITY dff1 IS
PORT (clk,d:IN STD_LOGIC;
q:OUT STD_LOGIC);
END dff1;
ARCHITECTURE rtl OF dff1 IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL clk′EVENT AND clk=′1′;
q<=d;
END PROCESS;
END rtl;
非同步复位的D触发器
- 复位输入端clr。当clr=′0′时,其q端输出被强迫置为“0”。clr 又称清零输入端。
PROCESS (clk,clr)
BEGIN
IF (clr=′0′) THEN
q<=′0′;
ELSIF (clk′EVENT AND clk=′1′) THEN
q<=d;
END IF;
END PROCESS;
带异步置位/复位的D触发器
- PROCESS (clk,pset,clr)
BEGIN
IF (pset=′0′) THEN
q<=′1′;
ELSIF (clr=′0′) THEN
q<=′0′;
ELSIF (clk′EVENT AND clk=′1′) THEN
q<=d;
END IF;
END PROCESS;
同步复位D触发器
- PROCESS (clk)
BEGIN
IF (clk′EVENT AND clk=′0′) THEN
IF (clr=′0′) THEN
q<=′0′;
ELSE
q<=d;
END IF;
END IF;
END PROCESS;
JK触发器
- 带异步复位/置位功能的JK触发器
---JK触发器的输入端有置位输入pset
--复位输入clr
--控制输入j和k
--时钟信号输入clk
--输出端有正向输出端q 和反向输出端qb

JK触发器的真值表

带异步复位/置位功能的JK触发器

T触发器
- PROCESS(clk,t)
BEGIN
IF (clk’EVENT AND clk=‘1’) THEN
IF (t=‘1’) THEN
q<=NOT q;
ELSE
q<=q;
END IF;
END IF;
END PROCESS;
qb <= NOT q;
寄存器
- 在数字系统中,能够用来存储一组二进制码的同步时序逻辑电路称为寄存器。
- 寄存器一般由多位触发器连接而成,通常有锁存寄存器和移位寄存器等。
寄存器74LS374
- ARCHITECTURE RTL OF register IS
signal q_temp:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(clk,oe)
BEGIN
IF (oe =‘0’ ) THEN
IF (CLK’EVENT AND CLK=‘1’) THEN
Q_temp <= d;
END IF;
ELSE
q_temp <=“ZZZZZZZZ”;
END IF;
Q<=q_temp;
END PROCESS;
END RTL;
移位寄存器
- 移位寄存器除了具有存储二进制码的功能以外,还具有移位功能。
- 所谓移位功能就是指寄存器里面存储的代码能够在时钟的作用下进行依次左移或者右移。
- 移位寄存器不仅可以用来存储数据,还可以用来实现数据的串—并转换、数值运算以及数据处理等。
- 常用的移位寄存器有串入/串出移位寄存器、串入/并出移位寄存器和循环移位寄存器等。
串入/串出移位寄存器

4位串入/串出移位寄存器描述
- LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shift4 IS
PORT (a,clk:IN STD_LOGIC;
b:OUT STD_LOGIC);
END shift4;
ARCHITECTURE sample OF shift4 IS
COMPONENT dff
PORT (d,clk:IN STD_LOGIC;
q:OUT STD_LOGIC);
END COMPONENT;
SIGNAL z:STD_LOGIC_VECTOR (0 TO 4);
BEGIN
z(0)<=a;
g1:FOR i IN 0 TO 3 GENERATE
dffx:dff PORT MAP (z(i),clk,z(i+1));
END GENERATE;
b<=z(4);
END sample;
串入/并出移位寄存器

计数器
- 计数器的功能是记忆时钟脉冲的个数
- 用几个触发器的状态,按照一定规律随时钟变化来记忆时钟的个数。
- 同步计数器,就是在时钟脉冲(计数脉冲)的控制下,构成计数器的各触发器状态同时发生变化的那一类计数器。
六进制同步计数器
- PROCESS(clk)
VARIABLE q6: INTEGER;
BEGIN
IF(clk′EVENT AND clk=′1′) THEN
IF(clr=′0′) THEN
q6∶=0;
ELSIF(en=′1′) THEN
IF(q6=5) THEN
q6∶=0;
ELSE
q6∶=q6+1;
END IF;
END IF;
END IF;
q<=CONV_STD_LOGIC_VECTOR(q6, 3);
qa<=q(0);
qb<=q(1);
qc<=q(2);
END PROCESS;
END rtl;
可逆计数器
- 可逆计数器是计数器的一种特殊类型,它既可以正向计数,又可以反向计数,故称可逆计数器。
PROCESS(cntclk)
VARIABLE cnt: INTEGER RANGE -512 TO 511;
VARIABLE dir: INTEGER RANGE -1 TO 1;
BEGIN
IF(up_down=′1′) THEN
dir∶=1;
ELSE
dir∶=-1;
END IF;
IF(cntclk′EVENT AND cntclk=′1′) THEN
IF(reset=′0′) THEN
cnt∶=0;
ELSIF(enab=′1′) THEN
cnt∶=cnt+dir;
END IF;
END IF;
Cnt_out<=Conv_Std_Logic_Vector(cnt, 10);
END PROCESS;
END rtl;
异步计数器(行波计数器)
- 异步计数器:又称为串行计数器或行波计数器。
- 其工作原理是由前一级触发器的输出作为后一级触发器的计数脉冲输入,这样一级一级推动进行计数。
- 这种计数器延迟较大,但结构简单,常用于小型或要求速度不太高的电路中。

用异步复位D触发器连接而成
- ARCHITECTURE rtl OF acount IS
COMPONENT adff
PORT(d,clk, reset: IN STD_LOGIC;
q, qb: OUT STD_LOGIC);
END COMPONENT;
SIGNAL q_temp: STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
q_temp(0)<=clk;
gen1: FOR i IN 0 TO 3 GENERATE
dffx: adff PORT MAP(clk=>q_temp(i),
reset=>reset, d=>q_temp(i+1),
q=>q(i), qb=>q_temp(i+1));
END GENERATE;
END rtl;
<<上一节 下一节>>