文章目录
1.1、简介
有时候,创建一个Component来定义一些逻辑是过度设计的,因为:
- 需要定义所有构造参数和IO(冗长、重复)【一个Component对应Verilog代码一个Module块!】
- 将代码分割得比必要的更多
对于这种情况,您可以使用Area
来定义一组信号/逻辑:
class UartCtrl extends Component {
...
val timer = new Area {
val counter = Reg(UInt(8 bits))
val tick = counter === 0
counter := counter - 1
when(tick) {
counter := 100
}
}
val tickCounter = new Area {
val value = Reg(UInt(3 bits))
val reset = False
when(timer.tick) {
// Refer to the tick from timer area
value := value + 1
}
when(reset) {
value := 0
}
}
val stateMachine = new Area {
...
}
}
在 VHDL 和 Verilog 中,有时会使用前缀将变量分成逻辑部分。建议您在 SpinalHDL 中使用
Area
代替此方法。
ClockingArea是一种特殊的Area,允许您定义使用给定ClockDomain的硬件块。
文章评论