Scala 对double进行3次算术运算

Scala 对double进行3次算术运算,scala,verilog,chisel,Scala,Verilog,Chisel,请告诉我,我在使用凿子中的双精度运算时遇到问题。我看到的示例仅使用以下类型:Int、UInt、SInt。 我看到了只针对SInt和UInt描述的算术运算。双人怎么样? 我试图将输出声明为Double,但不知道如何实现。因为我的代码的输出是双倍的。 有没有办法在Bundle中声明Double类型的输入和输出 这是我的密码: class hashfunc(val k:Int, val n: Int ) extends Module { val a = k + k val io = IO(n

请告诉我,我在使用凿子中的双精度运算时遇到问题。我看到的示例仅使用以下类型:Int、UInt、SInt。 我看到了只针对SInt和UInt描述的算术运算。双人怎么样? 我试图将输出声明为Double,但不知道如何实现。因为我的代码的输出是双倍的。 有没有办法在Bundle中声明Double类型的输入和输出

这是我的密码:

class hashfunc(val k:Int, val n: Int ) extends Module {

  val a = k + k
  val io = IO(new Bundle {
    val b=Input(UInt(k.W))
    val w=Input(UInt(k.W))
    var out  = Output(UInt(a.W))
  })

   val tabHash1 = new Array[Array[Double]](n)
    val x   = new ArrayBuffer[(Double, Data)]
    val tabHash = new Array[Double](tabHash1.size)
  for (ind <- tabHash1.indices){
     var sum=0.0
    for (ind2 <- 0 until x.size){
      sum += ( x(ind2) * tabHash1(ind)(ind2) )
   }     
      tabHash(ind) = ((sum + io.b) / io.w)
    }
  io.out := tabHash.reduce(_ + _)
 }
类hashfunc(val k:Int,val n:Int)扩展了模块{ vala=k+k val io=io(新捆绑){ val b=输入(UInt(k.W)) val w=输入(UInt(k.w)) var out=输出(UInt(a.W)) }) val tabHash1=新数组[Array[Double]](n) val x=新阵列缓冲[(双精度,数据)] val tabHash=新数组[Double](tabHash1.size)
对于(ind),任何HDL都不直接支持对浮点数(在本例中为双精度)的操作。原因是,虽然固定点数的加法/减法/乘法定义良好,但浮点数硬件有许多设计空间权衡,因为它是一个复杂得多的硬件


也就是说,高性能浮点单元本身就是一个重要的硬件部件,在任何实际设计中都是分时的。

对浮点数的操作(本例中为双精度)任何HDL都不直接支持。原因是,虽然定点数字的加法/减法/乘法定义良好,但浮点硬件有许多设计空间权衡,因为它是一个复杂得多的硬件


也就是说,高性能浮点单元本身就是一个重要的硬件部件,在任何实际设计中都是分时的。

凿子确实有一个本机定点类型,可能会用到。它在实验包中

import chisel3.experimental.FixedPoint
还有一个项目支持模拟双精度。有一些很好的功能,例如,它允许模块在数值类型上参数化(复杂、双精度、定点、SInt)因此,您可以在double上运行模拟以验证所需的数学行为,然后切换到符合精度标准的可合成数字格式


DspTools是一个正在进行的研究项目,团队将非常感谢外部用户的反馈。

凿子确实有一种可能有用的本地固定点类型。它在实验包中

import chisel3.experimental.FixedPoint
还有一个项目支持模拟双精度。有一些很好的功能,例如,它允许模块在数值类型上参数化(复杂、双精度、定点、SInt)因此,您可以在double上运行模拟以验证所需的数学行为,然后切换到符合精度标准的可合成数字格式


DspTools是一个正在进行的研究项目,团队将非常感谢外部用户的反馈。

为什么它有
verilog
标签?实际上,这是因为我的目标是生成此代码的verilog版本。我认为我编写代码的方式将决定生成的verilog有多好。因此有人可以验证如果我正确地使用了凿子的硬件属性。你是指可合成的verilog吗?从自由风格的编程语言生成可合成的verilog是非常困难的。这是高级合成。我建议你改为手动编写verilog,并忘记这一点。为什么它里面有
verilog
标记?实际上是这样的因为我的目标是生成此代码的verilog版本。我认为我编写代码的方式将决定生成的verilog有多好。因此有人可以验证我是否正确使用了凿子的硬件属性。你是指可合成的verilog吗?从自由式程序生成可合成的verilog非常困难ming语言。这是高级合成。我建议你改为手动编写verilog,忘掉这一点。