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