36 On chip Bus——AHB,ddr/cache行为

On Chip Bus —— 片上总线,AHB/AXI 无专利费

 APB——早期
AHB——带宽要求不高的地方,MCU:cortex——M0/1/3/4——cpu出来使用AHB总线
AXI——带宽要求高的地方,Arm: A系列CPU,图像处理264等、CNN加速器、平板等
AXI总线——有一些定义好的模块/协议,对效率重要,使用时需要支持这些协议/模块

 

目录

0.前言

为什么需要芯片内部需要BUS连接?

1.DDR行为介绍

1.1行为介绍

1.2 burst length

1.3DDR的读/写波形

2.Cache

2.1Cache的位置与功能

2.2 Cache的工作行为

2.3cache硬件原理

3.片上总线数据传输原理

3.1基础知识

3.2程序和BUS数据传输的关系(程序-硬件 的映射关系)

4.APB总线介绍

4.1不带等待状态的写/读操作

4.1带等待状态的写/读操作

5.AHB总线介绍

5.1总线介绍

5.2AHB数据传输波形

5.3AHB的信号!!——HTRANS、HBURST等

5.4 AHB BURST PHASE 突发相位 — phase翻译为阶段!

5.5AHB BUS Waveform 波形信号


0.前言

bus、ddr control、cache —— 大量应用数据需要ddr缓冲!大量数据都是从ddr中取出的 cache——加速

 ddr 、 cache十分重要——因此需要了解其特性,让bus能够很好的配合!

为什么需要芯片内部需要BUS连接?

使用总线的优缺点

1.标准化:统一标准/统一协议,接口协议不同会导致各个模块间无法连接
2.简化硬件设计
3.系统扩展性好:简化了功能增减,如增加一个master,修改总线即可
4.简化了系统结构:整个系统结构清晰,连线少
5.便于故障诊断和维护

1.DDR行为介绍

1.1行为介绍

0.一次ddr访问需要发两次地址
1.在一个时间点看过去一次只能有一个bank的row打开——一次只能打开一个row(如row3)——需要访问别的row(如row8)——需要先pre charge掉row3,然后过一段时间发 bank0,row8,active指令访问row8
2.但是,有8个bank,每个bank是可以开一个row的,如 bank0-row8 同时还能打开 其他bank的一个row——如bank1-row100等等

 refresh就是给DDR里面的电容重新上电,因为ddr掉电就会失去信息。

 1.2 burst length

基本没有存储单个数据的操作,一般都是burst(比如L4 和 L8)——或者Teminal

1.3DDR的读/写波形

疑问:DDR的时钟频率那么快有啥用?act指令发出,需要花多个周期才能返回8个数据。然后又要precharge,act,存到下一个row——那真正用的不过30%的有效周期!?

答:8个bank的指令是可以掺和在一起的!—— bank interleave
8组指令重叠起来,D - Q就很紧凑了。——指令是串行的

因此ddr对同一个bank不能连续发指令——需要隔几个周期——掺和在一起的指令 效率大概在50% - 80%之间

2.Cache

2.1Cache的位置与功能

有可能会hit——集中——降低cpu的访问、减少延时等等

2.2 Cache的工作行为

为什么hit了,还需要write through?——因为这个数据很有可能是多个master共用的地址——不能抹除掉这个数据

 invalidate——从微信,换到QQ,那之前的cache就没用了

2.3cache硬件原理

cache—主存映射地址(书P117 P122)

 2way 当一个程序在一个小范围内跳时——2way hit能更多 现在一般至少 4way

3.片上总线数据传输原理

3.1基础知识

 

 BUS Arbiter 仲裁器中——可以理解为存了一个路由表

 3.2程序和BUS数据传输的关系(程序-硬件 的映射关系)

 1.写

SRAM定义为8000_0000~8000_7fff,C语言的代码为:*(mem0_base + 0x02)= 8; 地址加2,然后写入一个数据8。
那么对应CPU就会在总线上发出地址:80000008,wdata 也是 0x8,还有一些其他的总线控制信息。 然后Bus Arbiter会找到响应的从机,将这些指令+数据 传输给 SRAM0

mem0_base = 80000000,为什么*(mem0_base + 0x02)出来的地址是80000008 ? 因为C语言的指针+2 —— 根据数据定义U32,+2 就是8个字节(+1个word 就是4个字节)

2.读

对于DMA也是一样——通过DMA的配置寄存器——配置DMA的source和目的地址destination address,当启动DMA请求的时候——DMA会在总线上将地址以及source都发出去——BUS arbiter同理会去查它的路由表——就可以选中对用的slave

 3.在一个ip或slave内部,如何做?

4.Bus Arbiter的地址路由

大地址选择slave——用地址的高位

总结:一般用大地址用高位做译码——一般在slave的内部用地址的低位——选择内部的空间

问:如果CPU访问不存在的slave地址,会怎么样?
答:看arbiter的处理方式—可能返回bus error给CPU,最安全的做法,robust的系统——最好的做法。 或者写一个default——给一个数据黑洞——写进去,读出来固定0啥的——不太好,使用的人不清楚底层的情况。

4.APB总线介绍

4.1不带等待状态的写/读操作

 一个APB的操作至少要两个周期

 4.1带等待状态的写/读操作

