当前位置:网站首页>【数字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
回环
- WRAP4:
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使用!)
- 00:OKAY
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)设置的一些参数(配置寄存器)
边栏推荐
- Niuke real problem programming - Day12
- Notes HCIA
- 【数据挖掘】视觉模式挖掘:Hog特征+余弦相似度/k-means聚类
- Ctfshow, information collection: Web3
- [data mining] visual pattern mining: hog feature + cosine similarity /k-means clustering
- Integer learning
- 【OBS】RTMPSockBuf_Fill, remote host closed connection.
- Protection strategy of server area based on Firewall
- 写一篇万字长文《CAS自旋锁》送杰伦的新专辑登顶热榜
- Excerpted words
猜你喜欢
使用cpolar建立一个商业网站(2)
Win10 or win11 taskbar, automatically hidden and transparent
8大模块、40个思维模型,打破思维桎梏,满足你工作不同阶段、场景的思维需求,赶紧收藏慢慢学
MySQL installation configuration 2021 in Windows Environment
[deep learning] semantic segmentation experiment: UNET network /msrc2 dataset
Unity之ASE实现全屏风沙效果
Briefly describe the working principle of kept
Niuke real problem programming - Day12
Ctfshow, information collection: web5
Ctfshow, information collection: web12
随机推荐
MongoDB数据库基础知识整理
Guangzhou Development Zone enables geographical indication products to help rural revitalization
微信小程序 01
HW初级流量监控,到底该怎么做
Niuke real problem programming - day18
Change win10 Screensaver
8大模块、40个思维模型,打破思维桎梏,满足你工作不同阶段、场景的思维需求,赶紧收藏慢慢学
asp. Netnba information management system VS development SQLSERVER database web structure c programming computer web page source code project detailed design
2. Heap sort "hard to understand sort"
leetcode 241. Different Ways to Add Parentheses 为运算表达式设计优先级(中等)
一个需求温习到的所有知识,h5的表单被键盘遮挡,事件代理,事件委托
【數據挖掘】視覺模式挖掘:Hog特征+餘弦相似度/k-means聚類
CTFshow,信息搜集:web14
【数字IC验证快速入门】26、SystemVerilog项目实践之AHB-SRAMC(6)(APB协议基本要点)
What are the safest securities trading apps
大表delete删数据导致数据库异常解决
什么是数据泄露
众昂矿业:萤石继续引领新能源市场增长
上半年晋升 P8 成功,还买了别墅!
[understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper