APB是AMBA中相对比较简单的接口协议。
采用这种简单的协议,你可以轻松地将自定义外设挂在AMBA总线上。
许多APB外设都是慢速器件,例如UART。一般SoC都是通过它们的寄存器进行访问。
下面是一个APB slave 的verilog实例,大家可以在此基础上,设计自己APB slave接口的自定义模块控制器。
其中,
是系统复位和使能信号
是APB slave的接口信号
是一个自定义模块的寄存器,其中status32是read_only
apb_write和apb_read是为了满足APB协议做的读写控制。apb_read信号产生和apb_write不同,具体原因可以查阅APB协议官方文档
该APB slave模块只是对一些控制和状态寄存器进行读写,是无等待传输,同时不生成传输错误信号。
对不同的寄存器做了地址分配,其中status32寄存器只读
然后我们在Testbench里例化APB slave和一个APB master 模型,对该APB slave模块进行验证。