chisel3 арифметические операции над числами Double

Пожалуйста, у меня проблемы с манипуляциями с арифметическими операциями с дублями в долоте. Я видел примеры, в которых используются только следующие типы: Int, UInt, SInt. Я видел здесь, что арифметические операции описаны только для SInt и UInt. А как насчет Double? Я попытался объявить свой вывод как Double, но не знал, как это сделать. Поскольку вывод моего кода - 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(_ + _)
 }

При компиляции кода я получаю следующую ошибку: ошибка кода

Спасибо за внимание, с нетерпением жду ваших отзывов.


person Foutse    schedule 24.08.2017    source источник
comment
почему в нем есть тег verilog?   -  person Serge    schedule 26.08.2017
comment
На самом деле это потому, что моя цель - создать версию этого кода verilog. И я думаю, что то, как я напишу код, определит, насколько хорош будет сгенерированный verilog. Чтобы кто-то мог проверить, правильно ли я использовал аппаратное свойство долота.   -  person Foutse    schedule 26.08.2017
comment
Вы имели в виду синтезируемый верилог? Очень сложно сгенерировать синтезируемый verilog из свободного языка программирования. Это синтез высокого уровня. Я предлагаю вам написать verilog вручную и забыть об этом.   -  person Serge    schedule 26.08.2017


Ответы (2)


Chisel имеет собственный тип FixedPoint, который может пригодиться. Он находится в экспериментальном пакете

import chisel3.experimental.FixedPoint

Существует также проект DspTools, который поддерживает моделирование парных игр. Есть несколько приятных функций, например он позволяет модулям параметризовать числовые типы (Complex, Double, FixedPoint, SInt), чтобы вы могли запускать симуляции на double, чтобы проверить желаемое математическое поведение, а затем переключиться на синтезируемый числовой формат, который соответствует вашим критериям точности.

DspTools - это постоянный исследовательский проект, и команда будет признательна за отзывы внешних пользователей.

person Chick Markley    schedule 24.08.2017

Операции с числами с плавающей запятой (в данном случае Double) не поддерживаются напрямую никаким HDL. Причина этого в том, что, хотя сложение / вычитание / умножение чисел с фиксированной запятой хорошо определено, существует множество компромиссов при проектировании для оборудования с плавающей запятой, поскольку это гораздо более сложное оборудование.

Другими словами, высокопроизводительный модуль с плавающей запятой сам по себе является важной частью аппаратного обеспечения, и на него можно было бы потратить время при любом реалистичном дизайне.

person Brian Magnuson    schedule 24.08.2017