Quartus Prime中Verilog代码编译语法错误求助
问题解决:Verilog代码语法错误修复
核心错误分析
从代码逻辑来看,引发语法错误的关键问题有两个:
reg类型变量无法赋值高阻态(1'bz)reg是存储型数据类型,仅支持存储0、1或未知态(x);高阻态(z)属于线网型(如wire)的特性,不能直接赋值给reg变量。- Quartus Prime对SystemVerilog语法的兼容性
代码中使用的int属于SystemVerilog专属类型,若未在Quartus中开启SystemVerilog支持,会触发语法报错。
修复后的代码
module conditional_op(); // 若需兼容Verilog-2001标准,改用integer替代SystemVerilog的int类型 integer result; integer a = 9; integer b = 31; // 将原reg类型改为wire以支持高阻态赋值 wire c; initial begin #1; result = (a == 9) ? 1:0; $display("result=%0d",result); #1; result = ((a+b) == 40) ? 1:0; $display("result=%0d",result); #1; result = (b == 30) ? 678 : -99; $display("result=%0d",result); #1; assign c = (b ==31)? 1'bz : 1'b0; $display("c=%b",c); end endmodule
额外配置建议(若需保留SystemVerilog特性)
如果想继续使用int等SystemVerilog语法,需在Quartus中开启对应支持:
- 进入工程设置界面
- 找到 Settings > Compiler Settings > HDL Language Options
- 将
Verilog Input选项设置为SystemVerilog
替代方案(保留reg类型)
如果必须用reg存储c的值,可移除高阻态赋值,改用逻辑值替代:
reg c = 0; // ... #1; c = (b ==31)? 1'b1 : 1'b0;
内容的提问来源于stack exchange,提问作者Ravi teja Garimella
相关产品推荐
相关产品推荐

