我尝试编译代码
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 "("
答案 0 :(得分:7)
Quartus确实支持一些systemverilog。有关详细信息,请参阅此链接&gt; Quartus Help
对于quartus自动识别您正在使用系统verilog,您需要调用您的文件something.sv
所以在这种情况下,可能是 counter.sv
如果您的文件名为 counter.v ,则会出现错误。我可以确认确实是用Quartus II v10.0编译的。
我建议将模块输出端口更改为reg,Quartus没有抱怨,但模拟器会。
output reg [7:0] count
告诉我们你是如何上场的。
干杯
答案 1 :(得分:1)
我认为George是对的(你好乔治!很高兴见到你),这个文件被解释为Verilog(不是SystemVerilog),所以它不理解always_ff。
在输出值的类型上,我更喜欢在SystemVerilog中使用逻辑。它的效果是相同的,但是它远离了“它声明的'reg'因此它是一个注册'的想法,可以把人赶走。
此外,您收到该特定错误消息的原因是因为它不知道always_ff是什么,它假设它是模块/接口/函数的名称。一个模块可以有一个可以以'。'开头的端口映射,其他所有东西都需要一个开放的括号。
答案 2 :(得分:0)
此代码的另一个问题。
count变量是从过程块(always_ff)分配的,因此count变量需要声明为变量类型,通常是此SystemVerilog代码的逻辑类型。声明应包括:输出逻辑 [7:0]计数