我想编写一个简单的任意范围的随机十进制数生成器。
我用 Verilog 编写了以下代码:
module randnumgen (clock, r);
input clock;
integer n;
output r;
always @(posedge clock) begin
n <= 0 + {$urandom} % (10 - 0) ;
end
assign r = n;
endmodule
和测试台:
`timescale 1ns / 1ps
module randnumgen_tb;
// Inputs
reg clock;
// Outputs
wire r;
// Instantiate the Unit Under Test (UUT)
randnumgen uut (.clock,.r);
initial begin
// Initialize Inputs
clock = 1'b1;
end
always #1 clock = ~clock;
endmodule
不幸的是,结果(输出
r
)仍然表现为二进制数。在我看来,我在某处输入了错误的数据类型(wire、integer等)。请帮助我纠正错误。
您仅在 bolhe 顶级 tb 和 randnumgen 中将
r
声明为 1 位宽信号。更改为这种风格的端口声明:
module randnumgen (input clock, output int r);
int n;
...
endmodule
module randnumgen_tb;
// Inputs
logic clock;
// Outputs
int r;
确保您的所有文件都有
.sv
扩展名。另外,您应该使用 $urandom_range(maxval,minval)
生成一个范围内的随机数。