在FPGA处理图像过程中,经常遇到需要对于像素按照行对齐的输出,比如说 在求取图像sobel运算 需要一个像素点周围的8个像素,着九个像素怎么得到呢? 首先需要得到第一行 第二行 第三行的第一个像素,然后通过移位寄存器保存该三个像素, 再得到第一行 第二行 第三行的第二个像素,由此可见,每一行的像素都是对齐输出的。
怎么样确保每一行的像素都能够对齐输出呢?这就需要用到lineBuffer 行缓冲器。
一、行缓冲的设计
1.1 起始写地址、读地址
起始的写地址为0
起始的读地址位(0-w) w为图像一行像素的个数
这样定义可以使读和写的地址差距时钟保持在一行w个像素
1.2 读写使能信号
记住最关键的一点:写比读延迟两个时钟周期 因为RAM 2个时钟周期才出数
当数据以及数据有效信号到来时 直接将数据有效信号赋给ren
assign ren = dataInValid;
而对于wen来说 需要将dataInValid延迟两拍再输入给lineBuffer
always @(posedge clkin)
begin
dataInValid1 <= dataInValid;
dataInValid2 <= dataInValid1;
dataIn1 <= dataIn;
dataIn2 <= dataIn1;
end
assign wen = dataInValid2;
1.3 缓冲单元的设计
缓冲单元就是一个RAM
主要设定来初始地址 以及后续每一次地址++的过程
module LineBuffer
(
input rst_n,
input w