Chisel 如何在凿子的聚合内存中使用掩码?

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

我正在尝试在凿子中使用聚合内存

正如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)
如果“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)