网站搜索:
第7节 VHDL时序逻辑设计
文章出处:与非网
更新于2008-05-18 05:49:29

第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;

<<上一节  下一节>>



关于OpenHW | OpenHW使用说明 | FAQ | 相关法律 | 版权声明 | 网站地图
联系邮件:xiaoquan@eefocus.com  联系电话: 010-58859035-8012
Powered by eefocus.com