Подключите разную ширину порта

Предположим, у моего модуля 8-битный вход и 8-битный выход.

module MyModule (input logic [7:0] in, output logic [7:0] out);
    ...
endmodule : MyModule

Если я хочу подключить 1-битный вход и оставить остальные биты равными нулю, работает следующее:

MyModule (.in({7'b0, a}), .out(b))

Как я могу сделать то же самое, если мне нужен 1-битный вывод, игнорируя другие биты? Что-то вроде этого

MyModule (.in(a), .out({7'b0, b}))

vcs сообщает, что он недействителен, и прямое подключение b выдает предупреждение. В идеале мне нужно решение, которое не выводит предупреждений.

Вот что я подумал:

  • Используйте .out(b) и b[0] для бит
  • Создайте неиспользуемую логическую переменную unused и используйте .out({unused, b}), которая действительно работает
  • Используйте assign statment (я бы этого не хотел)

Есть ли какое-нибудь решение лучше этих?


person qwr    schedule 11.02.2019    source источник


Ответы (2)


Вы можете использовать оператор потоковой передачи:

MyModule M (.in(a), .out({<<{b}}));

Но я думаю, что ваша первая идея наиболее прямолинейна.

person dave_59    schedule 11.02.2019

Вы также можете использовать параметризованные модули:

module MyModule #(IN_WDT = 8, OUT_WDT = 8)
  (input logic[IN_WDT-1:0] in, output logic [OUT_WDT -1 : 0] out);

...

MyModule #(8,1) M1(a8, b1); 

or

MyModule #(.OUT_WDT(1)) M1(.in(a8), .out(b1));
person Serge    schedule 11.02.2019
comment
Не повлияет ли это на внутреннюю логику моего модуля, если я установлю ширину вывода только 1 бит? - person qwr; 12.02.2019
comment
вы должны закодировать свой модуль таким образом, чтобы использовать параметры для объявления и использования правильной ширины с помощью своей логики. - person Serge; 12.02.2019