当前位置:网站首页>【数字IC验证快速入门】24、SystemVerilog项目实践之AHB-SRAMC(4)(AHB继续深入)

【数字IC验证快速入门】24、SystemVerilog项目实践之AHB-SRAMC(4)(AHB继续深入)

2022-07-07 13:22:00 luoganttcc

导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思清华紫光联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。

一、BURST 传输(了解)

  • AHB Burst 操作
    • 4 beat(4 * 4Byte = 16Byte)、8 beat、16 beat、单个字节传输、未定义长度的传输
    • 支持 incrementing (递增 0 -> 4 -> 8 -> C -> 10 -> 14 -> …)和 wrapping (0 -> 4 -> 8 -> C -> 0 -> 4 -> … 回环传输)两种burst传输
  • Incrementing burst
    • 地址是上一次的传输地址加1 beat(4 Byte)
  • Wrapping burst
    • 例:4 beat的wrapping burst字传输(4 byte)
    • 0x34 -> 0x38 -> 0x3C -> 0x30(以 0 4 8 C 为边界)
    • 应用场景:Cache填充

1.1、地址计算举例

  • 根据HSIZE 和 HBURST来计算地址
  • 例:起始地址是0x48,HSIZE=010(32bits)

在这里插入图片描述

  • Slave侧一般不会关注是INCR还是什么…,因为master也会把地址发过来,我们针对每个命令具体操作即可!
  • 如果是INCR,会根据HSZIE决定递增多少!

  • 在BURST里面,第一个传输类型是NOSEQ,剩余的都是SEQ

1.2、INCR Burst

在这里插入图片描述

1.3、WRAP8 Burst

在这里插入图片描述

  • 与INCR8唯一区别是在边界需要WRAP回来!
    • WRAP4:0 -> 4 -> 8 -> C 回环
    • WRAP8:0 -> 4 -> 8 -> C -> 10 -> 14 -> 18 -> 1C 回环

1.4、INCR4 Burst

在这里插入图片描述

1.5、WRAP4 Burst

在这里插入图片描述

1.6、未定义长度的Burst传输

在这里插入图片描述

  • 注意HSIZE为Halfword,即2Byte那么HADDR加的就是2;如果HSIZE为Word,即4Byte,baneHADDR加的就是4.

1.7、Example LDM AHB Activity

在这里插入图片描述

  • 功能:把首地址0x34的数据load到r5-r10这6个寄存器中
  • 因为没有INCR6,所以先INCR4,再两次SINGLE
  • 当然除了上面的方式,还可以6次SINGLE;还可以先2次SINGLE,在INCR4…

1.8、注意

  • Burst 传输不能穿越1K边界(可以防止占用总线过长,导致其他组件挂死)
    • 一个从设备最小的地址间隙是1KB
    • NONSEQ -> SEQ -> 1KB Boundary -> NONSEQ -> SEQ
  • 主设备不能视图开始一个可能穿越1K边界的固定长度的incrementing burst传输

1.9、INCR Burst over 1k boundary

在这里插入图片描述

注:跨1K边界跟操作系统的page大小有关系!

Q:0x3FC到0x400为什么是1K边界?

  • A:首先明确如何判断1K边界,如果地址 / 1k结果为整数,那么就是1K整数倍。addr[31:0] / 2^10相当于addr[31:0] 右移10bit,s商为addr[31:10],小数部分为add[9:0],即addr[9:0] = 10’h000,那么就是1K对齐!
  • 0x400对应二进制为10'b00_0000_0000,也就是说它是1K边界!
  • 0x000-0x3FF为1K空间;0x400-0x7FF为1K空间;

二、地址译码

  • HSELx:选择从设备(选中谁对应的HSEL = 1)
    • 指出由主设备所选择的从设备
  • 由地址译码器来提供选择信号
  • 一个从设备应该至少占用1KB的存储空间
  • 需要一个额外的缺省从设备来映射其他的存储地址

在这里插入图片描述

  • Decoder 译码器的实现对应到RTL代码 if..else 语句

