【AHB协议解读 三】传输(Transfers)
3.1 基本传输
AHBlite传输包含两个阶段:
- Address:持续一个HCLK,除非之前的传输未完成而延长
- Data:可能需要几个HCLK,通过HREADY信号来控制整个完成周期持续的HCLK个数
HWRITE控制着数据传输的方向:
- 若为高电平,则表明是写传输,master在写数据总线上传递数据HWDATA
- 若为低电平,则在slave上体现为读传输,slave必须产生一个读数据HRDATA在读数据总线上
3.1.1 无等待传输
下面是读写两种无等待传输波形,可以看出,在这种最简单的情况下,每笔读写传输包含一个地址cycle和一个数据cycle。
- master在HCLK上升沿后,将地址和控制信号驱动到bus上
- slave在HCLK的下一个上升沿后,对地址和控制信号进行采样
- 在slave完成对地址的采样后,它就可以开始驱动合适的HREADY响应,响应将在HCLK的第三个上升沿被master采到
3.1.2 有等待传输
任何一笔传输的地址阶段都发生在上一笔传输的数据阶段。这种地址和数据的重叠(overlapping)对于总线的流水线性质(pipelined nature)至关重要,并且可以实现高性能的操作,同时仍为slave提供足够的时间来提供对传输的响应。slave可以在任何传输中插入等待状态,以使操作完成获得更多的时间。
注意:对于写传输,master在整个扩展周期内保持数据稳定。对于读传输,slave无需提供有效数据,直到传输即将完成。
当以这种方式扩展传输时,它的副作用是延长了下一个传输的地址阶段的时间。
下图显示了到A/B/C三个不相关地址的传输,可以发现:
1.在到地址A和地址C的传输过程中,是没有等待状态的
2.在到地址B的传输过程中的数据阶段有1个等待状态,其影响是地址C的地址阶段被延迟了。
3.2 传输类型(Transfer types)
传输可以被分为四种类型,它们由信号HTRANS[1:0]来表征。
- IDLE(b00):表示不需要数据传输。master在不想执行数据传输时,会使用IDLE类型的传输。一般建议master通过IDLE传输来终止锁定的传输。slave必须始终为IDLE类型传输提供零等待状态的OKAY响应,并且slave必须忽略该传输。
- BUSY(b01):BUSY类型传输使得master可以在burst中间插入空闲周期。这种传输表示master正在继续进行突发操作,但下一次传输无法立即进行。当master用BUSY传输 类型时,地址和控制信号必须反映突发中的下一次传输。只有未定义长度的突发可以将BUSY传输作为突发的最后一个cycle,slave必须始终对BUSY传输提供零等待状态的OKAY响应,并且slave必须忽略该传输。
- NONSEQ(b10):表示单次传输或突发(burst)的首次传输。地址和控制信号与之前的传输无关。总线上的单次传输可以被视为长度为1的突发,因此传输类型为NONSEQUENTIAL
- SEQ(b11):突发中的其余传输是SEQUNENTIAL,并且地址与上一次传输相关。控制信息与前一传输相同,该地址等于前一次传输的地址加上传输数据大小(以字节为单位,通过HSIZE[2:0]表征)。在wrapping类型突发的情况下,传输的地址在地址边界自动跳转。
一张图展现四种不同的传输类型
T0~T1:一个4拍的读请求开始于一笔NONSEQ类型传输
T1~T2:master还没准备好第2笔传输,因此插入1拍的BUSY类型传输来延迟第2拍的开始,slave正常提供第1个传输的读数据
T2~T3:master准备好了第2拍,因此会发出SEQ传输的信号。由于上一笔传输是BUSY传输,所以此时master会忽略slave提供的读数据
T3~T4:master发起第3笔传输,slave正常提供第2拍的读数据
T4~T5:master发起最后一笔传输,可是slave还没准备好接收第3笔传输,因此使用HREADY插入单个等待状态
T5~T6:slave准备好,并为第3笔传输提供读数据
T6~T7:slave准备好,并为最后一笔传输提供读数据
3.3 锁定传输(Locked transfers)
如果master要求锁定访问,则它必须声明HMASTLOCK信号。该信号用于向任何slave指示当前传输序列是不可分割的,因此必须在处理任何其它传输事务之前对其进行处理。通常,Locked传输用于确保信号的完整性,以确保slave在两次传输之间不执行其它操作。
下图以微处理器SWP指令的读取和写入为例。
3.4 传输大小(Transfer size)
HSIZE[2:0]信号表示的是传输数据量的大小。
下表为传输大小与HSIZE信号之间的编码关系:
注意:HSIZE设置的传输大小必须小于或等于数据总线的宽度。例如对于32位数据总线,HSIZE只能使用b000,b001或b010。
将HSIZE与HBURST结合使用,以确定用于地址跳转的边界值。
HSIZE信号与地址总线具有完全相同的时序,但是HSIZE必须在整个突发传输中保持恒定。
3.5 突发操作(Burst operation)
协议中的突发类型,包含了single、4、8、16beats和undefined length(不定长)这几种,他们都支持incrementing和wrapping:
- 递增突发的访问是顺序的,并且突发中每次传输的地址都是前一个地址的增量。
- 循环突发跨越地址边界时会自动跳转地址。地址边界的计算方式是突发(Burts)中的拍数(Beats)与传输(Transfer)大小(Size)的乘积,其中,拍数由HBURST控制,传输大小由HSIZE控制。例如,一个4byte大小的4拍循环突发(4-beats wrapping burst of word)以16byte为边界进行边界跳转,若起始地址为0x34,则它的四个transfer地址分别为0x34、0x38、0x3c和0x30。
下表是由HBURST[2:0]控制的burst类型。
注意!master不允许发送跨越1KB地址边界的INCR突发,这是因为slave在设计的时候是以1KB为单位的,如果跨过了1KB就有可能访问到另一个slave。
master在进行单次传输时,可以使用以下方式:
- SINGLE burst
- 有一个长度为1的burst的不定长burst
Note
突发的大小(Burst Size)表示的是突发的节拍数(传输的个数),而不是传输的字节数。通过将节拍数和每拍中的数据量(HSIZE[2:0])相乘,可以计算出总突发传输的数据量总数。
突发的所有传输必须满足与等于传输大小的地址边界对齐。例如,你必须将一个数据量为word的trasnfer对齐到word地址边界(HADDR[1:0]='b00),将数据量为halfword的transfer对齐到halfword地址边界(HADDR[0]='b0)。IDLE传输的地址也必须对齐,否则在仿真期间monitor可能会报告虚假警告。
3.5.1 BUSY传输后的突发终止(Burst termination after a BUSY transfer)
在突发开始之后,master如果需要更多的时间,则会在继续下一次传输之前使用BUSY类型的传输。
在INCR类型的不定长突发中,master可能会插入BUSY传输然后决定不再发出新的传输请求。在这种情况下,master可以通过发出NONSEQ或IDLE传输来有效地终止不定长突发。
协议不允许master使用BUSY来企图结束固定长度突发(INCR4/8/18,WRAP4/8/16),这些定长突发只能以SEQ类型传输结束。
3.5.2 突发的提前终止(Early burst termination)
以下两种情况可能会造成突发的终止:
1. slave的错误响应
如果slave响应了一个ERROR,那么master应该取消本次突发中的剩余传输。然而这并不是一个严格的规定,master把本次突发中的剩余传输继续发完也是可以接受的。即使master没有完成突发中的所有传输,在下一次访问到slave的时候也不需要重建这笔突发,例如master只完成了一个8拍突发中的3拍,那么它在下次访问到slave的时候也不必完成剩余的5拍传输。
2. Multi-layer interconnect 终止
虽然master不允许提前终止突发请求,但当突发没有完成时,slave必须被设计为能够正常工作。当多层互连组件被用于多master的系统时,它就可以终止突发以便另一个master可以访问slave。如果这种情况发生,slave必须终止来自之前master的突发,转而响应新的master。
3.5.3 Burst examples
4拍循环突发,WRAP4
边界地址计算:拍数(传输个数)x 传输大小 = 4 x 4(byte) = 16byte,因此以16-byte地址为边界,每逢16-byte(0x10)的地址就需要跳转。
4拍递增突发,INCR4
8拍循环突发,WRAP8
边界地址计算:传输个数 x 传输大小 = 8 x 4(byte) = 32byte,因此要以32-byte地址为边界,每逢32-byte(0x20)的地址就要向前跳转。因此这里到达0x3C之后,如果不跳转下一个地址是0x40,显然0x40是一个32-byte地址,因此向前跳0x20个地址,到达0x40-0x20=0x20。
8拍递增突发,INCR8
不定长突发,INCR
下图展示了两个burst:
- 第一个burst是一个2-beat/halfword INCR的写请求burst(0x20),每笔传输的地址步长为0x2
- 第二个burst是一个3-beat/word INCR的读请求burst(0x5c),每笔数据的地址步长为0x4
3.6 传输等待(Waited transfers)
slave如果需要更多的时间来提供或者采样数据,那么他们会用HREADY来插入等待状态。在传输等待期间,master仅限于对传输类型和地址进行更改。
3.6.1 传输等待时更改传输类型(Transfer type changes during wait states)
当slave请求等待状态时,master不能更改传输类型,除非以下几种情况:IDLE传输、定长BURST中的BUSY传输、不定长BURST中的BUSY传输。
1. IDLE传输
在传输等待期间,master可以将传输的状态从IDLE变更到NONSEQ。当传输类型(HTRANS)变更到NONSEQ后,master必须保持传输类型不变,直到HREADY拉高。
下图展示了一个SINGLE突发的传输等待,并且伴随着传输类型从IDLE到NONSEQ的改变。
T0-T1 master初始化SINGLE突发到地址A
T1-T2 master在地址Y上插入一个IDLE传输,此时slave插入了一个等待状态(HREADY=LOW)
T2-T3 master在地址Z上插入了一个IDLE状态
T3-T4 master将传输类型更改为NONSEQ,并发送一笔初始地址为B的INCR4突发
T4-T5 当HREADY为低时,master必须保证传输类型不变
T5-T6 HREADY拉高,到地址A的SINGLE突发完成,并且开始下一笔INCR4突发
T6-T7 INCR4突发的第一拍完成,发送下一拍传输的地址
2. 定长BURST中的BUSY传输
在定长BURST的传输等待过程中,master可以在HREADY为低时将传输类型从BUSY更改为SEQ。同样,传输类型更改之后需要保持不变,直到HREADY拉高。
Note 因为BUSY传输只能在连续的突发节拍中插入,因此这不适用于SINGLE突发。
关键cycle解读:
T1-T2 master开始下一个对地址0x28的传输,但因为暂时没“空”发送命令,因此先插入了一笔BUSY传输,同时slave也发起了等待。
T3-T4 master此时有“空”了,因此将BUSY传输更改为SEQ传输,但slave还需要等待。
3. 不定长BURST中的BUSY传输
在不定长突发INCR的传输等待过程中,master也允许在HREADY为低时将BUSY传输更改为其它类型的传输。如果更改为SEQ,那么当前突发将继续,而如果更改为了IDLE或者NONSEQ,那么当前突发结束、进入下一笔突发。
3.6.2 传输等待时更改地址(Address changes during wait stats)
在slave的等待状态下,master只能改变一次地址,除了以下两种情况:
1. IDLE传输期间
在传输等待期间,master允许改变IDLE传输的地址,当传输类型变为NONSEQ后,master就必须要保证地址不变直到HREADY拉高。
2. 在一次ERROR响应之后
在传输等待期间,若slave响应了一个ERROR,那么master就可以在HREADY为低的时候改变地址。
关键cycle:
T3-T4 slave响应ERROR
T4-T5 master将HTRANS切换为IDLE传输,并允许在HREADY为低的时候更改地址;slave完成ERROR响应
【AHB协议解读 三】传输(Transfers)相关推荐
- MPHY协议解读三:8b10b编码
目录 整体概述 8b10b编码优劣势 8b10b实现原理 8b10b符号和术语 3b4b/5b6b编码 RD MPHY实现相关点 整体概述 8b10b编码思维导图如下: 本章节主要分析MPHY协议中使 ...
- AMBA总线协议(三)——一文看懂AHB总线所有协议总结(AHB2 AHB-Lite AHB5 )
AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(一)--一文看懂APB总线协议 AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMB ...
- AMBA总线协议的学习-AHB,ASB,APB三种总线以及AXI接口
一.AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance B ...
- 划重点 传输层协议 tcp三次握手和四次挥手
文章目录 传输层的协议 1.TCP/IP协议组的传输层协议 2. TCP报文段 3.TCP建立连接的过程 3.2 TCP常用端口号及其功能 4.UDP协议 4.1 UDP报文的首部格式 4.2 UDP ...
- AHB协议(2/2)
Charpter 4 Bus Interconnection 4.1 互联结构 互联结构在系统中提供了M端和S端的连接.单一的M端只需要使用一个解码器和多路选择器. 一个多M端的系统中需要使用提供仲裁 ...
- 【读书笔记】AMBA 2 AHB、AMBA 3 AHB(AHB_Lite)和AMBA 5 AHB协议比较
1.牛客算是一个Verilog宝藏刷题网站了,网站提供在线仿真环境,不用自己找题(点击直达),<刷题记录>专栏,持续打卡中- 2.官方手册:AMBA系列官方协议规范文档,点击下载 更详细的 ...
- AMBA总线协议-结合ahb-master对ahb协议的理解
本文参考了github上的项目和网络上的其他资料,githbu原项目链接如下: GitHub - seabeam/yuu_ahb: UVM AHB VIP (githubjs.cf) 1.对ahb-d ...
- DDS(Date-Distribution Service)协议解读和测试解决方案
文章目录 1.DDS运行背景以及概述 2.DDS实现方案 3.DDS测试范围 4.DDS测试解决方案 1.DDS运行背景以及概述 通信的本质 在正确额时间内把正确的数据送达正确的地点 (1)数据在哪里 ...
- AMBA 系列之 AHB 协议
目录 1. 简介 1.1 AHB总线的架构 1.2 AHB基本特性 2. AHB总线的组成 3. 信号描述 3.1 AHB Slave 接口 3.2 AHB Master 接口 3.3 AHB Arb ...
最新文章
- Exchange2003-2010迁移系列之四,配置第一台Exchange CAS/HUB服务器
- 运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)
- mac os 安装linux驱动,教程:Ubuntu 14.04安装Mac OS X主题
- 实用技巧:Linux操作系统Vim/Vi编程提速
- 运维大杀器来了,未来云上服务器或将实现无人值守
- Java实现冒泡排序动画展示
- SpringBoot-探索回顾Spring框架本质
- Redisson 实现分布式锁
- asp.net 获取当月的第一天和最后一天示例
- 四款好用的免费直播编码推流软件
- 解决微信公众号accessToken白名单问题
- 多家软件厂商卷入360与腾讯之争
- uni-app初学步骤教程:
- 【树莓派】树莓派官方系统Raspbian安装 Docker 和 青龙面板 挂JD库脚本 --详细教程,Centos和Ubuntu服务器可参考
- Maximal submatrix
- android mapping文件 路径,Android打包代码混淆后的Mapping文件路径
- 利用微信API将你的微信变为聊天机器人
- 儿童手表运动轨迹和路径追踪_如何将智能手表或健身追踪器用作静音闹钟
- 从零开始 教你如何搭建Discuz!4.1论坛(图)
- 解决错误:IndentationError:expected an indented block