官方手册:AMBA系列官方协议规范文档,点击下载
更详细的内容建议阅读官方协议规范
路 线:
- 【verilog实战】同步FIFO的设计与功能验证(附源码)
- 【Verilog实战】异步FIFO设计和功能验证(附源码)
- 【Verilog实战】UART通信协议,半双工通信方式(附源码)
- 【Verilog实战】SPI协议接口设计和功能验证(附源码)
- 【Verilog实战】AMBA 3 APB接口设计和功能验证(附源码)
- 【Verilog实战】AMBA 3 AHB-Lite接口设计和功能验证(附源码)
- 【Verilog实战】AMBA AXI接口设计和功能验证(附源码)
- 【Verilog实战】UART2APB bridge 设计和功能验证(附源码)
- 【Verilog实战】AHB2APB bridge 设计和功能验证(附源码)
AHB2 :AMBA 2 AHB(AHB2),多master多slave框架,需要仲裁器
AHB3 :AMBA 3 AHB(AHB_Lite),单master多slave,没有仲裁器(AHB2的简化版)
AHB5 :AMBA 5 AHB,单master多slave,没有仲裁器,扩展存储器类型
Signal | Source | Description |
---|---|---|
HCLK (Bus clock) |
Clock source | This clock times all bus transfers. All signal timings are related to the rising edge of HCLK. |
HRESETn (Reset) |
Reset controller | The bus reset signal is active LOW and is used to reset the system and the bus.This is the only active LOW signal . |
HADDR[31:0] (Address bus) |
Master | The 32-bit system address bus. |
HTRANS[1:0] (Transfer type) |
Master | Indicates the type of the current transfer, which can be NONSEQUENTIAL,SEQUENTIAL, IDLE or BUSY. |
HWRITE (Transfer direction) |
Master | When HIGH this signal indicates a write transfer and when LOW a read transfer. |
HSIZE[2:0] (Transfer size) |
Master | Indicates the size of the transfer, which is typically byte (8-bit), halfword (16-bit) or word (32-bit). The protocol allows for larger transfer sizes up to a maximum of 1024 bits. |
HBURST[2:0] (Burst type) |
Master | Indicates if the transfer forms part of a burst. Four, eight and sixteen beat burstsare supported and the burst may be either incrementing or wrapping. |
HPROT[3:0] (Protection control) |
Master | The protection control signals provide additional information about a bus access and are primarily intended for use by any module that wishes to implement some level of protection. The signals indicate if the transfer is an opcode fetch or data access, as well as if the transfer is a privileged mode access or user mode access. For bus masters with a memory management unit these signals also indicate whether the current access is cacheable or bufferable. |
HWDATA[31:0] (Write data bus) |
Master | The write data bus is used to transfer data from the master to the bus slaves during write operations. A minimum data bus width of 32 bits is recommended.However, this may easily be extended to allow for higher bandwidth operation. |
HSELx (Slave select) |
Decoder | Each AHB slave has its own slave select signal and this signal indicates that the current transfer is intended for the selected slave. This signal is simply a combinatorial decode of the address bus. |
HRDATA[31:0] (Read data bus) |
Slave | The read data bus is used to transfer data from bus slaves to the bus master during read operations. A minimum data bus width of 32 bits is recommended. However, this may easily be extended to allow for higher bandwidth operation. |
HREADY (Transfer done) |
Slave | When HIGH the HREADY signal indicates that a transfer has finished on the bus. This signal may be driven LOW to extend a transfer. Note: Slaves on the bus require HREADY as both an input and an output signal. |
HRESP[1:0] (Transfer response) |
Slave | The transfer response provides additional information on the status of a transfer.Four different responses are provided, OKAY, ERROR, RETRY and SPLIT. |
AMBA 2 AHB也有许多信号请求支持多主机操作(见下表) ,这些仲裁信号用于点对点连接,下表中后缀x用来表示信号来自模块x 例如,一个系统中会有许多的信号HBUSREQx,比如HBUSREQarm,HBUSREQdma和HBUSREQtic。
Signal | Source | Description |
---|---|---|
HBUSREQx (Bus request ) |
Master | A signal from bus master x to the bus arbiter which indicates that the bus master requires the bus. There is an HBUSREQx signal for each bus master in the system, up to a maximum of 16 bus masters. |
HLOCKx (Locked transfers) |
Master | When HIGH this signal indicates that the master requires locked access to the bus and no other master should be granted the bus until this signal is LOW. |
HGRANTx(Bus grant) | Arbiter | This signal indicates that bus master x is currently the highest priority master. Ownership of the address/control signals changes at the end of a transfer when HREADY is HIGH, so a master gets access to the bus when both HREADY and HGRANTx are HIGH. |
HMASTER[3:0] (Master number) |
Arbiter | These signals from the arbiter indicate which bus master is currently performing a transfer and is used by the slaves which support SPLIT transfers to determine which master is attempting an access. The timing of HMASTER is aligned with the timing of the address and control signals. |
HMASTLOCK (Locked sequence) |
Arbiter | Indicates that the current master is performing a locked sequence of transfers. This signal has the same timing as the HMASTER signal. |
HSPLITx[15:0] (Split completion request) |
Slave (SPLIT-capable) |
This 16-bit split bus is used by a slave to indicate to the arbiter which bus masters should be allowed to re-attempt a split transaction. Each bit of this split bus corresponds to a single bus master. |
Advanced Microcontroller Bus Architecture(AMBA)是由ARM公司制定的高性能 片上(on chip)通信标准。常用的有以下三种协议:
一般设计中AXI和AHB用于高带宽、高性能、低延时场合,如DMA、Memory controller、MCU总线互连等。APB用于对带宽、性能要求不敏感的场合,如外设bridge、寄存器配置等。
AMBA AHB 是位于 APB 之上新一级的总线并且实现了高性能、高系统时钟频率系统的以下特征要求:
AMBA采用valid和ready进行master和slave之间的握手。master发出valid和data,slave反馈ready给master。valid为data的有效指示,ready为slave可以接收数据的指示,握手成功发生在valid和ready同时为高时。
基于AMBA的微控制器典型地由一个高性能系统中枢总线组成,能够支持外部存储器带宽,包括CPU,片上存储器和其他直接数据存取(DMA)设备,加上一个桥接器连接到较窄的挂接着较低带宽外设的APB总线。
AHB协议在Bus matrix(crossbar)架构中的应用如下:
AHB2协议可以实现多master多slave互连。多master互连时需要arbiter对master请求进行仲裁。(AHB-Lite只能用于单master互连)
每个传输都可以被分类为四个不同类型之一,如HTRANS[1 :0]信号所表示的状态。
HTRANS[1:0] | Type | Description |
---|---|---|
00 | IDLE(空闲) | Indicates that no data transfer is required. The IDLE transfer type is used when a bus master is granted the bus, but does not wish to perform a data transfer. Slaves must always provide a zero wait state OKAY response to IDLE transfers and the transfer should be ignored by the slave. |
01 | BUSY(忙) | The BUSY transfer type allows bus masters to insert IDLE cycles in the middle of bursts of transfers. This transfer type indicates that the bus master is continuing with a burst of transfers, but the next transfer cannot take place immediately. When a master uses the BUSY transfer type the address and control signals must reflect the next transfer in the burst. The transfer should be ignored by the slave. Slaves must always provide a zero wait state OKAY response, in the same way that they respond to IDLE transfers. |
10 | NONSEQ(非连续) | Indicates the first transfer of a burst or a single transfer. The address and control signals are unrelated to the previous transfer. Single transfers on the bus are treated as bursts of one and therefore the transfer type is NONSEQUENTIAL.(表示一次突发的第一个传输或者一个单一传输。地址和控制信号和前一次传输无关。) |
11 | SEQ(连续) | The remaining transfers in a burst are SEQUENTIAL and the address is related to the previous transfer. The control information is identical to the previous transfer. The address is equal to the address of the previous transfer plus the size (in bytes). In the case of a wrapping burst the address of the transfer wraps at the address boundary equal to the size (in bytes) multiplied by the number of beats in the transfer (either 4, 8 or 16).(突发传输中除去第一个,剩下的传输是连续传输并且地址和前一次传输有关。控制信息和前一次传输一样,地址等于前一次传输的地址加上传输大小(字节)。) |
**HSIZE[2:0]**表示传输的大小,即代表每次传输的数据大小,最高支持1024bit。和HBURST[2:0]信号一起决定回环突发的地址边界。
HSIZE[2] | HSIZE[1] | HSIZE[0] | Size | Description |
---|---|---|---|---|
0 | 0 | 0 | 8bit | Byte |
0 | 0 | 1 | 16bit | Haftword |
0 | 1 | 0 | 32bit | Word |
0 | 1 | 1 | 64bit | - |
1 | 0 | 0 | 128bit | 4-word line |
1 | 0 | 1 | 256bit | 8-word line |
1 | 1 | 0 | 512bit | - |
1 | 1 | 1 | 1024bit | - |
AMBA 2 AHB 协议定义了4、8和16拍突发传输,也有未定长度的突发和信号传输。协议对增量和回环都支持:
HBURST[2:0] | Type | Description |
---|---|---|
000 | SINGLE | Single transfer(单一传输) |
001 | INCR | Incrementing burst of unspecified length(未指定长度的增量突发传输) |
010 | WRAP4 | 4-beat wrapping burst(4拍回环突发传输) |
011 | INCR4 | 4-beat incrementing burst(4拍增量突发传输) |
100 | WRAP8 | 8-beat wrapping burst(8拍回环突发传输) |
101 | INCR8 | 8-beat incrementing burst(8拍增量突发传输) |
110 | WRAP16 | 16-beat wrapping burst(16拍回环突发传输) |
111 | INCR16 | 16-beat incrementing burst(16拍增量突发传输) |
4拍回环
突发的字(4 字节)访问将在16 字节边界回环。因此,如果传输的起始地址是 0x30,那么它将包含四个到地址0x30、0x34、0x38 和 0x3C,继续传输时,地址又会从0x30开始
。如果是4拍增量
突发传输,那么它将包含四个到地址0x30、0x34、0x38 和 0x3C,继续传输。地址会从0x40开始
,0x44、0x48、0x4C这样增加,这就是回环和增量的区别。注意:突发禁止超过 1KB(1024bit) 的地址边界。因此主机不要尝试发起一个将要超过这个边界的定长增量突发;在执行单个传输时使用未指定长度的增量突发可以理解为长度为1的突发;一个增量突发可以是任何长度,但是(长度)上限由“
地址不能超过 1KB 边界
”这个事实限定了。
怎么理解这个地址对齐呢,以4拍回环突发为例
8bit | 16bit | 32bit | 64bit | 总结 |
---|---|---|---|---|
addr+1 | addr+2 | addr+4 | addr+8 | - |
0->1->2->3->0 | 0->2->4->6->0 | 0->4->8->C->0 | 0->8->10->18->0 | - |
00 01 10 11 高两位累加 |
00 0 01 0 10 0 11 0 最低位不变,高两位累加 |
00 00 01 00 10 00 11 00 低两位不变,高两位累加 |
00 000 01 000 10 000 11 000 低三位不变,高两位累加 |
16bit->[0]=0 32bit->[1:0]=00 64bit->[2:0]=000 128bit->[3:0]=0000 … |
注意:突发大小表示突发的节拍数量,并不是一次突发传输的实际字节数量。一次突发传输的数据总量可以用节拍数乘以每拍数据的字节数来计算,每拍字节数由 HSIZE[2 :0]指示。
HPROT[3] (cacheable) (高速缓存) |
HPROT[2] (bufferable ) (带缓冲的) |
HPROT[1] (privileged) (特权模式) |
HPROT[0] (data/opcode) (数据/预取指) |
Description |
---|---|---|---|---|
- | - | - | 0 | Opcode fetch(预取指) |
- | - | - | 1 | Data access(数据访问) |
- | - | 0 | - | User access(用户模式访问) |
- | - | 1 | - | Privileged access(特权模式访问) |
- | 0 | - | - | Not bufferable(无缓冲) |
- | 1 | - | - | Bufferable(带缓冲) |
0 | - | - | - | Not cacheable(无高速缓存) |
1 | - | - | - | Cacheable(带高速缓存) |
官方手册里面有这样一句话:Not all bus masters will be capable of generating accurate protection information, therefore it is recommended that slaves do not use the HPROT signals unless strictly necessary.大概的意思是说:不是所有的总线主机都能产生准确的保护信息,因此,如果从机没有严格必要使用的情况下,不建议使用HPROT信号。(我也是初学,不知道这个信号重不重要,可能没那么重要吧)
(1)基本传输
AHB2 传输可分为两部分:
- 地址相位,只持续单个周期;
- 数据相位,可能需要多个周期,通过HREADY信号扩展实现;
在这个没有等待状态的简单传输中:
- 主机在 HCLK 的上升沿之后将地址和控制信号驱动到总线上;
- 然后在时钟的下一个上升沿,主机驱动写数据到总线上,且从机采样地址和控制信息;
- 在从机采样了地址和控制信号后,开始驱动适当的响应并且该响应被总线主机在第三个时钟的上升沿采样。
注:这个例子演示了在不同的时钟阶段传输的地址和数据相位是如何产生的。事实上,任何传输的
地址相位在前一次传输的数据相位期间
出现。这种地址和数据的交叠
是总线传输通道的基本性质同时允许高性能的操作,同时给从机提供足够的时间来产生传输响应。
注:控制信息包括传输方向HWRITE,传输大小HSIZE[2:0],保护控制HPROT[3:0]
官方手册有这样两句话:
- For write operations the bus master will hold the data stable throughout the extended cycles.
- For read transfers the slave does not have to provide valid data until the transfer is about to complete.
大概的意思是,对于写操作而言,主机必须保持总线数据在整个扩展周期中稳定不变化;对于读操作,从机没有必要在传输即将结束前一直提供有效的数据。
官方手册有这样一句话:
- When a transfer is extended in this way it will have the side-effect of extending the address phase of the following transfer.
- 当传输以HREADY扩展方式进行传输,那么在随后的传输过程中,会影响到地址相位。
扩展数据相位
对传输地址C的扩展地址相位
产生了影响,地址C的地址相位也多维持了一个周期。
- 第一个传输是一次突发传输的开始,所以是NONSEQ(非连续)类型;
- T2时刻,主机不能立即执行第二次突发传输,所以主机请求了一个BUSY(忙)类型来延时准备。在这个实例中,在第二次突发传输之后,没有等待状态了;
- T3时刻开始,主机立即执行第二次突发传输。T4时刻立即执行第三次突发传输。但此时,从机没有准备好,使用了HREADY来插入一个延时等待状态;
- 最后一个突发传输以无等待状态完成。
(2) a Four-beat wrapping burst(一个四拍回环突发)
(3)a Four-beat incrementing burst(一个四拍增量突发)
(4)an Eight-beat wrapping burst(一个八拍回环突发)
(5) an Eight-beat incrementing(一个八拍增量突发)
(6)Undefined-length bursts(一个未定长度的突发)
由这张图可以发现,三个从机共用一个地址总线。通过Decoder中央地址译码器提供选择信号。(官方:The select signal is a combinatorial decode of the high-order address signals,and simple address decoding schemes are encouraged to avoid complex decode logic and to ensure high-speed operation.选择信号是高位地址信号的组合译码,并且建议使用简单的译码方案以避免复杂译码逻辑和确保高速操作。)
注:
- 从机只能在 HREADY 信号为高时采样地址和控制信号以及 HSELx,HSELx 为高表示当前传输已经完成。在特定的情况下有可能在 HREADY 为低时采样 HSELx,但是被选中的从机将会在当前传输完成后变更。
- 在系统设计中如果有包含一个存储器映射并未完全填满(存储空间)的情况时,应该设置一个额外的默认从机,以在访问任何不存在的地址空间时提供响应。如果一个非连续或者连续传输试图访问一个不存在的地址空间时,这个默认从机应该提供一个 ERROR 响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的 OKAY 响应。这个默认从机的功能将以作为中央地址译码器的一部分来实现。
值得注意的是,AHB协议中,在主机发起传输后,由从机决定传输如何进行。而且只要从机被访问,那么它必会提供一个表示传输状态的响应。其中HREADY信号用来扩展传输,和响应信号HRESP[1:0]结合以表示相应的传输状态。
从机能提供多种状态完成传输:
- 立即完成传输;
- 插入一个或者多个等待状态以允许有时间来完成传输;
- 发出一个错误信号来表示传输失败;
- 延时传输的完成,但是允许主机和从机放弃总线,把总线留给其他传输使用。
(1)传输完成(Transfer done)
HREADY 信号用来扩展一次 AHB 传输的数据部分(也会影响到地址总线)。当 HREADY 信号为低时,表示传输将被扩展;直到其为高时,表示传输完成。
官方:
- Every slave must have a predetermined maximum number of wait states that it will insert before it backs off the bus, in order to allow the calculation of the latency of accessing the bus. It is recommended, but not mandatory, that slaves do not insert more than 16 wait states to prevent any single access locking the bus for a large number of clock cycles.
- 在从机放弃总线之前,每个从机必须有一个预先确定插入的最大等待状态数目,以便能够计算访问总线的延时。建议但不强制规定,从机不要插入多于 16 个等待状态以防止任何单个访问将总线锁定较长的时钟周期。
(2)传输响应(Transfer response)
HRESP[1] | HRESP[0] | Response | Description |
---|---|---|---|
0 | 0 | OKAY | 当 HREADY 为高时,表示传输已经成功完成。OKAY 响应也被用来插入任意一个附加周期,当 HREADY 为低时,优先给出其他三种响应之一。 |
0 | 1 | ERROR | 该响应表示发生了一个错误。错误条件应该发信号给总线主机,以便让主机意识到传输失败。一个错误条件需要双周期响应。 |
1 | 0 | RETRY | RETRY(重试)信号表示传输并未完成,因此总线主机应该重试传输。主机应该继续重试传输,直到完成为止。要求双周期的 RETRY 响应。 |
1 | 1 | SPLIT | 传输并未成功完成。总线主机必须在下一次被授予访问总线时重试传输。当传输能够完成时从机将请求代替主机访问总线。要求双周期的 SPLIT 响应。 |
(3)双周期响应(Two-cycle response)
仅有 OKAY 响应可以在单个周期里给出,ERROR、SPLIT 和 RETRY 响应需要至少两个周期。为了完成这些响应中的任意一个那么在倒数第二个
(最后一个的前一个)周期从机驱动 HRESP[1 :0]以表示 ERROR、RETRY 或者 SPLIT 并同时驱动 HREADY 为低以给传输扩展一个额外的周期
。在最后一个周期 HREADY 被驱动为高电平以结束传输,同时HRESP[1 :0]保持驱动以表示 ERROR、RETRY 或者 SPLIT。
上图是一次RETRY操作的例子。在上图中,T2时刻,驱动HREADY为低电平,同时HRESP状态为RETRY;T3驱动HREADY为高电平,同时HRESP维持原来的状态一个周期。
过程可以理解为:
(4)错误响应(Error response)
上图表示在一个传输中,从机请求一个周期来决定它将要给出的响应(在此期间HRESP为OKAY状态),之后从机用一个双周期的ERROR状态响应结束传输(在第二个ERROR时,HREADY驱动为高电平)。
官方
- If a slave provides an ERROR response then the master may choose to cancel the remaining transfers in the burst. However, this is not a strict requirement and it is also acceptable for the master to continue the remaining transfers in the burst.
- 大概的意思是:如果从机提供一个错误响应,那么主机可以选择取消突发中剩下的传输。也可以继续突发中剩下的传输,没有严格的要求。
(5)分块和重试(Split and retry)
分块和重试响应给从机提供了在无法立刻给传输提供数据时,释放总线的机制。这两种机制都允许在总线上结束传输,因此允许更高优先级的主机能够访问主机。
分块(SPLIT)和重试(RETRY)的不同之处在于仲裁器在发生 SPLIT 和 RETRY 后分配总线的方式:
- 对于 SPLIT 传输而言,仲裁器将调整优先级方案,以便其他任何主机请求总线都能获得总线访问权,即使是优先级较低的主机。为了完成一个 SPLIT 传输,当从机有可用数据时,从机必须通知仲裁器。
- 对RETRY而言,仲裁器将继续使用常规优先级方案,因此拥有更高优先级的主机将优先获得总线访问权。
SPLIT 传输虽然增加了仲裁器和从机的复杂性,但是却有可以完全释放总线给其他主机使用的优点,而在 RETRY(响应)的情况下,就只允许较高优先级的主机使用总线。
对于宽度小于总线宽度的传输,例如一个在 32 位总线上的 16 位传输,那么总线主机仅需要驱动相应的字节通道,从机负责从正确的字节通道选择写数据。有效字节通道取决于系统的端结构(小端系统和大端系统),但是 AHB 并不指定要求的端结构。因此,总线上所有主机和从机的端结构相同这点很重要。
Transfer size 传输大小 |
Address offset 地址偏移 |
DATA[31:24] | DATA[23:16] | DATA[15:8] | DATA[7:0] |
---|---|---|---|---|---|
Word | 0 | Y | Y | Y | Y |
Halfword | 0 | - | - | Y | Y |
Halfword | 2 | Y | Y | - | - |
Byte | 0 | - | - | - | Y |
Byte | 1 | - | - | Y | - |
Byte | 2 | - | Y | - | - |
Byte | 3 | Y | - | - | - |
Transfer size 传输大小 |
Address offset 地址偏移 |
DATA[31:24] | DATA[23:16] | DATA[15:8] | DATA[7:0] |
---|---|---|---|---|---|
Word | 0 | Y | Y | Y | Y |
Halfword | 0 | Y | Y | - | - |
Halfword | 2 | - | - | Y | Y |
Byte | 0 | Y | - | - | - |
Byte | 1 | - | Y | - | - |
Byte | 2 | - | - | Y | - |
Byte | 3 | - | - | - | Y |
对于宽度小于总线宽度的传输从机仅需要在有效的字节通道提供有效数据,总线主机负责从正确的字节通道中选择数据。当传输以 OKAY 响应完成时从机仅需提供有效数据。SPLIT、RETRY 和 ERROR 响应不需要提供有效的读数据
。
==仲裁器有啥用?==仲裁器可以被用来确保任何时刻只有一个master能够访问总线,即通过检测诸多访问总线的请求和决定当前请求总线的多个master中的优先级。同时仲裁器也接收来自slave的需要完成SPLIT传输的请求。
官方:
- Any slaves which are not capable of performing SPLIT transfers do not need to be aware of the arbitration process, except that they need to observe the fact that a burst of transfers may not complete if the ownership of the bus is changed.
- 任何不能执行SPLIT传输的从机不需要知道仲裁过程,除非它们需要检测因为总线的所有权被更改,而到最后传输可能无法完成的情况。
(1)信号列表
Signal | Description |
---|---|
HBUSREQx | 被总线主机用来请求访问总线的总线请求信号 。每个总线主机都有自己的连接到仲裁器的 HBUSREQx 信号并且任何一个系统中都可以有高达 16 个独立的总线主机。 |
HLOCKx | 由主机在请求总线的同时时断言的锁定信号 。这提示仲裁器主机正在执行一系列不可分割的传输并且一旦锁定传输的第一个传输已经开始仲裁器不能授予任何其他主机访问总线 。HLOCKx 必须在涉及到的地址被寻址到之前至少断言一个周期 ,以防止仲裁器改变授予信号。 |
HGRANTx | 授予信号 由仲裁器产生并且表示相关主机是当前请求总线的主机中优先级最高的主机,(优先)考虑锁定传输和 SPLIT 传输。主机在 HGRANTx 为高时获取地址总线的所有权并且在HCLK 的上升沿 HREADY 为高电平。 |
HMASTER[3 :0] | 仲裁器使用 HMASTER[3: :0]信号表示哪一个主机当前被授予总线并且该信号可被用来控制中央地址和控制多路选择器。有 SPLIT 传输能力的从机也可以请求主机的序号以便它们能够提示仲裁器哪个主机能够完成一个 SPLIT 传输。 |
HMASTLOCK | 仲裁器通过断言 HMASTLOCK 信号指示当前传输是一个锁定序列的一部分,该信号和地址以及控制信号有相同的时序。 |
HSPLIT[15 :0] | 这 16 位有完整分块能力的总线被有分块(SPLIT)能力的从机用来指示哪个总线主机能够完成一个 SPLIT 传输。仲裁器需要这些信息以便于授予主机访问总线完成传输。 |
(2)请求总线访问
(3)授予总线访问
上图表示了当所有传输都为零等待状态并且HREADY信号为高时的处理过程(即无等待状态访问授予)。仲裁器通过断言相应的 HGRANTx 信号(授予信号)来表示请求总线的主机中哪个是当前优先级最高的。当当前传输完成,由 HREADY 为高时所表示,那么主机将被授予(总线)并且仲裁器将改变HMASTER[3:0]信号来表示总线主机序号。
上图描述的是“有等待状态的访问授予”过程,有等待和无等待的区别在于HREADY是否被驱动为低电平进行扩展。即当HGRANT信号被断言(高电平)且HREADY驱动为高电平时,主机被授予总线。数据总线的所有权延时在地址总线的所有权之后。一次传输无论何时完成(由HREADY为高时所表示)然后占有地址总线的主机才能使用数据总线并且将继续占有数据总线直到传输完成。
上图描述的是“两个总线主机之间,数据总线移交”过程,在T5时刻,HGRANT_M2为高,且HREADY为高,总线移交。T5时刻之后,master_2占用地址总线个控制信号。
上图描述的是一个仲裁器在一次突发传输结束时移交总线的过程。在T7时刻,master_1已经突发完成,此时HGRANT_M2为高,HREADY为高,总线移交给master_2。我们可以看到:仲裁器在倒数第二个(最后一个之前的)地址被采样时改变 HGRANTx 信号。新的HGRANTx 信息将在突发的最后一个地址被采样的同时被采样。
上图描述的HGRANTx和HMASTER信号是如何在系统中使用的。
官方:
- Because a central multiplexor is used, each master can drive out the address of the transfer it wishes to perform immediately and it does not need to wait until it is granted the bus. The HGRANTx signal is only used by the master to determine when it owns the bus and hence when it should consider that the address has been sampled by the appropriate slave.
- 因为使用了中央多路选择器,每个主机可以立刻输出它希望执行的地址而不需要等到被授予总线。HGRANTx 信号是仅被主机用来决定它何时拥有总线并因此需要考虑何时让地址被合适的从机采样。
(4)突发提前终止
通常仲裁器在突发传输结束之前不会将总线移交给一个新的主机。但是,如果仲裁器决定突发必须被提前终止以防止过长的总线访问时间那么它可能会在一个突发完成之前将(总线)授予转移给另外一个总线主机。
如果主机在突发传输中间失去了对总线的所有权那么它必须重新断言总线(请求)以完成突发。主机必须确保 HBURST 和 HTRANS 信号都被更新以反映主机不再执行一个完整的 4、8 或者 16 拍的突发。
例如,如果一个主机仅能完成一个 8 拍突发的 3 个传输,那么当它重新获得总线时必须使用一个合法的突发编码来完成剩下的 5 个传输。主机可以使用任何合法组合,因此无论是5拍未定长度的突发或者是4拍固定长度的突发然后跟上一个单拍未定长度的突发都是可以接受的。
(5)锁定传输
仲裁器必须监视来自各个主机的HLOCKx信号,以确定master何时希望执行一个锁定连续传输。之后,仲裁器负责确保锁定传输完成之前没有其他总线主机被授予总线。
在一个连续锁定传输之后,仲裁器将始终授予总线主机一个额外的传输,以确保锁定序列的最后一个传输成功完成,并且没有接收到 SPLIT 或者 RETRY 响应。因此建议但不规定,主机在任何锁定连续传输之后,插入一个空闲传输,以便开始另外一个突发传输之前为仲裁器改变(总线授予)提供机会。
仲裁器还负责断言HMASTLOCK信号,HMASTLOCK信号、地址和控制信号具有相同的时序。该信号指示每个从机当前传输是锁定的,因此必须在其他主机被授予总线之前进行处理。
(6)默认总线主机
必须只能执行空闲(IDLE)传输
。断言适当的位一个周期
以便仲裁器能够识别。逻辑或
在一起,以提供给仲裁器单个 HSPLIT 总线。一个位数和总线主机数量一样
的 HSPLIT 总线。但是,建议所有支持 SPLIT 的从机被设计成支持最多 16个主机。(1)分块传输的顺序
每个时钟周期
监视 HSPLITx 信号,并且当 HSPLITx 中的任何一位被断言仲裁器将恢复对应主机的优先级
;(2)多重分块传输(略)
(3)防死锁
SPLIT 和 RETRY 传输响应都必须在使用中注意预防总线死锁。单个传输决不会锁定AHB,因为每个从机必须被设计成能在预先确定的周期数内完成传输。但是,如果多个不同主机试图访问同一个从机,从机发出 SPLIT 或者 RETRY 响应以表示从机不能处理,那么就有可能发生死锁。
如果要求硬件保护那么这可以被 RETRY(响应)的从机自己执行。当一个从机发出一个 RETRY 信号后它能够采样主机序号。在这之后和传输最终完成之前 RETRY 的从机可以检查做出的每次传输尝试以确保主机序号是相同的。如果从机发现主机号不一致那么它可以选择下列的行动方式:
- 一个错误响应;
- 一个信号给仲裁器;
- 一个系统级中断;
- 一个完全的系统复位。
协议要求主机在接收到一个SPLIT或者RETRY响应后,
立刻执行一个空闲传输
以允许总线转移给另外一个主机。
- 传输的地址在时间 T1 之后出现在总线上。在时钟沿 T2 和 T3 后从机返回两个周期的 SPLIT 响应;
- 在第一个响应周期的末尾,也就是 T3,主机能够检测到传输将会被分块因此(主机)改变接下来的传输控制信号以表示一个空闲传输;
- 同样也在时间 T3 处仲裁器采样响应信号并确定传输已经被分块。之后仲裁器可以调整仲裁优先权并且在接下来的周期改变授予信号,这样新的主机能够在时间 T4后被授予地址总线;
- 新主机可以保证立刻访问(总线),因为空闲传输总是在一个周期内完成。
AHB_Lite与AHB2对比,属于简化版。主要应用框架是单master多slave结构,因此没有仲裁器。
AHB_Lite协议有以下特性:
- Burst transfers(突发传输)
- Single clock-edge operation(单时钟沿操作)
- Non-tristate implementation(无三态)
- Wide data bus configurations,32,64,128,256,512,1024(数据总线配置,最大为1024bit)
- All transfer in a burst must be aligned to the address(基于地址对齐的突发传输)
- Pipeline transfer(流水线传输)
&emsp AHB3协议可以实现单master多slave互连
在单master多slave架构下,多slave共用一个数据和地址总线,其中地址总线中,位宽包括Decoder位和真正的地址。如3个slave,则至少需要2bit片选位,即[31:30]是Decoder片选slave,[29:0]才是真正的地址(地址译码)。
Name | Destination | Description |
---|---|---|
HCLK | Clock Source | 总线时钟,所有的信号时序变化都在HCLK的上升沿触发. |
HRESETn | Reset controller | 总线复位信号,低有效,复位更个系统和总线. 这是AHB-Lite信号中唯一的低有效信号. |
HADDR[31:0] | Slave and decoder | 系统的32位地址总线 |
HBURST[2:0] | Slave | Burst类型表示当前传输是否是single传输还是构成burst传输的一拍. 支持固定长度为4、8和16的burst.Burst可以是递增型或者是回卷型. 系统同样支持未定义长度的递增型burst.详细的和AHB2一样,可以查看上一章内容 |
HMASTLOCK | Slave | 当为高电平时,表示当前传输是一个锁定序列的一部分. 它与地址总线和控制信号有着相同的时序. |
HPROT[3:0] | Slave | 保护控制信号提供总线访问的额外信息,设置它的初衷是方便一些模块需要实现多种的级别的保护功能.保护控制信号,表示当前传输是否是一个操作码获取还是数据访问,还可以表示传输是否是一个特权模式访问还是用户模式访问. 对于带MMU功能的Master,保护信号也可以指示是否当前访问可以高速缓存(Cachable)或者Buffer缓存。和AHB2一样,可查看2.9小节 |
HSIZE[2:0] | Slave | 表示传输的大小,典型值有字节、半字和字。 协议支持更大的传输大小,支持最大值为1024位 |
HTRANS[1:0] | Slave | 指示当前传输的传输类型.。可以是: IDLE BUSY NONSEQUENTIAL SEQUENTIAL. |
HWDATA[31:0] | Slave | 写数据总线 在总线写操作时从Master向Slave传输数据,建议最小的数据总线位宽为32位. 当然,位宽也可以扩展到支持更高带宽的操作. |
HWRITE | Slave | 表示传输方向. 高电平表示写操作,低电平表示读操作。 它需要和地址总线同时有效,但在burst传输中必须保持不变。 |
Name | Destination | Description |
---|---|---|
HRDATA[31:0] | 多路器 | 在读操作时,此信号从被选中的Slave向多路器传输数据.。多路器再将数据传输到Master.建议最小的数据总线位宽为32位.。当然,位宽也可以扩展到支持更高带宽的操作(宽度为32/64/128/256/512/1024) |
HREADYOUT[2:0] | 多路器 | 当信号为高电平,表示总线上的传输结束了。 此信号可以通过驱动为低电平来增加传输的拍数 |
HRESP | 多路器 | 传输的响应信号,在通过多路器后,给Master提供传输的状态信息。当信号为低电平,表示传输的状态正常。当信号为高电平,表示传输的状态错误。 |
Name | Destination | Description |
---|---|---|
HSELx | Slave | 每个AHB-Lite Slave 拥有它自己的选择信号HSELx,并且这个信号指示了当前传输意图选择的Slave。当Slave被选中,它必须要监控HREADY信号的状态来确保在它响应当前传输之前的那个总线传输已经完成。HSELx信号是地址总线的组合逻辑译码。 |
Name | Destination | Description |
---|---|---|
HRDATA[31:0] | Master | 读数据总线,由译码器输入的选择信号选出 |
HREADY[2:0] | Master和Slave | 当信号为高电平,HREADY信号指示给Master和所有的Slave,前一个传输已经完成了 |
HRESP | Master | 传输的响应信号,由译码器输入的选择信号选出 |
作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。