2.1、从设备响应

  • 所访问的从设备必须响应这次传输
    • AHB是个握手的传输机制,如果从设备不返回hready的话,master会一直等,下一次命令就无法传输
  • 从设备可能返回的响应:
    • 完成这次传输(OKAY)
    • 插入等待状态(HREADY信号)(IDLE)
    • 发出错误信号表示这次传输失败(RETRY)
    • 延迟传输,使得总线可用于其他传输(SPLIT)
  • HREADY:transfer done
  • HRESP[1:0]:transfer response
    • 00:OKAY
      • 成功
    • 01:ERROR
      • 失败
    • 10:RETRY
      • 传输未完成
      • 请求主设备重新开始一个传输
    • 11:SPLIT
      • 传输未完成
      • 请求主设备分离一次传输(让出总线仲裁权,让其他master使用!)

2.2、两周期的响应

  • HRESP[1:0]

    • OKAY:单周期响应
    • ERROR:两周期响应
    • RETRY:两周期响应
    • SPLIT:两周期响应
  • 总线的流水特性需要从设备两个周期的响应(工程上有点不太实用)。可以使得主设备有足够的时间处理下一次传输

2.3、Slave Response

在这里插入图片描述

  • 假如有error了,就可以通过HRESP来返回。但实际上,假如有ERROR了是通过内部寄存器上报的,不会通过总线上报

在这里插入图片描述

  • 这个实际中也没怎么用,ready握手机制就已经够用了,ready一直未低,master就会去等。设计协议的时候,为了兼容性强,设计了可以立即返回BUSY的这种功能,这样master就不用等了,可以处理其他命令了!但是实际中等待时间也不长,故用ready还是比较多的!

2.4、Retry 响应

在这里插入图片描述

  • Retry需要两个时钟周期

2.5、Rerty和SPLIT的不同

  • 主要区别在于仲裁的方式
    • RETRY :arbiter会继续使用通常的优先级
    • SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线(释放总线让其他master得以访问)
  • 总线主设备应该用同样的方式处理RETRY响应和SPLIT响应

三、数据总线

  • 不是三态总线,读总写和写总线是分开的
  • Endian(大小端)
    • 在AMBA协议没有定义,由Master定义
    • 主设备和从设备应该采用同样的大小端
    • 不支持动态大小端
  • 对于IP设计,只有应用面比较广泛的应用程序才支持两种Endian

小端:A3-[bit31-bit24];A2-[bit23-bit16];A1-[bit15-bit8];A0-[bit7-bit0]
大端:A0-[bit31-bit24];A1-[bit23-bit16];A2-[bit15-bit8];A3-[bit7-bit0]

3.1、32 bit 小端数据总线的有效字节

在这里插入图片描述

3.2、32 bit 大端数据总线的有效字节

在这里插入图片描述
作为AHB来讲,作为通道是看不到大小端的!

四、主设备

在这里插入图片描述

4.1、AHB 仲裁信号(了解)

注:总线本身没有规定仲裁算法,常用的仲裁算法有:RR(公平轮询)/SP(绝对优先级)/WRR(带权重RR)

在这里插入图片描述

  • 信号中的x代表不同的master,2个master,x就是0-1
  • HBUSREQx:Master发起总线申请
  • HLOCKx:Master锁定总线传输
  • HGRANTx:Aribiter回复给Master的请求结果
  • HMASTER[3:0],上述最大值为16,但是并不是说AHB只能有16个master,可以通过修改位宽来增加master!
  • HMASTLOCK:Master申请Lock之后,Arbiter的反馈
  • HSPLITx[15:0]:Slave发了Split之后,根据Split去调整Master之间的优先级,跟调度算法有关

4.2、仲裁信号解释(了解)

  • HBUSERQ(相比较用的多)
    • 总线请求
  • HLOCKx
    • 高电平:主设备请求锁定总线
  • HGRANTx(相比较用的多)
    • 指出主设备x可访问总线
    • 主设备x控制总线:HGRANTx = 1 且 HREADY = 1
    • master1可访问返回001;master2可访问返回010…(注意one-hot编码方式)
  • HMASTER[3:0]
    • 指出哪个主设备正在进行传输
    • master3选中返回3,master5选中返回5…(二进制编码)
  • HMASTLOCK
    • 指出主设备正在进行一次锁定传输
  • HSPLITx[15:0]
    • 从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输
    • 每一位对应一个主设备

