更新位向量的单个位

时间:2014-03-04 14:48:21

标签: chisel

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中有更好或更好的方法吗?

1 个答案:

答案 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 ++中的仿真而言,它不是超级高效的,因为突然每个元素都是它自己的变量)。