3.1 基本传输

AHBlite传输包含两个阶段:

  1. Address:持续一个HCLK,除非之前的传输未完成而延长
  2. Data:可能需要几个HCLK,通过HREADY信号来控制整个完成周期持续的HCLK个数

HWRITE控制着数据传输的方向:

  1. 若为高电平,则表明是写传输,master在写数据总线上传递数据HWDATA
  2. 若为低电平,则在slave上体现为读传输,slave必须产生一个读数据HRDATA在读数据总线上

3.1.1 无等待传输

下面是读写两种无等待传输波形,可以看出,在这种最简单的情况下,每笔读写传输包含一个地址cycle和一个数据cycle。

  1. master在HCLK上升沿后,将地址和控制信号驱动到bus上
  2. slave在HCLK的下一个上升沿后,对地址和控制信号进行采样
  3. 在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]来表征。

  1. IDLE(b00):表示不需要数据传输。master在不想执行数据传输时,会使用IDLE类型的传输。一般建议master通过IDLE传输来终止锁定的传输。slave必须始终为IDLE类型传输提供零等待状态的OKAY响应,并且slave必须忽略该传输。
  2. BUSY(b01):BUSY类型传输使得master可以在burst中间插入空闲周期。这种传输表示master正在继续进行突发操作,但下一次传输无法立即进行。当master用BUSY传输 类型时,地址和控制信号必须反映突发中的下一次传输。只有未定义长度的突发可以将BUSY传输作为突发的最后一个cycle,slave必须始终对BUSY传输提供零等待状态的OKAY响应,并且slave必须忽略该传输。
  3. NONSEQ(b10):表示单次传输或突发(burst)的首次传输。地址和控制信号与之前的传输无关。总线上的单次传输可以被视为长度为1的突发,因此传输类型为NONSEQUENTIAL
  4. 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:

  1. 递增突发的访问是顺序的,并且突发中每次传输的地址都是前一个地址的增量。
  2. 循环突发跨越地址边界时会自动跳转地址。地址边界的计算方式是突发(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在进行单次传输时,可以使用以下方式:

  1. SINGLE burst
  2. 有一个长度为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:

  1. 第一个burst是一个2-beat/halfword INCR的写请求burst(0x20),每笔传输的地址步长为0x2
  2. 第二个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)相关推荐

  1. MPHY协议解读三:8b10b编码

    目录 整体概述 8b10b编码优劣势 8b10b实现原理 8b10b符号和术语 3b4b/5b6b编码 RD MPHY实现相关点 整体概述 8b10b编码思维导图如下: 本章节主要分析MPHY协议中使 ...

  2. AMBA总线协议(三)——一文看懂AHB总线所有协议总结(AHB2 AHB-Lite AHB5 )

    AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(一)--一文看懂APB总线协议 AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMB ...

  3. AMBA总线协议的学习-AHB,ASB,APB三种总线以及AXI接口

    一.AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance B ...

  4. 划重点 传输层协议 tcp三次握手和四次挥手

    文章目录 传输层的协议 1.TCP/IP协议组的传输层协议 2. TCP报文段 3.TCP建立连接的过程 3.2 TCP常用端口号及其功能 4.UDP协议 4.1 UDP报文的首部格式 4.2 UDP ...

  5. AHB协议(2/2)

    Charpter 4 Bus Interconnection 4.1 互联结构 互联结构在系统中提供了M端和S端的连接.单一的M端只需要使用一个解码器和多路选择器. 一个多M端的系统中需要使用提供仲裁 ...

  6. 【读书笔记】AMBA 2 AHB、AMBA 3 AHB(AHB_Lite)和AMBA 5 AHB协议比较

    1.牛客算是一个Verilog宝藏刷题网站了,网站提供在线仿真环境,不用自己找题(点击直达),<刷题记录>专栏,持续打卡中- 2.官方手册:AMBA系列官方协议规范文档,点击下载 更详细的 ...

  7. AMBA总线协议-结合ahb-master对ahb协议的理解

    本文参考了github上的项目和网络上的其他资料,githbu原项目链接如下: GitHub - seabeam/yuu_ahb: UVM AHB VIP (githubjs.cf) 1.对ahb-d ...

  8. DDS(Date-Distribution Service)协议解读和测试解决方案

    文章目录 1.DDS运行背景以及概述 2.DDS实现方案 3.DDS测试范围 4.DDS测试解决方案 1.DDS运行背景以及概述 通信的本质 在正确额时间内把正确的数据送达正确的地点 (1)数据在哪里 ...

  9. AMBA 系列之 AHB 协议

    目录 1. 简介 1.1 AHB总线的架构 1.2 AHB基本特性 2. AHB总线的组成 3. 信号描述 3.1 AHB Slave 接口 3.2 AHB Master 接口 3.3 AHB Arb ...

最新文章

  1. Exchange2003-2010迁移系列之四,配置第一台Exchange CAS/HUB服务器
  2. 运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)
  3. mac os 安装linux驱动,教程:Ubuntu 14.04安装Mac OS X主题
  4. 实用技巧:Linux操作系统Vim/Vi编程提速
  5. 运维大杀器来了,未来云上服务器或将实现无人值守
  6. Java实现冒泡排序动画展示
  7. SpringBoot-探索回顾Spring框架本质
  8. Redisson 实现分布式锁
  9. asp.net 获取当月的第一天和最后一天示例
  10. 四款好用的免费直播编码推流软件
  11. 解决微信公众号accessToken白名单问题
  12. 多家软件厂商卷入360与腾讯之争
  13. uni-app初学步骤教程:
  14. 【树莓派】树莓派官方系统Raspbian安装 Docker 和 青龙面板 挂JD库脚本 --详细教程,Centos和Ubuntu服务器可参考
  15. Maximal submatrix
  16. android mapping文件 路径,Android打包代码混淆后的Mapping文件路径
  17. 利用微信API将你的微信变为聊天机器人
  18. 儿童手表运动轨迹和路径追踪_如何将智能手表或健身追踪器用作静音闹钟
  19. 从零开始 教你如何搭建Discuz!4.1论坛(图)
  20. 解决错误:IndentationError:expected an indented block

热门文章

  1. Windows运行vbs在微信下自动发送烟花、庆祝
  2. 敏捷个人俱乐部(北京)线下活动 开始报名了!
  3. 谷歌发布古埃及象形文字翻译工具;我国最大规模5G智能电网建成
  4. 祝大家猿(元)宵节快乐!一起来猜灯谜吧
  5. 计算机死机黑屏怎么办,电脑卡机后黑屏怎么办
  6. 动森大头菜价格变化分析(1)——不同价格走势的变换
  7. 行级锁,表级锁,乐观锁,悲观锁简介
  8. Unity实用小工具或脚本——可折叠伸缩的多级(至少三级)内容列表(类似于Unity的Hierarchy视图中的折叠效果)
  9. 二进制转十进制(C++)
  10. Wi-Fi 6关键技术及产业进展