1

我试图编译代码

module counter(
    input clk,
    input upSignal,
    input downSignal,
    output [7:0] count
   );
        always_ff @(posedge clk) begin
          if (upSignal)
              count <= count + 1;
          else if (downSignal)
              count <= count - 1;
        end
    endmodule

但我得到了错误

Error (10170): Verilog HDL syntax error at counter.v(7) near text "@"; expecting ".", or "("

这是什么意思?

4

3 回答 3

7

Quartus 确实支持一些 systemverilog。有关详细信息,请参阅此链接 > Quartus 帮助

要让 quartus 自动识别您正在使用系统 verilog,您需要调用您的文件 something.sv

所以在这种情况下,可能是counter.sv

如果您的文件名为counter.v,那么您将收到错误消息。我可以确认确实可以使用 Quartus II v10.0 进行编译。

我建议将您的模块输出端口更改为 reg,Quartus 没有抱怨,但模拟器会。

output reg [7:0] count

让我们知道您的身体情况如何。

干杯

于 2010-10-26T18:57:06.940 回答
1

我认为乔治是对的(你好乔治!想在这里见到你),文件被解释为 Verilog(不是 SystemVerilog),所以它不理解 always_ff。

关于输出值的类型,我更喜欢使用 SystemVerilog 中的逻辑。它的效果是相同的,但它摆脱了“它声明的'reg'因此它是一个寄存器”的思想,可以抓住人们。

此外,您收到该特定错误消息的原因是因为它不知道 always_ff 是什么,它假定它是模块/接口/函数的名称。一个模块可以有一个以“.”开头的端口映射,其他所有内容都需要一个左括号。

于 2010-11-08T13:12:53.440 回答
1

此代码的另一个问题。

count 变量是从程序块 (always_ff) 分配的,因此需要将 count 变量声明为变量类型,通常是此 SystemVerilog 代码的逻辑类型。声明应包括:输出逻辑[7:0] 计数

于 2012-06-27T20:52:18.807 回答