对于第二个问题 我在一般的时序图上看到 比如使能en或者rst等信号,都会在clk上升沿之前assert或者de-assert,这样在clk上升沿到来时,en或者rst已经稳定了。
我想知道的是,如果在时钟上升沿的瞬间(setup time内),使能信号en才有效,那么,下面两段代码会有不同吗?
我跑过...貌似都一样。。不知道有没有错。。。
我理解是,第一段代码是同步使能,由于en是在时钟上升沿才有效的,则当前D寄存器会认为en依然无效,下一个周期才读入数据。
第二段代码是异步使能,则D寄存器会读入在时钟上升沿前就稳定的data_in。。。
我隐约的感觉,好像使能信号和D寄存器读入数据有点不同? 是不是使能信号en不需要延时这种考虑?即当前有效了,就会对当前的D寄存器产生影响,而不是像数据一样被延时一个周期才考虑(无论同步异步,除非把使能信号直接输入另一个寄存器D2,再用D2的输入Q2来做使能)?
process(clk,en)
begin
if(clk`event and clk = '1') then
if(en) then
D <= data_in;
end if;
end if;
end
process(clk,en)
begin
if(en) then
if(clk`event and clk = '1') then
D <= data_in;
end if;
end if;
end
|