Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚ FPGA µÄͼÏñ±ßÔµ¼ì²â
 
  2409  次浏览      17
 2018-2-12 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÊµÏÖͼÏñµÄ±ßÔµ¼ì²â¹¦ÄÜ¡£

Ŀ¼

1.mifÎļþµÄÖÆ×÷

2.µ÷Óà ip ºËÉú³ÉromÒÔ¼°ÔÚ questasim ·ÂÕæ×¢ÒâÎÊÌâ

3.»Ò¶È´¦Àí

4.¾ùÖµÂ˲¨£ºÖصãÊÇ3*3 ÏñËØÕóÁеÄÉú³É

5.sobel±ßÔµ¼ì²â

6.ͼƬµÄÏÔʾ

7.½á¹ûչʾ

mifÎļþµÄÖÆ×÷

ÊÜ×ÊÔ´ÏÞÖÆ£¬½«Í¼Æ¬ÏñËض¨Îª 160 * 120£¬½«Í¼Æ¬Êý¾ÝÖÆ³É mif Îļþ£¬¶Ô rom ip ºË½øÐгõʼ»¯¡£mifÎļþµÄÖÆ×÷·½·¨ÍøÉÏÓкöà°ì·¨£¬Òò´Ë¾Í²»ÔÙÐðÊöÁË£¬Öصã˵mifÎļþµÄ¸ñʽ¡£

1¡¢mifÎļþµÄ¸ñʽΪ£º

1 WIDTH=16 ; //Êý¾Ýλ¿í
2 DEPTH=19200 ; // rom Éî¶È¼´Í¼Æ¬ÏñËصãµÄ¸öÊý
3 ADDRESS_RADIX=UNS ; //µØÖ·Êý¾Ý¸ñʽ
4 DATA_RADIX=BIN ; //Êý¾Ý¸ñʽ
5 CONTENT
6 BEGIN
7 0:1010110011010000 ; // µØÖ· £ºÊý¾Ý £»×¢Òâ¸ñʽҪºÍÉÏÃ涨ÒåµÄ±£³Öͳһ
8 1:1010110011010000 ;
9 2:1010010010110000 ;
10 ......
11 19198:1110011011111001 ;
12 19199:1110011011011000 ;
13 END;

µ÷ÓÃip ºËÉú³É rom ÒÔ¼°ÔÚ questasim ·ÂÕæ×¢ÒâÎÊÌâ

Õⲿ·ÖÄÚÈÝÒѾ­ÔÚÉÏƪ²©ÎÄÖÐÏêϸÃèÊö¹ý£¬ÏêÇéÇë¼ûhttp://www.cnblogs.com/aslmer/p/5780107.html

»Ò¶È´¦Àí

ÈκÎÑÕÉ«¶¼Óɺ졢ÂÌ¡¢À¶ÈýÔ­É«×é³É£¬¼ÙÈçÔ­À´Ä³µãµÄÑÕɫΪ( R,G,B )ÄÇô£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÏÂÃ漸ÖÖ·½·¨£¬½«Æäת»»Îª»Ò¶È£º

1.¸¡µãËã·¨£ºGray=0.299R+0.587G+0.114B

2.ƽ¾ùÖµ·¨£ºGray=(R+G+B)/3;

3.½öÈ¡µ¥É«£¨ÈçÂÌÉ«£©£ºGray=G£»

½«¼ÆËã³öÀ´µÄGrayֵͬʱ¸³Öµ¸ø RGB Èý¸öͨµÀ¼´RGBΪ(Gray,Gray,Gray)£¬´ËʱÏÔʾµÄ¾ÍÊǻҶÈͼ¡£Í¨¹ý¹Û²ìµ÷É«°å¾ÍÄÜ¿´Ã÷ÁË¡£ ͨ¹ý¹Û²ì¿ÉÖª£¬µ±RGBÈý¸öͨµÀµÄÖµÏàͬʱ¼´Îª»ÒÉ«£¬GrayµÄÖµÔ½´ó£¬ÑÕÉ«Ô½½Ó½ü°×É«£¬·´Ö®Ô½½Ó½üºÚÉ«£¨ÕâÊÇÎÒ×Ô¼ºµÄÀí½â£¬²»ÑϽ÷´íÎóÖ®´¦Çë´óÉñÖ¸Õý£©¡£

