【问题标题】:Chisel3 type mismatch with Array of FixedPointChisel3 类型与 FixedPoint 数组不匹配
【发布时间】:2017-08-28 16:38:23
【问题描述】:

在 Scala 中,我们可以声明一个包含 Doubles、Long 和 Boolean 数组的 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)

灵感来自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 以上,以及凿子中的定点数字数组吗? 谢谢!为了您的关注和回复。

【问题讨论】:

    标签: scala chisel


    【解决方案1】:

    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)
    

    这两种技术都会给出具有所有固定点槽位的数组,但它们不会被填充,所以你真正想要的可能是

    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 而不是 Array。初始化 Vec 的最简单方法是使用 Seq of Elements。 FixedPoint 的二维 Vec 可以用

    创建
    val c = Vec(Seq.fill(n)(Vec(Seq.fill(m)(FixedPoint(16.W, 8.BP)))))
    

    我建议查看Scala Land vs Chisel Land,了解在 Scala 中使用 Chisel 的一些背景知识。

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多