本文作为SpinalHDL学习笔记第三十九篇,介绍SpinalHDL简单示例。
目录:
1.APB3 定义
2.进位加法器
3.颜色求和
4.带清零的计数器
5.锁相环黑盒和复位控制器
6.RGB 信号转灰度信号
7.正弦 rom
1.APB3 定义
简介
此示例将展示定义一个 APB3 Bundle 的语句。
规范
ARM 关于 APB3 的端口规范如下:
信号名称 | 类型 | 驱动端 | 描述 |
PADDR | UInt(addressWidth bits) | Master | 以字节为单位的地址 |
PSEL | Bits(selWidth) | Master | 每个从端 1bit |
PENABLE | Bool | Master | |
PWRITE | Bool | Master | |
PWDATA | Bits(dataWidth bits) | Master | |
PREADY | Bool | Slave | |
PRDATA | Bits(dataWidth bits) | Slave | |
PSLVER ROR |
Bool | Slave | 可选 |
实现
该规范表明 APB3 总线具有多种可能的配置。为了实现这一点,我们可以在 Scala 中定义一个配置类:
case class Apb3Config(
addressWidth: Int,
dataWidth: Int,
selWidth: Int = 1,
useSlaveError: Boolean = true
)
然后我们可以定义用于表示硬件总线的 APB3 Bundle :
case class Apb3(config: Apb3Config) extends Bundle with IMasterSlave {
val PADDR = UInt(config.addressWidth bits)
val PSEL = Bits(config.selWidth bits)
val PENABLE = Bool()
val PREADY = Bool()
val PWRITE = Bool()
val PWDATA = Bits(config.dataWidth bits)
val PRDATA = Bits(config.dataWidth bits)
val PSLVERROR = if(conf