我是verilog的新手。我不知道我的代码到底出了什么问题。程序在0H到16H的给定时刻显示计数器值。
key[2]
是增加计数器的按钮,sw[0]
重置计数器。
else if(sw[9:5]==5'b00100)
begin
counter = 0;
hex2 = 7'b1000000;
always@(negedge sw[0],posedge key[2])
begin
if(~sw[0]) counter = 0;
else if(key[2])begin
if(counter == 16'hFFFF) counter = 0;
else counter = counter +1;
end
end
end
我得到的错误是文字附近的Verilog HDL语法"总是&#34 ;;期待&#34 ;;",或" @",或"结束"或标识符("始终"是保留关键字),或系统任务,或" {"或顺序语句。
my counter = 0;
在我的最上层模块之外的顶部被定义为整数计数器;
非常感谢您的帮助。
答案 0 :(得分:0)
在顺序执行的if..else块中不允许使用block。
您可以尝试的一种方法是: @(negedge sw [0],posedge key [2])
这将触发上述两个信号的任何变化,但它只会检测到一个变化。
看起来你想在sw [9:5] == 5' b00100时启用计数器 为什么不尝试在这里设置一个标志,然后使用一个始终@flag块来实现运行计数器。