2016-11-21 249 views
-1
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随机数发生器

+0

创建一个测试台并运行一个模拟来查看随机分布是否符合您的期望。 – toolic

+0

这看起来很奇怪:'data <= {data [1:0],feedback};'给一个2位寄存器分配一个3位值。 – toolic

+0

@toolic你知道我应该把它设置为? – Rain74

回答

0

因为你所要求的想法,而不是修正代码(不产生一个随机数 - 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位数字。你可以找出为什么作为思想实验。