注:仲裁面试的概率比BURST还要低。

现在用AHB做系统大总线设计的越来越少,做仲裁也是一般买IP来做。

4.3、仲裁举例

  • 没有等待状态的grant

在这里插入图片描述

  • 有等待状态的grant

在这里插入图片描述

  • Burst传输之后移交总线

在这里插入图片描述

4.4、总线主设备Grant信号

在这里插入图片描述

4.5、几点说明(了解即可)

  • 对于固定长度的burst传输,不必持续请求总线
  • 对于未定义长度的burst传输,主设备应该持续送出HBUSREQ信号,指导开始最后一次传输
  • 如果没有主设备请求总线,则给缺省主设备(dummy master)grant信号,且HTRANS=IDLE
  • 建议主设备在锁定总线传输结束之后插入IDLE传输,以重新仲裁优先级

4.6、SPLIT传输过程

  • 1、由主设备开始传输(M -> S)
  • 2、如果从设备需要多个周期才能获取数据,则从设备给出一个SPLIT传输响应,从设备记录主设备号:HMASTER。接着仲裁器改变主设备的优先级
  • 3、仲裁器grant其他的主设备,总线主设备移交
  • 4、当从设备准备结束本次传输,将设置给仲裁器的HSPLITx信号的相应位
  • 5、仲裁器恢复优先级
  • 7、仲裁器grant主设备,这样主设备可以重新开始传输
  • 8、结束

4.7、防止DeadLock(死锁)

  • 当多个不同的主设备试图访问同一个从设备,这个从设备发出了SPLIT和RETRY信号,这时很可能发生deadlock
  • 从设备最多可以接收系统中16个主设备的请求,只需要记录主设备好(忽略地址和控制信号)
    • 实际可以自己做扩展
  • 给出RETRY响应的从设备在某一时刻只能由一个主设备访问。
    • 可以使用一些硬件保护机制,比如ERROR

注:SPLIT基本很少用!

五、AHB 设备接口

  • AHB Master
  • AHB Slave
  • AHB Aribiter
  • AHB Decoder

5.1、AHB 主设备接口(要会画)

在这里插入图片描述

输入

  • 来自Arbiter grant信号HGRANTx,表示获得总线使用权。Master有多个,M0那么HGRANTx为0;M1那么HGRANTx为1。
  • Slave返回的HREADY,不管读或者写,为高表示当前命令处理完了,可以发送下一个命令了。同时还会伴随一个HRESP回来,如果是00表示OK,01表示ERROR,10表示RETRY,11表示SPLIT(给仲裁器用的,master本身不会关注)
  • 接着是时钟信号和复位信号,复位信号中的n表示negative,表示低电平有效!
  • 如果是读命令的话,Slave会从HRDATA返回读数据
  • Master会返回HBUSREQx和HLOCKx两个信号给Arbiter
  • 对于Slave主要会发送一个地址HADDR,地址会伴随着其他的控制信号。比较重要的控制信号就是HTRANS,00表示IDLE,01表示BUSY,10表示NOSEQ,11表示SEQ。SEQ和NOSEQ对于Slave来讲,在实际使用没太大区别。只是协议上规定了如果发的是一个BURST操作,那么第一个命令需要用NOSEQ来表示,其余命令用SEQ来表示;如果发的是SEQ,每个命令跟命令之间的地址没什么关系,那你就都是NOSEQ表示!
  • HWRITE信号表示读还是写
  • HSIZE信号指总线32位中,多少是有效的。000 8bits;001 16bits;010 32bits
  • HBURST信号指发的命令前后地址之间有没有关系,000 single:前后地址之间没有关系; 001 INCR:前后地址根据HSIZE递增(1/2/4 byte,没有3 byte)。在AHB上用的不多,但是在AXI上用多,因为AXI上引入了一种叫outstanding的机制。AHB只是两级流水,HBURST没起到多大作用。对于Slave来讲不关注HBURST信号,一样能根据地址(不管前后地址有无关联)一个个处理命令。
  • HPORT信号是做一个保护,data来自什么地方。没啥用不用关注,重点关注HWRITE、HSIZE、HTRANS这三个信号!

5.2、AHB从设备接口(要会画)

