持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天!
AHB
AHB总线互连
ummy/Default Master
- Dummy Master
- Granted when all masters SPLIT
- Generates IDLEc cycles only
- Typically Master #0
- Granted when Locked master gets SPLIT response
- Implement as part of Address/Control Mux
- Default Master [认为是CPU]
- Granted when no master requires bus
- Generally master most likely to require bus
- Generates IDLE cycles when not requesting bus
- Avoids minimum 2 cycle Arbitration period (返回仲裁信号至少需要2个周期)
- Immediate access to bus
AHB信号
| Name | Source[发起端] | Description |
|---|---|---|
| HCLK | Clock source | Bus clock |
| HRSETn | RESET controller | Reset |
| HADDR[31:0] | Master | Address bus |
| HTRANS[1:0] | Master | Transfer type |
| HWRITE | Master | Transfer direction [1为写信号,0为读信号] |
| HSIZE[2:0] | Master | Transfer size 【8,16,32】 |
| HBURST[2:0] | Master | Burst type |
| HPORT[3:0] | Master | Portection control |
| HWDATA[31:0] | Master | Write data bus |
| HSELx | Decoder | Slave select |
| HRDATA[31:0] | Slave | Read data bus |
| HREADY | Slave | Transfer done |
| HRESP[1:0] | Slave | Transfer response(status)【OK,ERROR,SPLIT..】 |
基本AHB信号
- HRESETn [后缀为n,b的是低电平有效]
- 低电平有效
- HADDR[31:0]
- 32位系统地址总线
- HWDATA[31:0]
- 写数据总线,从主设备到从设备
- HRDATA[31:0]
- 读数据总线,从从设备到主设备
- HTRANS
- 指出当前传输的状态
- NONSEQ,SEQ,IDLE,BUSY
- 指出当前传输的状态
- HSIZE
- 指出当前传输的大小
- HBURST
- 指出传输的burst类型
- HRESP
- 从设备发给主设备的总线传输状态
- OKAY,ERROR,RETRY,SPILT
- 从设备发给主设备的总线传输状态
- HREADY
- 高: 从设备指出传输结束
- 低电平:从设备需延长传输周期
基本AHB传输
- 两个阶段
- 地址周期,只有一个cycle
- 数据周期,由HREADY 信号决定需要几个cycle
- 流水线传送
- 先是地址周期,然后是数据周期
如果每一拍都有延迟,那么效率就太低了,如何提高效率呢?
采用Pipeline流水线技术
【图示标注有误更正:第二拍的话,对于slave而言,如果是读操作,就把数据发上去,如果是写操作的话,那么就是将slave采集数据】
Master在忙的话用HTRANS信号表示:
传输类型
- HTRANS[1:0] :当前传输的状态
- IDLE,BUSY,NONSEQ,SEQ
- 00:IDLE
- 主设备占用总线,但没进行传输
- 两次burst传输中间主设备发IDLE
- 01:BUSY
- 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输
- 一次burst传输中间主设备发BUSY
- 10: NONSEQ
- 表明一次单个数据的传输
- 或者一次burst传输的第一个数据
- 地址和控制信号与上一次传输无关
- 11:SEQ
- 表明burst传输接下来的数据
- 地址和上一次传输的地址是相关的
其他AHB控制信号
- HWRITE
- 高电平:写
- 低电平:读
- HSIZE[2:0]
- 000: 8bits 100: 128bits
- 001: 16bits 101: 256bits
- 010: 32bits 110: 512bits
- 011: 64bits 111: 1024bits
- 最大值受总线的配置所限制
- 通常使用32bits (010)
- HPORT[3:0] 【用得较少】
- HPORT[0]: OPCODE/DATA (操作码/数据)
- HPORT[1]: USER/PRIVILGED(用户/特权模式)
- HPORT[2]: Bufferable/Non-Bufferable
- HPORT[3]: Cacheable/Non-Cacheable