Мне нужно реализовать пользовательский класс типов для операций Complex DSP и Complex Ring. Я знаю о проекте DspTools, но намеренно хочу исключить его из рассмотрения.
У меня есть аппаратный модуль, который я хочу создать с помощью классов diff: UInt, SInt, FixedPoint, Real и Complex (FixedPoint, FixedPoint).
Вот мой минимальный класс:
class Complex[A <: Data, B <: Data] (val re:A, val im:B) extends Bundle {
override def cloneType: this.type = new Complex(re, im).asInstanceOf[this.type]
}
object Complex {
def apply[A <: Data, B <: Data](re:A, im:B) = new Complex(re, im)
implicit def UInt2Complex(re:UInt, im:UInt) = Complex(re,im)
}
Когда я создаю это с разными типами данных из Chisel3.Core, код компилируется и работает.
Однако, когда я пытаюсь сделать:
import chisel3.core.{FixedPoint => FP}
...
val inType = Complex ( FP(20.W,10.BP), FP(20.W,10.BP))
val outType = Complex ( FP(20.W,10.BP), FP(20.W,10.BP))
...
Я скомпилировал код, но FIRRTL выдает ошибку:
[info], используя --backend-name verilator
[info] chisel3.core.Binding $ RebindingException: Попытка переназначения привязки к chisel3.core.FixedPoint@d
[info] at chisel3.core.Data.binding_ $ eq (Data.scala: 250)
Что с этим не так? Как решить проблему?