chisel - 掩码如何用于凿子中的聚合内存?
问题描述
我正在尝试在凿子中使用聚合内存。
正如 github 中推荐的那样,https://github.com/ucb-bar/chisel3-wiki/blob/master/Chisel-Memories.md
我的代码如下所示:
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'的类型是Interface,'mask'的类型是Vec[Bool]
给出以下错误:
Cannot prove that mytest.Interface <:< chisel3.Vec[_].
我做了一些搜索,发现只有当内存由 Vec 定义时才能使用掩码。
有什么解决方案可以使这项工作?
解决方案
如您所述,mask
只能在内存的数据类型为Vec
.
您没有描述您希望 与mask
接口如何精确对应,但我假设您将有一个Vec
大小为 3 的 a,每个a
,b
和c
.
最简单的解决方案是使用Vec(3, UInt(4.W))
:
val mem = Mem(16, Vec(3, UInt(4.W)))
如果你想像它实际上是由 制成的那样读写Interface
,你可以转换:
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)
推荐阅读
- python-3.x - 如何解决 pygame 中不透明度更改的 OOP 问题
- powershell - Powershell Get-Content 虚假失败
- matlab - Matlab使用矢量化的多个线性最小二乘
- python - 初始化类而不实例化?
- java - LinkedList,获取或添加中的错误
- reporting-services - SSRS 2008 Tablix 粗体只有一行?
- mysql - 尽管使用了 IFNULL (MySQL),但 SQL 查询没有返回 NULL 值
- node.js - 如何使用用户选择的内容构建建议的订单?
- r - 带量子的茎
- python - TypeError:“范围”对象在没有明显原因的情况下不可调用