在这里插入图片描述

  • HSEL是从译码器Decoder来的,因为我们的总线是共享的,所以数据肯定会到每一个Slave,但是每一次只是访问其中一个Slave。因此会通过HADDR做一次译码,根据AHB Slave的地址范围,译码到你的话,会把对应的HSELx拉高。HSELx为高,命令才是访问到我的,同时看看HTRANS是不是有效(NOSEQ 或 SEQ)代表命令是有效的。
  • 下面Split-capable是为了实现SPLIT,一般来讲SPLIT容易出现DeadLock,所以一般不去实现,这里仅作为了解即可!而且现在SPLIT的处理也不会等太长时间。

5.3、AHB Arbiter(要会画)

在这里插入图片描述

  • 上图仅仅以三个Master来示意AHB Aribiter,并不是说只能有3个Master。AHB总线默认可以挂载16个Master,当然我们也可以通过修改位宽达到挂载更多Master的目的!
  • AHB的HADDR感觉没啥用,它更多的还是关注HUBUSREQ是哪个Master过来的,然后对应给仲裁输出HGRANT。相当于HBUSREQ和HGRANT相互之间进行握手,完成仲裁的控制。
  • HSPLIT信号会让Abriter进行优先级调整

5.4、AHB Decoder(要会画)

在这里插入图片描述

  • Decoder的作用就是输入HADDR,然后根据Slave的空间划分,进行第一级译码操作。HSELx分别对应一个Slave。
  • RTL实现就是if...else或者case

六、Typical Multi-layer example(了解)

在这里插入图片描述

  • 在一个系统中Master和Slave还可能是多级的
  • Slave Mux 是将第二级Slave的地址范围译出来,方面后面选择!
  • 并行访问带宽会大些

七、AHB-Lite(业界目前用的比较多的)

AHB 通过前面的学习,我们知道它是一个多Master多Slave的协议,但是在实际项目中我们用的更多的是AHB-Lite。它是一款简化的AHB协议只有一个Master,所以与AHB相比少了仲裁的机制。也正因为这个原因,少了许多繁杂的信号,可以帮助我们更好的理解和上手AHB协议。本次的AHB-SRAMC项目也是基于AHB-Lite协议的!

在这里插入图片描述

  • AHB的Lite体现在没有Aribiter,就是1个Master多个Slave
  • Master的信号中:没有HBUSREQ和HGRANT
  • Slave的信号中:没有RETRY和SPLIT
  • AHB Lite 化繁为简,所以更实用。
  • 后面的AHB SRMAC 用的也是AHB-Lite

八、AHB 总结

  • 主要组成部分
    • Master、Slave、Aribiter、Decoder(多Slave选择)
  • 传输的过程
    • 流水线机制
    • Address Phase 和 Data Phase
  • 如何提高性能
    • 流水线
    • 注意:Burst Read/Write 并不能提升性能,因为数据该多少拍还是多少拍,并没减少!
  • 仲裁机制
    • 总线控制权的移交(调度)
  • Slave短时间内无法响应
    • HREADY信号拉低
  • Slave 长时间内无法响应(长时间?短时间?怎么界定?功能鸡肋!)
    • 插入SPLIT/RETRY(到了AHB-Lite 这个被去掉了)
  • Master不能进行传输
    • 插入BUSY(不实用)
    • 直接HTRANS最高位置位0,无效之后Slave就不进行接收了!

九、AHB 的应用建议

  • Arbiter 的优先级可以配置
  • Slave长时间不能响应的话,一般不支持SPLIT响应(它会DeadLock),使用RETRY响应
  • 总线上如果只有一个Master的话,可以使用AHB-Lite协议,不用Aribiter
  • 设计一个新的IP时,要仔细核对AMBA的Feature和IP所支持的Feature是否匹配

十、实现

  • 如果设计中既有主设备端口又有从设备端口(eg:DMA、SD-HOST)
    • 通过设备(Master)端口读/写数据
    • 通过设备(Slave)端口配置寄存器等
      • 如处理器(CPU)设置的一些参数(配置寄存器)

在这里插入图片描述

原网站

版权声明
本文为[luoganttcc]所创,转载请带上原文链接,感谢
https://luogantt.blog.csdn.net/article/details/125645569