初始块在verilog中延迟

时间:2014-01-22 15:50:50

标签: mips verilog clock

在Verilog中实现单循环mips时。 PC初始化为地址0 然后在时钟的posedge处将其值更新为PC + 1,该时钟也被初始化为0.

问题在于模拟,地址0的指令只需要半个时钟周期,然后PC增加4,然后第二个指令进入处理器。

simulation screenshot http://imagizer.imageshack.us/v2/800x600q90/36/0cxn.jpg

在初始化PC之前,不将时钟初始化为1或添加延迟都解决了问题

这是我的时钟模块

`timescale 1ps / 1ps

module clk_gen( clk );
  output reg clk ;
  initial begin
    clk<=0;
  end

  always begin 
    #1400 clk=!clk;
  end
endmodule

PC模块:

module PC(inPC, Address, clk); 
  input      [31:0] inPC; 
  input             clk; 
  output reg [31:0] Address;   

  initial begin
    Address=32'd0; 
  end 

  always @( posedge clk) begin
    Address <= inPC;
  end
endmodule

1 个答案:

答案 0 :(得分:0)

这个问题似乎与您的时钟模块无关,而是基于该代码。

假设您不希望这是可合成的。理想情况下,您在一个流程中定义了reglogic值。

注意,如果您的模拟器支持它,我会用绝对值定义时间,即#1.4ns,以便延迟。

initial begin 
  clk <= 1'b0;
  forever begin
    #1.4ns clk <= ~clk ;
  end
end