AHB协议(2/2)

Charpter 4 Bus Interconnection

4.1 互联结构

互联结构在系统中提供了M端和S端的连接。单一的M端只需要使用一个解码器和多路选择器。
一个多M端的系统中需要使用提供仲裁和将信号从不同的M端分发到对应的S端的互联结构。分发结构需要地址,控制信号和写数据。

4.2 地址解码

地址解码器为总线上的S端提供了一个选择信号HSELx。地址解码器需要简单的逻辑,避免使用复杂的编码逻辑来保证高速的操作。
S端在HREADY为高时,必须只对HSELx,地址和控制信号进行采样,来表明此传输将要完成。在确定的周期内,HSELx成立当HREADY为低时,但是被选择的S端已经改变当当前传输完成时。
对于单个的S端,最小的地址空间可以分配为1KB,起始和结束的地址位置必须在1KB的地址边界内。所有的M端被设计为只能发送不超过1KB地址边界的增长式传输。此确保了猝发不会跨过地址边界。
AHB协议(2/2)_第1张图片

4.2.1 默认的S端

如果一个系统设计中不包含一个覆盖所有内存的内存图,那么一个额外的S端必须被实现,当任何一个不存在内存映射图的地址被访问时用来提供反馈信号。
如果一个NONSEQUENTIAL或者SEQUENTIAL传输试图访问一个不存在的地址,那么默认的S端提供错误的反馈信号。
IDLE或者BUSY传输访问不存在的地址,默认的S端反馈一个0等待的OKAY反馈信号。

4.2.2 多S端的选择

单个的S端接口推荐支持多个S端的选择,使用HSELx信号。每个HSELx信号对应一个高的地址位。
这允许一个单个S端接口提供多个逻辑接口,每个逻辑接口在系统地址映射图中有不同的地址。可以被分配的最小的地址空间是1KB。此通道的实现就不需要S端支持不同的逻辑接口进行地址编码。
多HSELx信号通常的使用场景是一个外围设备在地址映射图中具有数据路径和不同地址下的控制寄存器。通过一个不需要进行地址编码的S端接口,两个位置都可以访问。

4.2.3 读数据和多路选择器反馈信号

AHB协议的读数据使用了读数据多路选择器的互联结构。M端驱动地址和控制信号到S端,传输的data phase译码器选择合适的S端。被选中的S端发送反馈信号,通过读数据多路选择器到M端。AHB协议(2/2)_第2张图片

4.4 通过AHB接口互联

通常的互联产品可以提供AHB接口作为可选项,比如AMBA中的AXI,APB。
AHB协议(2/2)_第3张图片

如上图所示,通常的接口应该实现HTRANS,HREADY,HSEL信号。

在这个例子中,互联结构的M端使用HREANS信号表明传输的有效性,并且具有一个HREADY信号。HREADY信号用于暂缓一个传输,当S端插入一个等待状态或者当M端等待互联结构的仲裁时。
互联结构的M端包含一个HSEL输出和两个HREADY信号。S端的HREADYOUT传输给M端来插入等待状态。互联结构的HREADY输出可以用来暂缓S端,如果前一个传输的data phase暂缓时。
S端的HSLE被拉高,然后互联结构来将没有被选中的S端的HTRANS变为IDLE状态,此特性为可选实现。

Charpter 5 Subordinate Response Signaling

5.1 S端传输反馈

在M端开始一次传输后,S端控制传输的过程。M端在开始传输后无法取消传输。
S端必须提供一个反馈信号来表明传输的状态。传输的状态由HRESP信号来表示。
AHB协议(2/2)_第4张图片

下表图是HRESP和HREADYOUT组合的情况
AHB协议(2/2)_第5张图片

这意味着S端可以通过以下三个方式完成传输:

  1. 立即结束传输
  2. 反馈一个error信号表明此次传输失败
  3. 插入一个或多个等待状态确保有足够的时间完成本次传输

5.1.2 传输完成

