Chisel3 类型与 FixedPoint 数组不匹配
Chisel3 type mismatch with Array of FixedPoint
在 Scala 中,我们可以这样声明一个包含双精度、长整型和布尔型数组的 ArrayBuffer:
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)
灵感来自
但这没有用。
我收到错误
type mismatch;
[error] found : chisel3.core.FixedPoint
[error] required: Int
[error] val tabHash1 = Array(Array.ofDim(FixedPoint(16.W, 8.BP)))(n,0)
拜托,有人能给出在 chisel 中声明 FixedPoint 上面的 A 和 FixedPoint 数字数组的正确方法吗?
谢谢!供您关注和回复。
Chisel 将遵循 Scala 集合声明的普通规则。
我不确定您要在此处创建什么,但参数不太正确
Array.ofDim 用于创建多维数组,因此如果您尝试创建 FixedPoint 的二维数组,您需要。
val C = Array.ofDim[FixedPoint](m, n)
其中 n 和 m 是二维尺寸。您已将 Array.ofDim 包装在另一个数组中,所以也许您实际上想要一个 3 维数组
定点,即
val C = Array.ofDim[FixedPoint](k, m, n)
这两种技术都会给出具有 FixePoint 的所有槽的数组,但它们不会被填充,所以您真正想要的可能是
val C = Array.fill(k, m, n)(FixedPoint(16.W, 8.BP)
然后您可以根据需要将这些固定点连接在一起。
C(0, 0,0) := C(1, 1, 1) + C(2, 2, 2)
可能是一个例子。
如果您需要使用硬件索引访问 FixedPoint 元素,您将需要 Vec 而不是 Array。初始化 Vec 的最简单方法是使用元素序列。可以使用
创建 FixedPoint 的二维 Vec
val c = Vec(Seq.fill(n)(Vec(Seq.fill(m)(FixedPoint(16.W, 8.BP)))))
我建议查看 Scala Land vs Chisel Land 了解在 Scala 中使用 Chisel 的一些背景知识。
在 Scala 中,我们可以这样声明一个包含双精度、长整型和布尔型数组的 ArrayBuffer:
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)
灵感来自
但这没有用。 我收到错误
type mismatch;
[error] found : chisel3.core.FixedPoint
[error] required: Int
[error] val tabHash1 = Array(Array.ofDim(FixedPoint(16.W, 8.BP)))(n,0)
拜托,有人能给出在 chisel 中声明 FixedPoint 上面的 A 和 FixedPoint 数字数组的正确方法吗? 谢谢!供您关注和回复。
Chisel 将遵循 Scala 集合声明的普通规则。 我不确定您要在此处创建什么,但参数不太正确 Array.ofDim 用于创建多维数组,因此如果您尝试创建 FixedPoint 的二维数组,您需要。
val C = Array.ofDim[FixedPoint](m, n)
其中 n 和 m 是二维尺寸。您已将 Array.ofDim 包装在另一个数组中,所以也许您实际上想要一个 3 维数组 定点,即
val C = Array.ofDim[FixedPoint](k, m, n)
这两种技术都会给出具有 FixePoint 的所有槽的数组,但它们不会被填充,所以您真正想要的可能是
val C = Array.fill(k, m, n)(FixedPoint(16.W, 8.BP)
然后您可以根据需要将这些固定点连接在一起。
C(0, 0,0) := C(1, 1, 1) + C(2, 2, 2)
可能是一个例子。
如果您需要使用硬件索引访问 FixedPoint 元素,您将需要 Vec 而不是 Array。初始化 Vec 的最简单方法是使用元素序列。可以使用
创建 FixedPoint 的二维 Vecval c = Vec(Seq.fill(n)(Vec(Seq.fill(m)(FixedPoint(16.W, 8.BP)))))
我建议查看 Scala Land vs Chisel Land 了解在 Scala 中使用 Chisel 的一些背景知识。