1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第5章-VHDL时序逻辑电路设计汇总,时序逻辑电路概述,回顾:,组合逻辑电路:任意时刻的输出仅取决于该时刻数据的输入,与电路原来的状态无关。,时序逻辑电路:是指数字电路在任何时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说和以前的输入有关。,常见的组合逻辑电路主要有:触发器、锁存器、寄存器、移位寄存器、计数器等。,时钟信号,任何时序电路都以,时钟信号为驱动信号,,时序电路,仅在时钟信号的边沿到来时,,其状态才发生改变。因此,时钟信号通常是描述时序电路程序的执行条件,.,另外,时序电路
2、也总是以时钟进程的形式进行描述的。,时钟脉冲上升沿描述,IF(clkEVENT AND clk=1)THEN,WAIT UNTIL clk=1;,IF(clklast_value=0 AND clkevent AND clk=1)THEN,IF(risin_edge(clk)THEN,时钟脉冲下降沿描述,IF(clkEVENT AND clk=0)THEN,WAIT UNTIL clk=0;,IF(clklast_value=1 AND clkevent AND clk=0)THEN,IF(falling_edge(clk)THEN,复位信号,同步复位,就是当复位信号有效且在给定的时钟边沿到来
3、时,触发器才被复位。换一句话说,即使复位信号有效,如果时钟脉冲边沿未到来,触发器也不会复位。,非同步复位则不同,一旦复位信号有效,触发器就立即复位。,同步复位描述,在用,VHDL,语言描述时,,同步复位一定在以时钟为敏感信号的进程中定义,且用,IF,语句来描述必要的复位条件。,另外,描述复位条件的,IF,语句一定要嵌套在描述时钟边沿条件的,IF,语句的内部,,同步复位描述的,VHDL,描述,PROCESS(clock_signal),BEGIN,IF(clock_edge_condition)THEN,IF(reset_condition)THEN,Signal_out=reset_value
4、ELSE,Signal_out=signal_in;,END IF;,END IF;,END PROCESS;,非同步复位的,VHDL,语言描述,非同步复位,非同步复位又称异步复位,其描述时与同步方式的不同。,首先,在进程的敏感信号表中除时钟外,还应添上复位信号;另外,描述复位的,IF,语句应放在进程的第一条语句位置,PROCESS(clock_signal,reset_signal),BEGIN,IF(reset_condition)THEN,Signal_out=reset_value;,ELSIF(clock_edge_condition)THEN,Signal_out=signal
5、in;,END IF;,END PROCESS;,(一),.,触发器,触发器的概念,D,触发器,JK,触发器,T,触发器,锁存器。,触发器的定义,在数字电路中,能够存储一位信号的基本单元电路就被称为触发器,触发器的分类(根据电路形式和控制方式):,锁存器,D,触发器、,JK,触发器、,T,触发器、锁存器和,RS,触发器等。,1.D,触发器,基本的,D,触发器,同步复位的,D,触发器,异步复位的,D,触发器,同步置位,/,复位的,D,触发器,异步置位,/,复位的,D,触发器,逻辑表达式:,Q=D,电路符号和真值表,:,基本,D,触发器(,1,),LIBRARY IEEE;,USE IEEE.s
6、td_logic_1164.ALL;,ENTITY basic_dff IS,PORT(d,clk :IN std_logic;,q,qb :OUT std_logic);,END basic_dff;,ARCHITECTURE rtl_arc OF basic_dff IS,BEGIN,PROCESS(clk),BEGIN,IF(clkevent AND clk=1)THEN,q =d;,qb=NOT d;,END IF;,END PROCESS;,END rtl_arc;,基本,D,触发器(,2,),电路符号和功能表:,同步复位的,D,触发器(,1,),LIBRARY IEEE;,USE
7、IEEE.std_logic_1164.ALL;,ENTITY sync_rdff IS,PORT(d,clk :IN std_logic;,reset :IN std_logic;,q,qb :OUT std_logic);,END sync_rdff;,ARCHITECTURE rtl_arc OF sync_rdff IS,BEGIN,PROCESS(clk),BEGIN,IF(clkevent AND clk=1)THEN,IF(reset=0)THEN,q =0;qb=1;,ELSE,q =d;qb=NOT d;,END IF;,END IF;,END PROCESS;,END rt
8、l_arc;,同步复位的,D,触发器(,2,),异步复位的,D,触发器(,1,),电路符号和功能表:,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,ENTITY async_rdff IS,PORT(d,clk :IN std_logic;,reset :IN std_logic;,q,qb :OUT std_logic);,END async_rdff;,ARCHITECTURE rtl_arc OF async_rdff IS,BEGIN,PROCESS(clk,reset),BEGIN,IF(reset=0)THEN,q =0;qb=1;,ELSI
9、F(clkevent AND clk=1)THEN,q =d;qb=NOT d;,END IF;,END PROCESS;,END rtl_arc;,异步复位的,D,触发器(,2,),同步置位,/,复位的,D,触发器,电路符号和功能表:,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,ENTITY sync_rsdff IS,PORT(d,clk:IN std_logic;,set :IN std_logic;,reset:IN std_logic;,q,qb :OUT std_logic);,END sync_rsdff;,ARCHITECTURE rt
10、l_arc OF sync_rsdff IS,BEGIN,PROCESS(clk),BEGIN,IF(clkevent AND clk=1)THEN,IF(set=0 AND reset=1)THEN,q =1;,qb=0;,ELSIF(set=1 AND reset=0)THEN,q =0;,qb=1;,ELSE,q =d;,qb=NOT d;,END IF;,END IF;,END PROCESS;,END rtl_arc;,电路符号和功能表,异步置位,/,复位的,D,触发器,VHDL,语言描述,ARCHITECTURE rtl_arc OF async_rsdff IS,BEGIN,PR
11、OCESS(clk,set,reset),BEGIN,IF(set=0 AND reset=1)THEN,q =1;,qb=0;,ELSIF(set=1 AND reset=0)THEN,q =0;,qb=1;,ELSIF(clkevent AND clk=1)THEN,q =d;,qb=NOT d;,END IF;,END PROCESS;,END rtl_arc;,2.JK,触发器,具体实例:带有异步置位,/,复位的,JK,触发器。,电路符号与功能表:,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,ENTITY async_rsjkff IS,POR
12、T(j,k :IN std_logic;,clk :IN std_logic;,set :IN std_logic;,reset:IN std_logic;,q,qb :OUT std_logic);,END async_rsjkff;,ARCHITECTURE rtl_arc OF async_rsjkff IS,SIGNAL q_temp,qb_temp:std_logic;,BEGIN,PROCESS(clk,set,reset),BEGIN,IF(set=0 AND reset=1)THEN,q_temp =1;,qb_temp=0;,ELSIF(set=1 AND reset=0)T
13、HEN,q_temp =0;,qb_temp=1;,ELSIF(clkevent AND clk=1)THEN,IF(j=0 AND k=1)THEN,q_temp =0;,qb_temp=1;,ELSIF(j=1 AND k=0)THEN,q_temp =1;,qb_temp=0;,ELSIF(j=1 AND k=1)THEN,q_temp =NOT q_temp;,qb_temp=NOT qb_temp;,END IF;,END IF;,q =q_temp;,qb=qb_temp;,END PROCESS;,END rtl_arc;,注意观察其功能的实现。,定义:将,JK,触发器的两个输入
14、端口连接在一起作为触发器的输入,这样便构成了只有一个输入端的,T,触发器。,3.,T,触发器,简单,T,触发器的电路符号和功能表:,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,ENTITY tff IS,PORT(t,clk :IN std_logic;,q,qb :OUT std_logic);,END tff;,ARCHITECTURE rtl_arc OF tff IS,SIGNAL q_temp,qb_temp:std_logic;,BEGIN,PROCESS(clk),BEGIN,IF(clkevent AND clk=1)THEN,IF(t
15、1)THEN,q_temp =NOT q_temp;,qb_temp=NOT qb_temp;,ELSE,q_temp =q_temp;,qb_temp=qb_temp;,END IF;,END IF;,q =q_temp;,qb=qb_temp;,END PROCESS;,END rtl_arc;,(二)寄存器和移位寄存器,寄存器,串入,/,串出移位寄存器,串入,/,并出移位寄存器,循环移位寄存器,定义:通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。,如何存储,N,位二进制码?,只需要把,N,个触发器的时钟端口连接起来即可构成一个存储,N,位二进制码的寄存器。,具体实例:,
16、8,位寄存器,74LS374,。,74LS374,的电路符号和功能表:,实体部分,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,ENTITY reg_74LS374 IS,PORT(d :IN std_logic_vector(7 DOWNTO 0);,oe :IN std_logic;,clk:IN std_logic;,q :INOUT std_logic_vector(7 DOWNTO 0);,END reg_74LS374;,结构体部分,ARCHITECTURE rtl_arc OF reg_74LS374 IS,BEGIN,PROCESS(cl
17、k,oe),BEGIN,IF(oe=0)THEN,IF(clkevent AND clk=1)THEN,q=d;,ElSE,q=q;,END IF;,ELSE,q=ZZZZZZZZ;,END IF;,END PROCESS;,END rtl_arc;,移位功能的定义:指寄存器里面存储的代码能够在时钟的作用下进行依次左移或者是右移。,移位寄存器的定义:通常把具有存储和移位功能的寄存器称为移位寄存器。,移位寄存器的分类:串入,/,串出移位寄存器、串入,/,并出移位寄存器和循环移位寄存器等。,2,串入,/,串出移位寄存器(,1,),串入,/,串出移位寄存器(,2,),串入,/,串出移位寄存器的定义:
18、所谓串入,/,串出移位寄存器是指它的第一,个触发器的输入端口用来接收外来的输入信号,,而其余的每一个触发器的输入端口均与前面一,个触发器的,Q,端相连。这样,移位寄存器输入,端口的数据将在时钟边沿的作用下逐级向后移,动,然后从输出端口串行输出。例如,串入,/,串出,四位移位寄存器。,串入,/,串出移位寄存器,LIBRARY IEEE;-,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_ARITH.ALL;,USE IEEE.STD_LOGIC_UNSIGNED.ALL;,ENTITY SHIFTREG IS -,PORT(,DATAIN:IN
19、STD_LOGIC;,CLK:IN STD_LOGIC;,Q:OUT STD_LOGIC,);,END SHIFTREG;,ARCHITECTURE example OF SHIFTREG IS -,SIGNAL QQ:STD_LOGIC_VECTOR(7 DOWNTO 0);,BEGIN,PROCESS(CLK),BEGIN,IF CLKEVENT AND CLK=1 THEN,QQ(7 DOWNTO 1)=QQ(6 DOWNTO 0);,QQ(0)=DATAIN;,END IF;,END PROCESS;,Q=QQ(7);,END example;,定义:,数字电路中用来记忆时钟脉冲个数的
20、逻辑电路。,原理:采用几个触发器的状态,按照一定规律随时钟变化来记忆时钟的个数。,计数器的,模,:一个计数器所能记忆时钟脉冲的最大数目。,(三).计数器,1.,计数器简介,计数器的分类,1,、同步计数器、异步计数器。,2,、加法计数器、减法计数器和可逆计数器。,3,、二进制计数器、二,十进制计数器和循环,计数器等。,4,、十进制计数器、十二进制计数器和六十进,制计数器等。,1.,计数器简介,2.,二进制同步计数器,具体实例:复杂的四位二进制计数器。,电路符号和功能表:,VHDL,语言描述,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,USE IEEE.s
21、td_logic_arith.ALL;,USE IEEE.std_logic_unsigned.ALL;,ENTITY counter IS,PORT(clk :IN std_logic;,areset:IN std_logic;,sset :IN std_logic;,enable:IN std_logic;,cout :OUT std_logic;,q :BUFFER std_logic_vector(3 DOWNTO 0);,END counter;,结构体,ARCHITECTURE rtl_arc OF counter IS,BEGIN,PROCESS(clk,areset),BEGI
22、N,IF(areset=1)THEN,q 0);,ELSIF(clkevent AND clk=1)THEN,IF(sset=1)THEN,q=1010;,ELSIF(enable=1)THEN,q=q+1;,ELSE,q=q;,END IF;,END IF;,END PROCESS;,cout X),可以在较多位的位矢量赋值中做省略化的赋值,SIGNAL d1:STD_LOGIC_VECTOR(4 DOWNTO 0);,VARIABLE a1:STD_LOGIC_VECTOR(15 DOWNTO 0);,.,d1 0),;,a1:=(OTHERS=0),;,d1 e(3),3=e(5),OT
23、HERS=e(1);,f=e(1),六进制计数器,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_ARITH.ALL;,ENTITY cnt6,PORT(clr,en,clk:IN STD_LOGIC;,qa,qb,qc:OUT STD_LOGIC);,END cnt6;,ARCHITECTURE rtl OF ont6 IS,SIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0);,BEGIN,PROCESS(clk),VARIABLE q6:INTEGER;,BEGIN,IF(clkEVENT
24、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;,CONV_STD_LOGIC_VECTOR(A,位长)-将,integer,转换为,std_logic_vector,类型,,A,是整数,定义:,在数字电路中,在时钟脉冲的作用下既可以递增计数又可以递减计数的计数器称为可逆计
25、数器。一般来说,计数器需要定义一个用来控制计数器方向的控制端口,UPDOWN,,可逆计数器的控制方向由它来决定,从而完成可逆计数器不同方式的计数。,3.,同步可逆计数器,具体实例:带有异步复位控制端口、同步预置,控制端口和同步使能端口的通用可逆计数器。,LIBRARY IEEE;,USE IEEE.std_logic_1164.ALL;,USE IEEE.std_logic_arith.ALL;,USE IEEE.std_logic_unsigned.ALL;,ENTITY counterN IS,GENERIC(n:integer:=8);,PORT(clk :IN std_logic;,a
26、reset:IN std_logic;,sset :IN std_logic;,enable:IN std_logic;,updown:IN std_logic;,q :BUFFER std_logic_vector(n-1 DOWNTO 0);,END counterN;,实体部分,类属说明语句,ARCHITECTURE rtl_arc OF counterN IS,BEGIN,PROCESS(clk,areset),BEGIN,IF(areset=1)THEN,q 0);,ELSIF(clkevent AND clk=1)THEN,IF(sset=1)THEN,q 1);,ELSIF(en
27、able=1)THEN,IF(updown=1)THEN,q=q+1;,ELSE,q=q-1;,END IF;,ELSE,q=q;,END IF;,END IF;,END PROCESS;,END rtl_arc;,结构体部分,4,.,计数器设计-,n,位二进制加法计数器,LIBRARY ieee;,USE ieee.std_logic_1164.ALL;,USE ieee.std_logic_unsigned.ALL;,ENTITY count IS,Generic(n:integer:=3);,PORT(clk:in STD_LOGIC;,q:out STD_LOGIC_vector(n-
28、1 downto 0);,END count;,ARCHITECTURE a OF count IS,signal tmp:STD_LOGIC_vector(n-1 downto 0);,BEGIN process(clk)begin,if clkevent and clk=1 then tmp=tmp+1;end if;,end process;,q=tmp;,END a;,LIBRARY ieee;,USE ieee.std_logic_1164.ALL;,USE ieee.std_logic_unsigned.ALL;,ENTITY count24 IS,PORT(en,Reset,cl
29、k:in STD_LOGIC;,qa:out STD_LOGIC_VECTOR(3 DOWNTO 0);,-,个位数计数,qb:out STD_LOGIC_VECTOR(1 DOWNTO 0);,-,十位数计数,END count24;,ARCHITECTURE a1 OF count24 IS,BEGIN,process(clk),variable tma:STD_LOGIC_VECTOR(3 DOWNTO 0);,variable tmb:STD_LOGIC_VECTOR(1 DOWNTO 0);,QA,QB,24进,制计,数器,EN,CLK,Reset,begin,If Reset=0
30、then tma:=0000;tmb:=00;else,if clkevent and clk=1 then,if en=1 then,if tma=1001 then tma:=0000;tmb:=tmb+1;,-,如果个位数为9,个位数清零,十位数加一,elsif tmb=10 and tma=0011 then,tma:=0000;tmb:=00;,-,如果十位数为2,个位数为3,个位数十位数均清零,else tma:=tma+1;-,以上条件均不满足,则个位数加一,end if;,end if;,end if;end if;,qa=tma;qb=tmb;,将结果输出,end proce
31、ss;,END a1;,同步四十进制,library ieee;,use ieee.std_logic_1164.all;,use ieee.std_logic_arith.all;,use ieee.std_logic_unsigned.all;,entity syncnt is,port(clk:in std_logic;,qa,qb:out std_logic_vector(3 downto 0);,end syncnt;,architecture a of syncnt is,signal qan,qbn:std_logic_vector(3 downto 0);,signal cin
32、std_logic;,begin,process(clk,cin),begin,if(clkevent and clk=1)then,if cin=1 then,if qbn=3 then,qbn=0000;,else,qbn=qbn+1;,end if;,end if;,end if;,end process;,qa=qan;,qb=qbn;,end a;,process(clk),begin,if clkevent and clk=1 then,if qan=9 then,qan=0000;,cin=1;,else,qan=qan+1;,cin=0;,end if;,end if;,en
33、d process;,LIBRARY ieee;,USE ieee.std_logic_1164.ALL;,USE ieee.std_logic_unsigned.ALL;,ENTITY count60 IS,PORT(en,Reset,clk:in STD_LOGIC;,qa:out STD_LOGIC_VECTOR(3 DOWNTO 0);,-,个位数计数,qb:out STD_LOGIC_VECTOR(2 DOWNTO 0);,-,十位数计数,rco:OUT STD_LOGIC);-,计数进位,END count60;,ARCHITECTURE a OF count60 IS,BEGIN
34、process(clk),variable tma:STD_LOGIC_VECTOR(3 DOWNTO 0);,variable tmb:STD_LOGIC_VECTOR(2 DOWNTO 0);,RCO,60进,制计,数器,EN,QA,QB,CLK,Reset,begin,If Reset=0 then tma:=0000;tmb:=0000;else,if clkevent and clk=1 then,if en=1 then,rco=tmb(2)and tmb(0)and tma(3)and tma(0);,-,计算是否有进位,即是否计数超过59,超过则有进位,否则无进位,if tm
35、a=1001 then tma:=0000;,-,如果个位数为9,则个位数清零,if tmb=101 then tmb:=000;,else tmb:=tmb+1;end if;,-,如果十位数为5,则十位数清零,否则十位数加一,else tma:=tma+1;,-,如果个位数不为9,则个位数加一,end if;,end if;,end if;end if;,qa=tma;qb=tmb;,将结果输出,end process;,END a;,假设,cnt10,实体定义为,ENTITY cnt10 IS,PORT(clr,en,clk:,:,IN STD_LOGIC,;,q,:,OUT STD_L
36、OGIC_VECTOR(3 DOWNTO 0),;,END cnt10,;,用,VHDL,语言设计,异步复位,的十进制计数器,cnt10,。,library ieee;,use ieee.std_logic_1164.all;,use ieee.std_logic_arith.all;,use ieee.std_logic_unsigned.all;,entity cnt10 is,port(clr:in std_logic;,en:in std_logic;,clk:in std_logic;,cout:out std_logic;,q:out std_logic_vector(3 down
37、to 0);,end cnt10;,architecture rtl of cnt10 is,signal q_tmp:std_logic_vector(3 downto 0);,begin,process(clr,en,clk),begin,if(clr=1)then,q_tmp 0);,elsif(clkevent and clk=1)then,if(en=1)then,if(q_tmp=1001)then,q_tmp 0);,cout=1;,else,q_tmp=q_tmp+1;,cout=0;,end if;,end if;,end if;,q=q_tmp;,end process;,end rtl;,小结:,掌握时序逻辑电路的设计方法。,学会分析每个电路的,VHDL,程序写法,体会各种语句的用法。,由已知电路的功能能够编写出相应的程序。,熟悉常用时序逻辑电路的功能、特点。,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,






