• 正文
  • 相关推荐
申请入驻 产业图谱

SDRAM详细分析——03 流水线内存访问和内存效率

09/15 09:39
407
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

大家好,这里是大话硬件。

在上一篇文章中介绍了SDRM读写数据最基础的内存访问周期,其中提到了因为电容漏电,SDRAM工作时需要不停的刷新,这无疑是会降低DDR的效率。

为了进一步提升DDR的效率,目前采用的技术是流水线内存访问方式。

硬件开发人员来说,流水线内存访问的实现的基础是SDRAM的命令总线和数据总线分开。

下面的图解释了流水线操作指令的核心。

命令总线先发出对bank0的操作,然后发出对bank1的操作,此时数据线开始传输bank0的数据,在传输bank0的数据的同时,命令总线并没有闲着,继续发送对bank2的操作,当bank0的数据传输完成后,因为bank1的命令提前就已经下达了,所以数据总线可以直接无缝切换传输bank1的数据。

命令和数据分开方式,就像我们并行工作一样,当我们在设计A项目原理图时,B项目的项目经理会提前告诉我们B项目要做的事情,这并不会影响我们正在开发的A项目。当A项目图画好以后,因为前期已经下达过任务,又开始直接干B项目。本质就是提高效率。如果等你干完A项目,B项目再来分配任务,就会耽误这个分配的时间。

上面这种无缝切换,命令总线不空闲的方式就是流水线技术的核心,极大地减少了内存因为等待指令而产生的空闲时间。对硬件来说,数据总线上会一直存在数据。那么在相同的之间内,可以带来更高的效率和数据吞吐量。

从前面的分析可知,SDRAM的刷新会影响效率,但是流水线指令又能增加效率,那到底如何定义这个内存效率呢?

内存效率定义公式:

efficiency=transfer_cycles/ total_cycles

这个公式说明内存效率关注的是SDRAM到底有多少个周期是在传输数据。这个比值越高,就说明内存的利用率越高。

一共有五个方面会影响到内存效率。

第一个:刷新效率

SDRAM因为内部构造原因,需要定期的进行刷新来保持数据不丢失。根据状态机的可知,在进行刷新操作时,肯定不能进行数据的传输。就像人要固定的时间吃饭睡觉补充能量而停下工作。这是SDRAM从制造出来就已经决定的。

平均7.8us就需要对一个行进行刷新。

要想提升刷新效率,那必须对SDRAM内部的设计进行改进,这个比较困难。因此,刷新效率很难改变。

第二个:读写效率

数据总线的方向在读和写之间切换是需要时间的,如果一会读,一会写,频繁的切换方向,这些切换的开销就会累积起来。

读到写需要花费2个时钟周期,写操作切换到读操作,需要花费4个时钟周期。可想而知,如果是连续大量的读或者大量的写,效率就会比较高。

所以优化内存读写效率,就需要在命令总线上巧妙的安排指令,尽可能将相同的指令安排在一起,减少数据来回的切换。

第三个: Bank冲突效率

SDRAM内部是多bank架构,如果连续两次访问请求都是指向同一个bank的不同行,就需要先关闭前一行,再打开新的一行,这个过程非常消耗时间,就会产生冲突,降低效率。

根据SDRAM的时序约束要求,如果要激活同一个bank的新行,命令需要至少等待12个周期。但是如果访问时,是切换不同的行,就只需要等待2个周期,这样就能极大的降低bank冲突带来的影响。

第四个:命令冲突效率

命令总线上发出的效率比较密集,就会发生冲突,造成延迟。

数据总线是双倍速率传输,命令总线是单倍速率传输,这样数据总线完成数据传输后,但是命令总线的指令还未及时下发,就会导致多个指令一起要发出,造成冲突。

第五个:数据效率

SDRAM在一次操作中取回的数据是不是百分百都是我们想要的,有时候为了数据对齐,内存会一次性读取一个数据块,但只有其中一部分的有效的,多取出来的部分就造成了浪费。

这和内存工作方式有很大的关系。内存并不是一个字节一个字节单独读取数据,这样太慢,通常是一个固定大小的块来读取,如下所示,有用的数据只有中间的红色的部分,但是读取的时候,是一行全部获取。

从下面的资料可以看出,读取数据的突发长度不一样,效率也是不一样的。

根据上面的分析可知,内存效率和内存在工作时的访问方式有非常大的关系。巧妙的安排指令的顺序,数据是否在同一个bank,每次取出数据块的大小,数据的对齐方式等等都是会影响到内存的效率。所以,设计出一个高效的SDRAM控制器在应对高数据带宽的场合非常重要。

下一节介绍内存控制器。关注我,让我成为你的专属小太阳吧

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录