在Scala中我们可以通过一种方式声明一个Doubles数组的ArrayBuffer,Long和Boolean就是这样:
val A = new ArrayBuffer[Array[(Long, Array[Double], Array[Double], Double, Boolean)]]
我想用凿子做同样的事 在凿子中我知道一种声明长度为n的向量作为输入的方法如下:
val X = Input(Vec(n,FixedPoint(16.W, 8.BP)))
其中n是Int,这是有效的。
现在我尝试初始化n FixedPoint的数组,并执行以下操作:
val C = Array(Array.ofDim(FixedPoint(16.W, 8.BP)))(n,0)
灵感来自initialisation of an array
但是这没用。 我收到了错误
type mismatch;
[error] found : chisel3.core.FixedPoint
[error] required: Int
[error] val tabHash1 = Array(Array.ofDim(FixedPoint(16.W, 8.BP)))(n,0)
请问,有人能给出正确的方法来声明固定点的A以上,以及凿子中的一个FixedPoint数字吗? 谢谢!为了你的关注和你的回应。
答案 0 :(得分:0)
Chisel将遵循Scala集合声明的普通规则。 我不确定你在这里想要创建什么但参数不是很正确 Array.ofDim用于创建多维数组,因此如果您尝试创建所需的FixedPoint二维数组。
val C = Array.ofDim[FixedPoint](m, n)
其中n和m是二维中的大小。你已经将Array.ofDim包装在另一个数组中,所以也许你真的想要一个3维数组 FixedPoint,这将是
val C = Array.ofDim[FixedPoint](k, m, n)
这两种技术都会给出具有FixePoint所有插槽的数组,但是它们不会被填充,所以可能你真正想要的是
val C = Array.fill(k, m, n)(FixedPoint(16.W, 8.BP)
然后,您可以将这些FixedPoints连接到您想要的地方。
C(0, 0,0) := C(1, 1, 1) + C(2, 2, 2)
可能是一个例子。
如果您需要使用硬件索引访问您的FixedPoint元素,您将需要一个Vec而不是一个数组。初始化Vec的最简单方法是使用Seq of Elements。可以使用
创建FixedPoint的2维Vecval c = Vec(Seq.fill(n)(Vec(Seq.fill(m)(FixedPoint(16.W, 8.BP)))))
我建议在Scala Land vs Chisel Land查看有关在Scala中使用Chisel的一些背景信息。