寄存器reg延迟问题

2019-07-16 00:22发布

   各位看官好,最近小弟遇到了一个寄存器延迟的问题,虽然不是特别重要,但还是想弄明白,请各位看官指导。具体如下:    对于一个只有clk、reset、data_in、data_out的模,当我们用如下代码赋值时会产生一个clk的延迟,即仿真软件会将posedge clk前一时刻的data_in赋值给data_out:
    always @(posedge clk) begin
         if(reset) data_out<=0;
         else data_out<=data_in;
    end
    然而如果在代码中增加一个clk二分频时钟clk_2,并用该信号来驱动data_out,则不会产生延迟,即仿真软件会把posedge clk_2后一时刻的data_in赋给data_out:
    always @(posedge clk) begin
         if(reset) clk_2<=0;
         else clk_2<=~clk_2;
    end
    always @(posedge clk_2) begin
         if(reset) data_out<=0;
         else data_out<=data_in;
    end
    问先问了下公司的一个前辈,他说有可能是使用clk_2会产生亚稳态,于是我用了一个reg来对clk_2打一个节拍产生clk_2_d,并用该时钟来触发data_out,但问题依旧。请问各位看官,是我处理亚稳态的方法不对,还是上述问题并不是由亚稳态引起的?如果不是亚稳态,那又是什么问题引起的?
注:上述例子是为了方便说明进行的简化,实际上还有一些其他的信号。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。