为信号提供用户定义的属性

Giving User-Defined properties for a signal

免责声明:我对 Scala 不是很熟悉。我已经使用 Spinal/Chisel 一些来测试我想做什么,以及创建一些简单的硬件,所以如果这些问题是 "entry-level" 从 Scala 的角度来看,请原谅我。

我打算使用 SpinalHDL 进行一些连接自动化。我们有一堆 IP,我们不能't/won 将其转换为 SpinalHDL,其中大部分是混合信号。因此,在某些情况下,额外的信号信息可以让我进一步自动化设计过程。例如,在某些情况下,某些信号位于不同的电源域,它们的连接要么需要限制在所述特定电源域,要么我们必须插入一些逻辑,如电平转换器。

假设我有一些 IP 的信号包(这个包在我的一个 BlackBox 上)

class MyBundle extends Bundle{
  val data     = in UInt(8 bits)
  val valid    = in Bool
  val pwr800mV = in Bool
  val pwr1800mv= in Bool
  val gnd      = in Bool
}

MyBundle 在 BlackBox 上,我在 Component 中实例化了其中的几个。我的想法是能够遍历 Bundle 中的 IOs/Signals 并将它们连接到适当的更高级别的 power/ground 信号。示例:

class PwrSignal(v : Double = 1.8) extends Bool{
  val voltage = v
}
class MyBundle extends Bundle{
  val data     = in UInt(8 bits)
  val valid    = in Bool
  val pwr800mV = in PwrSignal(0.8)
  val pwr1800mv= in PwrSignal(1.8)
  val gnd      = in Bool
}

class MyComponent extends Component{
  //IO creation
  //pseudo...
  walkBundleSignals{
    if (signal.voltage == 1.8){ signal := top_level_power_1p8v}
  }
}

起初我试图创建一个扩展 Bool 的 PwrSignal class,但是这失败了,因为 PwrSignal 不是 spinal.core.in 的一部分。

有什么办法可以做到这一点吗?

谢谢

Derp Alert: 由于默认数据类型覆盖了构造函数,你只需要 "new" 用户定义的数据类型。

class PwrSignal(v : Double = 1.8) extends Bool{
  val voltage = v
}
class MyBundle extends Bundle{
  val data     = in UInt(8 bits)
  val valid    = in Bool
  val pwr800mV = in (new PwrSignal(0.8))
  val pwr1800mv= in (new PwrSignal(1.8))
  val gnd      = in Bool
}