linux 接口测试 mAPI testing bootstrap管理系统模板 angular视频教程 web前端开发实战项目 jq点击事件 jq遍历对象 etl数据 拼接json字符串 mac上传文件到linux matlab不等于怎么表示 python3正则表达式 python免费教程 python教程推荐 java环境部署 java手册 java地址 java字符串替换 java入门课程 java字符串格式化 java配置文件 mac地址修改器 咪咕客户端下载 pr转场特效下载 战地联盟辅助 全英雄守城战 大势至usb监控 一键隐藏 ppt格式刷怎么用 网络驱动 allowtransparency 田字格字体 主播音效 lol改皮肤软件 淘宝图片下载器 ps测量长度 网卡flash导入音乐 maya2013
当前位置: 首页 > 学习教程  > 编程语言

AHB总线技能提升版

2020/10/8 19:13:04 文章标签:

简介 不管是什么总线,都是为了模块之间通信,传输数据。既然是两个模块之间通信,那么就必须有一种两个模块都遵守的规则,这个规则就是协议。不同的协议有不同的规则。用不同的规则是服务于不同的应用,不同的模块的。 …

简介

不管是什么总线,都是为了模块之间通信,传输数据。既然是两个模块之间通信,那么就必须有一种两个模块都遵守的规则,这个规则就是协议。不同的协议有不同的规则。用不同的规则是服务于不同的应用,不同的模块的。

AHB是Advanced Peripheral Bus的首字母缩写,它是AMBA总线规范的一部分。AHB具有高性能特点,常用在ARM核与系统内部的高速RAM,NAND FLASH,DMA和Bridge的连接。与APB相比,APB主要用于连接外部设备,而且对性能要求不高但是在意功耗的系统。

AHB主要特性

  • Burst传输
  • Split事务处理
  • 单周期master移交
  • 单一时钟沿操作
  • 无三态,分别读写总线
  • 流水线操作
  • 可支持多个总线主设备(最多16个)

读写规则

 有需要占用总线的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剩余部分的传输。

  一笔传输由如下两部分组成:

  地址阶段:一个周期。

  数据阶段:一个或多个周期,由HBURST信号决定需要几个有效周期,可以由HREADY发出请求延长一个周期。

控制信号

HTRANS[1:0]

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] 

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] 

000 SINGLE Single transfer。如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;        如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。        需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。

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]

Slave发给Master的总线传输状态OKAY(00), ERROR(01), RETRY(10), SPLIT(11)。

  master发起一笔传输后,slave可以决定这笔传输的进程,而master不能取消已经发出的传输。slave通过HREADY信号反映传输是否完成,通过HRESP[1:0]反映传输的状态。

00:OKAY,正常传输。当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。

01:ERROR,当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应。

10: RETRY,传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级。

11: SPLIT,传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线。

 slave可以如下方式完成一笔传输: 

        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传输使用。

传输模式

 没有等待状态的single transfer

      如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。

slave插入等待状态的single transfer

     如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成; 如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。

多个single transfer的pipeline操作

 HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上未完成的transfer少于2个时,master才能发起操作。

递增burst

需要注意的 虽然slave会忽略掉BUSY transfer,但是master也需要给出下一拍的地址和控制信号。

wrapping 4-beat burst

  跟之前唯一的区别在于地址的不同,在0x3C地址之后,根据回环的地址边界,第三拍的地址变为0x30。一共四拍,4个地址,每个地址各不相同,这四个地址是一个回环范围。起始地址决定了回环操作的回环范围。

递增4拍burst

 和上面的基本一致,只不过地址在0x30并不回环,而是递增。

 

 


本文链接: http://www.dtmao.cc/news_show_250117.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?