SystemVerilog 通用多路复用器

SystemVerilog generic multiplexer

我正在尝试想出一种方法来定义可合成的通用多路复用器(作为函数或模块),它可以与 SystemVerilog 中的连线和类型定义(枚举、结构)一起使用

这有可能吗? 如果没有,编写这样一个多路复用器的最简洁的方法是什么?

目前,我正在使用一个多路复用器,该多路复用器将二维导线阵列作为输入,selects 是基于 select 信号的元素之一。

这让我很痛苦,因为每次我需要将类型化的变量连接到多路复用器模块时,我都会来回转换它们。 可悲的是,由于需要 for 循环将类型化元素数组分配给连线数组,这让情况变得更糟。

谢谢, 塞巴斯蒂安

嗯,看来我今天能帮上忙了。

SystemVerilog 允许使用 "parameter type" 功能对具有类型的模块进行参数化。这正是我正在寻找的,并且似乎得到了常见供应商的支持。

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
);

然后,可以在模块内执行来回类型转换和实际 muxing,从而清理其余代码。