一、Burst operation
- AHB总线支持4、8和16拍的burst、未定义长度的burst以及单次传输。Burst传输包括 incrementing bursts和wrapping bursts。
- HBURST[2:0]控制Burst类型
HBURST[2:0] | 类型 | 描述 |
---|
b000 | SINGLE | Single burst |
b001 | INCR | Incrementing burst of undefined length |
b010 | WRAP4 | 4-beat wrapping burst |
b011 | INCR4 | 4-beat incrementing burst |
b100 | WRAP8 | 8-beat wrapping burst |
b101 | INCR8 | 8-beat incrementing burst |
b110 | WRAP16 | 16-beat wrapping burst |
b111 | INCR16 | 16-beat incrementing burst |
HSIZE[2:0] | 大小(bits) | 描述 |
---|
b000 | 8 | byte |
b001 | 16 | halfword |
b010 | 32 | word |
b011 | 64 | doubleword |
b100 | 128 | 4-word-line |
b101 | 256 | 8-word-line |
b110 | 512 | - |
b111 | 1024 | - |
- Incrementing bursts:顺序访问地址,每个传输的地址是前一个地址的增量。
- Wrapping bursts:在越过地址边界时进行wrap操作,地址边界为burst中节拍数与传输数据长度的乘积。节拍数由HBURST控制,传输数据的长度由HSIZE控制。例如,对于一个四拍的word(4字节),如果传输的起始地址是0x38,那么它包含四个到地址0x38、0x3C、0x30和0x34的传输。
二、Wrapping bursts模式的地址计算
以HSIZE = 010(word),HBURST = WRAP4,传输起始地址为0x38为例:
首先计算总传输数据大小,然后将当前位置除以总传输数据大小,若不能整除则以当前地址传输数据,否则将当前地址减去总传输数据大小,作为传输地址。
- 计算总传输数据大小为4byte*4=16byte。
- 起始地址0x38除以总传输数据大小(16byte),不能整除,以当前地址传输;
- 每次传输4byte,下一拍传输地址为0x3C,也不能被16byte整除,以当前地址传输;
- 再下一拍传输地址原本应为0x40,但其能被16byte整除,故传输地址变为0x30;
- 最后一拍传输地址0x34,不能被16byte整除,以当前地址传输,完成4拍共16byte的数据传输。