凿子内存写掩码

时间:2017-01-17 04:26:10

标签: chisel

我正在尝试在凿子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的方式有问题吗?

1 个答案:

答案 0 :(得分:1)

编译器抱怨它无法证明Chisel UInt是Chisel Vec的子类型(因为它不是)。

看一下documentation for Mem.write,它注意到“仅当内存的元素数据类型是Vec时才允许这样做。”这可能会好一点,但基本上Chisel并没有假设写掩码如何对应于数据。如果要使用写掩码,则Mem 的数据类型必须为Vec。另请注意,写掩码Vec必须与数据类型Vec具有相同数量的条目。