在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
答案 0 :(得分:0)
这个问题似乎与您的时钟模块无关,而是基于该代码。
假设您不希望这是可合成的。理想情况下,您在一个流程中定义了reg
或logic
值。
注意,如果您的模拟器支持它,我会用绝对值定义时间,即#1.4ns
,以便延迟。
initial begin
clk <= 1'b0;
forever begin
#1.4ns clk <= ~clk ;
end
end