Универсальный мультиплексор SystemVerilog

Я пытаюсь придумать способ определения синтезируемого универсального мультиплексора (как функции или модуля), который можно использовать с проводами, и typedefs (перечисления, структуры) в SystemVerilog

Возможно ли это каким-либо образом? Если нет, то как лучше всего написать такой мультиплексор?

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

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

Спасибо, Себастьен.


person Sébastien Baillou    schedule 19.08.2015    source источник


Ответы (1)


Что ж, похоже, я смогу помочь себе сегодня.

SystemVerilog позволяет параметризовать модули с типами, используя функцию «тип параметра». Это именно то, что я ищу, и, кажется, поддерживается обычными поставщиками.

module mux #(
  parameter type T = logic,
  parameter SIZE = 2)
(
  input  wire [SIZE-1:0] select,
  input  wire T          in [SIZE-1:0],
  output wire T          out
);

Затем в модуле может быть выполнено преобразование типов в прямом и обратном направлении и фактическое мультиплексирование, что очищает остальную часть кода.

person Sébastien Baillou    schedule 19.08.2015