AHB协议整理 AMBA
本文对AHB协议作了简单整理,整理自两篇文章:
1. 简介
AHB总线规范是AMBA总线规范的一部分,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的一种替代方案。
1.1 AHB总线的架构
AHB总线的强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等等连接起来构成一个独立的完整的SOC系统,不仅如此,还可以通过AHB-APB桥来连接APB总线系统。AHB可以成为一个完整独立的SOC芯片的骨架。
下图是一个典型的AHB系统总线的结构示意图
1.2 AHB基本特性
- Burst传输
- Split事务处理
- 单周期master移交
- 单一时钟沿操作
- 无三态
- 更宽的数据总线配置(64/128)
- 流水线操作
- 可支持多个总线主设备(最多16个)
2. AHB总线的组成
- 主设备Master
发起一次读/写操作
某一时刻只允许一个主设备使用总线
- 从设备Slave
响应一次读/写操作
通过地址映射来选择使用哪一个从设备
- 仲裁器arbiter
允许某一个主设备控制总线
- 译码器decoder
通过地址译码决定选择哪一个从设备
- 总线可以分为三组
写数据总线(HWDATA)
读数据总线(HRDATA)
地址控制总线(HADDR)
3. 信号描述
| Name | Source | To | Description |
| HCLK | clock source | 各module | 总线时钟,上升沿采样 |
| HRESETn | reset controller | 各module | 总线复位,低电平有效 |
| HADDR[31:0] | Master | decoder mux to slave arbiter |
32位系统地址总线 |
| HTRANS[1:0] | Master | mux to slave | 当前传输类型NONSEQ, SEQ, IDLE, BUSY |
| HWRITE | Master | mux to slave | 1为写,0为读 |
| HSIZE[2:0] | Master | mux to slave | 每一个transfer传输的数据大小,以字节为单位,最高支持1024位 |
| HBURST[2:0] | Master | mux to slave | burst类型,支持4、8、16 burst,incrementing/wrapping |
| HPROT[3:0] | Master | mux to slave | 保护控制信号,需要slave带保护功能,一般不用 |
| HWDATA[31:0] | Master | mux to slave | 写数据总线,Master到Slave |
| HRDATA[31:0] | Slave | mux to master | 读数据总线,Slave到Master |
| HREADY | Slave | mux to master arbiter |
高:Slave指出传输结束 低:Slave需延长传输周期 |
| HRESP[1:0] | Slave | mux to master arbiter |
Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT |
| HSELx | Decoder | slave | slave选择信号 |
AHB仲裁信号
| Name | Source | To | Description |
| HBUSREQx | Master | arbiter | master给仲裁器的请求获得总线使用权的请求信号,最多支持16个master |
| HLOCKx | Master | arbiter | 如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号 |
| HGRANTx | arbiter | master | 授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利 |
| HMASTER [3:0] | arbiter | 具有split功能的slave | 仲裁器为每一个master分配的ID,指出哪个主设备正在进行传输,提供进行split的信息 |
| HMASTLOCK | arbiter | 具有split功能的slave | 表示当前的master正在执行Locked操作。这个信号和HMASTER有这相同的时序 |
| HSPLITx[15:0] | slave | arbiter | 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备 |
4. 总线操作
有需要占用总线的Master向arbiter发出请求,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。
获得授权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。总线统一规划slave的地址,译码器根据地址和控制信号确定哪个slave与master进行数据通信。数据传输通过数据总线完成。为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输。每笔传输包括一个地址和控制周期,一个或多个数据周期。地址和控制周期不能被扩展,因此slave必须在一个周期内采样地址信号。数据周期可以通过HREADY信号扩展,但HREADY为低时给传输加入一个等待状态以使slave获得额外的时间来提供或采样数据,另外slave通过响应信号HRESP反映传输状态。
一般情况下master完成完整的burst传输,arbiter才会授权给其他的master接入总线,然而为避免过大的判决延迟,arbiter也可能打断burst传输。在这种情况下master必须再次接入总线以进行中断的burst剩余部分的传输。
5. 基本传输
一笔传输由如下两部分组成:
地址阶段:一个周期
数据阶段:一个或多个周期,由HBURST信号决定需要几个有效周期,可以由HREADY发出请求延长一个周期。
5.1 没有等待状态的single transfer
第二个周期的上升沿,slave采样地址和控制信号,并将HREADY拉高;
如果是写操作,master会在第二个周期的上升沿传输要写入的数据;
如果是读操作,slave会在HREADY信号拉高后将读取的数据写入总线;
第三个周期的上升沿,
如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;
如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。
需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。
5.2 slave插入等待状态的single transfer
如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成;
如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。
5.3 多个single transfer的pipeline操作
第一个周期,master发起一个操作A,并驱动地址和控制信号;
第二个周期,slave收到了来自总线的请求,将HREADY信号拉高;
第二个周期上升沿后,master发现有操作B需要执行,并且检查到上一周期的HREADY为高,则发起第二个操作B;
第三个周期,master获取HREADY信号为高,表示操作A已经完成;
第三个周期上升沿后,master发现有操作C需要执行,并且检查到上一周期的HREADY为高,则发起第三个操作C;
第三个周期上升沿后,slave由于繁忙插入了一个等待状态,将HREADY拉低;
第四个周期,master获取HREADY信号为低,知道slave希望等待,于是master保持和上一拍一样的信号;
第四个周期,slave处理完了事务,将HREADY信号拉高,表示可以继续处理;
第五个周期,master获取HREADY信号为高,知道slave已经可以处理B操作;
第五个周期上升沿后,B操作完成;
第六个周期上升沿后,C操作完成。
需要注意几点:
HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上未完成的transfer少于2个时,master才能发起操作。
5.4 递增burst
T2,由于master不能在第二个周期里处理第二拍,所以master使用BUSY transfer来为自己延长一个周期的时间。注意,虽然是延长了一个周期,但是master需要给出第二个transfer的地址和控制信号;
T3,slave采集到了master发来的BUSY,知道master需要等待一拍,所以slave会忽略这个BUSY transfer;
T3,master发起了第二个transfer,因为是同一个burst的第二个transfer,所以transfer的类型是SEQ;
T5,slave将HREADY信号拉低,告诉master需要等待一个周期;
T8时刻完成最后一个transfer。
需要注意的 虽然slave会忽略掉BUSY transfer,但是master也需要给出下一拍的地址和控制信号。
5.5 wrapping 4-beat burst
5.6 递增4拍burst
6.控制信号
| HTRANS[1:0] | 传输类型 | Description |
| 00 | IDLE | 主设备占用总线,但没进行传输 两次burst传输中间主设备可发IDLE 此时就算slave被使能,也不会从总线上获取任何的数据信号。如果此时salve被选中,那么每一个IDLE周期slave都要通过HRESP[1:0]返回一个OKAY响应 |
| 01 | BUSY | 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输 一次burst传输中间主设备可发BUSY 这时slave不会从总线上收取数据而是等待,并且通过HRESP[1:0]返回一个OKAY响应。需要注意的是,这个transfer需要给出下一拍的地址和控制信号,尽管slave不会去采样。 |
| 10 | NONSEQ | 表明一次单个数据的传输或者一次burst传输的第一个数据 地址和控制信号与上一次传输无关 |
| 11 | SEQ | burst传输接下来的数据 地址和上一次传输的地址是相关的,这时总线上的控制信号应当与之前的保持一致,地址视情况递增或者回环。 |
| HSIZE[2:0] | Size | Description |
| 000 | 8 bits | Byte |
| 001 | 16 bits | Halfword |
| 010 | 32 bits | Word |
| 011 | 64 bits | - |
| 100 | 128 bits | 4-word line |
| 101 | 256 bits | 8-word line |
| 110 | 512 bits | - |
| 111 | 1024 bits | - |
- Burst传输类型
burst不能超过1K地址边界。
| HBURST[2:0] | 类型 | Description |
| 000 | SINGLE | Single transfer |
| 001 | INCR | Incrementing burst of unspecified length |
| 010 | WRAP4 | 4-beat wrapping burst |
| 011 | INCR4 | 4-beat increment burst |
| 100 | WRAP8 | 8-beat wrapping burst |
| 101 | INCR8 | 8-beat increment burst |
| 110 | WRAP16 | 16-beat wrapping burst |
| 111 | INCR16 | 16-beat increment burst |
- 响应信号
master发起一笔传输后,slave可以决定这笔传输的进程,而master不能取消已经发出的传输。slave通过HREADY信号反映传输是否完成,通过HRESP[1:0]反映传输的状态。
slave可以如下方式完成一笔传输:
- 立即完成一笔传输;
- 延迟一个或几个周期完成传输;
- 传输失败返回error;
- 延迟传输,释放总线。
- 传输完成HREADY
为高时传输完成,为低时传输需要延迟。
传输响应HRESP[1:0]
00: OKAY
01: ERROR
10: RETRY
传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级
11: SPLIT
传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
- 地址译码
地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。
每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。
- 仲裁
仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。
HBUSREQx:master向arbiter发出接入请求的信号。
HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。
HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。
HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。
HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。
HSPLIT:供支持SPLIT传输使用。
七、模块接口
AHB-Master接口

