在完成了基本verilog等基本知识的学习之后,开始接触到一些RTL设计的思想,目前主要的学习资源是中国MOOC上邸志雄老师的《芯动力——硬件加速设计方法》,本篇博客可以算作是乒乓操作部分的学习笔记。在学习到这部分的内容的时候,我遇到了一些困难,通过反复观看课程视频,以及查阅各种资料,总算是能够理解乒乓操作的思想,以下是我总结的关于乒乓操作的一些知识点。
一、什么是乒乓操作?
乒乓操作就是利用一个输入数据流选择器和一个输出数据流选择器,在一个操作周期内,将数据存储到一个数据缓冲模块的同时,将缓冲模块中的数据读出。具体的工作过程可以参考邸老师在MOOC上的课程第二章第三节。这是RTL设计中用面积换速度的一种方法。
![](https://img-blog.csdnimg.cn/img_convert/3cd85fd4fc8e936c7a00888a5411e376.png)
二、为啥要进行乒乓操作?如果没有乒乓操作会怎么样?
(1)设想一个应用场景,现在我需要对一串数据交给显示器显示,如果不采用乒乓操作,我们可以直接将数据给到RAM,等到RAM读完了一帧数据,然后显示器从RAM里读取数据进行显示,如图(a)所示。这样的操作存在一个问题,RAM必须等显示器读取完一帧的数据之后才能开始存储下一帧的数据,RAM在存储数据的时候显示器也不能显示,也就是说,RAM和显示器要相互等待。
![](https://img-blog.csdnimg.cn/img_convert/775979ff27f48934ead5006cb2a9e9d6.png)
如果采用乒乓操作就能避免这个问题,如图(b)所示,数据轮流存储在上下两个RAM中,显示器也轮流从上下两个RAM中读数据,以此实现不间断的显示。对比上下两图,可以发现,采用乒乓操作要多用一个RAM,这就是“用面积换速度”。
以上便是乒乓操作的第一个优点:可以实现数据的无缝缓冲(“缝”就是RAM存储的时间以及显示器读取的时间)
(2)节约缓冲区空间
这里可以参考邸志雄老师课上的例子。WCDMA基带中,一个帧包括15个时隙(不太懂时隙的意思,我的理解是一个帧有15个间隔)。有的时候需要将一整个帧缓冲一个时隙,如果采用一个缓冲区进行缓冲的话,就需要3.84M*10ms=38400位的宽度。如果使用乒乓操作,就不用那么大的空间,使用两个能够存下1个时隙数据的RAM即可,也就是38400/15位。让他们轮流读写。这里这个时隙很重要,多少个时隙就能减少多少倍的缓冲区长度。
![](https://img-blog.csdnimg.cn/img_convert/ffd854d23d58285b2fe56820253763fd.png)
(3)用低速模块处理高速数据流
如下图,在两个数据缓冲模块之后分别插入了一个数据预处理模块,这里用的数据缓冲模块需要为双口RAM,这样会带来一个好处,在数据缓冲模块进行写数据的时候,也可以从已经写好的内容中进行读取。举例说明,在某个周期中,数据预处理模块2正在读数据,如果使用的是单口RAM,此时我们的数据预处理模块不能读数据,只能等数据缓冲模块1读好数据,等下一个周期才能从中读取数据。如果我们采用了双口RAM,此时,我们就不用等待,等到数据缓冲模块读了一些数据之后,我们就能开始从中读数据。平均来看,数据预处理模块读取数据的时间比我们使用单口RAM的情况下增加了一倍。也就是说,我们的数据预处理模块的速率要求可以降低一倍。这样一来,就做到了用低速模块处理高速的数据流。
![](https://img-blog.csdnimg.cn/img_convert/2db5ad72265a0b1e7166d87c71ee384f.png)