AHB总线笔记(二)

目录

AHB BURST操作

WRIAP和INCAR区别

burst 传输1k边界处理

RETRY响应

大小印第安序

AHB仲裁信号

AHB 仲裁

split传输过程

AHB设备结构与接口


在AHB总线笔记(一)中介绍了:

AMBA简介:AMBA2.0 包括AHB、ASB、APB

AHB的组成部分:AHB master、AHB slave、AHB arbiter、AHB decoder

APB的组成部分:AHB2APB bridge、APB slave

AHB信号:HCLK、HRESETn、HADDR、HTRANS、HWRITE、HSIZE、HBURST、HWDATA、HSELx、HRDATA、HREADY、HRESP。

下面进一步记录其他的笔记。

AHB BURST操作

        AHB BURST操作,4beat、8beat、16beat、单字节传输、未定义长度传输。支持incrementing和wrapping(回环)两种burst传输。(注意这里是beat,不是bit,表示传输次数)。

        incrementing burst 地址是上一次的传输地址加一。

        Wrapping burst(回环):例如4beat的wrapping burst字传输(4byte)   

0x34 -> 0x38 -> 0x3c -> 0x30,这里什么时候地址回环很有讲究,由burst和hsize共同决定,比如上面的例子是:4beat * 4byte = 16 byte =0x10,注意这里的0x10是地址的序号,而一个地址可以存储8bit数据也就是1byte数据,所以这里16byte是地址0x10。每当取数据遇到0x10的整数倍时,就要返回回环。上面的例子就是要遇到0x40了,所以需要返回回环。那如果是8beat的4byte的传输呢?那就是8beat * 4byte = 32 byte = 0x20,每0x20的整数倍就要进行回环,比如0x34 -> 0x38 -> 0x3c -> 0x20 -> 0x24 -> 0x28 -> 0x2c -> 0x30  这样走回环。如果他的起始地址恰好是回环地址的倍数,那Wrapping burst就和INCR没区别,比如INCR[4]。

WRIAP和INCAR区别

        WRAP4的地址回环倍数是0x10,WRAP8的地址回环倍数是0x20,WRAP16的地址回环倍数是0x40。因为HSIZE = 010,所以每一次地址的递增都是4个,也就是4byte。上面就是8种burst类型。 Type后面的数字表示传输的数据个数,也就是beat。

        下面的是INCR8的波形图:

      下面的是WRAP8的波形图:

        上面是比较简略的波形图用来示意INCR和WRAP的区别,下面的INCR4和WRAP4的波形图就正规些了。 

        看HBURST类型,上图为INCR4,下图为WRAP4。 

burst 传输1k边界处理

        好,看了那么多波形,对不同的burst传输应该有比较深的认识了。这里还要补充一些burst的特点。burst传输不能超过1K边界。一个从设备最小的地址间隙是1KB。burst不能越过1KB的边界,那遇到边界该如何处理呢:

            NONSEQ -> SEQ -> 1KB Boundary -> NONSEQ -> SEQ  

        如图,传输到0x400的倍数的时候就要再发起一个burst,不然就超过1K边界了(4*16Byte^2=1024Byte = 1KB )

       HSELx:由decoder输出,选择从设备,指出由主设备所选择的从设备。由地址译码器来提供选择信号。一个从设备应该至少占用1KB的存储空间(0x400地址的倍数就得NONSEQ )。需要一个额外的缺省从设备来映射其他的存储地址(default:),可以表现为当addr落在某个范围的时候,HSELx等于多少,当addr落在另一个范围的时候HSELx又等于多少,其他情况下(else or default),HSELx等于多少(有点类似于组合逻辑不能综合出latch,每一个分支都得被涉及的意思)。

        第一个MUX由Arbiter仲裁,选择HADDR为哪个master的地址,然后把HADDR输入到Decoder中,选择把哪个slave的HSEL拉高。

        如果slave被Decoder选中,即slave的HSEL被拉高,从设备必须响应这次传输!

        slave可能返回的响应:1.完成这次传输(OKAY) 2.插入等待状态(HREADY)3.发出错误信号表示这次传输失败(ERROR) 4.延时传输,使得总线可用于其他传输(RETRY、SPLIT)

HRESP[1:0] :

00:OKAY      单周期响应

01:ERROR  两周期响应

10:RETRY   两周期响应

11:SPLIT     两周期响应

        总线的流水特性,需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输。

        SPLIT和RETRY的区别在于使用SPLIT拒绝请求后,会降低master在Arbiter的优先级。具体Arbiter用什么优先级策略可以自己定制。

        总线主设备应该用同样的方式处理RETRY响应和SPLIT响应。

