首页 > 解决方案 > 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 命令(这是我第一次使用它)。

我将非常感谢有关该主题的任何帮助,因为我仍然是该领域的初学者:)

标签: verilogfpgasystem-verilogquartusintel-fpga

解决方案


关闭您的 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:

在此处输入图像描述


推荐阅读