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

问题描述 投票:1回答:1

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

random verilog test-bench
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.