Verilog中的单比特随机数发生器

时间:2017-01-27 11:20:05

标签: random verilog test-bench

我试图在Verilog的每个时钟周期生成单比特随机数用于测试目的。我在testbench模块中这样做。这是代码;

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。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

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

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