好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

8-2时序逻辑电路设计.ppt

41页
  • 卖家[上传人]:公****
  • 文档编号:572922598
  • 上传时间:2024-08-14
  • 文档格式:PPT
  • 文档大小:506.50KB
  • / 41 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 8.28.2 时序逻辑电路设计时序逻辑电路设计 一、时钟信号的一、时钟信号的VHDL描述方法描述方法 在在时时序序电电路路中中,,是是以以时时钟钟信信号号作作为为驱驱动动信信号号的的,,也也就就是是说说时时序序电路是在时钟信号的边沿到来时,它的状态才会发生改变电路是在时钟信号的边沿到来时,它的状态才会发生改变 在用在用VHDL描述时序逻辑电路时,通常采用时钟进程的形式来描述时序逻辑电路时,通常采用时钟进程的形式来描述,也就是说,时序逻辑电路中进程的敏感信号是时钟信号描述,也就是说,时序逻辑电路中进程的敏感信号是时钟信号1、时钟作为敏感信号的描述方式、时钟作为敏感信号的描述方式 (1) 时钟信号显示地出现在时钟信号显示地出现在PROCESS语句后面的敏感信号表中语句后面的敏感信号表中 (2) 时时钟钟信信号号没没有有显显示示地地出出现现在在PROCESS语语句句后后面面的的敏敏感感信信号号表中,而是出现在表中,而是出现在WAIT语句的后面语句的后面第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 1 在在时时序序逻逻辑辑电电路路中中,,时时钟钟是是采采用用边边沿沿来来触触发发的的,,时时钟钟边边沿沿分分为上升沿和下降沿。

      为上升沿和下降沿2、时钟的触发、时钟的触发((1)上升沿触发)上升沿触发其物理意义是指时钟信号的逻辑值是从其物理意义是指时钟信号的逻辑值是从‘0’跳变到跳变到‘1’描述描述1 1::label1::PROCESS((clk))BEGINIF((clk’EVENT AND clk = ‘1’))THEN┇ ┇END PROCESS;;描述描述2 2::label2::PROCESS((clk))BEGINWAIT UNTIL clk = ‘1’;;┇ ┇END PROCESS;; 第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 2 描述描述1 1::label1::PROCESS((clk))BEGINIF((clk’EVENT AND clk = ‘0’))THEN┇ ┇END PROCESS;;描述描述2 2::label2::PROCESS((clk))BEGINWAIT UNTIL clk = ‘0’;;┇ ┇END PROCESS;; ((2)下降沿触发)下降沿触发其物理意义是指时钟信号的逻辑值是从其物理意义是指时钟信号的逻辑值是从‘1’跳变到跳变到‘0’。

      第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 3 二、时序电路中复位信号二、时序电路中复位信号RESET的的VHDL描述方法描述方法1、同步复位方法、同步复位方法 在在设设计计时时序序电电路路同同步步复复位位功功能能时时,,VHDL程程序序要要把把同同步步复复位位放放在在以以时时钟钟为为敏敏感感信信号号的的进进程程中中定定义义,,且且用用IF语语句句来描述必要的复位条件来描述必要的复位条件第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 4 描述描述2 2::PROCESSBEGIN WAIT ON (clock_signal) UNTLL (clock_edge_condition) IF(reset_conditon) THEN signal_out<=reset_value; ELSE signal_out<=signal_in; 其他其他时时序序语语句句 END IF;END PROCESS;描述描述1 1::PROCESS(clock_signal)BEGIN IF (clock_edge_condition) THEN IF(reset_conditon) THEN signal_out<=reset_in; ELSE signal_out<=signal_in; 其他其他时时序序语语句句 END IF; END IF;END PROCESS;1 1、同步复位方法描述、同步复位方法描述、同步复位方法描述、同步复位方法描述第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 5 描述方法:描述方法:PROCESS(reset_signal,clock_signal)BEGIN IF(reset_conditon) THEN signal_out<=reset_value; ELSEIF(clock_event AND clock_edge_condition) THEN signal_out<=signal_in; 其他其他时时序序语语句句 END IF;;END PROCESS;2 2、异步复位方法、异步复位方法、异步复位方法、异步复位方法 在在进进程程敏敏感感信信号号表表中中应应有有clk、、reset同同时时存存在在;;用用IF语语句句描描述述复复位位条条件件;;ELSE程程序序段段描描述述时时钟钟信信号号边边沿沿的的条条件件,,并并加加clk’EVENT属性。

      属性第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 6 触发器的设计触发器的设计一、一、D触发器的设计触发器的设计1、简单的、简单的D触发器设计触发器设计 ((1 1)当)当CP=0CP=0或或1 1时,触发时,触发器的状态不变器的状态不变 ((2 2)当)当CPCP由由0 0变变1 1时触发时触发器翻转 ((3 3)触发器翻转后,在)触发器翻转后,在CP=1CP=1时输入信号被封锁时输入信号被封锁第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 7 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY dff_logic IS PORT(d,clk:IN std_logic; Q:OUT std_logic);END dff_logic;ARCHITECTURE dff1 OF dff_logic ISBEGIN P1:PROCESS(clk) BEGIN IF (clk’event AND clk=1) THEN Q<=d; END IF; END PROCESS P1;END dff1;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 8 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY dff_logic IS PORT(d,clk:IN std_logic; Q:OUT std_logic);END dff_logic;ARCHITECTURE dff1 OF dff_logic ISBEGINP1:PROCESS BEGIN WAIT UNTILL clk EVENT AND clk=1; Q<=d; END PROCESS P1;END dff;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 9 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY dff_logic IS PORT(d,clk:IN std_logic; Q:OUT std_logic);END dff_logic;ARCHITECTURE dff1 OF dff_logic ISBEGIN PROCESS(clk) BEGIN IF ((rising_edge(clk) )) THEN Q<=d; END IF; END PROCESS;END dff;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 10 2、带异步复位的、带异步复位的D触发器设计触发器设计 所所谓谓异异步步复复位位就就是是指指当当复复位位端端口口R的的信信号号有有效效时时,该该器器件件立立即即进行复位操作进行复位操作,而与同步时钟信号无关。

      而与同步时钟信号无关 R D CP Q Q 0 * * 0 1 1 * 0 保持保持 保持保持 1 * 1 保持保持 保持保持 1 0 上升沿上升沿 0 1 1 1 上升沿上升沿 1 0第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 11 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY async_rdff IS PORT(d,clk,reset:IN std_logic; q,qb:OUT std_logic);END async_rdff;ARCHITECTURE rtl OF async_rdff ISBEGIN PROCESS(clk,reset) BEGIN IF (reset=‘0’) THEN q<=‘0’; qb<=‘1’; ELSEIF (clk’event AND clk=‘1’) THEN q<=d; qb<=NOT d; end if; End process;End rtl;例例例例::::异异异异步步步步复复复复位位位位的的的的D D触触触触发发发发器器器器设设设设计计计计第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 12 3、带同步复位的、带同步复位的D触发器设计触发器设计 所所谓谓同同步步复复位位就就是是指指当当复复位位端端口口R的的信信号号有有效效以以后后,只只有有在在时时钟的边沿到来时才能进行复位。

      钟的边沿到来时才能进行复位 R D CP Q Q 0 * 上升沿上升沿 0 1 1 * 0 保持保持 保持保持 1 * 1 保持保持 保持保持 1 0 上升沿上升沿 0 1 1 1 上升沿上升沿 1 0第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 13 例:同步复位的例:同步复位的D触发器设计触发器设计LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY sync_rdff IS PORT(d,clk,reset:IN std_logic; q,qb:OUT std_logic);END sync_rdff;ARCHITECTURE rtl OF sync_rdff ISBEGIN PROCESS(clk) BEGIN IF (clk’event 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 rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 14 二、二、JK触发器的设计触发器的设计((1)当)当CP=1时,从触发器被封锁,保持原状态不变,主触时,从触发器被封锁,保持原状态不变,主触发器工作,接收发器工作,接收J和和K端的输入信号端的输入信号。

      2))当当CPCP由由1跃变到跃变到0时,主触发器被封锁,输入信号时,主触发器被封锁,输入信号J和和K不不再影响主触发器的状态;从触发器工作,接收主触发器输出端再影响主触发器的状态;从触发器工作,接收主触发器输出端的状态 ①① 当当J=0,,K=1时,时,Qn+1=0,同,同J ②② 当当J=1,,K=0时,时,Qn+1=1,同,同J ③③ 当当J=0,,K=0时,时,Qn+1=Qn,保持不变保持不变 ④④ 当当J=1,,K=1时,时,Qn+1= ,翻转或称计数,翻转或称计数 第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 15 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY JKff_v1 IS PORT(J,K: IN STD_LOGIC; clk: IN STD_LOGIC; set: IN STD_LOGIC; reset: IN STD_LOGIC; Q,QB: OUT STD_LOGIC);END JKff_v1;ARCHITECTURE behave OF JKff_v1 IS SIGNAL Q_temp,QB_temp: STD_LOGIC;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 16 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')THEN Q_temp <= '0'; QB_temp <= '1'; ELSIF (clk'EVENT AND clk = '1')THEN IF(J='0' AND K='1')THEN Q_temp <= '0'; QB_temp <= '1';第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 17 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 behave;;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 18 第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 19 锁存器的设计锁存器的设计8位位D锁存器锁存器(74LS373)的真值表的真值表 OE G D Q 0 1 0 0 0 1 1 1 0 0 * 保持保持 1 * * 高阻高阻第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 20 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY register2 IS PORT(d :IN std_logic_vector(7 downto 0); oe: IN std_logic; g: IN std_logic; q: out std_logic_vector(7 downto 0) );end register2;ARCHITECTURE rtl OF register2 IS SIGNAL q_tmp :std_logic_vector(7 downto 0);BEGIN PROCESS(g,d,oe) BEGIN IF (oe='0') THEN if (g='1')then q_tmp <= d; end if; else q_tmp<= "zzzzzzzz"; end if; q <=q_tmp ; END PROCESS;END rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 21 寄存器的设计寄存器的设计 在数字电路中在数字电路中,通常把用来存储一组二进制数据的同步时序逻辑通常把用来存储一组二进制数据的同步时序逻辑电路称为寄存器。

      由于一个触发器能够存储一位二进制数,所以电路称为寄存器由于一个触发器能够存储一位二进制数,所以把把n个触发器的时钟端连接起来就能构成一个存储个触发器的时钟端连接起来就能构成一个存储n位二进制数的位二进制数的寄存器在大多数情况下,寄存器是由寄存器在大多数情况下,寄存器是由D触发器构成的触发器构成的一、一、8位通用寄存器的设计位通用寄存器的设计(74LS374) OE CP D Q 0 上升沿上升沿 0 0 0 上升沿上升沿 1 1 0 0 * 保持保持 1 * * 高阻高阻第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 22 LIBRARY IEEE;;USE IEEE.std_logic_1164.all;ENTITY register IS PORT(d :IN std_logic_vector(7 DOWNTO 0); oe: IN std_logic; clk: IN std_logic; q: OUT std_logic_vector( 7 DOWNTO 0 ));END register;ARCHITECTURE rtl OF register IS SIGNAL q_tmp :std_logic_vector(7 DOWNTO 0);BEGIN PROCESS(clk,oe)第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 23 BEGIN IF(oe=‘0’) THEN IF(clk’event AND clk=‘1’) THEN q_tmp<=d; END IF; ELSE q_tmp<=“ZZZZZZZZ”; END IF; q<=q_tmp; END PROCESS;END rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 24 寄存器的设计寄存器的设计二、移位寄存器二、移位寄存器第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 25 Library ieee;Use ieee.std_logic_1164.all;entity shift_reg_vhd is port(d1,cp : in std_logic;do : out std_logic);end shift_reg_vhd;architecture structure of shift_reg_vhd is component dff port(d,clk: in std_logic;q: out std_logic); end component; signal q: std_logic_vector(4 downto 0);Begin q(0)<=d1; Label1:for I in 0 to 3 generate Ux:dff port map(q(i),cp,q(i+1)); End generate label1; do<=q(4);end structure;1、串入串出移位寄存器、串入串出移位寄存器第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 26 Library ieee;Use ieee.std_logic_1164.all;entity shift_reg_vhd is port(d1,cp : in std_logic;do : out std_logic_vector((3 downto 0) );end shift_reg_vhd;architecture structure of shift_reg_vhd is component dff port(d,clk: in std_logic;q: out std_logic); end component; signal q: std_logic_vector(4 downto 0);Begin q(0)<=d1; Label1:for I in 0 to 3 generate Ux:dff port map(q(i),cp,q(i+1)); End generate label1; do<=q(4 downto 1);end structure;2、串入并出移位寄存器、串入并出移位寄存器第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 27 计数器的设计计数器的设计四位二进制计数器真值表四位二进制计数器真值表R RS SENENCLKCLKQ3Q3Q2Q2Q1Q1Q0Q01 1X XX XX X0 00 00 00 00 01 1X X上升沿上升沿预预置置值值0 00 01 1上升沿上升沿计计数数值值 加加1 10 00 00 0X X保持不保持不变变1. 1.同步计数器同步计数器同步计数器同步计数器第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 28 Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity counter is Port(reset : in std_logic; set : in std_logic; enable : in std_logic; clk : in std_logic; cout : in std_logic; q : buffer std_logic_vector(3 downto 0) );end counter;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 29 architecture rtl of counter isbegin p1:process(clk,reset) begin if (reset=’1’) then q<= (other=>’0’) elsif (clk’event and clk=’1’) then if (set=‘1’) then q<=“1010”; elsif (enable=’1’) then q<=q+1; else q<=q; end if; end if; end process p1; cout<=“1” when q=“1111” and enable=‘1’ else’0’end rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 30 异步复位,同步预置和同步使能的通用计数器的设计。

      异步复位,同步预置和同步使能的通用计数器的设计Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity counter is Generic (size:integer:=8) Port(reset : in std_logic; set : in std_logic; enable : in std_logic; clk : in std_logic; cout : in std_logic; q : buffer std_logic_vector(size-1 downto 0) );end counter;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 31 architecture rtl of counter isbegin p1:process(clk,reset) begin if (reset=’1’) then q<= (other=>’0’); elsif (clk’event and clk=’1’) then if (set=‘1’) then q( other=>’1’); elsif (enable=’1’) then q<=q+1; else q<=q; end if; end if; end process p1;end rtl;异步复位,同步预置和同步使能的通用计数器的设计。

      异步复位,同步预置和同步使能的通用计数器的设计第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 32 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY async_rdff IS PORT(d,clk,reset:IN std_logic; q,qb:OUT std_logic);END async_rdff;ARCHITECTURE rtl OF async_rdff ISBEGIN PROCESS(clk,reset) BEGIN IF (reset=‘0’) THEN q<=‘0’; qb<=‘1’; ELSEIF (clk’event AND clk=‘1’) THEN q<=d; qb<=NOT d; end if; End process;End rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 33 LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY acount IS PORT(d,clk,reset:IN std_logic; q:OUT std_logic_vector(3 downto 0));END acount;ARCHITECTURE rtl OF acount IS Component async_rdff PORT(d,clk,reset:IN std_logic; q,qb:OUT std_logic); END component ; Signal q_tmp: std_logic_vector(4 downto 0);BEGIN q_tmp(0)<=clk; lable1: for I 0 to 3 generate Async_rdffx:async_rdff port map(q_tmp(i+1), q_tmp(i),reset, q(i), q_tmp(i+1)); end generate lable1;End rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 34 第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 35 分频器的设计分频器的设计LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY clk_div IS PORT(clk :IN std_logic; clk_div2: out std_logic; clk_div4: out std_logic; clk_div8: out std_logic ; clk_div16:out std_logic);end clk_div;ARCHITECTURE rtl OF clk_div IS SIGNAL count :std_logic_vector(3 downto 0);BEGIN PROCESS(clk) BEGIN IF (clk'event and clk='1') THEN if (count="1111")then count<= (others =>'0'); else count<= count+1; end if; end if; END PROCESS; clk_div2 <=count(0); clk_div4 <=count(1); clk_div8 <=count(2); clk_div16 <=count(3);END rtl;36 分频器的设计分频器的设计第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 37 例:例:6分频设计分频设计LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY clk_div6 IS PORT(clk :IN std_logic; clk_div6:out std_logic);end clk_div6;ARCHITECTURE rtl OF clk_div6 IS SIGNAL count :std_logic_vector(1 downto 0); SIGNAL clk_tmp:std_logic;BEGIN PROCESS(clk) BEGIN IF (clk'event and clk='1') THEN if (count="10")then count<= (others =>'0'); clk_tmp<=not clk_tmp; else count<= count+1; end if; end if; END PROCESS; clk_div6 <=clk_tmp;END rtl;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 38 第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 39 Library ieee;Use ieee.std_logic_1164.all;Entity counter isPort(clear : in std_logic; load : in std_logic; clk : in std_logic; data_in : in integer; data_out : out integer);end counter;architecture count_15 of counter isbegin p1:process(clk) variable temp : integer:=0; begin if (clear=’1’) then tmp:=0; elsif (load=’1’) then tmp:=data_in; elsif (clk’event and clk=’1’) then if (tmp=15) then tmp:=0; else tmp:=tmp+1; end if; end if; data_out<=tmp; end process p1;end count_15;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 40 Library ieee;Use ieee.std_logic_1164.all;Entity counter isPort(clear : in std_logic; load : in std_logic; clk : in std_logic; data_in : in integer; data_out : out integer);end counter;architecture count_15 of counter isbegin p1:process(clk) variable temp : integer:=0; begin if (clear=’1’) then tmp:=0; elsif (load=’1’) then tmp:=data_in; elsif (clk’event and clk=’1’) then if (tmp=15) then tmp:=0; else tmp:=tmp+1; end if; end if; data_out<=tmp; end process p1;end count_15;第第8 8章章 基于基于VHDL基本数字电路设计基本数字电路设计 41 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.