Конкатенация Verilog в выводе модуля - PullRequest
2 голосов
/ 25 июля 2011

Когда я создаю экземпляр модуля и забочусь только о некоторых битах в выводе, существует ли краткий синтаксис для отбрасывания битов? Что-то вроде

my_module module_instance
( 
 .some_output({garbage1,important1[7:0]})
);

В этом случае сигнал some_output в my_module имеет ширину 9 бит, но я хочу вставить только младшие 8 бит в important1. Я мог бы сделать сигнал со всеми 9 битами, а затем просто выбрать из него 8, и я знаю, что компилятор оптимизирует его, но я ищу идиому или сокращение.

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Если вы параметризуете ширину выходного порта в вашем модуле, а затем передаете параметр в экземпляр, нет необходимости создавать сигнал для удаления неиспользуемых битов:

my_module module_instance #(.WIDTH(8))
( 
 .some_output(important1[7:0])
);
1 голос
/ 26 июля 2011

Одним из вариантов является параметризация модуля, как подсказывает инструмент.Если вы застряли с широким портом, я не знаю какого-либо простого способа отбросить лишние биты.

Использование 1'bz для неиспользуемых битов заманчиво, но недопустимо.

Если неиспользуемые биты являются MSB, вы можете подключить 9-битный порт к 8-битному сигналу, но это плохой стиль кодирования и приведет к предупреждению от некоторых инструментов.

Одна возможностьзаключается в определении соглашения для неиспользуемых сигналов, например, суффикса _NC (без подключения).Это поможет документировать намерение.Вы также можете фильтровать любые предупреждения о свисающем сигнале, используя сопоставление с шаблоном, а не перечислять сигналы по отдельности.

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

...