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