RETRY响应

        RETRY要保持两个cycle。如果错误的话,即返回HRESP不是OKAY,那master的HTRANS就要进入IDLE状态,所以需要额外一个周期来进入NONSEQ状态。

        数据总线不是三态总线,读总线和写总线是分开的。什么是三态呢?只有在PAD部分,有三个端口INPUT、OUTPUT、INOUT,在这些输出端口上会有三态状态,在总线内部是没有三态的。

大小印第安序

        印第安序,印第安序用来表示总线有效的位数。主设备和从设备应该采用同样的印第安序,不支持动态的印第安序,在AMBA协议中没有定义。

 下图为32bit小印第安序数据总线有效字节 

下图为32bit大印第安序数据总线有效字节 

AHB仲裁信号

AHB 仲裁

        因为最多支持16个master,所以HMASTER只需要四个bit就够了。HBUSREQ 总线请求,master发送总线请求,然后Arbiter允许的话就返回GRANT信号。HLOCKx 高电平:主设备请求锁定总线,因为不希望master原本要传输一百个数据的,结果中途被打断了,所以需要把总线lock住。HGRANTx 指出主设备x 可访问总线,主设备x 控制总线条件:HGRANTx = 1 且 HREADY = 1。HMASTER[3:0] 指出哪个主设备正在进行传输。HMASTLOCK 指出主设备正在进行一次锁定传输。 HSPLITx[15:0] 从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输,16bit每一位对应一个主设备。,这里既有x又有16bit,其中x代表哪一个slave,16bit从来选master,因为经过arbiter后,slave很清楚是哪一个master在请求他,所以如果要拒绝哪一个master的请求,由slave发出会比较准确。

仲裁举例:

        上图为没有等待状态的HGRANT拉高波形图,HGRANT信号一拉高,数据就开始传输(没有等待是因为HREADY一直为高),所以HGRANT一拉高,满足HREADY = 1 且 HGRANTx = 1 那么总线就会把控制权交给HMASTER。但很多时候,HGRANT拉高的时候,HREADY并不是1,所以下面的波形图更具普适性。 

        Arbiter在接收到master发送的HBUSREQx指令后,经过两个周期给出GRANTx指令,然后在T4时刻,发现呢HREADY并不为高,所以masterx不能获得总线控制权,在T5时刻,HGRANT和HREADY都为1,masterx获得总线控制权,可以传输数据,但在T6时候HREADY又不为高,所以HADDR保持不变直到HREADY为高后,继续下一个数据的传输。在master用完总线后,需要把总线控制权还回去: 

        对于M1来说,市区GRANT之后,还能再发一个地址和数据。 对于M2master来说,在T7时刻拿到数据总线控制权后,就可以开始传输所以在T7时刻后面的HADDR为一个数、HTRAN为NONSEQ,但是即使这样传输的数据也得到下一个周期才到HWDATA,所以M1这个操作可以把HWDATA总线完全利用起来,因为本来M2获得控制权后的第一个周期,数据也到不了HWDATA上,会浪费一个送数据的周期。

        Arbiter选择Master,对master来说,master是知道自己有没有被GRANT,但是他不知道HADDR输出去后会被发给哪个slave。Arbiter选择哪个HMASTER的HADDR送出去,送到哪里呢?送到Decoder解码,选中哪个slave。

        补充:对于固定长度的burst传输,不必持续请求总线。对于未定义长度的burst传输,主设备应持续送出HBUSREQ信号,直到开始最后一次传输。

        如果没有主设备请求总线,则给缺省主设备(即default master)GRANT信号,且HTRANS = IDLE。建议主设备在锁定总线传输结束之后插入IDLE传输,以重新仲裁优先级。

split传输过程

① 由主设备开始传输。

② 如果从设备需要多个周期才能获取数据,则从设备给出一个SPLIT传输响应,从设备记录主设备号:HMASTER。接着仲裁器改变主设备的优先级。

③ 仲裁器GRANT其他的主设备,总线主设备移交。

④ 当从设备准备结束本次传输,将设置给仲裁器的HSPLITx信号的相应位。

⑤ 仲裁器恢复优先级,恢复到发送spilt信号之前。

⑥ 仲裁器GRANT主设备,这样主设备可以重新开始传输。

⑦ 结束。

        当多个不同的主设备访问同一个从设备,这个从设备发出了SPLIT或RETRY信号,这时可能发生deadlock死锁。从设备最多可以接收系统中16个主设备的请求。只需要记录主设备号(忽略地址和控制信号)。给出RETRY响应的从设备在某一时刻只能由一个主设备访问防止死锁。

AHB设备结构与接口

下图为AHB总线的主设备接口:

AHB从设备接口:

AHB Arbiter接口:

AHB Decoder接口: 

学习AHB总线,需要学会绘制AHB总线上四个组成部分的接口框图,并描述信号作用。 

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃葱的酸菜鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值