单位随机数发生器

Single bit random number generator

出于测试目的,我试图在 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

但是在模拟之后,我在 seed 中得到常数值 1,而 in 有 x。 感谢任何帮助。

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

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

您的代码永远不会到达 in 的赋值,因为您永远不会到达 forever 循环的末尾。由于您将 in 声明为 reg 并且您从未为 in 赋值,因此它保留其默认值 x.

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

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