“利用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被拉高时,此时实现三行数据并行输出。
领取专属 10元无门槛券
私享最新 技术干货