关于数字IC设计中分频后的慢速时钟和以快时钟触发的信号的关系处理

转载请标明出处 https://blog.csdn.net/weixin_43685170 ,作者:HyunYew.

在一些双边沿接收发送数据的处理中,会以半频时钟为握手时钟,而内部采用快时钟(半频时钟的一倍)来处理信号。那么,握手时钟是半频的情况下,握手数据是经过快时钟处理的,这样会有错误的情况出现。如下图,当信号a的触发条件为快时钟的上升沿,而片外握手设备也只认握手时钟的上升沿时,数据就会出现错误。
关于数字IC设计中分频后的慢速时钟和以快时钟触发的信号的关系处理
快时钟的上升沿既可以对应慢时钟的上升沿也可以对应慢时钟的下降沿,则a的变化既可能发生在慢时钟的上升沿也可能发生在下降沿,若a是一个片外握手设备的kick start信号,而此kick start信号只能在上升沿变化(当定义了一个完整的时钟周期为“高半周期+低半周期”)。当 case2 时 ,片外握手设备可以 正确 地识别a信号。当 case1 时,片外握手信号在a当前变化时刻 无法 识别a信号的变化。

因此,要让信号a也能识别慢时钟的上升沿

reg a_dly;
[email protected](posedge clk_fast or negedge rst_)
begin
if(!rst_)
begin
        a_dly <= 1'b0;
end
else begin
        a_dly <= a;
end
end

wire a_edge = a ^ a_dly;

wire a_out = a_edge & !clk_slow ? a_dly:
             a;

这样,当a在慢时钟下降沿变化时,会被推到下一个上升沿变化。(注意如果有其他行为在信号a起来时变化,则也要进行推迟)

关于数字IC设计中分频后的慢速时钟和以快时钟触发的信号的关系处理