2016-03-07 2 views
1

Я пытаюсь изучить verilog, выполнив C++ раньше. В качестве учебного упражнения, которое я пытаюсь включить, включите светодиод после просмотра 10 нажатий кнопок. У меня также есть дополнительная кнопка сброса, которая снова запускает 10 счетчиков. Что бы я ни старался, я не могу его скомпилировать. Может кто-то указать мне верное направление?Verilog if statement assign error

Мой код:

module led_counter (button, nreset, led); 

input button, nreset; 
output led; 
reg counter[4:0];   // to hold the current count 

always @ (negedge nreset) begin 
    counter <= 0;   // Just reset counter 
end 

always @ (negedge button) begin 

    if (counter == 10) begin // see if the button has been pressed 10 times 
     led_state <= 1;  // turn the led on 
    end 

    else begin 
    led_state <= 0;   // the led is off 
    counter <= counter + 1; 
    end 

end 

assign led = led_state; 

endmodule 

ответ

3

led_state не объявлена, она должна быть рег.

Чтобы иметь что-то более сжатое, я бы также перегруппировал два процесса в один. Это сделало бы его похожим на синхронный процесс с асинхронным сбросом, т. Е. Вызванным часами и сброшенным по падению фронта сброса.

always @ (posedge button or negedge nreset) begin 
    if(~nreset)  //reset counter when nreset is low 
     counter <= 0; 
    else begin  //do something on posedge of button 
     //Do something// 
end //end process 

Было бы также более вероятно, что оно будет синтезировано.

+0

Спасибо за комментарий @krouitch - это помогло. Я не думаю, что это совсем то, что я ищу, поскольку вход nreset на самом деле является фиксирующей кнопкой, а не кнопкой. Поэтому я просто хотел обнаружить края. Я верю, что кнопка nreset с фиксированным низким значением этого кода всегда будет сбросить счетчик, даже если начальная кнопка кнопки запускает его. Может ли он быть изменен для удовлетворения этих новых требований? – Martin