Параметрическая декларация порта в SystemVerilog - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь разработать модуль, который может иметь один из двух интерфейсов в качестве портов. Поведение модуля очень мало меняется в зависимости от того, какой из двух интерфейсов используется, поэтому я хотел бы реализовать его как один модуль.

module m(
    input logic clock,
    input logic reset,

`ifdef IF1
    if1.receiver link
`else
    if2.receiver link
`endif
...
);

Приведенный выше код работает нормально, но я хотел бы сделать выбор параметрическим, так как я могу захотеть создать иную версию этого модуля в дизайне.

Примерно так:

module m #(parameter IF = 0)(
    input logic clock,
    input logic reset,

generate
    if (IF1)
        if1.receiver link
    else
        if2.receiver link
endgenerate
...
);

Теперь этот второй пример не работает, НО это может быть достигнуто в system-verilog? Я не могу найти окончательный ответ в спецификации языка.

1 Ответ

0 голосов
/ 30 апреля 2018

Вы можете использовать общий порт interface вместо указания if1 или if2. Затем вы можете подключить любой интерфейс к этому порту, если все ссылки на имена действительны для всех видов. Так что в вашем примере оба интерфейса нуждаются в модпорте получателя.

...