ÕâÊÇÔÚÏßµ÷É«°åÍøÖ·£¬¿ÉÒÔ½øÈ¥×Ô¼ºÑо¿Ò»Ï¡£http://tool.chinaz.com/tools/selectcolor.aspx

´Ë´ÎÎÒ²ÉÓÃÊǸ¡µãËã·¨À´ÊµÏÖ»Ò¶ÈͼµÄ£¬ÎÒµÄͼƬÊý¾ÝÊÇRGB565 ¸ñʽ £¬

Äѵã: ÈçºÎ½øÐи¡µãÔËËã¡£

˼·£ºÏȽ«Êý¾Ý·Å´ó£¬È»ºóÔÙËõС¡£

ÀýÈ磺

Gray=0.299R+0.587G+0.114Bת»¯Îª Gray=(77R+150G+29B)>>8 ¼´¿É£¬ÕâÀïÓÐÒ»¸ö¼¼ÇÉ£¬Èô a Ϊ 16 λ¼´ a [15:0],ÄÇô a>>8 Óë a [15£º8]ÊÇÒ»ÑùµÄ¡£

ºËÐÄ´úÂëÈçÏ£º

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
red_r1 <= 0 ;
green_r1 <= 0 ;
blue_r1 <= 0 ;
end
else begin
red_r1 <= red * 77 ; //·Å´óºóµÄÖµ
green_r1 <= green * 150;
blue_r1 <= blue * 29 ;
end
end

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
Gray <= 0; // Èý¸öÊýÖ®ºÍ
end
else begin
Gray <= red_r1 + green_r1 + blue_r1;
end
end

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
post_data_in <= 0; //Êä³öµÄ»Ò¶ÈÊý¾Ý
end
else begin
post_data_in <= { Gray[13:9], Gray[13:8], Gray[13:9] };//½«GrayÖµ¸³Öµ¸øRGBÈý¸öͨµÀ
end
end

¾ùÖµÂ˲¨

¾ùÖµÂ˲¨µÄÔ­Àí

http : // blog . csdn . net / hhygcy / article / details / 4325304 (´Ë´¦ÒýÓà hhygcy µÄÎÄÕÂ)

Äѵ㣺ÈçºÎÉú³É 3*3 µÄÏñËØÕóÁС£

ÎÒÃÇ¿ÉÒÔÀûÓà ip ºËÉú³ÉÒÆλ¼Ä´æÆ÷ £¬·½·¨Óë ip ºË Éú³É rom Ò»Ñù£¬ÏêÇé¼ûĿ¼ 2 Òò´Ë²»ÔÙ׸Êö ¡£

·ÂÕ沨ÐÎÈçÏ row_1 , row_2 , row_3 ÊÇָͼÏñµÄµÚÒ»¡¢¶þ¡¢ÈýÐеÄÊý¾Ý£¬Per_href ÊÇÐÐÓÐЧÐźţ¨ÊÜVGAʱÐòµÄÆô·¢£¬´Ó rom ÖжÁÈ¡Êý¾ÝʱÉè¼ÆÁËÐÐÓÐЧºÍ³¡ÓÐЧµÄ¿ØÖÆÐźţ¬Ê°빦±¶£¬ÓÐÁËÀûÓÚ·ÂÕæ²é´íºÍÊý¾ÝµÄ¿ØÖÆ£©¡£´Ó 3 ¿ªÊ¼¾Í³öÏÖÁË3*3 µÄÏñËØÕóÁУ¬Õâʱºò¾Í¿ÉÒÔÇóÈ¡ÖÜΧ 8 ¸öÏñËصãµÄƽ¾ùÖµ£¬½øÐоùÖµÂ˲¨¡£

