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,从而清理其余代码。
我正在尝试想出一种方法来定义可合成的通用多路复用器(作为函数或模块),它可以与 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,从而清理其余代码。