始终块的verilog语法错误

时间:2014-04-26 08:59:33

标签: verilog

我是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;在我的最上层模块之外的顶部被定义为整数计数器;

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在顺序执行的if..else块中不允许使用block。

您可以尝试的一种方法是: @(negedge sw [0],posedge key [2])

这将触发上述两个信号的任何变化,但它只会检测到一个变化。

看起来你想在sw [9:5] == 5' b00100时启用计数器 为什么不尝试在这里设置一个标志,然后使用一个始终@flag块来实现运行计数器。