ÏÂÃæÕâ¸öͼÊÇÎÒ×Ô¼º»­µÄ FPGA ÈçºÎ½«¾ØÕóÊý¾Ý´¦Àí³É²¢ÐеÄÏñËص㣬¿ÉÒÔ½áºÏÏÂÃæµÄ´úÂëºÃºÃÀí½â£¬ÕâÒ²ÊǾ«»ªËùÔÚ¡£

Õý·½Ðκì¿ò¿òÆðÀ´µÄÊǵÚÒ»¸öÍêÕûµÄ 3*3 ¾ØÕ󣬳¤·½Ðκì¿ò¿òÆðÀ´µÄÊDz¢ÐеÄÏñËص㣬ÔÚ´Ë»ù´¡ÉϾͿÉÒÔÇóµÃƽ¾ùÖµ£¬½øÐоùÖµÂ˲¨¡£

´ÓÏÂͼҲÄÜ¿´µ½ 3*3 ¾ØÕó´Ó×óÍùÓÒ»¬¶¯¡£

µÚÒ»¸ö3*3 ÕóÁС£

0 1 2 -- > p11 p12 p13

3 4 5 -- > p21 p22 p23

6 7 8 -- > p31 p32 p33

ºËÐÄ´úÂëÈçÏ£º

reg [5:0]p_11,p_12,p_13; // 3 * 3

¾í»ýºËÖеÄÏñËصã
reg [5:0]p_21,p_22,p_23;
reg [5:0]p_31,p_32,p_33;
reg [8:0]mean_value_add1,mean_value_add2,

mean_value_add3;//ÿһÐÐÖ®ºÍ


