verilog - Quartus Prime 在 $error 命令中抛出错误
问题描述
我在使用以下代码时遇到问题,如果我的输入数量不能被我的输出数量整除,它应该只会在编译时引发错误。
module multiplexer #(parameter N_INPUTS, parameter N_OUTPUTS) (in, out, select);
generate
if (N_INPUTS % N_OUTPUTS != 0) begin
$error("%m ** Illegal Parameter ** NUMBER OF INPUTS(%d) does not divide into NUMBER OF OUTPUTS(%d)", N_INPUTS, N_OUTPUTS);
end
endgenerate
input wire [N_INPUTS-1:0] in;
input wire [$clog2(N_INPUTS/N_OUTPUTS) - 1:0] select;
output wire [N_OUTPUTS-1:0] out;
always @ (select, in) begin
out = in[(select + 1) * N_OUTPUTS - 1:(select + 1) * N_OUTPUTS - N_OUTPUTS];
end
endmodule
但是当我进行分析时,Quartus 不断向我抛出这个错误:
Error (10170): Verilog HDL syntax error at multiplexer.v(5) near text: "$error"; expecting "end". Check for and fix any syntax errors that appear immediately before or at the specified keyword. The Intel FPGA Knowledge Database contains many articles with specific details on how to resolve this error. Visit the Knowledge Database at https://www.altera.com/support/support-resources/knowledge-base/search.html and search for this specific error message number.
我开始怀疑 Quartus 的编译器是否支持 $error 命令(这是我第一次使用它)。
我将非常感谢有关该主题的任何帮助,因为我仍然是该领域的初学者:)
解决方案
关闭您的 Quartus 项目并在.qsf
文件中,将指向您的multiplexer
模块 verilog 文件的行从:
set_global_assignment -name VERILOG_FILE multiplexer.v
至:
set_global_assignment -name SYSTEMVERILOG_FILE multiplexer.v
编辑:
还设置:
set_global_assignment -name VERILOG_INPUT_VERSION SYSTEMVERILOG_2009
编辑2:
这是 SystemVerilog 2009 的特性,Quartus Prime Standard 和 Quartus Prime Lite 不支持 VHDL 2008 或 SystemVerilog 2009。
Quartus Prime Pro 19.4:
Quartus Prime 标准 19.1:
推荐阅读
- javascript - 使用唯一标识符将用户数据存储在 Firebase 中
- mysql - db2 中时间戳在时间格式中的差异,例如 hh:mm:ss
- asp.net-mvc - 如何在 Excel 中指定 API 密钥名称 - 只有在提供 Web API 密钥名称时才能指定 Web API 密钥
- android - soong/android.bp 构建是如何工作的?
- java - 使用 Reactor Core Java 定期向浏览器发送长时间执行任务的状态
- c - C中的寄存器数组
- junit - 运行 Cucumber-JVM 与 Cucumber runner(Junit) 的区别
- java - 一般来说,有没有办法为 Eclipse、Maven 或 Java 设置套接字超时?
- javascript - 将具有重复键/值对的对象组合起来
- python - Apache Airflow:未读取 Gunicorn 配置文件?