为信号提供用户定义的属性
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
}
免责声明:我对 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
}