成功的完成一次传输时HREADY为高,HRESP是OKAY。

5.1.3 传输挂起

通常S端使用HREADYOUT来插入一定数量的等待状态到一次传输的data phase。然后,传输通过拉高HREADYOUT,反馈OKAY信号来表明成功完成一次传输。
当S端插入一定数量的等待状态在完成一次反馈,必须首先将HRESP信号驱动为OKAY状态。
注:通常,每个S端必须具有一个预先确定的插入最大等待状态数量在完成一次传输之前。这使得与总线传输的最大延时可以计算。插入等待状态使整个AHB接口暂停,如此长的等待状态对系统性能有不利的影响。

5.1.4 错误响应

S端使用反馈ERROR表明跟随的传输某种形式的错误状况。通常此状况对应一个保护错误,比如试图写一个只读寄存器地址。
尽管OKAY回应可以在一个单周期内驱动,但是ERROR反馈需要两个周期。为了开始ERROR反馈,S端驱动HRESP为高来表明ERROR,当驱动HREADYOUT为低来延长一个传输进行一个额外的周期。在下一个周期内,HREADYOUT被驱动为高来结束此次传输,HRESP持续驱动为高来表明ERROR状态。
需要两个周期的反馈,因为总线流水线的本性。当S端开始一次ERROR反馈传输时,接下来的传输已经将地址映射到总线上。两个周期的反馈为M端提供足够的时间来取消下次传输并将HREANS驱动为IDLE来开始下一次传输。
如果S端需要多于两个周期来反馈ERROR,那么额外的等待状态可以被插入到此次传输的开始。当HREADY为低时,反馈必须设置为OKAY。

AHB协议(2/2)_第6张图片
T1~T2:S端插入一个等待状态,提供了一个OKAY反馈信号
T2~T3:S端提供一个错误反馈。这是错误反馈的第一个周期,因为HREADY为低。
T3~T4:S端反馈一个错误反馈。这是错误反馈的第二个周期,因为此时HREADY为高。M端改变传输类型为IDLE。这取消了对地址B的传输,此次传输由S端在时刻T2进行注册的。
T4~T5:S端反馈一个OKAY反馈。

如果S端提供错误反馈,那么M端可以取消猝发传输中的剩余传输。但是这条规定并不是严格的要求,如果M端继续猝发中的剩余传输也是可以接受的。M端接收到错误反馈,传输中的读操作可能还使用数据。S端不能依靠ERROR反馈来阻止读取HRDATA中的数据。推荐将HRDATA驱动为0,当ERROR反馈被驱动到读传输中。

Charpter 6 Data Buses

6.1 数据总线

读写分开的总线需要实现AHB系统。数据总线的最小宽度被声明为32比特,此数据可以改变。

6.1.1 HWDATA

在写传输中,M端驱动写数据到总线。如果传输被延长,那么M端必须保持数据有效直到传输结束,此时HREADY为高。
对于传输的数据宽度小于系统的宽度,比如,在32位总线上进行数据位宽16比特的传输,M端只需要驱动对应的比特位。S端从写数据中选择的比特位。

6.1.2 HRDATA

在读传输过程中,对应的S端驱动读数据到总线。如果S端通过将HREADY驱动为低来延长读传输,那么S端只需要在传输的最后一个周期提供合法的数据,此时HREADY为高。
对于传输数据位宽小于总线位宽,S端只需要提供有效的数据在对应的比特位。M端从读数据中选择对应的比特位。
S端只需要提供合法的数据当传输完成后反馈OKAY反馈。错误的反馈不需要提供合法的读数据。

6.2 大小端

AHB支持大端和小端的系统。支持两种大端数据存储。
BE8:字节不变的大端法。字节不变的大端法和字节不变的小端法驱动的总线比特位位置相同。
BE32:字有效的大端法。字有效的大端法使用跟地址总线上的MS(Most Significant)字节相同的地址。小端法使用跟地址总线上LS(Least Significant)字节相同的地址。
下面的方程定义了小端,字节有效的大端,字有效的大端的比特位。方程中使用到如下变量:
Address:传输的地址
Data_Bus_Bytes:8字节的总线字边界数量
INT(x):x数值向下取整得到的整数值

