我正在尝试在凿子3中使用写掩码,如下所示。
chipMem.write(data_idx, wdata, wmask)
我正在生成wmask(写掩码),如下所示,
val wmask = write_mask.toBools
因为write_mask是一个UInt,而write函数需要一个Bool Sequence作为写掩码参数。但是,这会产生以下错误。
Cannot prove that chisel3.core.UInt <:< chisel3.core.Vec[_].
[error] chipMem.write(data_idx, wdata, wmask)
[error] ^
[error] one error found
我真的不明白错误信息的内容。我创建wmask的方式有问题吗?
答案 0 :(得分:1)
编译器抱怨它无法证明Chisel UInt是Chisel Vec的子类型(因为它不是)。
看一下documentation for Mem.write,它注意到“仅当内存的元素数据类型是Vec时才允许这样做。”这可能会好一点,但基本上Chisel并没有假设写掩码如何对应于数据。如果要使用写掩码,则Mem 的数据类型必须为Vec。另请注意,写掩码Vec必须与数据类型Vec具有相同数量的条目。