Непонятное падежное выражение с макросами - PullRequest
0 голосов
/ 09 февраля 2020

При подготовке к экзамену я хочу go поверх некоторого кода Verilog, и я использую https://www.jdoodle.com/ в качестве компилятора. Но по какой-то причине дела выдают ошибки.

jdoodle.v:20: syntax error
jdoodle.v:20: error: Incomprehensible case expression.
jdoodle.v:21: syntax error
jdoodle.v:21: error: Incomprehensible case expression.
jdoodle.v:22: syntax error
jdoodle.v:22: error: Incomprehensible case expression.
jdoodle.v:23: syntax error
jdoodle.v:23: error: Incomprehensible case expression.
jdoodle.v:24: syntax error
jdoodle.v:24: error: Incomprehensible case expression.

module ALU (
    input wire [2:0]OPCODE,
    input wire [31:0]A,
                     B,
    output reg [31:0]RESULT
);

`define ADD 0;
`define SUB 1;
`define MULT 2;
`define DIV 3;
`define MOD 4;

function [31:0] calculate (
    input [31:0] A,
    input [31:0] B,
    input [2:0] OPCODE
); 
    case (OPCODE)
        `ADD: calculate = A + B;
        `SUB: calculate = A - B;
        `MULT: calculate = A * B;
        `DIV: calculate = A / B;
        `MOD: calculate = A % B;
    endcase
endfunction

always @(A or B or OPCODE)
    RESULT = calculate(A, B, OPCODE);

endmodule

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 09 февраля 2020

Удалите точку с запятой в конце вашего определения.

Вы определяете ADD как 0;
Таким образом, ваш код становится:

case (OPCODE)
    0; : calculate = A + B;
    1; : calculate = A - B;
    2; : calculate = A * B;
    3; : calculate = A / B;
    4; : calculate = A % B;
endcase
...