6.2.1 小端法

当小端法访问一个字节,下面的方程展示了总线上的哪些比特位被使用:
Byte_Lane = Address - (INT(Address/Data_bus_Bytes))X Data_Bus_Bytes
数据被传输到DATA[(8 x Byte_Lane)+7 : (8 x Byte_Lane)]
当更大的小端法传输发生,数据如此传输:
LS字节传输到传输的位置
递增的字节传输到从LS开始递增的地址。

6.2.2 字节有效的大端法

字节有效的大端法访问字节时,下面方程展示了数据总线上比特位使用情况:
Byte_Lane = Address - (INT(Address / Data_bus_Bytes)x Data_Bus_Bytes)
数据在DATA[(8xByte_lane)+7 : (8xByte_lane)]比特位进行传输。

6.2.3 字有效的大端法

字有效的大端法访问比特时,数据总线的比特位如下方程所示:
Address_Offset = Address - (INT(Address/Data_Bus_Bytes))x Data_bus_Bytes
Word_Offset = (INT(Address_Offset / 4))x 4
Byte_Offset = Address_Offset - Word_Offset
数据在DATA[(8 x (Word_Offset + 3 - Byte_Offset)) + 7 : 8 x (Word_Offset +3 - Byte_Offset)]
对于32比特的总线,Word_Offset总是为0,所以传输的方程可以简化为:
DATA[8 x (3 - Byte_Offset) + 7 : 8 x (3-Byte_Offset)]
对于半字和字传输使用字不变的大端传输,数据传输如下:
最大字节传输到传输的地址处。
递减的字节位对应着地址递增的位置。
对于使用字有效的大端法,数据按照字为单位的块:
最小的字传输到传输的地址位置。
递增的字数据别传输到递增的地址处。
猝发传输的传输大小如果小于总线宽度,那么每一次传输,数据线上的有效位每次都改变。
AHB协议(2/2)_第7张图片AHB协议(2/2)_第8张图片

6.2.4 字节不变性

字节不变的大端数据结构简化了在一段内存中的混合型数据结构

使用字节不变的大端和小端法意味着,对于每个多字节元素的数据结构:
元素使用相同的内存中连续的字节位,而不管数据的大端还是小端。
大端还是小端决定了字节在内存中的位置,意味着决定了内存中的第一个比特位使用元素的MS比特还是LS比特位。
任何一个比特传输到给定的地址,将数据总线上的8比特传输到地址的相同位置,不管数据线的比特位的大端还是小端。
AHB协议(2/2)_第9张图片

如上图是字节不变的数据结构。在这个例子中,头部区域是小端法的循序,数据负载使用的是大端法顺序。在这种结构中,Count是一个两个字节的小端元素,意味着他们的最小的地址是LS比特。比特不变的使用保证了大端法的负载数据和小端法的数据元素不冲突。

6.3 数据总线宽度

一种不提高操作频率提高总线带宽的方法是将片上带宽变宽。
指定固定总线位宽意味着在多数场景下总线的宽度对于应用不是可选的。所以一种途径被应用来实现总线位宽的灵活性,但是同样保证设计设计模块间的模块具有高度的可移植性。
协议允许8,16,32,64,128,256,512和1024比特的数据宽度。但是推荐使用最小的总线位宽为32比特。最大的总线位宽为256比特适用于所有的应用。
对于读和写的传输,接收模块必须从总线上选择正确的比特位。跨比特边界的复制是不允许的。

6.3.1 在一个宽的总线上实现一个窄的S端

下图展示了被设计为操作32比特总线位宽的S端模块如何被转换为64比特位宽。这只需要一个额外的逻辑,而不是内部设计的改变,这种技术适用于硬件设计单元。
AHB协议(2/2)_第10张图片

