Dm642 sram
一、概述
二、Sram 与Cache 分配
三、EDma的应用
一、概述
Dm642 具有 内部的Sram 256Kbyte ,而Sram 同时也可以作为Cache 使用。由于Sram的操作与处理单元处于同步模式,并且操作频率也是同步,因此使得高速数据处理具有了非常高的效率。 注意:本文所指的SRAM主要指DM642的二级缓存SRAM,而非L1.
1、数据操作与算法关系
Dm642处理器一般作为视频处理,涉及数据量大,即数据操作频繁,而相对而言程序比较集中化(有效的执行代码一般比较集中),因此数据操作直接影响到算法的效率。数据操作的源头与结果,最终存放在Sdram, 而Sdram操作需要经过EDMA ,并且读写频率相对较低( 本设计采用了150M ),并且随机读写需要多个时钟周期,因此大数据操作可能将占用大部分CPU处理。
例如 在执行 一个 普通 512K随机跳转(平均跳转间距大于16KByte ,测试源代码在dspserver com 网站)的程序 ,测试GPIO 。
以下即对GPIO读写操作平均值以下是主要有效代码:
for(i=0;i<0x1000;i++;
GPIO_VALUE = 0XFFFF;
for(i=0;i<0x1000;i++;
GPIO_VALUE = 0X0000;
其中代码测试 则是多个距离比较远的程序,相互跳转执行
其中数据测试 则是多个距离比较远的数据,随机读取地址
测试禁止了 cache
CODe Data |
L1Cache |
Sram(内部) |
Sdram(150M) |
Flash(1M) |
L1Cache |
100K |
95K |
10K |
3.3K |
Sram(内部) |
98K |
92K |
9.2K |
3.3K |
Sdram(外部 ,150M) |
9.6K |
32K |
7K |
1.2K |
Flash (8bit 1M) |
3.5K |
3.5K |
1.2K |
0.2K |
由此看出代码与数据的分配,使得程序效率差别很大,对于一般我们使用的Sdram 与Sram模式,差别达到 95K/7K=14 倍。
因此在软件上和编译上合理安排数据代码结构非常重要。
2、DMA与数据操作
由于Dm642的EDMA具有完善的操作能力,并且具有和CPU等效或者更高的优先级,我们可以等其为一个微型简单的处理器,因此实际操作中,我们可以将DMA与CPU能并行执行,从而获得非常高的效率。
在EDMA文档中(dspserver com 有下载)提供了一个乒乓算法,可以满足很大一部分数据的高速处理的需要。本设计中我们也在内核中专门配置了Dma服务器,用来对其数据的拷贝进行了更加便捷的打包。对于DMA的操作我们有另文作了详细介绍,(参看 网站提供的DmaServer源代码以及Dm64aDma分析),而本文主要主要针对SRAM与DMA关系讨论 。
由于Dma与处理器公用了SRAM,而SRAM具有8Bank,即可以同时支持八路单独读取,其配置如下:
L2 EDMA write path width 64 bit
L2 EDMA read path width 64 bit
L2 L1D read path width 256 bit
L1D L2 write path width 64 bit
L1D L2 victim path width 256 bit
L2 banking4 64 bit banks8 64 bit banks
L1等效CPU 。
SRAM读写为32/64bit(不支持8,16),考虑到DMA与CPU同时读取可能存在以下情况(禁止 CACHE)
操作周期 |
CPU (R/W) Bank(A/B) |
DMA (R/W) Bank(A/B) |
CPU*1 + DMA*1 |
R A |
R A |
CPU*1| DMA*1 |
R A |
R B |
CPU*4 + DMA*1 |
W A |
W A |
CPU*4 | DMA*1 |
W A |
W B |
如果使用了CACHE的话,则有
以上我们可以看出SRAM操作存在冲突,虽然处理器设计上已经通过迟延规避的错误,但是软件算法的效率将降低,并且在算法处理上做不到精确的预测。因此设计中需要有仔细分配好CPU 与DMA的操作。
系统提供的DMA SERver 主要是通过对BANK的管理实现 DMA与CPU在不同的BANK操作,从而降低冲突,提高数据带宽。
同样我们提供了 L2BANK 测试比较性能图,测试中H264DCT计算中未经优化的代码执行结果(CCS BIOS 提供的管理)与经过L2Bank分配管理后的代码运行结果比较为80 :100。( dspserver com 网站有测试源代码)
3、 Cache 与算法
由于C6X 系统结构上 Cache 与SRAM复用,即为同一物理空间,所以Cache 与SRam操作一样存在着读写冲突。软件可以对SRAM做优化,而CACHE的优化则由处理器结构完成,我们一般很难对其控制。
一般编程习惯对数据处理优化,很难控制代码分段处理,我们常见的办法就是“尽量让代码精短,数据集中”,当然这些处理具有非常高的效率。
但是C6X结构具有一些特性:
1、 跳转需要6个机器周期,
2、 而数据读取需要至少5个周期,
3、 数据操作一般为32bit ,但是数据带宽为256/64 bit ,
4、 而编译器不会对汇编优化
而一般处理算法周期比较短(例如 DCT 16X16 仅仅需要120机器周期,ImageLib提供),以上特性可能需要B*2 +LD*2 =6*2+5*2 =22机器周期 ,于经过优化的代码比较而言浪费15个周期(参看dspserver com 网站提供的Cache测试代码),即效率为 120 :144 。往往我们在软件上绞尽脑汁提高的效率,在这里却被白白浪费,而且是最为密集的计算过程中。
以上看出 C6x中SRam对高速应用尤其是算法处理,具有极为重要的作用,不啻与CPU ,因此如何优化SRAM应用并且不提高开发复杂性,显然具有非常重要的意义。
当然L2Sram的操作本身是同步存储,还存在其他操作的特性(如双时钟操作,单时钟的相应),即便优化,对算法影响有限,本文不再累述。
二、Sram 与Cache 分配
1、 SDRAM 说明
板卡设计中我们采用了150M的4Bank外存,其中 CR为3,因此连续读取速率可以达到150M -- ,随机读取需要4个时钟,随机写入2个时钟。我们具有VP0 VP2 两个27M视频采集端口,VP2一个显示视频端口时钟(27~110M),其他设备100M网络,串口等基本(带宽小,随机行为暂时忽略),共需带宽 : 27*2 *80% + 74.5 *2(16bit) *90% =180M带宽。而在视频处理上CPU显然要读取视频数据,因此可以认为等价于视频采集带宽,回写,中间读取视频资料等等,系统的数据峰值操作约为600 M~800M ,而系统带宽约为 150M*8 =1.2G因此系统带宽利用〉70%,处于非常繁忙阶段。
提示:1、实际运行带宽《75%系统理论带宽,系统能正常运行,否则,系统效率大大降低,长时间导致堆栈溢出或者失效。
2、 本设计中打开了2路视频采集,1路VGA显示,串口,H264视频压缩算法。 采用示波器可以测试带宽 查看 CE0 其有效电压与SDAM操作成线性关系。因为 读取 CE0=0,不操作 CE0=1,刷新产生一个128K间隙电压作为基准,所以 带宽利用率 n =100% - (Vt-Vr)/(3.3 - Vr)。
2、 LDW LDDW STW STDW 说明
3、 L2Cache Line 说明
系统使用 : 0X00000~0X1FFFF 作为SRAM
0X20000~0X3FFFF 作为CACHE
0X80840000 作为 Cache的影像
4、 Bank 与带宽说明
5、 系统的内存管理
- 北京汇科动力科技有限公司 [加为商友]
- 联系人dsp(先生) 部门经理
- 地区北京
- 地址北京市海淀区知春里甲10号誉得写字楼613室