在chisch中,你可以有一个像下面这样的硬件生成函数:
def hw_func(x: Vec[UInt]) : Vec[UInt] = x // useless I know
其中形式参数和返回值没有指定向量的宽度,这意味着以下内容有效:
val x4 = Wire(Vec(6, UInt()))
val y4 = Wire(Vec(6, UInt()))
y4 := hw_func(y32)
val x32 = Wire(Vec(32, UInt()))
val y32 = Wire(Vec(32, UInt()))
y32 := hw_func(x32)
然而,假设我有一个Module类而不是一个函数:
class hw_module(widthX: Int, widthY: Int) extends Module {
val io = IO( new Bundle {
val x = Input(Vec(widthX, UInt))
val y = Input(Vec(widthY, UInt))
})
y := x
}
我必须使用泛型来参数化输入和输出,这意味着当我示例化模块类时,我必须显式地传入宽度参数,而不是像函数那样让编译器推断宽度,如下所示:
val x4 = Wire(Vec(6, UInt()))
val y4 = Wire(Vec(6, UInt()))
val inst4 = hw_module(4, 4)
inst4.io.x := x4
y4 := inst4.io.y
val x32 = Wire(Vec(32, UInt()))
val y32 = Wire(Vec(32, UInt()))
val inst4 = hw_module(32, 32)
inst32.io.x := x32
y4 := inst32.io.y
这是相当多的冗长(特别是如果说,我有很多的i/o,他们都可能有不同的宽度!).
有没有一种方法可以实现在带有Module类的函数hw生成器中看到的io宽度的推断?
1条答案
按热度按时间nx7onnlm1#
您可以使用type parameter(chisel-doc)创建更通用的模块或包