对于输出,当转换窄的总线到宽的总线上,只需要做以下的一条:
复制宽的总线上的数据两个部分。
使用额外的逻辑结构来保证总线上合适的一半改变。这可以减少能量的消耗。
一个S端只能接受传输的宽度和他的接口的宽度相同。如果一个M端试图传输一个宽度大于S端可支持的宽度,那么S端可以使用反馈ERROR。

6.3.2 实现一个宽的S端在一个窄的总线上

预先的设计或输入S端可以被调整为在使用外部逻辑调整数据工作在一个窄的数据总线上,如下图所示。
AHB协议(2/2)_第11张图片

6.3.3 实现一个M端在一个宽的总线上

M端可能被调整为工作在一个比原先预期较宽的总线上,就像S端修改工作在一个较宽的总线上。通过以下步骤来实现:
对输入总线进行选择。
复制总线输出。
注:M端不能工作在比之前预期的总线上窄的总线上,除非M端包含一些限制传输带宽的逻辑。M端不能发送位宽,由HSIZE决定的,比跟他连接的数据总线宽。

Charpter 7 Clock and Reset

7.1 时钟和复位需求

这部分描述了实现HCLK和HRESETn的要求。

7.1.1 时钟

每个组件使用单一的时钟信号,HCLK。所有的输入信号在HCLK时钟的上升沿采样。所有的输出信号在时钟的上升沿之后改变。
信号需要保持为固定值不变在延长的传输中的不同的时钟上升沿。但是,这些信号可能在时钟边沿失效,返回为在之前驱动值相同的值。
注:在一个可综合的设计flow中,输出多路选择器的控制信号在一个延长的传输中可能改变,但是结果是被使用过的相同的输出数值。

需要明确定义,在时钟上升沿之间接口是否失效。

AHB5定义了在时钟沿之间固定不变的性质。这种特性明确了接口保证信号的稳定性在上升的时钟边沿之间。
如果这种特性为真,它保证了在上升时钟沿之间,信号需要保持为稳定,并且不能失效。
如果这个特性为假,或者是没有被定义,在上升时钟沿之间信号可以失效。

7.1.2 复位

复位信号HRESETn,仅低位有效并且将总线中的所有元素复位。可以进行异步复位,但是在时钟的上升沿同步释放。
一个组件必须定义一个最小的时钟周期数,在此周期内复位信号必须持续有效来保证组件的完全复位,输出是所要求的复位值。
在复位期间所有的M端必须保证地址和控制信号在有效的状态,HTRANS[1:0]为IDLE状态。
在复位期间,所有的S端必须保证HREADYOUT为高。

Charpter 8 Signal validity

8.1 AMBA AHB中数据有效性

当信号没有被要求为有效时,他们可以取任何值,但是推荐使用0或者X态。当一个数据传输具有非法的字节位时,推荐将非法的字节位驱动为0。这保证了传输数据之间当非法字节位被采样时的数据泄露。

8.2 信号有效性规则

下述信号必须一直有效:
HTRANS
HADDR
HSEL
HMASTLOCK
HREADY
HREADYOUT
HRESP

下述信号必须有效当HREANS不为IDLE时:
HBURST
HPROT
HSIZE
HNONSEC
HEXCL
HMASTER
HWRITE
HAUSER

下述信号必须有效当一个写传输的data phase:
HWDATA
HWSTRB
HWUSER

下述信号必须有效在一个写传输的data phase,此时HREADY为高,HRESP为低:
HEXOKAY
HBUSER

下述信号在一个读传输的data phase必须有效,此时HREADY为高,HRESP为低:
HRDATA
HEXOKAY
HRUSER
HBUSER

Charpter 9 Atomicity

9.1 单次拷贝的原子性规格

