数字系统设计教学资料-第四章 时序逻辑电路2ppt课件_第1页
数字系统设计教学资料-第四章 时序逻辑电路2ppt课件_第2页
数字系统设计教学资料-第四章 时序逻辑电路2ppt课件_第3页
数字系统设计教学资料-第四章 时序逻辑电路2ppt课件_第4页
数字系统设计教学资料-第四章 时序逻辑电路2ppt课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章目录本章目录 不当的设计实例不当的设计实例 误用异步复位误用异步复位 误用门控时钟误用门控时钟 误用派生时钟误用派生时钟 功耗思索功耗思索 计数器计数器 二进制计数器二进制计数器 格雷码计数器格雷码计数器 环形计数器环形计数器 线性反响移位存放器线性反响移位存放器LFSRLFSR 存放器充任快速暂时存储存放器充任快速暂时存储n同步设计在设计规模宏大、复杂的系统时是最重要的。同步设计在设计规模宏大、复杂的系统时是最重要的。n在过去,一些非同步的设计实际被用来节约芯片和面积在过去,一些非同步的设计实际被用来节约芯片和面积n滥用异步复位滥用异步复位n滥用门控时钟滥用门控时钟n滥用派生时钟滥用派生

2、时钟时序电路设计:实际时序电路设计:实际n原那么:在存放器正常任务的时候,不要用复位信号来清空存原那么:在存放器正常任务的时候,不要用复位信号来清空存放器。放器。n这里有一个不太适用的这里有一个不太适用的10进制计数器例子,当计数值到达进制计数器例子,当计数值到达“1010时,立刻清空计数器。时,立刻清空计数器。误用异步复位误用异步复位误用异步复位误用异步复位library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity mod10_counter isport( clk, reset: in std_logic

3、; q: out std_logic_vector(3 downto 0) );end mod10_counter;architecture poor_async_arch of mod10_counter issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0);signal async_clr: std_logic; begin - registerprocess(clk, async_clr)beginif (async_clr = 1) then r_reg 0);elsif (clkevent a

4、nd clk = 1) then r_reg = r_next;end if;end process;- asynchronous clear async_clr = 1 when (reset=1 or r_reg=1010)else 0;- next state and output logic r_next = r_reg + 1; q = std_logic_vector(r_reg);end poor_async_arch;n问题所在:问题所在:n从从“1001到到“0000的跳转时,经过了的跳转时,经过了“1010形状如时序形状如时序图所示。图所示。n在驱动在驱动aync_clr信

5、号的组合逻辑中,恣意的毛刺都会复位计数信号的组合逻辑中,恣意的毛刺都会复位计数器器n不能运用时序分析来决议最大的时钟频率不能运用时序分析来决议最大的时钟频率误用异步复位误用异步复位因此,异步复位信因此,异步复位信号只能在上电初始号只能在上电初始化的时候运用!化的时候运用!n补救方法:同步载入补救方法:同步载入“0000。误用异步复位误用异步复位architecture two_seg_arch of mod10_counter issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0); begin - re

6、gisterprocess(clk, reset)beginif (reset = 1) then r_reg 0);elsif (clkevent and clk = 1) then r_reg = r_next;end if;end process; - next-state logic r_next 0) when r_reg = 9 else r_reg + 1; - output logic q = std_logic_vector(r_reg);end two_seg_arch;n原那么:不能插入逻辑例如与门来阻止时钟更新存放器的原那么:不能插入逻辑例如与门来阻止时钟更新存放器的值

7、值n时钟树是一种特殊的设计构造,不能被外部干涉。时钟树是一种特殊的设计构造,不能被外部干涉。n思索一个带有使能信号的计数器,一种实现使能的方法是和思索一个带有使能信号的计数器,一种实现使能的方法是和clk信号相与,如以下图所示。信号相与,如以下图所示。误用门控时钟误用门控时钟运用门控时钟来禁用触发器n存在的问题:存在的问题:nen不能改动不能改动clk,有能够仅仅是减少触发器时钟的时钟脉冲宽,有能够仅仅是减少触发器时钟的时钟脉冲宽度。度。n假设假设en易受毛刺影响,计数器能够会比料想的计数要多。易受毛刺影响,计数器能够会比料想的计数要多。n由于时钟途径里面存在与门,会影响分布时钟树的构建和分析

