我试图在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。任何帮助表示赞赏。
你的缩进是误导。以下是您的代码的解析方式:
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