2016-11-21 5 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], обратная связь};' Вы назначаете 3-битное значение в 2-битный регистр. – toolic

+0

@toolic, вы знаете, что мне следует устанавливать? – Rain74

ответ

0

Поскольку вы просите мысли, а не исправление к коду (который не генерирует случайное число - точка 4), у меня есть несколько моментов:

1) данных представляет собой 2 бита выходной порт. Тем не менее, после перезагрузки, вы настраиваете его

data<= 4'hf; // 4 bits 

Это должно быть изменено на 2'b11

2) Как сказал Грег, вы должны изменить свой выходной порт для

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-битного номера. Вы можете понять, почему в качестве мысленного эксперимента.

 Смежные вопросы

  • Нет связанных вопросов^_^