8、由于时钟途径里面存在与门,会影响分布时钟树的构建和分析。误用门控时钟误用门控时钟n下面给出一种简单但不适用的处理方法。下面给出一种简单但不适用的处理方法。误用门控时钟误用门控时钟library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity binary_counter isport( clk, reset: in std_logic; en: in std_logic; q: out std_logic_vector(3 downto 0) );end binary_counter;architecture g

9、ated_clk_arch of binary_counter issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0);signal gated_clk: std_logic; begin - registerprocess(gated_clk, reset)beginif (reset = 1) then r_reg 0);elsif (gated_clkevent and gated_clk = 1) then r_reg = r_next;end if;end process; - gated cl

10、ock - poor design practice gated_clk = clk and en; - next-state and output logic r_next = r_reg + 1; q = std_logic_vector(r_reg);end gated_clk_arch;误用门控时钟误用门控时钟architecture two_seg_arch of binary_counter issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0); begin - registerproces

11、s(clk, reset)beginif (reset = 1) then r_reg 0);elsif (clkevent and clk = 1) then r_reg = r_next;end if;end process; - next-state logic r_next = r_reg + 1 when en = 1 else r_reg; - output logic q = std_logic_vector(r_reg);end two_seg_arch;n下面给出一种更好的处理方法。下面给出一种更好的处理方法。n存在的问题:存在的问题:n子系统能够会运转在不同的时钟频率。子系

12、统能够会运转在不同的时钟频率。误用派生时钟误用派生时钟n原那么:不要为一个慢的子系统派生一个慢的时钟原那么:不要为一个慢的子系统派生一个慢的时钟n左图的问题在于这个系统不再同步了。派生时钟会添加时序分左图的问题在于这个系统不再同步了。派生时钟会添加时序分析的复杂度,致使我们不能再用前面简单的方法来分析了,我析的复杂度,致使我们不能再用前面简单的方法来分析了,我们必需把它视为两个不同频率和相位的时钟系统。们必需把它视为两个不同频率和相位的时钟系统。n思索一个实现思索一个实现“秒和分的计数器功能的设计,假设它的输入时钟为秒和分的计数器功能的设计,假设它的输入时钟为1MHz。误用派生时钟误用派生时钟

13、n一个运用派生时钟的设计例子如下:一个运用派生时钟的设计例子如下:误用派生时钟误用派生时钟library ieee;use ieee.std_logic_1164.cb;use ieee.numeric_std.all;entity timer isport( clk, reset: in std_logic; sec,min: out std_logic_vector(5 downto 0) );end timer;architecture multi_clock_arch of timer issignal r_reg: unsigned(19 downto 0);signal r_nex

14、t: unsigned(19 downto 0);signal s_reg, m_reg: unsigned(5 downto 0);signal s_next, m_next: unsigned(5 downto 0);signal sclk, mclk: std_logic; begin - registerprocess(clk, reset)beginif (reset = 1) then r_reg 0);elsif (clkevent and clk = 1) then r_reg = r_next;end if;end process; - next-state logic r_

15、next 0) when r_reg = 999999 else r_reg + 1; - output logic - clock has 50% duty cycle sclk = 0 when r_reg 500000 else 1;n一个运用派生时钟的设计例子如下续一个运用派生时钟的设计例子如下续误用派生时钟误用派生时钟 - second dividerprocess(sclk, reset)beginif (reset = 1) then s_reg 0);elsif (sclkevent and sclk=1) then s_reg = s_next;end if;end proc

16、ess; - next-state logic s_next 0) when s_reg = 59 else s_reg + 1; - output logic (50% duty cycle) mclk = 0 when s_reg 30 else 1; sec = std_logic_vector(s_reg); - minute dividerprocess(mclk, reset)beginif (reset = 1) then m_reg 0);elsif (mclkevent and mclk = 1) then m_reg = m_next;end if;end process;

