单位随机数发生器
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
出于测试目的,我试图在 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