首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于双端口RAM实现Linebuffer设计

利用Linebuffer可以实现单行数据串行输入,多行数据并行输出;常用于图像处理与流水化并行运算当中

01

Linebuffer简介

通过Linebuffer技术可以实现数据串入,然后多行数据并行输出,其效果如下图

数据从左边单个端口输入(从DDR或者ROM/RAM里面获取数据),右边实现多行数据并行输出。常用于图像处理(二维数组)当中,实现并行化操作。例如一副图片每行有m个数据,则Linebuffer当中每行则有m个缓存,如若要实现n行数据并行输出,则需要n行缓存。其在m*(n-1)个时钟周期后,则可以实现n行数据同步并行输出。

02

示例设计

这里以一个基于双端口RAM作为缓存单元来实现三行(每行200个数据)数据同步并行输出。

其整体结构如下(data_o_1,为输入数据,data_o_2为RAM_INST1的输出,data_o_3为RAM_INST2的输出)。

数据流通过程如下:

数据进来先进入到RAM_INST1,其内存大小为200,当存入的数据量到达200后,开始将RAM_INST1里面的数据从地址0开始读出(与此同时新的数据进来被送入RAM_INST1),送到RAM_INST2,当200个数据全送到RAM_INST2里面之后,其也开始做输出。

其仿真效果如下:

数据进来,先往RAM_INST1里面写,地址递增。

当RAM_INST1接收到199个数据后(0-198,这里提前输出是因为RAM数据输出打了一拍),开始输出(r_en拉高),读地址递增。同时读出的数据被写入到RAM_INST2。

当RAM_INST2的被写入的数据也达到了199个,则开始将其r_en拉高,开始将数据输出。同时RAM_INST1输出的新数据也在被写入到RAM_INST2。

即从源端数据开始输入到400个时钟周期后(拉高o_valid),RAM_INST2,RAM_INST1即可实现两行数据同步输出。效果如下:

此时源端输入的则是相应的第三行数据。

仿真结果如下:

可以看到data_o_1为源输入数据,data_o_2为RAM_INST1的输出,data_o_3为RAM_INST2的输出。当o_valid被拉高时,此时实现三行数据并行输出。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180722G0NE1A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券