【问题标题】:Verilog Random Number GeneratorVerilog 随机数生成器
【发布时间】:2017-04-05 03:17:04
【问题描述】:
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 位随机数生成器,我不太确定从哪里开始,但这是我目前已经实现的。有人可以分享一下想法吗?

【问题讨论】:

  • output [1:0] data 应该是 output reg [1:0] data,因为 data 是在 always 块中分配的。

标签: numbers verilog generator


【解决方案1】:

由于您是在征求意见,而不是对代码进行更正(不会生成随机数 - 第 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 位寄存器。在这种情况下,您的信号的 MSB(即 data[1])将被截断。 您基本上可以将其更改为

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

您将拥有相同的功能。

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

查看模拟结果,您可以看到您的代码实际上并没有生成随机的 2 位数字,而是遵循一个清晰的模式。您的公式不适用于 2 位数字。您可以通过思想实验找出原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2011-01-16
    相关资源
    最近更新 更多