Verilog随机数发生器
问题描述:
module random_num_gen(
input clk,
input rst_n,
output [1:0] data
);
wire feedback = data[1]^data[0] ;
always @(posedge clk or negedge rst_n)
if (~rst_n)
data <= 4'hf;
else
data <= {data[1:0], feedback} ;
endmodule
嗨,我是新的Verilog,并试图实现一个2位随机数发生器,我不太确定从哪里开始,但这是我迄今实施的。任何人可以分享任何想法?Verilog随机数发生器
答
因为你所要求的想法,而不是修正代码(不产生一个随机数 - 4点),我有几点:
1)数据是2位输出端口。然而,复位后,要设置其
data<= 4'hf; // 4 bits
这应改为为2'b11
2)正如格雷格说,你应该改变你的输出端口
output reg [1:0] data
当您正在对数据进行程序性分配时,它必须是reg而不是电线。
3)你应该明白,用下面的代码:
data <= {data[1:0], feedback} ;
你基本上是分配一个3位信号,以2位寄存器。在这种情况下,信号的最高位(即数据[1])将被截断。 你基本上可以将其更改为
data <= {data[0], feedback} ;
,你会具有相同的功能。
4)我创建你的代码的工作示例:https://www.edaplayground.com/x/3YgQ
看着模拟结果,你可以看到你的代码实际上并不产生一个随机2位数字,而是遵循清晰的图案。您的公式不适用于2位数字。你可以找出为什么作为思想实验。
创建一个测试台并运行一个模拟来查看随机分布是否符合您的期望。 – toolic
这看起来很奇怪:'data toolic
@toolic你知道我应该把它设置为? – Rain74