module register(input [7:0] inp, input load,clk,clr, output reg [7:0] out);
always@(posedge clk or posedge clr) begin
if(clr)
out <= 8'b00000000;
else if(load)
out<= inp;
end
endmodule
module register_tb;
reg [7:0] inp;
reg load,clk,clr;
wire [7:0] out;
integer count1,count2;
register store(inp,load,clk,clr,out);
initial begin
clk = 1'b0;
repeat(2**10) #10 clk = {$random};
end
initial begin
for(count1 = 0;count1<2**8;count1 = count1 + 1) begin
for(count2 = 0;count2<4;count2 = count2 + 1) begin
{clr,load} = count2;
{inp} = count1;
#10;
end
end
end
endmodule
我正在尝试制作一个 4 位寄存器,但我遇到了这个错误。我无法理解为什么我的代码总是输出零。我尝试调试它,但找不到错误。
正如你的波形所示,
out
并不总是 0;它确实改变了价值。您设计的代码看起来不错,但您的测试平台代码没有遵循同步逻辑的良好实践。这就是为什么你会得到一个奇怪的
out
波形。我建议使用占空比为 50% 的时钟信号,并使用非阻塞分配来驱动时钟的所有其他输入,如下所示:
波浪:
你可以清楚地看到
out
从0到5的变化。