Quartus Prime выдает ошибку по команде $ error - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема со следующим кодом, который должен просто выдавать ошибку при компиляции, если количество входов не делится на количество выходов.

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 (я использую ее впервые).

Я хотел бы очень признателен за любую помощь по этому вопросу, так как я все еще новичок в области:)

Ответы [ 3 ]

3 голосов
/ 23 апреля 2020

Закройте проект Quartus и в файле .qsf измените строку, указывающую на файл verilog модуля multiplexer, с:

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:

enter image description here

Quartus Prime Standard 19.1:

enter image description here

1 голос
/ 23 апреля 2020

Я обнаружил проблему ... деньги ... Если вы посмотрите на следующее изображение, вы заметите, что если вы бедны, вы не можете использовать последнюю версию SystemVerilog в облегченной и стандартной версиях Quartus Prime. enter image description here

Ну, это все объясняет. Если кто-то в качестве другого решения выдает ошибку во время компиляции, которая выглядит лучше, чем это, пожалуйста, скажите мне:

generate
if (CONDITION > MAX_ALLOWED /* your condition check */ ) begin
    illegal_parameter_condition_triggered_will_instantiate_an non_existing_module();
end
endgenerate

Примечание: это было взято из https://electronics.stackexchange.com/a/71226

0 голосов
/ 23 апреля 2020

Я вижу другие ошибки:

  • вы проводите провод out из процедурного блока (ваш always блок). Вы не можете сделать это, вы можете только управлять переменной. ie out должна быть переменной.

  • Ваш код в квадратных скобках недопустим. Вам нужно будет использовать один из операторов +: или -:. См. этот ответ здесь .

...