Можно ли использовать тип, определенный с помощью "typedef enum" в объявлении порта модуля? - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь понять, как typedef и enum работают в SystemVerilog и, в частности, возможно ли использовать «пользовательский» тип данных в объявлении порта модуля.

До сих пор я смог создать пользовательский тип данных в пакете, вот он:

typedef enum logic[2:0] {
        add_conf = 3'b000,
        sub_conf = 3'b001,
        and_conf = 3'b010,
        or_conf = 3'b011,
        xor_conf = 3'b100,
        sll_conf = 3'b101,
        srl_conf = 3'b110,
        sra_conf = 3'b111
} iexu_conf

Теперь я хотел бы определить входной порт типа iexu_conf в модуле, например:

module iexu_decoder
(
    input iexu_conf conf,
    output logic add_ctrl,
    output logic[1:0] logic_ctrl,
    output logic[1:0] shifter_ctrl,
    output logic[1:0] outmux_ctrl
);

Возможно ли это? Если да, правильный ли синтаксис? У меня сейчас проблемы с Modelsim

** Error: (vlog-13069) iexu_decoder.sv(5): near "conf": syntax error, unexpected IDENTIFIER, expecting ')'.

но я не могу сказать, из-за какой-то глупой ошибки или из-за более серьезной концептуальной ошибки.

1 Ответ

0 голосов
/ 13 января 2019

Если вы поместите typedef в пакет, вам нужно явно указать ссылку на пакет или import, чтобы он был виден во всех объявлениях модулей, которые его используют.

package pkg;
  typedef enum logic[2:0] {
        ...
  } iexu_conf;
endpackage

Явная ссылка:

module iexu_decoder
(
    input pkg::iexu_conf conf,
    output logic add_ctrl,
    output logic[1:0] logic_ctrl,
    output logic[1:0] shifter_ctrl,
    output logic[1:0] outmux_ctrl
);

Импорт заголовка модуля:

module import pkg::*; iexu_decoder
(
    input iexu_conf conf,
    output logic add_ctrl,
    output logic[1:0] logic_ctrl,
    output logic[1:0] shifter_ctrl,
    output logic[1:0] outmux_ctrl
);
...