17、 - next-state logic m_next 0) when m_reg = 59 else m_reg + 1; - output logic min = std_logic_vector(m_reg);end multi_clock_arch;n一种更好的运用同步一种更好的运用同步1个时钟脉冲的方法个时钟脉冲的方法误用派生时钟误用派生时钟architecture single_clock_arch of timer issignal r_reg: unsigned(19 downto 0);signal r_next: unsigned(19 downto 0);signal s_

18、reg, m_reg: unsigned(5 downto 0);signal s_next, m_next: unsigned(5 downto 0);signal s_en, m_en: std_logic; begin - registerprocess(clk, reset)beginif (reset = 1) then r_reg 0); s_reg 0); m_reg 0);elsif (clkevent and clk = 1) then r_reg = r_next; s_reg = s_next; m_reg = m_next;end if;end process; - n

19、ext-state/output logic for mod-1000000 counter r_next 0) when r_reg = 999999 else r_reg + 1; s_en = 1 when r_reg = 500000 else 0;n一种更好的运用同步一种更好的运用同步1个时钟脉冲的方法续个时钟脉冲的方法续误用派生时钟误用派生时钟 - next state logic/output logic for second divider s_next 0) when (s_reg = 59 and s_en = 1) else s_reg + 1 when s_en = 1

20、 else s_reg; m_en = 1 when s_reg = 30 and s_en = 1 else 0; - next-state logic for minute divider m_next 0) when (m_reg = 59 and m_en = 1) else m_reg + 1 when m_en = 1 else m_reg; - output logic sec = std_logic_vector(s_reg); min = std_logic_vector(m_reg);end single_clock_arch;n功耗如今曾经成为一个主要的设计准那么功耗如今

21、曾经成为一个主要的设计准那么n在在CMOS工艺中,高时钟频率隐含着高速的开关频率,高速的工艺中,高时钟频率隐含着高速的开关频率,高速的开关频率令动态功耗添加。开关频率令动态功耗添加。n对时钟进展操作会减少开关转换的频率,但这个不能在存放器对时钟进展操作会减少开关转换的频率,但这个不能在存放器传输层实现。传输层实现。n恰当的流程如下:恰当的流程如下:n设计、综合、验证常规的同步子系统。设计、综合、验证常规的同步子系统。n运用特殊的电路例如锁相环来获得派生时钟运用特殊的电路例如锁相环来获得派生时钟n运用运用“功耗优化的软件工具在一些存放器上加上门控时钟功耗优化的软件工具在一些存放器上加上门控时钟功

22、耗思索功耗思索n计数器会按照一系列的方式不断反复其内部形状计数器会按照一系列的方式不断反复其内部形状n二进制计数器二进制计数器n格雷码计数器格雷码计数器n环形计数器环形计数器n线性反响移位存放器线性反响移位存放器LFSRnBCD码计数器码计数器计数器计数器n形状会根据二进制计数序列来改动形状会根据二进制计数序列来改动n运用一个自增器来实现下一个形状运用一个自增器来实现下一个形状二进制计数器二进制计数器n每一次形状的变换,仅仅改动其中的一位每一次形状的变换,仅仅改动其中的一位n运用一个格雷码自增器运用一个格雷码自增器格雷码计数器格雷码计数器十进制数十进制数自然二进制数自然二进制数格雷码格雷码00

23、0000000100010001200100011300110010401000110501010111601100101701110100810001100910011101101010111111101111101211001010131101101114111010011511111000library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity gray_counter4 isport( clk, reset: in std_logic; q: out std_logic_vector(3 downt

24、o 0) );end gray_counter4;architecture arch of gray_counter4 isconstant WIDTH: natural := 4;signal g_reg: unsigned(WIDTH-1 downto 0);signal g_next, b, b1: unsigned(WIDTH-1 downto 0); begin - registerprocess(clk, reset)beginif (reset = 1) then g_reg 0);elsif (clkevent and clk = 1) cb g_reg = g_next;en