单次拷贝的原子性规格定义了数据比特数量,传输需要保证自动更新。
单词拷贝的规格为沟通组件定义。比如:
处理器,DSP,DRAM控制器64比特单次拷贝的原子群组。
大的群组,包括处理器,DSP,DMA,DRAM,SRAM和外围进行32比特的单次拷贝群组。
一次传输不保证单次拷贝的地址对其到开始的地址。例如,64比特的单次拷贝的猝发传输,与8字节边界不对齐,并不保证64比特的单词拷贝原子性保证。
当一个写传输更新内存空间时,他必须保证以下一点:
没有更新位置
至少更新一次单个拷贝原子大小的数据。
单次拷贝的原子大小中的某些比特在一个时间更新,然后其他比特位在另一个时间更新是不允许的。
传输的字节的strobes信号对单次拷贝原子性大小没有影响。
要求一次传输的单个拷贝原子传输大小更新的内存块必须大于等于单次拷贝原子性的大小。
注:当决定单次拷贝原子性的大小时,当数据值更新时的实例不被考虑。必须保证M端不能观测到一个原子数据部分更新。
例如:在很多系统数据结构中,如由32比特原子元素的连接表。一次原子更新操作要求整个32比特数值在同一时刻更新。对于很多M端不能在一个时刻更新16比特,在另一个时刻更新另外16比特。
对于支持更大的原子元素的更加复杂的系统,特别是64比特原子元素,M端可以基于更大的原子元素进行通讯。

9.2 多次拷贝的原子性

AHB5定义了多次拷贝原子性的特性。该特性明确了系统提供多次拷贝原子性。
如果多次拷贝原子性为真,该系统需要被定义具备此特性。
如果多次拷贝原子性为假,该系统不支持此特性。
一个系统局别多次拷贝原子性如果:
对于同一地址写需要按照所有的agent的写顺序。
一次写操作能够被一个angent观测到,除了写操作的发起者,对其他的agents也可操作。
多次拷贝的原子性可以通过避免使用分发缓存,分发缓存使一次传输对于系统中的一些agent可见,但是不是对所有的angents可见。
注:额外的要求存在来保证系统中多次拷贝原子性,包括一些形式的硬件缓存一致性。这些额外的要求的更多细节本说明不再讨论。

Charpter 10 Exclusive Transfers

10.1 介绍

AHB5定义了专一的传输特性。此特性定义了该接口是否支持排外的传输。如果此特性没有被定义,该接口不支持排外的传输。
排外的传输提供了一些机制支持旗语类型的操作。
一次从单一M端排外的传输sequence操作使用以下步骤:
在一个地址上进行一次排外的读传输。
计算一个新的数据值存储到基于从排外读传输获取的数据值地址处。
在排外读和排外写之间可以有其他的非排外的传输。
排外写传输到相同的地址,新数据的值是:
在排外读开始时如果没有其他的M端写时,排外写传输可以成功的更新内存。
排外读传输开始时如果有其他的M端写时,排外写失败,内存地址没有更新。
排外写传输的反馈信号表明此传输是否成功。
此sequence保证内存地址只能更新如果在存储内存时,用于计算存储到地址的仍然保持同样的值。
如果排外写传输失败,M端重复整个排外操作sequence。
需要明确定义实现,在一次排外的读传输后相同的M端更新相同的地址,或者重叠的地址会导致随后的排外写传输失败或者成功。

10.2 排外访问检测器

排外访问检测器需要支持排外访问sequence,同时此检测器必须决定排外写传输的失败或者成功。
排外访问检测器必须具备同时检测系统中至少一个具备排外访问的M端的地址空间的能力。
系统中排外访问检测器的位置没有被定义。但是,他必须放置在能观测到排外访问sequence访问地址的位置。比如,包含多内存控制的系统中,包含一个排外访问检测器的,控制所有访问的一个中心控制器,或者每个内存控制器都具有分散的排外访问检测器。
系统支持排外访问序列到所有的地址位置不需要支持。对于不支持排外访问的sequence需要提供失败安全的机制。通常,系统需要支持排外访问到主要内存,所有外围设备可不支持。

10.3 排外访问信号

