Dram学习笔记(1) Dram相关基础知识

1. 引言
这几年主要做的都是视频+神经网络的工作,中间处理的数据量都是很大的。有时候涉及到多路多目的情况,就很容易出现带宽问题。
偏偏这个问题还很难查,之前上家是用的xilinix的方案,还是AMP的模式,一个裸核+一个linux,还有FPGA同步抢带宽,很多时候只能从函数耗时来进行分析,根本无法对带宽问题进行一个定量的计算。感觉很多都是靠直觉和经验,比如上个项目是4目的,用的MpSoc5,有ABCD功能,能稳定跑。这次项目也是4目,多加了一个EF功能,就不好说了。而且出了带宽问题是真的很难查,也找不到什么有效的工具来查,系统会出现各种神奇的bug,从逻辑角度完全无法分析和解释的,只能不停的通过做实验来测试。
这应该是之前项目最大的痛点了。功能都好做。但是老板为了省成本,玩命往便宜片子里加功能,比如7020跑多个神经网络,做CNN,TSR,seg都要做,arm这边也一堆功能,然后出了诡异问题就是嵌入式你们好好查。偏偏拿不出什么有效的数据来说服老板。全靠经验。“A公司也用的这个芯片,他们只能跑BCD功能,我们再加EFG确实压力太大了。”诸如此类,比较无力。这时候就看leader的抗压能力了,抗不住整个组就要坑。
最近在安霸见到一个新的小工具 DramStatictiscTools,十分简单,但是十分好用。我看SDK是2020.6月加入进来的,但是实际上整个CV2X的芯片都支持的,估计很早之前就进行相关的计划了。这可能就是自己做芯片和用别人芯片的不同吧。
CV2x芯片在内部加入了内存统计的功能,这个不再是上层软件层面的统计了,是芯片内Dram Controller的统计,这个东西我不知道对于芯片来说难不难做,但是对于视频芯片这种高带宽的应用,真的很实用。
芯片可以自己做一个在一段时间内,进行每一个Dram client的统计,包含request,burst,maskburst三项的统计。因为这个是Dram Controller底层的统计,可以说是最为精准的了。client包括 AXI,DMA,ENET,USB等一堆客户端。我们可以准确的拿到多少次请求,进行了多少次burst,其中有多少是maskburst。


2. Dram基础知识
这部分基础是新学的,不然这个统计表看不懂,连什么是burst都不知道。

2.1 Dram结构
抄了一张图(From 底部链接1).

从图中可以明显的看出,我们日常使用的内存条,其实是由一个个内存片组成的(图中的黑色方块)。
一个黑色方块是256M,8个组在一起就成2G。


黑色方块内部分为多个bank。


每个bank中间有r行c列个存储单元。

每个存储单元中间有n个电容和晶体管组合。
每组电容和晶体管结构如下,代表1位(1 bit)。
每个存储单元里有n组,即为n bit,它通常是8bit或者16bit。


其实内存个人类比理解就像表格,想像一下excel

内存    excel
8个bank    8个sheet
16384行    16384行
1024列    1024列
1个存储单元(cell)    1个格子
其中,1个存储单元就是一次内存读写的最小单位。
但是1个存储单元并不是只有一个电容和晶体管(1bit),它通常是8bit或者16bit,也就是,行列地址确定之后,可以读取8bit或者16bit(1个cell的数据)

2.2 一些基础名词理解
bank
burst
maskburst
prefetch
2.3 关键名词的理解
2.3.1 prefetch
因为统计表中有burst的数量,之前就很奇怪,为什么同样的case,比如拷贝1M的buffer,相同位数的DDR4和LPDDR4统计的数值不一样?为什么burst数量还和内存类型有关系?
认真查了一下,原来 一次burst是读一个存储单元,但是存储单元的位宽并不是芯片的位宽,而是芯片的位宽*prefetch的位数,所以每次burst的数据量还和prefetch的位数有关。

DDR1 采用2n prefetch,DDR2采用4n prefetch,DDR3、DDR4采用8n prefetch,LPDDR4是16n。
prefetch的作用是,在无法提升核心频率的情况下,通过prefetch同一时间读取多个内存单元,通过加线的方式并行传到IO换缓冲区,然后从缓冲区到Dram控制器的线数降下来,提高频率。
在核心颗粒的主频提升遇到瓶颈的情况下,这一技术成为了DDR更新换代的主流技术。

Prefetch简单的说就是在一个内核时钟周期同时寻址多个存储单元并将这些数据以并行的方式统一传输到IO Buffer中

2.3.2 burst
参考连接
DRAM 内存介绍
DDR扫盲——关于Prefetch与Burst的深入讨论
DDR1-3和GDDR1-5全解析
关于DDR的prefetch
DDR3和DDR4内存的区别是什么
一堆名字的解释
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/tao475824827/article/details/109156185

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值