Chisel 如何在凿子的聚合内存中使用掩码?
我正在尝试在凿子中使用聚合内存 正如github中建议的那样 我的代码如下所示:Chisel 如何在凿子的聚合内存中使用掩码?,chisel,Chisel,我正在尝试在凿子中使用聚合内存 正如github中建议的那样 我的代码如下所示: class Interface(val w:Int) extends Bundle{ val a: UInt = UInt(w.W) val b: UInt = UInt(w.W) val c: UInt = UInt(w.W) } val mem = Mem(16,new Interface(4)) 然后我使用如下的蒙版: mem.write(io.addr, inter, mask) 如果“i
class Interface(val w:Int) extends Bundle{
val a: UInt = UInt(w.W)
val b: UInt = UInt(w.W)
val c: UInt = UInt(w.W)
}
val mem = Mem(16,new Interface(4))
然后我使用如下的蒙版:
mem.write(io.addr, inter, mask)
如果“inter”的类型是接口,“mask”的类型是Vec[Bool]
给出了以下错误:
Cannot prove that mytest.Interface <:< chisel3.Vec[_].
无法证明mytest.Interface如您所述,mask
仅在内存的数据类型为Vec
时才能使用
您没有描述希望掩码
与界面的对应程度,但我假设您有一个大小为3的Vec
,每个a
、b
和c
一位
最简单的解决方案是只使用Vec(3,UInt(4.W))
:
val mem=mem(16,Vec(3,UInt(4.W)))
如果您想要读写,就好像它实际上是由接口
构成的,您可以强制转换:
mem.write(io.addr,inter.asTypeOf(Vec(3,UInt(4.W)),mask)
这些强制转换有点冗长,您可以创建类型别名以使代码更加简洁和易于维护:
val w = 4
val memType = Vec(3, UInt(w.W))
val intfType = new Interface(w)
val mem = Mem(16, memType)
mem.write(io.addr, inter.asTypeOf(memType), mask)
val read: Interface = mem.read(io.addr).asTypeOf(intfType)