AHB_Slave接口

Decoder接口

Arbiter接口

AHB协议整理 AMBA的更多相关文章
- MODBUS协议整理——功能码简述
1.Modbus简介——来自维基百科 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的.Modbus是工业领域通信协议的业界标准,并且现在是工业电 ...
- 欧姆龙PLC HostLink协议整理
欧姆龙PLC HostLink协议整理 1.常用的存储器功能区 CIO: 输入继电器 272 点(17 CH) 0.00-16.15 输出继电器 272 点(17 CH) 100.00-116.1 ...
- AHB协议
AHB2 支持多个Bus Master,例如有三个Master,有四个slave,但是同时只有一个Mater可以拿到Bus的访问权.所以,总线的使用权就需要Master去申请,也就需要一个仲裁器(Ar ...
- SIP协议整理
本文记录开发.实现IMS项目时,整理的SIP协议基础知识:若有侵权,请告之. SIP协议 1. SIP协议简介 SIP是一个应用层的控制协议,可以用来建立.修改.和终止多媒体会话(或者会议) ...
- HTTP 协议整理(转)
HTTP 协议 作为web开发人员,了解一些http协议的知识很有必要.本文简单介绍了HTTP协议的知识,若有错误的地方,望大家斧正. 1.HTTP协议是什么? http协议是一个应用层的协议.规定了 ...
- HTTP协议整理
一.概念 1.HTTP协议:即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和Web服务器之间互相通信的规则,它允许将超文本标记语言(HTML)文档从 ...
- AMBA总线协议AHB、APB、AXI对比分析【转】
转自:https://blog.csdn.net/ivy_reny/article/details/56274412 一.AMBA概述 AMBA (Advanced Microcontrolle ...
- [转]AMBA、AHB、APB、ASB总线简介
[转]http://www.cnblogs.com/zhaozhong1989/articles/3092140.html 1.前言 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC ...
- 接口与协议学习笔记-AMBA片上通信协议_APB_AHB_AXI_AXI4不同版本(二)
随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片上总线设计是最 ...
随机推荐
- 浏览器F12(开发者调试工具) 功能介绍
调试时使用最多的功能页面是:元素(ELements).控制台(Console).源代码(Sources).网络(Network)等. 元素(Elements):用于查看或修改HTML元素的属性.CSS ...
- winrar+目录穿透复现
前言: 学习下该漏洞,记录下这是自动化复现,没有具体分析.菜逼只会用. 00x1: 漏洞简单描述: 该漏洞事一个由UNACEV2.dll代码库中的一个深藏已久的漏洞 当攻击者制作一个恶意的ACE文件时 ...
- windows下的Redis主从集群搭建
Redis官方不提供Windows版本,目前Windows下的版本是有微软开源团队(Microsoft Open Tech group)维护. http://redis.cn/ redis中文网 wi ...
- python3csv与xlsx文件操作模块(csv、xlsxwriter)
一.csv模块实现csv文件操作 1.CSV介绍 CSV,全称为Comma-Separated Values,它以逗号分隔值,其文件以纯文本形式存储表格数据,该文件是一个字符序列,可以由任意数目的记录 ...
- Spring获取URL相关信息
获取请求的URL:request.getRequestURL().toString(); 获取上下文名称(项目名称):request.getContextPath()
- 五分钟搞定Go.js
五分钟搞定Go.js 1.基于html5~因为Go.js是一个依赖于HTML5特性的JavaScript库,所以需要确保您的页面声明它是一个HTML5文档,当然需要加载库 <!DOCTYPE ...
- react基础学习 一
1. 搭建环境 安装react脚手架 >npm install create-react-app -g 创建文件 >create-react-app 项目名称 启动 ...
- 代码:PC CSS(工作中用)
常规内容区域的:标题和文字 2016-5-23 .p16{font-size:16px;color:#333;}/* 16号#333的标题 */ .p12-gray{font-size:16px;co ...
- 学习Flask框架
# -*- encoding: utf-8 -*- #导包 from flask import Flask #建立flask对象 app = Flask(__name__) #使用flask路由器 ...
- pyqt-QGrapicsView类
QGrapicsView类 QGraphicsView提供一个显示QGraphicsScene内容的窗口,该窗口可以滚动,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置vie ...