CHISEL是否只允许更新一位位向量? 我想做点什么:
val x = 12
val slot = UInt(0,width=80)
slot(x) := UInt(1)
但编译器出现以下错误:
ambiguous reference to overloaded definition,
[error] both method := in class Bool of type (src: Chisel.Bits)Unit
[error] and method := in class UInt of type (src: Chisel.UInt)Unit
[error] match argument types (Chisel.UInt)
[error] slot(x) := UInt(1)
[error] ^
在CHISEL中有更好或更好的方法吗?
答案 0 :(得分:0)
我不认为现在有一种方法可以在Chisel中更新一个位。
已编辑:截至2014年6月,Chisel现在允许您访问Reg(UInt())
但不是UInt()
线路的各个位。
我处理位向量的方法是将它们转换为Bools / UI的Vec()并以这种方式单独更新它们。
val x = 12
val slot = Vec(80).fill{Bool(false)}
slot(x) := Bool(true)
val slot_in_bits = slot.toBits
然后,您可以使用.toBits和.fromBits在将其视为Vec()并将其视为Bits()之间移动。
顺便说一下,将位向量视为bool的Vec()是等价的(不幸的是,就C ++中的仿真而言,它不是超级高效的,因为突然每个元素都是它自己的变量)。