因为打算学一学怎么搭一个基于Cortex M系列内核的SoC,所以开始学习AHB-Lite协议。
(1)概念
AHB-Lite是AHB总线的子集,只支持一个主设备。
//多个主设备需要在主从通信中考虑到主从仲裁的问题
//现在AXI已经在慢慢替代AHB总线协议了
AHB-Lite由三总线组成:数据总线、地址总线、控制信号。
其中:
①数据总线用于交换数据信息。
②地址总线用于选择一个外设,或者一个外设中的某个寄存器。
③控制信号用于同步和识别trade off。
(2)AHB-Lite信号
//信号命名规则:
①H:以H开头代表AHB总线定义的信号,以区别系统设计时的其他信号。
②n:低电平有效。
③x:针对某一个master或者slave的信号,如HBUSREQx1代表Master1的bus request信号。
Master接口信号:
Slave接口信号:
其中:
1)全局信号(Global Signals)
①HRESETn:全局复位信号,低电平有效。
②HCLK:全局时钟信号,一般是上升沿用于采样。
2)地址和控制信号(Address and Control)
①HADDR[31:0]:32位的地址信号
②HWRITE:写操作使能信号,高电平有效。
③HSIZE[2:0]:指定传输的大小,通常为8位(字节)、16位(半字)、32位(字)等。
④HBURST[2:0]:表示传输是single传输还是burst传输中的一拍。
//burst传输支持的固定长度为4、8、16,burst可以是递增型,也可以是回卷型
⑤HPROT[3:0]:保护控制信号,需要Slave带有保护功能。
⑥HTRANS[1:0]:指示当前传输的传输类型,分为IDLE、BUSY、NONSEQUENTIAL、SEQUENTIAL四种类型。
⑦HMASTLOCK:高电平时,表示当前传输是一个锁定序列的一部分,它与地址总线和控制信号有着相同的时序。
3)数据信号
①HWDATA[31:0]:32位写数据信号。
②HRDATA[31:0]:读数据信号,在读操作期间把数据从总线Slave设备读取到总线Mater设备,建议宽度为32位以上,扩展挺方便的。
4)传输响应信号(Transfer Response)
①HREADY/HREADYOUT:用于表示总线上是否传输已完成,高电平有效。
//HREADY信号在Slave端是inout信号,或者在设计的时候单独引出一条HREADYOUT信号
②HRESP:The Transfer Response(传输响应)提供传输状态的附加信息。
//如果是AHB总线的话,总共有四种响应(2位):OK、ERROR、RETRY和SPLIT。而AHB-Lite只有两种响应(1位):低电平反应传输正常,高电平反应传输异常
5)译码器信号(Select)
HSELx:选择信号,这个信号表示了Master当前传输选择的Slave。
//每个Slave都有他自己的选择信号HSELx,如HSEL_S1, HSEL_S2, HSEL_Memory等等
//HSELx信号是地址总线的组合逻辑译码