版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章目录本章目录 时序电路概述时序电路概述 同步电路同步电路 根本存储单元的援用根本存储单元的援用 简单的设计例子简单的设计例子 时序分析时序分析 一段式代码风格一段式代码风格 时序电路中变量的运用时序电路中变量的运用n组合电路和时序电路组合电路和时序电路n时序电路:输出是输入和当前形状的函数时序电路:输出是输入和当前形状的函数n根本记忆单元根本记忆单元nD 锁存器锁存器nD 触发器触发器nRAM时序电路概述时序电路概述nD锁存器是电平敏感的记忆单元,而锁存器是电平敏感的记忆单元,而D触发器是边沿敏触发器是边沿敏感的记忆单元感的记忆单元n对于对于D锁存器,当时钟信号锁存器,当时钟信号c为高电平
2、常,下一个形状为高电平常,下一个形状q*=d,当时钟信号,当时钟信号c为低电平常,为低电平常,q*=q坚持坚持dcq(a)D 锁存器cq*0q1dD D锁存器锁存器nD锁存器的时序图锁存器的时序图d在在c的下降沿处被采样和保管的下降沿处被采样和保管D D锁存器锁存器nD触发器只需在触发器只需在clk信号的跳变沿处有效信号的跳变沿处有效01或或10dclkq(b)上升沿D 触发器dclkq(c)下降沿D 触发器clkq*0q1qdclkq*0q1qd“有效的有效的含义是指含义是指:d的值的值只需在只需在clk的边沿处的边沿处被采样和被采样和保管,并保管,并更新输出更新输出qD D触发器触发器nD
3、触发器的优点触发器的优点nd端口小小的毛刺不会影响到存储的形状端口小小的毛刺不会影响到存储的形状n消除了竞争的条件,交换数据的电路可以任务消除了竞争的条件,交换数据的电路可以任务nD触发器的缺陷触发器的缺陷n是是D锁存器的两倍大小锁存器的两倍大小D D触发器触发器n时序图如下时序图如下:n Clock-to-q 延时延时(Tcq): 信号信号d被采样到更新被采样到更新q的延时的延时n建立时间建立时间(Tsetup): 在时钟的上升沿降临之前,在时钟的上升沿降临之前,d必需坚持稳定的时间必需坚持稳定的时间n坚持时间坚持时间(Thold): 在时钟上升沿到来之后,在时钟上升沿到来之后,d必需坚持稳
4、定的时间必需坚持稳定的时间D D触发器触发器n时序图如下时序图如下:续续nTcq代表组合电路的传播延时代表组合电路的传播延时nTsetup 和和Thold 是时序约束,是时序约束,d必需在必需在clk的时间间隔内坚持稳定。假设的时间间隔内坚持稳定。假设d在这个时隙内改动,这样就会违反建立时间和坚持时间的规那么,导致在这个时隙内改动,这样就会违反建立时间和坚持时间的规那么,导致触发器进入亚稳态触发器进入亚稳态q不是不是0也不是也不是1D D触发器触发器n在时序电路中,时钟信号扮演着一个很重要的角色在时序电路中,时钟信号扮演着一个很重要的角色n系统可以根据时钟的规划来分类系统可以根据时钟的规划来分
5、类n全局同步电路全局同步电路n一切的存储单元都在同一个全局时钟的控制下任务一切的存储单元都在同一个全局时钟的控制下任务n全局异步全局异步-部分同步电路部分同步电路(GALS)n设计的器件传输分开得太远,无法运用单个同步时钟的情况设计的器件传输分开得太远,无法运用单个同步时钟的情况下,只能运用一个全局的异步时钟下,只能运用一个全局的异步时钟n然而,较小的子系统内部运用一个同步的时钟然而,较小的子系统内部运用一个同步的时钟n在子系统之间需求特殊的电路接口来保证正常的任务在子系统之间需求特殊的电路接口来保证正常的任务时钟信号时钟信号n全局异步电路全局异步电路n没有时钟来协调存储单元的任务,大致分为两
6、类。没有时钟来协调存储单元的任务,大致分为两类。n时钟时钟 的运用是没有规律的,例如行波计数器:触发器的时的运用是没有规律的,例如行波计数器:触发器的时钟端口衔接上一个触发器的输出钟端口衔接上一个触发器的输出q端口。这种设计并不完端口。这种设计并不完美,不引荐美,不引荐n系统带有不需求时钟的存储单元如系统带有不需求时钟的存储单元如D锁存器或者带有反锁存器或者带有反响回路的组合电路异步电路。响回路的组合电路异步电路。时钟信号时钟信号n合理的异步电路设计和同步电路完全不同,而且合理的异步电路设计和同步电路完全不同,而且HDL的综合的综合工具不太引荐工具不太引荐形状存放器形状存放器(state_re
7、g) :代表存储单元的形状:代表存储单元的形状下一个形状逻辑下一个形状逻辑(Next state logic ):代表决议:代表决议state_next的组的组合电路合电路同步电路同步电路n操作如下:操作如下:n在时钟信号的上升沿,在时钟信号的上升沿, state_next 被采样和保管在存放器中被采样和保管在存放器中,成为新的,成为新的state_reg的值。的值。n外部输入和外部输入和state_reg 信号传输到信号传输到next-state 和输出来决议新和输出来决议新的的next-state 和新的输出信号和新的输出信号n在时钟信号的上升沿,在时钟信号的上升沿, 新的新的state_
8、next重新被采样和保管,重新被采样和保管,然后反复进程然后反复进程n需求留意的是时钟周期需求足够大来顺应触发器的需求留意的是时钟周期需求足够大来顺应触发器的next-state 逻辑传播延时、逻辑传播延时、clock-to-q 延时、建立时间延时延时、建立时间延时同步电路同步电路n同步设计的优势同步设计的优势n单个的全局时钟让成千上万个触发器构建的电路可以一致控单个的全局时钟让成千上万个触发器构建的电路可以一致控制和满足时序约束。制和满足时序约束。n一个同步的模块把组合逻辑器件从存储单元中分别出来,实一个同步的模块把组合逻辑器件从存储单元中分别出来,实现组合逻辑部分的单独优化。现组合逻辑部分
9、的单独优化。n传播延时的反常情况很容易经过分析最差的时序行为来处置传播延时的反常情况很容易经过分析最差的时序行为来处置n因此,同步模块把一个复杂的时序电路变为单个的闭环反响因此,同步模块把一个复杂的时序电路变为单个的闭环反响回路和简化设计的流程回路和简化设计的流程同步电路同步电路n同步电路的类型同步电路的类型n常规的时序电路常规的时序电路n形状表示,转变和下个形状逻辑有一个简单,常规的方式,形状表示,转变和下个形状逻辑有一个简单,常规的方式,例如一个自增的计数器或者一个移位存放器。例如一个自增的计数器或者一个移位存放器。n随机的时序电路随机的时序电路(FSM)n更复杂的形状迁移且形状和它们的二
10、进制表示没有特殊的联更复杂的形状迁移且形状和它们的二进制表示没有特殊的联络。即,下一个形状逻辑是随机的。络。即,下一个形状逻辑是随机的。n组合成的时序逻辑组合成的时序逻辑 (带有数据通路的带有数据通路的FSM, FSMD - RTL)n组合常规时序电路和有限形状机,用有限形状机来控制时序组合常规时序电路和有限形状机,用有限形状机来控制时序电路的行为电路的行为同步电路同步电路n当他需求创建当他需求创建D锁存器和锁存器和D触发器的时候,可以运用下面的触发器的时候,可以运用下面的语法款式,综合工具会自动推断出来,生成适宜的器件。语法款式,综合工具会自动推断出来,生成适宜的器件。nD锁存器锁存器n隐含
11、的隐含的else语句会产生语句会产生D锁存器锁存器library ieee;use ieee.std_logic_1164.all;entity dlatch isport( c: in std_logic; d: in std_logic; q: out std_logic );end dlatch;architecture arch of dlatch is begin - c and d in sens. list b/c process sens. to bothprocess(c, d)beginif (c=1) then q = d;end if;end process;end a
12、rch;dcq(a)D 锁存器根本存储单元的援用根本存储单元的援用n当他需求创建当他需求创建D锁存器和锁存器和D触发器的时候,可以运用下面的触发器的时候,可以运用下面的语法款式,综合工具会自动推断出来,生成适宜的器件。语法款式,综合工具会自动推断出来,生成适宜的器件。n上升沿上升沿D触发器触发器n没有没有else语句且对时钟跳变信号敏感语句且对时钟跳变信号敏感library ieee;use ieee.std_logic_1164.all;entity dff isport( clk: in std_logic; d: in std_logic; q: out std_logic );end
13、dff;architecture arch of dff is beginprocess(clk)begin - when d changes (unlike latch)if (clkevent and clk=1) then - can also use q = d; - rising_edge(clk)end if; end process;end arch;dclkq(b)上升沿D 触发器根本存储单元的援用根本存储单元的援用n下降沿下降沿D触发器触发器n只需求上升沿的程序稍作修正即可红色为修正的部分只需求上升沿的程序稍作修正即可红色为修正的部分library ieee;use ieee
14、.std_logic_1164.all;entity dff isport( clk: in std_logic; d: in std_logic; q: out std_logic );end dff;architecture arch of dff is beginprocess(clk)begin - when d changes (unlike latch)if (clkevent and clk=0) then - can also use q = d; - falling_edge(clk)end if; end process;end arch;dclkq(c)下降沿D 触发器根
15、本存储单元的援用根本存储单元的援用n带异步复位的带异步复位的D触发器触发器library ieee;use ieee.std_logic_1164.all;entity dffr isport( clk: in std_logic; reset: in std_logic; d: in std_logic; q: out std_logic );end dffr;architecture arch of dffr is beginprocess(clk,reset)beginif (reset=1) then q =0;elsif rising_edge(clk) then q = d;end
16、 if;end process;end arch;dclkq(d)带异步复位的D 触发器reset根本存储单元的援用根本存储单元的援用n存放器存放器n由多个共用同样时钟信号和复位信号的由多个共用同样时钟信号和复位信号的D触发器并联而成触发器并联而成library ieee;use ieee.std_logic_1164.all;entity reg8 isport( clk, reset: in std_logic; d: in std_logic_vector(7 downto 0); q: out std_logic_vector(7 downto 0) );end reg8;archit
17、ecture arch of reg8 is beginprocess(clk, reset)beginif (reset=1) then q 0);elsif (clkevent and clk=1) then q = d;end if;end process; end arch;根本存储单元的援用根本存储单元的援用n最简单的设计时序电路的方法是根据框图来搭建最简单的设计时序电路的方法是根据框图来搭建n构建存放器构建存放器n编写下一个形状和输出逻辑组合电路的代码编写下一个形状和输出逻辑组合电路的代码简单的设计例子简单的设计例子n带有同步使能端的带有同步使能端的D触发器触发器n留意:留意:en
18、的值在的值在clk的上升沿被采样的上升沿被采样n当当en=0,或者由,或者由0变为变为1,触发器坚持输出,触发器坚持输出q不变不变n当当en=1,或者由,或者由1变为变为0,触发器保管,触发器保管q_next的值的值简单的设计例子简单的设计例子n带有同步使能端的带有同步使能端的D触发器代码触发器代码library ieee;use ieee.std_logic_1164.all;entity dff_en isport( clk: in std_logic; reset: in std_logic; en: in std_logic; d: in std_logic; q: out std_l
19、ogic );end dff_en;architecture two_seg_arch of dff_en issignal q_reg: std_logic;signal q_next: std_logic; begin - D FFprocess(clk, reset)beginif (reset=1) then q_reg = 0;elsif (clkevent and clk=1) then q_reg = q_next;end if;end process; - next-state logic q_next = d when en =1 else q_reg; - output l
20、ogic q = q_reg;end two_seg_arch;简单的设计例子简单的设计例子nT触发器触发器n留意:留意:t的值在的值在clk的上升沿被采样的上升沿被采样简单的设计例子简单的设计例子nT触发器代码触发器代码library ieee;use ieee.std_logic_1164.all;entity tff isport( clk: in std_logic; reset: in std_logic; t: in std_logic; q: out std_logic );end tff;architecture two_seg_arch of tff issignal q_r
21、eg: std_logic;signal q_next: std_logic;begin - D FFprocess(clk, reset)beginif (reset=1) then q_reg = 0;elsif (clkevent and clk=1) then q_reg = q_next;end if;end process; - next-state logic q_next = q_reg when t=0 elsenot(q_reg); - output logic q = q_reg;end two_seg_arch;简单的设计例子简单的设计例子n移位存放器无控制信号移位存放
22、器无控制信号我们可以重新调整触发器使其成为一列然后把它看成一我们可以重新调整触发器使其成为一列然后把它看成一个存储器块,如以下图所示。个存储器块,如以下图所示。简单的设计例子简单的设计例子n移位存放器无控制信号移位存放器无控制信号简单的设计例子简单的设计例子n移位存放器无控制信号代码移位存放器无控制信号代码library ieee;use ieee.std_logic_1164.all;entity shift_right_register isport( clk, reset: in std_logic; d: in std_logic; q: out std_logic );end shi
23、ft_right_register;architecture two_seg_arch of shift_right_register issignal r_reg: std_logic_vector(3 downto 0);signal r_next: std_logic_vector(3 downto 0);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-st
24、ate logic (shift right 1 bit) r_next = d & r_reg(3 downto 1); - output q = r_reg(0);end two_seg_arch;简单的设计例子简单的设计例子n通用移位存放器通用移位存放器n设计为设计为4个操作方式:并行、左移、右移、暂停个操作方式:并行、左移、右移、暂停简单的设计例子简单的设计例子n通用移位存放器代码通用移位存放器代码library ieee;use ieee.std_logic_1164.all;entity shift_register isport( clk, reset: in std_l
25、ogic; ctrl: in std_logic_vector(1 downto 0); d: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0) );end shift_register;architecture two_seg_arch of shift_register issignal r_reg: std_logic_vector(3 downto 0);signal r_next: std_logic_vector(3 downto 0);begin - registerprocess(clk,
26、reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logicwith ctrl select r_next =r_reg when 00, - no op r_reg(2 downto 0) & d(0) when 01, - sft left d(3) & r_reg(3 downto 1) when 10, - sft rght d when others; - output q = r_r
27、eg;end two_seg_arch;简单的设计例子简单的设计例子n恣意序列计数器恣意序列计数器Input patternOutput pattern000011011110110101101111111000library ieee;use ieee.std_logic_1164.all;entity arbi_seq_counter4 isport( clk, reset: in std_logic; q: out std_logic_vector(2 downto 0) );end arbi_seq_counter4;architecture two_seg_arch of arbi_
28、seq_counter4 issignal r_reg: std_logic_vector(2 downto 0);signal r_next: std_logic_vector(2 downto 0); begin - registerprocess(clk, reset)beginif (reset=1) then简单的设计例子简单的设计例子n恣意序列计数器续恣意序列计数器续 r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next = 011
29、when r_reg=000 else 110 when r_reg=011 else 101 when r_reg=110 else 111 when r_reg=101 else 000; - r_reg=111 - output logic q = r_reg;end two_seg_arch;Input patternOutput pattern000011011110110101101111111000简单的设计例子简单的设计例子n自在运转的二进制计数器自在运转的二进制计数器n当计数器的值全部为当计数器的值全部为1时,输出最大脉冲,并自动轮回时,输出最大脉冲,并自动轮回library
30、 ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity binary_counter4_pulse isport( clk, reset: in std_logic; max_pulse: out std_logic; q: out std_logic_vector(3 downto 0) );end binary_counter4_pulse;architecture two_seg_arch of binary_counter4_pulse issignal r_reg: unsigned(3 downto 0);
31、signal r_next: unsigned(3 downto 0); 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_next = r_reg + 1; - output logic q = std_logic_vector(r_reg); max_pulse = 1 when (r_reg=1111) else 0;end two
32、_seg_arch;简单的设计例子简单的设计例子n自在运转的二进制计数器自在运转的二进制计数器nRTL原理图原理图简单的设计例子简单的设计例子n二进制计数器二进制计数器Syn_clrloadenq*操作操作1-00.00同步清零01-d并行载入001q+1计数000q暂停简单的设计例子简单的设计例子n二进制计数器二进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity binary_counter4_feature isport( clk, reset: in std_logic; syn_cl
33、r, en, load: in std_logic; d: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0) );end binary_counter4_feature;architecture two_seg_arch of binary_counter4_feature issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0); begin - registerprocess(clk, reset)beginif (
34、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 syn_clr=1 else unsigned(d) when load=1 else r_reg + 1 when en =1 else r_reg; - output logic q = std_logic_vector(r_reg);end two_seg_arch;简单的设计例子简单的设计例子n十进制计数器十进制计数器library ieee
35、;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity mod10_counter isport( clk, reset: in std_logic; q: out std_logic_vector(3 downto 0) );end mod10_counter;architecture two_seg_arch of mod10_counter isconstant TEN: integer := 10;signal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 d
36、ownto 0); 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_next 0) when r_reg=(TEN-1) else r_reg + 1; - output logic q = std_logic_vector(r_reg);end two_seg_arch;简单的设计例子简单的设计例子n可编程的可编程的m进制计数器进制计
37、数器n可以经过改动一个常数可以经过改动一个常数m来改动计数器的进制,范围为来改动计数器的进制,范围为“0010“1111library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity prog_counter isport( clk, reset: in std_logic; m: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0) );end prog_counter;architecture two_seg_clear_ar
38、ch of prog_counter issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0);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_next 0) when r_reg=(unsigned(m)-1) else简单的设计例子简单的设计例子
39、n可编程的可编程的m进制计数器进制计数器(续续)n可以经过改动一个常数可以经过改动一个常数m来改动计数器的进制,范围为来改动计数器的进制,范围为“0010“1111 r_reg + 1; - output logic q = std_logic_vector(r_reg);end two_seg_clear_arch;architecture two_seg_effi_arch of prog_counter issignal r_reg: unsigned(3 downto 0);signal r_next, r_inc: unsigned(3 downto 0); begin - regi
40、sterprocess(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_inc = r_reg + 1; r_next 0) when r_inc=unsigned(m) else r_inc; - output logic q = std_logic_vector(r_reg);end two_seg_effi_arch;简单的设计例子简单的设计例子简单的设计例子n可编程的可编程的
41、m进制计数器进制计数器(续续)nRTL原理图原理图n组合电路组合电路n用传播延时来描画用传播延时来描画n时序电路时序电路n必需求满足建立和坚持时间,用最大时钟频率来描画必需求满足建立和坚持时间,用最大时钟频率来描画例如:例如:200MHz的计数器,的计数器,2.4GHz的奔腾的奔腾IIn建立时间、存放器的建立时间、存放器的clock-to-q延时和下一个形状的传播延时和下一个形状的传播延时,都嵌套在时钟频率中。延时,都嵌套在时钟频率中。时序分析时序分析State_next信号必需满足触发器的时序约束nstate_next的延迟受三个源影响的延迟受三个源影响nstate_reg的输出部分一样反响
42、回路和同步时钟的输出部分一样反响回路和同步时钟n和外部运用一样时钟的子系统输入同步和外部运用一样时钟的子系统输入同步n和外部输入异步和外部输入异步n对于前两个工程,我们可以调理时钟的频率来阻止时序对于前两个工程,我们可以调理时钟的频率来阻止时序违反违反n请看下面的时序图展现了闭环反响系统的时序行为请看下面的时序图展现了闭环反响系统的时序行为,在,在t0时辰,时钟由时辰,时钟由0变为变为1。我们假设。我们假设state_next在建立在建立和坚持的周期内不会改动和坚持的周期内不会改动n在在clock-to-q (Tcq)延迟之后,存放器的输出延迟之后,存放器的输出state_reg在时在时辰辰t
43、1t0+Tcq坚持稳定坚持稳定时序分析时序分析n由于由于state_reg是是state_next逻辑的输入,逻辑的输入, state_next逻辑的输出在时间逻辑的输出在时间Tnext(min)和和Tnext(max)改动,分别表示最快和最慢的途径。改动,分别表示最快和最慢的途径。n因此,因此, state_next在在t2t1+ Tnext(min) 时辰改动,在时辰改动,在t3t1+ Tnext(max) 时辰稳定。时辰稳定。时序分析时序分析n在在t5时辰,一个新的上升沿时钟到达且当前的时钟周期终了。时辰,一个新的上升沿时钟到达且当前的时钟周期终了。 state_next在在t5时辰被采
44、样。时辰被采样。时序分析时序分析n下面来思索一下建立时间的约束,下面来思索一下建立时间的约束,state_next信号在下一个采样边沿信号在下一个采样边沿t5到来到来之前的之前的Tsetup时间内必需坚持稳定。时间内必需坚持稳定。(t5由时序图中的由时序图中的t4给定给定)nt3t4n从时序图可以看出:从时序图可以看出:nt3=t0+Tcq+Tnext(max) nt4=t5-Tsetup=t0+Tc-Tsetupn上面的不等式可以改写为上面的不等式可以改写为nt0+Tcq+Tnext(max) t0+Tc-Tsetupn可以化简为可以化简为nTcq+Tnext(max) +Tsetup Tc
45、n因此,最小的时钟周期是因此,最小的时钟周期是nTc(min) = Tcq + Tnext(max) + Tsetup时序分析时序分析时序分析时序分析n对于特定的技术,对于特定的技术,D触发器的触发器的Tcq和和Tsetup可以从数据手可以从数据手册获得。册获得。n让让Tcq=1ns,Tsetup=0.5ns,由于,由于1位的移位逻辑仅仅位的移位逻辑仅仅包含线网,所以假设它线网的衔接延时包含线网,所以假设它线网的衔接延时 是是0,因此其,因此其最高的频率为最高的频率为1/1.5 ns = 666.7 MHzn下文讲述一下和其它组合块结合的例子,其延时大于下文讲述一下和其它组合块结合的例子,其延
46、时大于0.时序分析时序分析n坚持时间违反坚持时间违反输入的信号在采样沿之后必需求坚持一段时间输入的信号在采样沿之后必需求坚持一段时间start_next 在在t0 和和 th (t0 + Thold)内必需坚持稳定。内必需坚持稳定。时序分析时序分析n坚持时间违反坚持时间违反state_next 最早改动的时辰是最早改动的时辰是t2th t2 且且 t2 = t0 + Tcq + Tnext(min)th = t0 + Thold所以所以 t0 + Thold t0 + Tcq + Tnext(min)化简得化简得 Thold Tcq + Tnext(min)由于触发器的输出驱动下一级的输入,由
47、于触发器的输出驱动下一级的输入, Tnext(min)约等于约等于0且且Thold Tcq器件厂商通常会保证触发器这些内在参数的满足关系,但时钟偏斜问器件厂商通常会保证触发器这些内在参数的满足关系,但时钟偏斜问题是值得我们思索的。题是值得我们思索的。时序分析时序分析n我们也需求思索外部输入输出的时钟特征除了刚刚提到的闭我们也需求思索外部输入输出的时钟特征除了刚刚提到的闭环反响回路环反响回路n电路的输出可以分为:摩尔电路的输出可以分为:摩尔 Moore 输出和米利输出和米利 Mealy 输出输出n对于摩尔输出,输出的信号取决于当前系统的形状,而米利输对于摩尔输出,输出的信号取决于当前系统的形状,
48、而米利输出取决于当前系统的形状和外部输入。出取决于当前系统的形状和外部输入。n这两种输出可以同时存在于同一个电路中。这两种输出可以同时存在于同一个电路中。n这两种输出主要时间参数是这两种输出主要时间参数是Tco(在时钟的上升沿后获得一个有在时钟的上升沿后获得一个有效输出所需求的时间效输出所需求的时间)时序分析时序分析nTco 是触发器的是触发器的clock-to-q延时和输出的传播延时之和延时和输出的传播延时之和nTco = Tcq + Toutputn对于米利型输出,输入可以直接影响输出。对于米利型输出,输入可以直接影响输出。一段式代码风格一段式代码风格n虽然可以把下一个形状的存储单元和输出
49、都写在同一段代码中虽然可以把下一个形状的存储单元和输出都写在同一段代码中,但尽能够防止这样的写法,由于很容易出错。,但尽能够防止这样的写法,由于很容易出错。n思索一下这段带使能信号的思索一下这段带使能信号的D触发器代码。触发器代码。architecture one_seg_arch of dff_en is beginprocess(clk, reset)beginif (reset=1) then q =0;elsif (clkevent and clk=1) thenif (en=1) then q = d;end if;end if;end process;end one_seg_arc
50、h;n在在elsif里面多加了一行里面多加了一行if (en=1),我们可以解释为,当在,我们可以解释为,当在时钟的上升沿到来的时候,假设时钟的上升沿到来的时候,假设en=1,那么,那么q=d。短少的。短少的else语句隐含着当语句隐含着当en不等于不等于1时,时,q的值要坚持。的值要坚持。 一段式代码风格一段式代码风格n再思索一下再思索一下T触发器的代码。触发器的代码。architecture one_seg_arch of tff issignal q_reg: std_logic; beginprocess(clk, reset)beginif (reset=1) then q_reg
51、= 0;elsif (clkevent and clk=1) thenif (t=1) then q_reg = not q_reg;end if;end if;end process; q = q_reg;end one_seg_arch;n这里的内部信号这里的内部信号q_reg代表着触发器的输出。代表着触发器的输出。“q_reg = not q_reg;这句一眼看上去很奇异,其实它可以解释为:左边的这句一眼看上去很奇异,其实它可以解释为:左边的是新的值是新的值 结果为结果为not q_reg ,右边的是当前值,右边的是当前值 q_reg 。一段式代码风格一段式代码风格n思索一下自在运转的二
52、进制计数器,下面是一段错误的一段式思索一下自在运转的二进制计数器,下面是一段错误的一段式代码。代码。architecture not_work_one_seg_glitch_archof binary_counter4_pulse issignal r_reg: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_reg + 1;if (r_reg = 1111) then max_pulse = 1;els
53、e max_pulse = 0;end if;end if;end process; q = std_logic_vector(r_reg);end not_work_one_seg_glitch_arch;一段式代码风格一段式代码风格n错误的缘由是错误的缘由是if (r_reg = 1111) then max_pulse = 1;else max_pulse = 0;end if; 这段代码在输出端多添加了一个缓冲,输出结果会有这段代码在输出端多添加了一个缓冲,输出结果会有一个时钟的延时。其综合出来的结果如下图。一个时钟的延时。其综合出来的结果如下图。这个不可以有一段式代码风格一段式代码风
54、格n修正的方法是把输出逻辑在进程中移除出去。修正的方法是把输出逻辑在进程中移除出去。architecture work_one_seg_glitch_archof binary_counter4_pulse issignal r_reg: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_reg + 1;end if;end process; q = std_logic_vector(r_reg); max
55、_pulse = 1 when r_reg = 1111 else 0;end work_one_seg_glitch_arch;一段式代码风格一段式代码风格n再举一个例子再举一个例子可编程的计数器可编程的计数器architecture not_work_one_arch of prog_counter issignal r_reg: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_reg + 1;if
56、(r_reg = unsigned(m) then r_reg0);end if;end if;end process; q = std_logic_vector(r_reg);end not_work_one_arch;n这个计数器并没有按照预期的目的任务,由于里面有一个信号这个计数器并没有按照预期的目的任务,由于里面有一个信号直到进程的终了才会更新。直到进程的终了才会更新。一段式代码风格一段式代码风格n由于由于r_reg在在r_reg = r_reg + 1这句执行后,还没有来得及更这句执行后,还没有来得及更新,我们就用它来进展新,我们就用它来进展“r_reg = unsigned(m)比
57、较,这个是比较,这个是旧的值,这样设计出来的计数器会比预设的多一个数。例如旧的值,这样设计出来的计数器会比预设的多一个数。例如本来想设计本来想设计8进制的,如今就变成进制的,如今就变成9进制了进制了n为了修正,我们把自增的操作移到进程外面。为了修正,我们把自增的操作移到进程外面。architecture work_one_arch of prog_counter issignal r_reg: unsigned(3 downto 0);signal r_inc: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) thenif (r_inc = unsigned(m) then r_reg 0);else r_reg = r_inc;end if;end if;end process; r_inc = r_reg + 1; q = std_logic_vector(r_reg);end work_one_arch;在时序电路描
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度执业兽医题库含完整答案详解(夺冠系列)
- 项目3 名片翻译与英汉翻译技巧之词义的选择
- 透析患者肌肉萎缩护理
- 产品测试与质量控制流程指南
- 金融产品服务要求承诺书9篇范文
- 医疗卫生系统廉政风险点排查及防控措施
- 2024-2025学年度执业药师真题含答案详解(新)
- 2024-2025学年度专升本综合提升测试卷附答案详解【培优A卷】
- 2024-2025学年度中医执业医师考前冲刺练习附完整答案详解【名师系列】
- 2024-2025学年冶金工业技能鉴定题库试题(含答案详解)
- 质量风险隐患自查整治清单(房建项目)
- 苏富比拍卖合同范本
- GB/T 41762.1-2025纤维增强塑料复合材料层合板厚度方向性能的测定第1部分:直接拉伸和压缩试验
- 2025年事业单位工勤技能-河北-河北防疫员二级(技师)历年参考题库含答案解析
- 《大学生心理健康十六讲(第3版)》全套教学课件
- 九连环解法教学课件
- 成品包装管理办法
- 博士申请职业目标个人自述范文
- PCS-985发变组保护培训课件
- 中医康复宣传
- 尾矿综合利用项目协议书
评论
0/150
提交评论