规定:SELect有效的时候,address和write要有效,enable必须是在sel下一个周期才有效。然后从机salve可以插入很多的waite state,直到sel、enable、ready为1的时候,这次传输结束。

因为slave不能像下面这样直接能够读出数据

 所以从机也是需要等待和准备,(上面是主机、下面是从机),PSEL PENABLE PREADY同时为1,读1bit数据结束。
定协议时就认为是个慢速协议——效率最多也就50%,就认为访问的慢速设备。

 5.AHB总线介绍

5.1总线介绍

学到HREADY的理解那里卡住了——回顾:http://t.csdn.cn/gsGKE

 

 

视频笔记:

一个AHB的master,其所有的数据线基本分三组(除clk resn)。

 AHB slave
假设master3号发送burst,数据不够,那SPLITx【3】拉高——进行split操作。 HMASTER是4位——16个master——HSPLITx也是16位——对用16个主机的split

 5.2AHB数据传输波形

写是从主机发出信号——将数据写入从机 读也是是从主机发出信号——在从机中读出数据——slave需要hready信号说明准备好了数据?

5.3AHB的信号!!——HTRANS、HBURST等

HTRANS详解

①NONsequential、SEQUENTIAL:burst16,第一个永远是 nonsequential,后面接15个sequential
②IDLE:salve被选中——即AHB slave 把 grant信号给回了AHP master——但AHB master并没有主动请求访问数据,没有request——但grant来了,这个时候master就占有了总线——通常MASTER也没有应对这种自己没请求但是来了grant情况的功能——master自己也不想传数据,但master也得驱动整个模块的信号线——那就驱动信号线把HTRANS拉成IDLE信号——MASTER的独白:我不想传、我也没法request,但是grant给了我,总线被我占用了,那我就发IDLE
              有可能master没有default的功能——可以做一个default master——当总线上 CPU 和 dma都没有请求占用AHB总线时——AHB master 将grant信号给到总线内部的default master——然后default master就一直发IDLE信号——即总线永远来当default master
              或者总线把使用权在IDEL状态下时——绑定到某个master 如 CPU/DMA 总体而言——default master设置在 AHP MASTER 内部,兼容性更好,是最好的方案!
③BUSY:MASTER在发送数据的时候发现自己没有数据了——就发BUSY信号——等待后面的数据到了再发出去,发SEQUENTIAL操作,再把后面的数据传完
                SLAVE靠HREADY来拖住总线传过来的数据——MASTER靠BUSY拖长总线的数据传输周期!

 

 HSIZE编码

 400M下那里错了,不是说256bit的AHB的HSIZE,是说——因为ddr3在不同的频率下——要用完它的资源需要的数据位宽不同——所以Hsize有多种的需求——适应不同的设备——即验证上图中的第二点!

 HBRUST

incrementing:从base地址一直上涨:4-8-... BURST——一次必须写入/读出 burst 定义的数据个数

 HPORT

bufferable——写——可以在bus中先缓存地址/数据——然后给回复master 已经准备好了 ready——然后master就直接发数据了——所以这里的ready信号并不是slave发送的 存在的问题:当终端回了error的时候——不太容易能发回到MASTER——稳健系统通常需要设置中断信号——存储信号并发给CPU!

 

 5.4 AHB BURST PHASE 突发相位 — phase翻译为阶段!

所以如果是incrementing的不定长模式,总线不知道master A要发多少个周期,就无法做到如图中的无缝切换,肯定会有周期的浪费——比如等到IDLE信号后——才开始切换——效率下降 所以不定长的慎用——虽然随便可以传几个数据——但对AHB不友好——效率下降

 5.5AHB BUS Waveform 波形信号

如果是写的波形——图中的HRDATA就不看;如果是读的波形——HWDATA就不用看。 slave的hready信号拉长周期,control 和 data 信号都得保持!

 AHB协议的一个重点!——AHB协议的缺陷

 疑问:对与一个AHB,我只做一个single的传输,为什么要会两个HREADY?通常都是一个slave对应一个HREADY——如收一个数据就一个周期的HREADY,收4个数据就收4个周期的HREADY——为什么会出现两个HREADY?

答:HREADY其实是data对齐的!

对于2的HREADY——肯定是Address A 选中的 slave2回的 hready——对应数据DATA(A) 对于1——HREADY对应的是上一个地址选中的某个slave——对应数据(图中没有画出来)

那下面这里就反映了AHB协议的一个缺陷!

红框中——HREADY信号有效、此时的slave是B、此时的cmd是NONSEQ——意味着当NONSEQ信号发送到slave B的时候,HREADY信号还是slave A发出来的——从机B根本无法拒绝NONSEQ的控制信号,必须得收!——因为此时是A发出的HREADY

 所以B用了A的HREADY抓了cmd信号,B它是无法控制的!到后面因为是自己回HREADY——就可以拒绝是否收某些控制信号对应的数据了。 问:如果SLAVE B在红框处——没有抓到第一个HREADY信号怎么办? 答:bug!这是必须遵守的协议!——用上一个slave的HREADY抓自己slave的第一个的cmd!

 csdn:http://t.csdn.cn/gsGKE

 AHB地址线和读写数据刚好错开一个时钟周期——用于访问SRAM是不是刚好符合一个流水线设计? 这个设计并不是好的——并不是一个高速设计!——原因有3点...

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sean--Lu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值