always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
{p_11,p_12,p_13} <= {5'b0,5'b0,5'b0} ;
{p_21,p_22,p_23} <= {15'b0,15'b0,15'b0};
{p_31,p_32,p_33} <= {15'b0,15'b0,15'b0};
end
else begin
if(per_href_ff0==1&&flag_do==1)begin
{p_11,p_12,p_13}<={p_12,p_13,row_1};
{p_21,p_22,p_23}<={p_22,p_23,row_2};
{p_31,p_32,p_33}<={p_32,p_33,row_3};
end
else begin
{p_11,p_12,p_13}<={5'b0,5'b0,5'b0};
{p_21,p_22,p_23}<={5'b0,5'b0,5'b0}
{p_31,p_32,p_33}<={5'b0,5'b0,5'b0}
end
end
end

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
mean_value_add1<=0;
mean_value_add2<=0;
mean_value_add3<=0;
end
else if(per_href_ff1)begin
mean_value_add1<=p_11+p_12+p_13;
mean_value_add2<=p_21+ 0 +p_23;
mean_value_add3<=p_31+p_32+p_33;
end
end

wire [8:0]mean_value;//8λÊýÖ®ºÍ
wire [5:0]fin_y_data; //ƽ¾ùÊý£¬³ýÒÔ8£¬

Ï൱ÓÚ×óÒÆÈýλ¡£

assign mean_value=mean_value_add1+mean_value_

add2+mean_value_add3;
assign fin_y_data=mean_value[8:3];

sobel ±ßÔµ¼ì²â

±ßÔµ¼ì²âµÄÔ­Àí

¸ÃËã×Ó°üº¬Á½×é 3x3 µÄ¾ØÕ󣬷ֱðΪºáÏò¼°×ÝÏò£¬½«Ö®ÓëͼÏñ×÷ƽÃæ¾í»ý£¬¼´¿É·Ö±ðµÃ³öºáÏò¼°×ÝÏòµÄÁÁ¶È²î·Ö½üËÆÖµ¡£A´ú±íԭʼͼÏñµÄ 3*3 ÏñËØÕóÁУ¬Gx¼°Gy·Ö±ð´ú±í¾­ºáÏò¼°×ÝÏò±ßÔµ¼ì²âµÄͼÏñ£¬Æ乫ʽÈçÏÂ:

ͼÏñµÄÿһ¸öÏñËصĺáÏò¼°×ÝÏòÌݶȽüËÆÖµ¿ÉÓÃÒÔÏµĹ«Ê½½áºÏ£¬À´¼ÆËãÌݶȵĴóС¡£

Èç¹ûÌݶÈG´óÓÚijһ·§ÖµÔòÈÏΪ¸Ãµã(x,y)Ϊ±ßÔµµã¡£

ÓõÄÊÇ ±ßÔµ¼ì²âËã·¨¡£

Äѵ㣺(1)ÕÆÎÕÁË 3*3 ÏñËØÕóÁУ¬Gx Óë Gy ¾ÍºÜºÃ¼ÆËãÁË (×¢ÒâÎÊÌ⣺ΪÁ˱ÜÃâ¼ÆËã¹ý³ÌÖгöÏÖ¸ºÖµ£¬ËùÒÔ½«Õý¸ºÖµ·Ö¿ªµ¥¶À¼ÆË㣬¾ßÌå¼û´úÂë)

(2)GµÄ¼ÆËãÐèÒª¿ªÆ½·½£¬ÈçºÎ½øÐпªÆ½·½ÔËËã

Quartus ÌṩÁË¿ªÆ½·½ ip ºË£¬Òò´ËÎÒÃÇÖ±½Óµ÷ÓþͺÃÁË ¡£

´úÂ룺

reg [8:0] p_x_data ,p_y_data ; // x ºÍ y µÄÕýÖµÖ®ºÍ
reg [8:0] n_x_data ,n_y_data ; // x ºÍ y µÄ¸ºÖµÖ®ºÍ
reg [8:0] gx_data ,gy_data ; //×îÖÕ½á¹û

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
p_x_data <=0;
n_x_data <=0;
gx_data <=0;
end
else if(per_href_ff1==1) begin
p_x_data <= p_13 + (p_23<<1) + p_33 ;
n_x_data <= p_11 + (p_12<<1 )+ p_13 ;
gx_data <= (p_x_data >=n_x_data)? p_x_

data - n_x_data : n_x_data - p_x_data ;
end
else begin
p_x_data<=0;
n_x_data<=0;
gx_data <=0;
end
end

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
p_y_data <=0;
n_y_data <=0;
gy_data <=0;
end
else if(per_href_ff1==1) begin
p_y_data <= p_11 + (p_12<<1) + p_13 ;
n_y_data <= p_31 + (p_32<<1) + p_33 ;
gy_data <= (p_y_data >=n_y_data)? p_y_data

- n_y_data : n_y_data - p_y_data ;
end
else begin
p_y_data <=0;
n_y_data <=0;
gy_data <=0;
end
end

//Çóƽ·½ºÍ,µ÷ÓÃipºË¿ªÆ½·½
reg [16:0] gxy; // Gx Óë Gy µÄƽ·½ºÍ
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
gxy<=0;
end
else begin
gxy<= gy_data* gy_data + gx_data* gx_data ;
end
end

wire [8:0] squart_out ;
altsquart u1_altsquart ( //Àý»¯¿ªÆ½·½µÄipºË
.radical (gxy),
.q (squart_out), //Êä³öµÄ½á¹û
.remainder()
);

//ÓëãÐÖµ½øÐбȽÏ
reg [15:0] post_y_data_r;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
post_y_data_r<=16'h00;
end
else if(squart_out>=threshold)
post_y_data_r<=16'h00 ;
else
post_y_data_r<=16'hffff ;

end

ͼƬµÄÏÔʾ

±¾À´ÊÇÏëÓà VGA À´ÏÔʾͼƬµÄ£¬ÓÉÓÚÌõ¼þµÄÏÞÖÆûÄÜʵÏÖ£¬×îÖÕÖ»Äܽ«´¦ÀíÍêµÄÊý¾ÝÊä³ö±£´æÔÚ .txt ÎļþÖУ¬È»ºó½èÖúºÃÓÑдµÄÍøÒ³½øÐÐÏÔʾ¡£

Äѵ㣺(1) ÈçºÎ½«Êý¾ÝÁ÷Êä³ö±£´æµ½ .txt ÎļþÖС£

(2) ÍøÒ³µÄʹÓü°×¢ÒâÊÂÏî

ÔÚtestbenchÀï¼ÓÈëÏÂÃæËùʾ´úÂë¼´¿É½«Í¼Æ¬Êý¾Ý±£´æµ½ .txt Îı¾

´úÂëÈçÏ£º

integer w_file;
initial
w_file = $fopen("data_out_3.txt"); //±£´æÊý¾ÝµÄÎļþÃû

always @(posedge clk or negedge rst_n)
begin
if(flag_write==1&&post_href==1)//¸ù¾Ý×Ô¼ºµÄÐèÇó¶¨Òå
$fdisplay(w_file,"%b",post_y_data);
end

ÍøÒ³µÄ½çÃæÈçÏ£¬½«²ÎÊýÉèÖúÃÒÔºó¾Í¿ÉÒÔÏÔʾͼƬ¡£

ÏÂÔØÁ´½Ó http : // files .cnblogs .com / files / aslmer / aggregrate . zip

×¢Ò⣺ÓÉÓÚ´ËÍøÕ¾ÊÇÁ¿Éí¶¨×öµÄ£¬ËùÒÔÖ»ÄÜÏÔʾÊý¾Ý¸ñʽΪRGB565µÄ16λ¶þ½øÖƵÄÊý²ÅÄÜÕýÈ·ÏÔʾ£¬×¢Òâ²»ÄÜÓзֺţ¬ÕýÈ·¸ñʽʾÀýÈçÏ£¬±ØÐëÑϸñ×ñÊØ

½á¹ûչʾ

С½á£º¾ùÖµÂ˲¨´¦ÀíºóµÄͼƬÓÐÃ÷ÏԵĺڱߣ¬²úÉúÕâÒ»ÏÖÏóµÄÔ­Òò¾ÍÊÇÉú³É 3*3 ÏñËؾØÕóºÍÈ¡ÏñËØֵʱÊý¾ÝÓÐËðʧÔì³ÉµÄ£¬µ«ÊÇÕâÒ²ÊÇ¿ÉÒÔÓÅ»¯µÄ£¬ºóÐøÎÒ»á¼ÌÐøŬÁ¦²»¶ÏÍêÉÆ¡£±¾´ÎÖ»ÊǼòµ¥¶ÔÒ»·ùͼÏñ½øÐбßÔµ¼ì²â£¬ÎҵĺóÐøÄ¿±êÊÇʵÏÖͼƬµÄʵʱ´¦Àí£¬ÕâÓÖÐèҪѧϰºÜ¶à¶«Î÷ÁË£¬SDRAM¡¢ÉãÏñÍ·Çý¶¯µÈµÈµÈ£¬Ô½Ñ§Ï°Ô½·¢ÏÖ×Ô¼ºÖªµÀµÄʵÔÚÊÇÌ«ÉÙÁË£¬ÓÀÔ¶ÔÚ·ÉÏ£¬Ñ§ÎÞÖ¹¾³¡£Ï£ÍûÎҵķÖÏíÄܹ»°ïÖúһЩºÍÎÒÒ»ÑùÈÈ°® FPGA ͼÏñ´¦ÀíµÄÅóÓÑ¡£

 

   
2409 ´Îä¯ÀÀ       17
 
Ïà¹ØÎÄÕÂ

ÔƼÆËãµÄ¼Ü¹¹
¶ÔÔƼÆËã·þÎñÄ£ÐÍ
ÔƼÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔƼÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔƼÆËã¼ò½é
ÔƼÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔƼÆËã
ÈídzÎöÔƼÆËã
 
Ïà¹Ø¿Î³Ì

ÔƼÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔƼÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