AHB(Advanced High Performance Bus)
AHB是半双工的总线。
AHB组成
AHB总线由主机(Master),从机(Slave)和Infrastructure组成。Infrastructure由仲裁器和数据多路选择器、地址控制多路选择器、译码器构成。
AHB master
master通过提供地址和控制信息发起读写操作。
AHB slave:
总线从机在给定的地址空间范围内响应读写操作。总线从机将成功、失败或者等待数据传输的信号返回给有效的主机。
AHB arbiter:
用于分配总线的使用权。当多个master申请调用总线时,Arbiter根据总裁算法决定哪个master调用总线。也就是为数据选择器,地址选择器提供控制信号用于选择输出的信号。
AHB decoder:
AHB的译码器用来对每次传输进行地址译码,并在传输中包含一个Slave的选择信号。所有AHB执行都不虚要求一个中央译码器。
有读写的数据通路,但是只有一条地址线。
AHB master
输入信号
名称 | 来源 | 描述 |
HCLK | 时钟源 | 为所有总线传输提供时基,所有信号的时序都和HCLK的上升沿有关; |
HRESETn | 复位控制器 | 总线复位信号,用于复位系统和总线,是唯一的低电平有效的信号; |
HGRANTx | 仲裁器 | 用于表示总线masterx时目前优先级最高的主机。 |
HREADY输出完成 | 从机 | 为高时表示总线上的传输已经完成。总线上的从机要求HRAEDY为inout |
HRESP[1:0]输出响应 | 从机 | 输出相应信号,提供四种响应:OKEY、ERROR、RETRY和SPLIT |
HRDATA[31:0]读数据总线 | 从机 |
用来在读操作期间从总线从机向总线主机传输数据。建议最小的数据总线宽度为 32 位。 在要求高带宽运行时扩展(数据总线)还是很容易的。 |
输出信号
名称 | 接收端 | 描述 |
HBUSREQx | 仲裁器 | 总线申请信号 |
HLOCKx | 仲裁器 | 表示主机x请求锁定对总线的访问,并且在信号为低之前其他master不应被允许总线。 |
HTRANS[1:0] | 表示当前传输类型,IDLE, BUSY, NONSEQ, SEQ | |
HWRITE | 高表示写传输,低表示度传输 | |
HSIZE[2:0]传输大小 | 表示传输数据的大小,传输数据大小为2^(3+HSIZE) bit | |
HBURST[2:0] | 表示传输是否组成突发的一部分,支持4、8、16个节拍的突发传输,突发传输可以使增量或者回环 | |
HPROT[3:0] |
地址译码
注意:能够分配给单个从机的最小地址空间是 1KB。所有总线主机必须被设计为不能执行超过 1KB 地址边界的增量传输,因此确保了一个突发绝不会超过地址译码的边界。
默认从机设置:在系统设计中如果有包含一个存储器映射并未完全填满(存储空间)的情况时应该设置一个额外的默认从机以在访问任何不存在的地址空间时提供响应。如果一个非连续或者连续传输试图访问一个不存在的地址空间时这个默认从机应该提供一个 ERROR 响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的 OKAY 响应。典型默认从机的功能将以作为中央地址译码器的一部分来实现。
由于项目中经常会涉及到总线的内容,想在AHB上挂一个SRAM和flash,我们从AMBA总线入手,从时序入手把AMBA总线理解一遍。而这之中我们主要看AHB总线。其次说APB总线。
AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。
AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的连接。APB用于连接外部设备,对性能要求不高,而考虑低功耗问题。ASB是AHB的一种替代方案。AHB总线之所以强大是由于它可以将CPU、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线主机、各种拥有AHB接口的控制器等,统统连接起来构成一个独立的完整的SOC系统,除此之外,还可以通过AHB-APB桥来连接APB总线系统。AHB可以成为一个完整独立的SOC芯片的骨架。如下面的就很能体现:
其实简而话之,就是要有发消息的接口,收消息的接口,以及决定谁发谁收的仲裁器。就好像是一条路,只能一辆车在路上跑,需要维持车从哪上,向哪下,既不能让两辆车在路上同时跑,也不能让准备上路的车在路口处等太久。
AHB总线包括AHB主机(master)、从机(slave)及仲裁器,数据多路选择器,地址多路选择器等。主机(master)就是发送数据的,而从机(slave)是接收数据的,而仲裁器就是来分配总线使用权的,当多个主机申请调用总线时,仲裁器根据其仲裁算法来决定谁来调用总线,也就是给数据选择器地址选择器控制信号来选择输入输出的信号。
对于一个标准AHB总线,它的接口如下:
HCLK——总线时钟——时钟——源时钟为所有总线传输提供时钟。所有信号时序都和HCLK的上升沿相关。
HRESETn——复位——复位——控制器总线复位信号,低电平有效,用来复位系统和总线。这是唯一低电平有效的信号。名称来源描述
HADDR[31:0]——地址总线——主机——32位地址总线
HTRANS[1:0]——传输类型——主机——表示当前传输的类型,可以是连续,不连续,空闲和忙
HWRITE——传输方向——主机——该信号为高表示一个写传输,为低表示一个读传输
HSIZE[2:0]——传输大小——主机——表示传输的大小,三位表示0…7,分别对应8bits(byte), 16bits(halfword),32bits(word),64bits, 128bits,256bits, 512bits,1024bits
HBRUST[2:0]——突发类型——主机——表示传输是否组成了突发的一部分。支持4个,8个,16个节拍的突发传输,突发传输可以使增量或回环。
(由于在SRAM里突发传输好像没有太用到,所以这块并不是那么懂,望广大知友能不吝赐教)
HPROT[3:0]——保护控制——主机——提供总线访问的附加信息,主要是给那些希望执行某种保护级别的模块使用的。这个信号指示当前传输是否为预取指令或者数据传输,同时也表示传输是保护模式访问还是用户模式访问。对带存储器管理单元的总线主机而言这些信号也用来指示当前传输是高速缓存的(cache)还是缓冲的(buffer)。
HWDATA[31:0]——写总线数据——主机——数据总线用来在写操作期间从主机到总线从机传输数据。建议最小的数据总线宽度为 32 位。在要求高带宽运行时扩展(数据总线)还是很容易的。
HSELx——从机选择——译码器——每个 AHB 从机都有自己独立的从机选择信号并且用该信号来表示当前传输是否是打算送给选中的从机。该信号是地址总线的简单组合译码。
HRDATA[31:0]——读数据总线——从机——读数据总线用来在读操作期间从总线从机向总线主机传输数据。建议最小的数据总线宽度为 32 位。在要求高带宽运行时扩展(数据总线)还是很容易的。
HREDAY——传输完成——从机——当 HREADY 为高时表示总线上的传输已经完成。在扩展传输时该信号可能会被拉低。
注意:总线上的从机要求 HREADY 作为输入输出信号。
HRESP[1:0]——传输响应——从机——传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY、 ERROR、 RETRY 和 SPLIT。
AMBA AHB也有许多信号请求支持多主机操作。这些仲裁信号用于点对点连接, 下表中后缀x用来表示信号来自模块x:
HBUSREQx——总线请求——主机——从总线主机 x 传向总线仲裁器用来表示该主机请求(控制 ) 总 线 的信 号 。系 统中 每 个 总 线主 机 都 有 一个
HBUSREQx 信号,最多 16 个总线主机。
HLOCKx——锁定的传输——主机——当该信号为高时表示主机请求锁定对总线的访问并且
在该信号为低之前其他主机不应该被允许授予总线。
HGRANTx——总线授予——仲裁器——该信号用来表示总线主机 x 目前是优先级最高的主机。当 HREADY 为高时传输结束,地址/控制信号的所有权发生改变。所以主机应在HREADY 和 HGRANTx都为高时获得对总线的访问。
HMASTER[3: 0]——主机号——仲裁器——这些来自仲裁器的信号表示哪个总线主机正在执行传输和被支持分块传输的从机用来确定哪个主机正在尝试一次访问。HMASTER 的时序和地址以及控制信号对齐。
HMASTLOCK——锁定顺序——仲裁器——表示当前主机正在执行一个锁定顺序的传输。该信号和 HMASTER 有相同的时序。
HSPLITx[15:0]——分块完成请求——从机(支持分块)——从机用这 16 位的分块总线来指示仲裁器总线主机应该被允许重试一个分块传输。分块总线上的每一位对应一个总线主机。
HSIZE:HSIZE表示一次传输的数据位宽。主要用于从机位宽与
Slave的位宽可以比总线位宽高,或者低;但是master的位宽不能比总线高。