我的目的是实现sobel edge detection,linebuffer是其中必不可少的一部分。
linebuffer的实现如下:
1. http://blog.csdn.net/lzy272942518/article/details/46660383, 这里的实现方法是用了经典的书《基于FPGA的嵌入式图像处理系统设计》,英文版
下载链接:http://download.csdn.net/detail/lzy272942518/6949349
但是这个博客里面的代码我尝试了,不成功,但是思路是很清晰的,值得我们看看
2. 第二种是基于altera的FPGA,运用其中的IP核可以直接生产,这是很棒的,但是我的xilinx里面没有可以移位linebuffer的IP核,所以自己写了以下的程序。
好吧 actually,也不是我写的,是我傍边的巴基斯坦男写的,他真的很厉害。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 13:09:59 08/13/2016
// Design Name:
// Module Name: shift_ram
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module shift_ram(
CLK,
nRESET,
data_in,
data_out,
Ready_DE
);
input CLK;
input nRESET;
input Ready_DE;
input [7:0]data_in;
output [7:0]data_out;
reg [7:0]ShiftRegister[0:647];
reg [9:0]i;
always@(posedge CLK)
begin
if(Ready_DE)
begin
ShiftRegister[0] <= data_in;
end
else
begin
ShiftRegister[0] <= ShiftRegister[0];
end
for (i = 1; i <= 647 ; i = i + 1)
if(Ready_DE)
begin
ShiftRegister[i] <= ShiftRegister[i-1];
end
else
begin
ShiftRegister[i] <= ShiftRegister[i];
end
end
assign data_out = ShiftRegister[647];
endmodule
在if语句中用了for语句进行循环,上面的647比较诡异,是因为我实现的是摄像头的处理,所以分辨率是648*494,如果大家用HDMI或者VGA的话,请参照各自的分辨率。
这样就可以实现linebuffer
http://www.cnblogs.com/oomusou/archive/2008/08/25/verilog_sobel_edge_detector.html 真爱无双的博客
虽然程序很难用(因为早),但是很清晰的讲解了思路。值得借鉴
转载请注明原文地址: https://ju.6miu.com/read-1308715.html