免责声明:我对Scala不是很熟悉。我已经使用脊柱/Chisel一些测试我想做什么,以及创建一些简单的HW,所以请原谅我,如果这些问题是“入门级”从Scala的角度。
我计划使用SpinalHDL来实现连接自动化。我们有一堆不能/不会转换为SpinalHDL的IP,其中大部分是混合信号。正因为如此,我有些情况下,额外的信号信息将允许我进一步自动化的设计过程。例如,在某些情况下,某些信号位于不同的权力域上,它们之间的连接要么需要局限于上述特定的权力域,要么我们必须插入一些逻辑,比如电平移位器。
假设我有一些IP的信号(这个包在我的一个BlackBoxes上)
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/信号,并将它们连接到适当的更高级别的功率/地面信号。示例:
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类,但是这失败了,因为PwrSignal不是spinal.core.in的一部分。
有什么事要做吗?
谢谢
发布于 2020-01-06 15:26:11
default :由于默认数据类型覆盖构造函数,您只需要“新建”用户定义的数据类型。
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
}https://stackoverflow.com/questions/59603934
复制相似问题