Verilog随机数发生器

时间:2016-11-21 16:38:05

标签: numbers verilog generator

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位随机数生成器,我不太清楚从哪里开始,但这是我到目前为止实现的。任何人都可以分享任何想法吗?

1 个答案:

答案 0 :(得分:0)

既然你要求思考而不是修改代码(不产生随机数 - 第4点),我有几点:

1)数据是2位输出端口。重置后,你正在设置它

data<= 4'hf; // 4 bits

这应该更改为 2'b11

2)正如Greg所说,您应该将输出端口更改为

output reg [1:0] data

当您对数据进行程序性分配时,它必须是注册而不是电线。

3)您应该了解以下代码:

data <= {data[1:0], feedback} ;

您实际上是将一个3位信号分配给一个2位寄存器。在这种情况下,信号的MSB(即数据[1])将被截断。 您基本上可以将其更改为

data <= {data[0], feedback} ;

你将拥有相同的功能。

4)我创建了一个代码的工作示例:https://www.edaplayground.com/x/3YgQ

查看模拟结果,您可以看到您的代码实际上并不生成随机的2位数字,而是遵循清晰的模式。您的公式不适用于2位数字。你可以弄清楚为什么作为一个思想实验。