持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天!
- AHB Burst 操作
- 4beat、8beat、16beat 、单个字节传输、未定义长度的传输
- 支持incrementing 和wrapping两种burst传输
- incrementing burst
- 地址是上一次的传输地址加1
- Wrapping burst
- 例:4beat的wrapping burst 字传输(4byte)
- 0x34 -> 0x38 -> 0x3c -> 0x30
- 应用场合:Cache填充
地址计算举例
- 根据HSIZE和HBURST来计算地址
- 例:起始地址是0x48,HSIZE=010(32bits)
| HBURST | Type | Address |
|---|---|---|
| 000 | SINGLE | 0X48 |
| 001 | INCR | 0X48,0X4C,0x50,...[The most useful] |
| 010 | WRAP4 | 0X48,0x4C,0x40,0x44 |
| 011 | INCR4 | 0X48,0x4C,0x50,0x54 |
| 100 | WRAP8 | 0X48,0x4C,0x50,0x54,0x58,0x5c,0x40,0x44 |
| 101 | INCR8 | 0X48,0x4C,0x50,0x54,0x58,0x5c,0x60,0x64 |
| 110 | WRAP16 | 0X48,0x4C,...,0x7c,0x40,0x44 |
| 111 | INCR16 | 0X48,0x4C,...,0x7c,0x80,0x84 |
Example LDM AHB Activity
注意!
- Burst传输不能传输1K边界
- 一个从设备最小的地址间隙是1KB
- NONSEQ->SEQ-> 1KB Boundary -> NONSEQ -> SEQ...
- 主设备不能试图开始一个可能穿越1K边界的固定长度的incrementing burst传输
地址译码
- HSELx:选择从设备
- 指出由主设备所选择的从设备
- 由地址译码器来提供选择信号
- 一个从设备应该至少占用1KB的存储空间
- 需要一个额外的缺省从设备来映射其他的存储地址
从设备响应
- 所访问的从设备必须响应这次传输
- 从设备可能返回的响应:
- 完成这次传输[HREAY信号拉高]
- 插入等待状态(HREDAY信号)
- 发出错误信号表示这次传输失败【通过hresp信号返回一个error信号】
- 延迟传输,使得总线可用于其他传输(split)
从设备响应信号
- HREDAY:transfer done
- HRESP[1:0] :transfer response
- 00:OKAY
- 成功
- 01:ERROR
- 失败
- 10:RETRY
- 传输未完成
- 请求主设备重新开始一个传输
- 11: SPLIT
- 传输未完成
- 请求主设备分离一次传输
两周期的响应
- HRESP[1:0]
- OKAY: 单周期响应
- ERROR:两周期响应
- RETRY: 两周期响应
- SPLIT: 两周期响应
- 00:OKAY
- 总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输。
一般情况下,在AHB总线上不会给出Retry和Split这种传输方式的;一般情况下把ready信号拉低几拍即可。IP的设计,都是写寄存器,寄存器写一拍即可。
RETRY和SPLIT的不同
- 主要区别在于仲裁的方式
- RETRY:arbiter会继续使用通常的优先级
- SPLIT: arbiter 会调整优先级方案以便其他请求总线的主设备可以访问总线
- 总线主设备应该用同样的方式处理RETRY响应和SPLIT响应。
数据总线
- 不是三态总线,读总线和写总线是分开的。三态总线:写/读/IZ[没有写读的时候状态]
- 印第安序
- 在AMBAZ协议中没有定义
- 主设备和从设备应该采用同样的印第安序
- 不支持动态印第安序
- 对于IP设计,只有应用面比较广泛的应用程序才支持两种印第安序 little endEan小端模式(AMBA总线默认是这种)
0地址就存最低位,3地址就存最高位。
big endEan (大印第安序)
多个主设备-需要仲裁机制
AHB 仲裁信号
- HBUSREQx
- 总线请求
- HLOCKx
- 高电平:主设备请求锁定总线
- HGRANTx
- 指出主设备x可访问总线
- 主设备x控制总线:HGRANTx=1且 HREADY =1
- HMSTER[3:0]
- 指出那个主设备正在进行传输
- HMASTLOCK
- 指出主设备正在进行一次锁存传输
- HSPLITx[15:0]
- 从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输
- 每一位对应一个主设备