Я пытаюсь счетчик, который дает мне upcounts следующим образом? - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь сделать счетчик, который зависит от сигнала. Сигнал высокий для двух циклов и низкий для следующих двух, и это продолжается до конца. Во время высокого импульса отсчет должен начинаться с 0, 1. Когда пульс низкий, счет равен 'x, а со следующего максимума он продолжается от 2, 3, затем снова' x в течение двух циклов (повышается только при высоком импульсе), а затем снова 4, 5. Я новичок в Verilog, и это назначение.

Когда я сделал следующий код, я всегда получаю счет 1 2 x 1 2 x. Любая помощь?

always@(posedge clk or posedge rst)
If(rst)
Count <= 0;
else 
Count <= signal; 

assign signal  = pulse ? Count + 1: 'x; 

Я получаю 1 2 x x1 2 x x вместо. 1 2 x x 3 4 x x 5 6 x x и т. Д. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Когда вы назначите сигнал для x, счетчик получит это значение в следующем тактовом цикле. Затем, когда импульс становится высоким и сигнал становится известным, он примет х означает ноль и добавит к нему единицу, так что выходной будет один. Тогда на следующем цикле выхода будет два. Что вам нужно сделать, это сохранить состояние, а не сбрасывать его. Попробуйте добавить if (pulse) до count <= signal.

0 голосов
/ 02 сентября 2018

Вам просто нужно расширить регистр подсчета. Прямо сейчас, это только один бит, поэтому он переворачивается, как только вы добираетесь до (1 + 1 =) 2. Если вы сделаете его шире, он сможет сохранить состояние.

...