排外传输额外的信号有:
HEXCL:排外传输。表明传输是排外访问sequence的一部分。此信号是address phase的信号,与HADDR具备同样的有效性约束。
HMASTER[m:0]:M端标识符。具有多线程排外访问的M端必须产生此信号,用以区分线程间的不同。M端产生的HMASTER值将会由互联结构产生的值进行组合来保证为排外访问检测器的HMASTER的唯一性。此信号为address phase的信号,与HADDR具有相同的有效性约束。
HEXOKAY:排外访问OKAY。添加一个额外的反馈信号表明排外访问传输是否成功。
HMASTER[m:0]信号的宽度需要明确的定义。但是推荐使用以下宽度:
对于M端组件,实现具有排外线程能力的数量的比特数。
对于M端互联的互联结构,实现为4比特。可选地,互联结构可以支持更宽比特位的配置。
对于S端或者检测器组件,实现8比特。可选的,S端或者检测器可以支持更宽的比特位。
HMASTER信号用于除了排外传输的传输。推荐系统中的互联结构或者S端组件使用此信号区分系统中不同的M端和适应他们不同的行为。所以,合法的HMASTER指示必须为所有的传输提供,而不仅只为排外传输。

10.3.1 反馈信号

HEXOKAY信号被用来表明排外传输的成功或者失败。
当有效HEXOKAY时,表明排外传输成功,对于排外写传输,内存地址已经被更新。
如果无效HEXOKAY时,表明排外传输失败,这可能是因为:
排外传输试图访问不支持排外传输的地址。
由排外读传输的内存地址改变而导致的排外写传输失败。在此场景中,内存地址没有被更新。
M端可以首先通过确保对一个地址支持排外读来避免对不支持排外访问的地址发起一次排外写传输。
下面包含对HEXOKAY的约束:
HEXOKAY必须在HREADY信号有效的同周期内有效。
HEXOKAY只能用于对排外传输的反馈。
HEXOKAY必须在HRESP有效的同周期内有效。
在排外传输的地址只能由单个M端访问的系统中,推荐S端总是表明排外传输是成功的,不需要检测M端是否访问地址。

10.4 排外传输的限制

排外传输使用以下限制:
必须是单拍传输
必须表明表明猝发的类型是SINGLE或者INCR。
不能包含BUSY传输。
地址必须与HSIZE定义的数据大小对齐
HPROT信号值必须保证排外访问检测器对传输可见。
注:HPROT信号必须保证排外访问检测器对传输可见。如果排外访问检测器被放置在系统缓存的下游,那么传输必须是非缓存的。如果排外访问检测器放置在系统缓存的上游,传输应该是缓存的。如果排外访问检测器在一个写缓存的下游,可能给出一个早的写反馈,那么排外传输必须是非缓存的。
对排外访问读传输和排外写传输是排外访问sequence的一部分,下面这些信号对传输来说必须相同:
HADDR,地址
HSIZE,数据大小
HPROT,安全控制
HBURST,猝发类型
HMASTER,M端标识符
HNONSEC,非安全,如果适用
在相同的排外访问sequence中,M端可以发送一个排外访问读,但是接下来的传输不能是排外写传输。
在相同的排外访问sequence中,M端可以发送一个排外写传输,接下来不能是排外读传输。在这种场景下,排外写传输必须失败,HEXOKAY必须无效。
在同一时间,M端必须不能有两个排外传输是未完成的(outstanding)。当一个较早的排外访问的data phase进行中是,一次排外传输的address phase必须不能发送。这点应用如果传输是排外访问seqeunce的一部分。
推荐排外传输的address phase具有一个特殊的HMASTER值,而前一次排外访问的data phase具有一个不同的HMASTER值。

Charpter 11 User Signaling(略)

Charpter 12 Interface protection using parity(略)

参考资料:ARM® AMBA® 5 AHB Protocol Specification

你可能感兴趣的:(协议,网络,fpga开发,学习,硬件工程)