25、d if;end process; - next-state logic - gray to binary b = g_reg xor (0 & b(WIDTH-1 downto 1); b1 = b+1; - increment - binary to gray g_next = b1 xor (0 & b1(WIDTH-1 downto 1); - output logic q = std_logic_vector(g_reg);end arch;格雷码计数器格雷码计数器n循环挪动单个循环挪动单个1,例如,例如4位的环形计数器:位的环形计数器:n“1000 “0100 “0010 “000

26、1环形计数器环形计数器nN位的存放器就有位的存放器就有N个方式,输出也是个方式,输出也是N个相位的信号。个相位的信号。n在自我错误修复的设计中,在自我错误修复的设计中,“0001在初始化的时候被插入在初始化的时候被插入library ieee;use ieee.std_logic_1164.all;entity ring_counter isport( clk, reset: in std_logic; q: out std_logic_vector(3 downto 0) );end ring_counter;architecture reset_arch of ring_counter i

27、sconstant WIDTH: natural := 4;signal r_reg: std_logic_vector(WIDTH-1 downto 0);signal r_next: std_logic_vector(WIDTH-1 downto 0); begin - registerprocess(clk, reset)beginif (reset = 1) then r_reg 1, others = 0);elsif (clkevent and clk = 1) then r_reg = r_next;end if;end process; - next-state logic r

28、_next = r_reg(0) & r_reg(WIDTH-1 downto 1); - output logic q = r_reg;end reset_arch;环形计数器环形计数器n在自我错误修复的设计中,必需保证一个在自我错误修复的设计中,必需保证一个“1总是在环形中循总是在环形中循环。可以这样实现:检测高环。可以这样实现:检测高3位,假设高位,假设高3位为位为“000,那么利,那么利用组合逻辑在它的最低位插入一个用组合逻辑在它的最低位插入一个“1 。环形计数器环形计数器architecture self_correct_arch of ring_counter isconstant

29、 WIDTH: natural := 4;signal r_reg, r_next: std_logic_vector(WIDTH-1 downto 0);signal s_in: std_logic; begin - registerprocess(clk, reset)beginif (reset = 1) then- no special input pattern is needed in this version- since the 1 is not circulated - its generated r_reg 0);elsif (clkevent and clk = 1) t

30、hen r_reg = r_next;end if;end process; - next-state logics_in = 1 when r_reg(WIDTH-1 downto 1) = 000 else 0; r_next = s_in & r_reg(WIDTH-1 downto 1); - output logic q = r_reg;end self_correct_arch;nLFSR是一个带有决议下一系列输入值的异或是一个带有决议下一系列输入值的异或XOR反响网反响网络移位存放器络移位存放器n仅有一部分的存放器的位被用来进展异或操作,假设位的选择仅有一部分的存放器的位被用来进

31、展异或操作,假设位的选择恰当,恰当,N位的存放器组成的位的存放器组成的LFSR可以设计为可以设计为2n-1个形状循环个形状循环。n下面是一个下面是一个4位的位的LFSR。线性反响移位存放器线性反响移位存放器LFSRLFSR“1000 “0100 “0010 “1001“1100 “0110 “1011 “0101“1010 “1101 “1110 “1111“0111 “0011 “0001需求留意的是需求留意的是“0000并没并没有包含其中,有包含其中,假设出现了,假设出现了,那么那么LFSR会会被阻塞被阻塞nLFSR的特性来源于有限域的实际的特性来源于有限域的实际n由于反响表达式用由于反响

32、表达式用AND和和XOR操作来表示,所以运用线性项操作来表示,所以运用线性项定义一个线性代数系统。定义一个线性代数系统。n除了除了“2n-1个形状的性质之外,个形状的性质之外,LFSR还具有以下性质:还具有以下性质:n对于恣意对于恣意n,反响网络都会生成最大的形状数目。,反响网络都会生成最大的形状数目。n输出的序列是伪随机的,存在一定的统计特性和随机特性输出的序列是伪随机的,存在一定的统计特性和随机特性线性反响移位存放器线性反响移位存放器LFSRLFSRnLFSR的运用的运用n伪随机序列:用于测试数据的编码和解码伪随机序列:用于测试数据的编码和解码n简单的简单的“next-state logi

