1

我正在尝试在 Verilog 中的每个时钟周期上生成一位随机数以进行测试。我在测试平台模块中这样做。这是代码;

module tb;

// Inputs
reg clk;
reg in;

// Outputs
wire x;

// Instantiate the Unit Under Test (UUT)
single_bit uut (
    .clk(clk), 
    .in(in), 
    .x(x)
);

integer seed=1;
initial
 begin
  clk=0;
  forever
    #5 clk=!clk;
        in= $random(seed);
end

endmodule

但是在模拟之后,我得到了 1 in 的常数值seed,并且in有 x。任何帮助表示赞赏。

4

1 回答 1

2

您的缩进具有误导性。以下是您的代码的解析方式:

initial begin
    clk=0;
    forever #5 clk=!clk;
    in= $random(seed);
end

您的代码永远不会到达分配给的位置,in因为您永远不会到达forever循环的结尾。由于您声明in为 areg并且您从未为 赋值in,因此它保留其默认值 x。

to 的赋值in应该在forever循环内。in这会在每个时钟沿生成 0 和 1 的随机流:

initial begin
    clk=0;
    forever begin
        #5 clk=!clk;
        in = $random(seed);
    end
end
于 2017-01-27T13:24:55.977 回答