时序电路的ⅤHDL设计 时序电路的结构与特点 p.552图7-37 存当状态出正 时序电路的信号变化特点: 同步时序电路以时钟信号为驱动:电路内部信号的变化 (或输出信号的变化)只发生在特定的时钟边沿:其他时刻 输入信号的变化对电路不产生影响; 要点:执行条件的控制; 时钟边沿的检测 执行条件的控制 采用进程描述可以有效控制执行条件,若进程以时钟信 号(clk)为唯一敏感信号,则只有当时钟信号变化时,进程 才执行;在其他时刻,任何输入信号的变化对电路(进程) 不起作用 时钟边沿的检测 为了确保电路状态只在时钟的特定边沿(上升/下降)发 生变化,需要对时钟边沿进行检测
时序电路的 VHDL 设计 时序电路的结构与特点 p.552 图 7-37 时序电路的信号变化特点: 同步时序电路以时钟信号为驱动;电路内部信号的变化 (或输出信号的变化)只发生在特定的时钟边沿;其他时刻 输入信号的变化对电路不产生影响; 要点:执行条件的控制; 时钟边沿的检测; 执行条件的控制 采用进程描述可以有效控制执行条件,若进程以时钟信 号(clk)为唯一敏感信号,则只有当时钟信号变化时,进程 才执行;在其他时刻,任何输入信号的变化对电路(进程) 不起作用; 时钟边沿的检测 为了确保电路状态只在时钟的特定边沿(上升/下降)发 生变化,需要对时钟边沿进行检测;
VHDL通常采用属性语句检测时钟边沿; 与时钟有关的属性语句: clk'event boolean 有变化时为tru clk'last value clk在变化之前的值 例:上升沿的检测: clk'event and clk='1 clk'event and clklast value=o 在由上升沿导致的进程执行时,上述两个表达式的值都 为tue;利用这种表达式构成条件语句中的关系判断,就可以 保障电路状态在特定边沿变化 注意:上述属性语句只能在子结构中应用(作为局部量); 例p643表738 D触发器的设计 方式1 use ieee std logic 1164. all port(d, clk: in std logic; q: out std logic); end koffi architecture beh of kdffl 进程采用wait语句,只在上升沿执行 wait until clk'event and clk='1
VHDL 通常采用属性语句检测时钟边沿; 与时钟有关的属性语句: clk'event boolean clk 有变化时为 true; clk'last_value clk 在变化之前的值; 例:上升沿的检测: clk'event and clk='1' ; clk'event and clk'last_value='0' ; 在由上升沿导致的进程执行时,上述两个表达式的值都 为 true;利用这种表达式构成条件语句中的关系判断,就可以 保障电路状态在特定边沿变化; 注意:上述属性语句只能在子结构中应用(作为局部量); 例 p.643 表 7-38 D 触发器的设计 方式 1 library ieee; use ieee.std_logic_1164.all; entity kdff1 is port ( d,clk: in std_logic; q: out std_logic); end kdff1; architecture beh of kdff1 is begin process --进程采用 wait 语句,只在上升沿执行; begin wait until clk'event and clk='1' ;
end process 方式2 architecture beh of kdff2 is process(clk)-进程采用敏感表,在上升/下降沿都执行; if clk'event and clk= Then q<=d;-赋值只在上升沿进行 else null end it end process: 例2p643表7-37 带复位端的D触发器的设计 library lee use ieee std logic 1164. all entity kdff2 is port(d, clk, clr: in std logic, ut std logic) end kdna architecture beh of kdff2 is process( clk, clr))-进程采用敏感表,执行的结果通过 -条件语句控制 if clra'l'then q<=o'; qn<= 复位信号优先于时钟 elsif clk event and clk='I'then q ot d end if end process
q<=d; end process; end beh; 方式 2 architecture beh of kdff2 is begin process(clk) --进程采用敏感表,在上升/下降沿都执行; begin if clk'event and clk='1' then q<=d; --赋值只在上升沿进行; else null; end if; end process; end beh; 例 2 p.643 表 7-37 带复位端的 D 触发器的设计 library ieee; use ieee.std_logic_1164.all; entity kdff2 is port ( d,clk,clr: in std_logic; q,qn: out std_logic); end kdff2; architecture beh of kdff2 is begin process (clk,clr) --进程采用敏感表,执行的结果通过 begin --条件语句控制; if clr='1' then q<='0' ;qn<='1'; --复位信号优先于时钟; elsif clk'event and clk='1' then q<=d; qn<= not d; end if; end process; end beh;
时序电路的基本单元设计 根据触发控制的不同,时序电路的基本单元主要有锁存 器( Latch)和触发器(fip-fop)两类 Latch锁存器:输出受时钟电平控制,在一段时间内可 受输入变化影响发生而变化;(电平控制) fip-fop触发器:输出只在时钟边沿时刻发生变化,输入 信号变化不能直接导致输出变化;(边沿控制) 目前数字集成电路中采用最多的时序单元器件为 D latch 和 D flip-flo 例p678表8-4 D latch的设计:在满足使能条件时将输入D传递给输出Q; library ieee use ieee std logic 1164 all entity klatch is port( d, clk: in std le g out std logic) end klatch architecture beh of klatch is process(clk, d) if clk='l'then q<=d end it end process end beh
时序电路的基本单元设计 根据触发控制的不同,时序电路的基本单元主要有锁存 器(Latch)和触发器(flip-flop)两类; Latch 锁存器:输出受时钟电平控制,在一段时间内可 受输入变化影响发生而变化;(电平控制) flip-flop 触发器:输出只在时钟边沿时刻发生变化,输入 信号变化不能直接导致输出变化;(边沿控制) 目前数字集成电路中采用最多的时序单元器件为 D latch 和 D flip-flop; 例 p.678 表 8-4 D latch 的设计:在满足使能条件时将输入 D 传递给输出 Q; library ieee; use ieee.std_logic_1164.all; entity kdlatch is port ( d,clk: in std_logic; q: out std_logic); end kdlatch; architecture beh of kdlatch is begin process(clk,d) begin if clk='1' then q<=d; end if; end process; end beh;
该电路中,d和clk的任何变化都会导致进程执行:在clk 为1的时间段内,d的变化就会导致q的立即变化; 与Dnip-nop的比较:p679表86 process( clk 'event and clk='l then q<=d end if end process 如果ck没有变化或不等于1,则d的变化不会导致q的变化 在p678680,还列出了 D latch的结构设计、带有异步置 位和复位功能的 D flip-flop的设计 Register寄存器 寄存器通常由多位触发器连接而成,通常可分为锁存寄存 器和移位寄存器两类 例p680表88 16位锁存寄存器设计: 带有时钟使能控制和输出三态控制; library ieee use ieeestd logic 1164.all; entity kregl6 is port( clk, clken, oe,clr: in std logic d in std logic vector(l to 16) q: out std logic vector(I to 16));
该电路中,d 和 clk 的任何变化都会导致进程执行;在 clk 为 1 的时间段内,d 的变化就会导致 q 的立即变化; 与 D flip-flop 的比较:p.679 表 8-6 process ( clk ) begin if clk'event and clk='1' then q<=d; end if ; end process ; 如果 clk 没有变化或不等于 1,则 d 的变化不会导致 q 的变化; 在 p.678—680,还列出了 D latch 的结构设计、带有异步置 位和复位功能的 D flip-flop 的设计; Register 寄存器 寄存器通常由多位触发器连接而成,通常可分为锁存寄存 器和移位寄存器两类; 例 p.680 表 8-8 16 位锁存寄存器设计: 带有时钟使能控制和输出三态控制; library ieee; use ieee.std_logic_1164.all; entity kreg16 is port ( clk,clken,oe,clr: in std_logic; d:in std_logic_vector(1 to 16); q: out std_logic_vector(1 to 16));