33、c计数器计数器n例如,一个例如,一个128位的位的LFSR运用运用3个个XOR门可以产生门可以产生2128-1种方种方式,对于一个式,对于一个100GHz的系统,需求的系统,需求1012年的时间年的时间线性反响移位存放器线性反响移位存放器LFSRLFSRlibrary ieee;use ieee.std_logic_1164.all;entity lfsr4 isport( clk, reset: in std_logic; q: out std_logic_vector(3 downto 0) );end lfsr4;architecture no_zero_arch of lfsr4 is

34、signal r_reg, r_next: std_logic_vector(3 downto 0);signal fb: std_logic;constant SEED: std_logic_vector(3 downto 0):=0001; begin - registerprocess(clk, reset)beginif (reset = 1) then r_reg = SEED;elsif (clkevent and clk = 1) then r_reg = r_next;end if;end process; - next-state logic fb = r_reg(1) xo

35、r r_reg(0); r_next = fb & r_reg(3 downto 1); - output logic q = r_reg;end no_zero_arch;线性反响移位存放器线性反响移位存放器LFSRLFSRn下面将利用二进制计数器来实现下面将利用二进制计数器来实现PWM调制。调制。n脉宽调试脉宽调试PWMn占空比:信号有效所占的时间百分比占空比:信号有效所占的时间百分比计数器运用例子计数器运用例子nPWM运用一个信号运用一个信号w来表示占空比:来表示占空比:n当当w不为不为“0000时,占空比为时,占空比为w/16n当当w为为“0000时,占空比为时,占空比为16/16计数

36、器运用例子计数器运用例子library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity pwm isport( clk, reset: in std_logic; w: in std_logic_vector(3 downto 0); pwm_pulse: out std_logic );end pwm;architecture two_seg_arch of pwm issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0);

37、signal buf_reg: std_logic;signal buf_next: std_logic; begin - register & output bufferprocess(clk, reset)beginif (reset = 1) then r_reg 0); buf_reg = 0;elsif (clkevent and clk = 1) then r_reg = r_next; buf_reg = buf_next;end if;end process;- next-state logic r_next = r_reg + 1;- output logic buf_nex

38、t = 1 when (r_regunsigned(w) or (w=0000) else 0;- buffered to remove glitches pwm_pulse = buf_reg;end two_seg_arch;n存放器由于体积太大而不能作为大存储空间。而存放器由于体积太大而不能作为大存储空间。而RAM由于由于其体积较小,更适宜用来作为较大的存储空间。其体积较小,更适宜用来作为较大的存储空间。n存放器在数字系统中,通常用来构建小而快速的暂时存储空存放器在数字系统中,通常用来构建小而快速的暂时存储空间,例如:间,例如:n存放器文件存放器文件存放器充任快速暂时存储存放器充任快速暂

39、时存储n存放器文件存放器文件n存放器以一维陈列存放器以一维陈列n每个存放器以地址作为标识每个存放器以地址作为标识n通常有一个写入端口带有使能信号和两个或者更多的读通常有一个写入端口带有使能信号和两个或者更多的读取端口取端口存放器文件存放器文件n作为例子,以下图为一个带有作为例子,以下图为一个带有1个写入端口,两个读取端口个写入端口,两个读取端口的的4字大小的存放器文件字大小的存放器文件存放器文件存放器文件n译码器译码器decoder用来分配使能信号,选择器用来分配使能信号,选择器Mux用来选择用来选择输出的数据。输出的数据。存放器文件存放器文件n译码器电路的任务方式如下:译码器电路的任务方式如

40、下:n当当wr_en=0时,输出时,输出“0000n当当wr_en=1时,根据时,根据w_addr的值使某一位有效的值使某一位有效library ieee;use ieee.std_logic_1164.all;entity reg_file isport( clk, reset: in std_logic; wr_en: in std_logic; w_addr: in std_logic_vector(1 downto 0); w_data: in std_logic_vector(15 downto 0);r_addr0, r_addr1: in std_logic_vector(1 downto 0); r_data0, r_data1: out std_logic_vector(15 downto 0);end reg_file;architecture no_loop_arch of reg_file isconstant W: natural := 2; - # of bits in addressconstant B: natural := 16; - # of bits in datatype reg_f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论