在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1295|回复: 2

[原创] 孩子都能学会的FPGA:第十四课——FPGA的乒乓操作

[复制链接]
发表于 2023-11-28 16:31:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 chdaj58 于 2023-11-28 16:35 编辑

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

        乒乓操作法是FPGA 开发中的一种数据缓冲优化设计技术,可以看成是一种形式的流水线技术。输入的数据流在通过“输入数据流选择单元”时,时间等分地将数据流分配到两个数据缓冲模块内。数据缓冲模块可以是FPGA 中的任何存储模块,如双口RAM、单口RAM 和FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1; 在第二个缓冲周期,通过“输入数据流选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第一个周期的数据通过“输出数据流选择单元”的选择,送到“数据流运算处理模块”进行运算处理:而在第三个缓冲周期,通过“输入数据流选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第二个周期的数据通过“输出数据流选择单元”的切换,送到“数据流运算处理模块”进行运算处理,如此循环往复。

v2-2eb7ab1540e89b790be7fa9b48b9eab5_720w.png

简单的解释就是我们常说的工厂里面的两班倒,把工人分成白班和夜班,白班的工人是白天上班,晚上休息,夜班的工人是白天休息,晚上上班,这样就能保证机器是时刻工作着,产生最大的效益。而FPGA的乒乓操作一般是两个缓存,数据交替着写入两个缓存,同时交替着读出缓存,让数据以最大的带宽进行传输。

乒乓操作的好处就是用两个缓存来处理数据,而且在同一个时刻一个缓存只负责写,另一个缓存只负责读,不会对一个缓存同时进行读写,从而降低了控制的难度!如果仅仅读数据流进行控制,双口RAM或者FIFO都可以实现,但是要同时进行读写,很容易引起读写的冲突!

将起来可能不太直观,下面同时一个工程实例来说明。要求是系统时钟是100MHz,低电平复位,一个RAM用于0-255递增数据的读写,另一个RAM用于255-0递减数的读写,最终输出的是0-255-0的三角波。

设计如下所示,主要通过weaweb信号控制数据的读写,weaweb是高电平的时候写ram,低电平的时候读ramaddraaddrb分别是RAM的读写地址信号,dinadinb分别是RAM的输入信号,doutadoutb分别是ram的输出信号。

v2-20686d8026e601022f3fa9e76bd88282_720w.png
设计要点就是weaweb一定是相反的,就是wea高的时候web一定低,就是wea低的时候web一定高,就是ram0写的时候ram1一定是在读,ram0读的时候ram1一定是在写!因为用到的ram都是256深度的,地址计数都是0-255,&addra的意思是对addra的每一位取&,就是addra的8位全部都是1的时候&addra才是1,这时候将wea反转。

v2-af219e3a16b91bf23c5e0bdc447eb51c_720w.png
其实addra和addrb是同步一直累加的,当累加到最大值255的时候清零再重新进行累加。

v2-f270cd234374ed6a51d60dbde8525c37_720w.png

dina在wea为高的时候产生0-255的递增数,在wea为低的时候保持为0。dinb在web为高的时候产生255-0的递减数,在web为低的时候保持为255。

v2-4c6239ad314b63764d9cd6c66659249b_720w.png
把两个ram例化一下。
v2-0db1d799f8e1fff845f1a03dc25ce755_720w.png

最后将两个ram中输出的数据合并后输出,之所以把wea和web都打一拍,是因为ram中读数据会延迟一拍,就是在当前时刻读addra=0地址的数据,必须要等到下个时钟周期才能把数据读出来。

v2-b77f8c342cb25ef25ae2a9761a59ed23_720w.png

双击sim目录下的top_tb.bat文件,完成自动化的仿真。
v2-6544b693641126804b0e5a7d3c6f110f_720w.png

仿真波形如下所示。

v2-9bfbe5f0dd6edaa020b147efc8b447e1_720w.png

采用模拟信号的方式看更明显,dina输入的是递增数,dinb输入的是递减数,而dout输出的是三角波。


v2-13cb90d29bb6a62a96a9abe296c6c44f_720w.png

本实例主要是演示FPGA的乒乓操作,实用性可能不太大,在实际的应用中,比如图像的处理,常常用到乒乓操作,就是数据边传输边处理。后续在图像处理的专项中会详细介绍。


发表于 2024-1-2 09:52:13 | 显示全部楼层
厉害厉害
发表于 2024-6-25 13:51:51 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 20:44 , Processed in 0.017193 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表