一个延后半个周期输出的D触发器的分析
时间:10-02
整理:3721RD
点击:
library ieee;use ieee.std_logic_1164.all;entity d_ffp is port(clk,d:in std_logic; q:out std_logic);end d_ffp;architecture one of d_ffp is signal q1: std_logic; begin process(cl) begin if clk'event and clk='1' then q1<=d; end if; q<=q1; end process;end architecture one;仿真后可发现其信号的输出延后了半个时钟周期,这样的结果是由信号的赋值特性造成的。当时钟发生变化时,进程启动,假设这时时钟上升沿到来,便将d的值赋给q1,但由于信号的赋值是在进程结束时才完成的,因此,当执行到语句“q<=q1"时,q1的值还不是等于d,因此q的值也就得不到更新。到了时钟下降沿到来时,clk再次变化,进程再次启动,由于此时不是时钟上升沿,所以不执行语句”q1<=d"而执行“q<q1",把上次q1得到的新值赋给q,因此,从波形图上可以看到q是在时钟下降沿到来时更新的。要使q在上升沿到来时更新,有两种办法,一种就是把语句“q<q1"置于进程之外,另一种,就是讲q1定义为变量。