原创 在ALTERA-DE2上实现VGA的颜色输出变化(verilog)

2009-9-24 16:20 7631 6 6 分类: FPGA/CPLD

在我的DE2平台上验证过,可行!


Abstract
在友晶科技的DE2_CCD範例中,將CMOS的影像直接在VGA輸出,是否能控制VGA的座標,並顯示不同的影像呢?


Introduction
版權聲明:本文根據友晶科技光碟所附的範例程式加以修改,原範例版權歸友晶科技所有。
使用環境:Quartus II 7.2 SP1 + DE2(Cyclone II EP2C35F627C6) + TRDB_DC2


本程式依照友晶科技的DE2_CCD範例加以修改。


VGA影像輸出的好壞,除了決定於VGA螢幕外,VGA Controller也扮演很重要的角色,我們可以在VGA Controller埋入影像處理的演算法改善畫值,但首先要面對的,就是取得輸出時VGAXY作標,這樣才能做後續的影像處理。

VGA_Controller.v


  1 module VGA_Controller (
  2  
// Host Side
  3 
  iRed,
  4 
  iGreen,
  5 
  iBlue,
  6 
  oRequest,
  7  
// VGA Side
  8 
  oVGA_R,
  9 
  oVGA_G,
10 
  oVGA_B,
11 
  oVGA_H_SYNC,
12 
  oVGA_V_SYNC,
13 
  oVGA_SYNC,
14 
  oVGA_BLANK,
15 
  oVGA_CLOCK,
16  
// Control Signal
17 
  iCLK,
18 
  iRST_N
19 
);
20 

21 `include "VGA_Param.h"
22 
23 // Host Side
24 input       [9:0
] iRed;
25 input       [9:0
] iGreen;
26 input       [9:0
] iBlue;
27 
output reg        oRequest;
28 

29 // VGA Side
30 output reg  [9:0
] oVGA_R;
31 output reg  [9:0
] oVGA_G;
32 output reg  [9:0
] oVGA_B;
33 
output reg        oVGA_H_SYNC;
34 
output reg        oVGA_V_SYNC;
35 
output            oVGA_SYNC;
36 
output            oVGA_BLANK;
37 
output            oVGA_CLOCK;
38 
// Control Signal
39 
input             iCLK;
40 
input             iRST_N;
41 

42 // Internal Registers and Wires
43 reg         [9:0
] H_Cont;
44 reg         [9:0
] V_Cont;
45 reg         [9:0
] Cur_Color_R;
46 reg         [9:0
] Cur_Color_G;
47 reg         [9:0
] Cur_Color_B;
48 
wire              mCursor_EN;
49 
wire              mRed_EN;
50 
wire              mGreen_EN;
51 
wire              mBlue_EN;
52 

53 // add by oomusou
54 reg         [9:0
] coord_x;
55 reg         [9:0
] coord_y;
56 

57 assign oVGA_BLANK = oVGA_H_SYNC & oVGA_V_SYNC;
58 assign oVGA_SYNC  = 1
'b0;
59 
assign oVGA_CLOCK = iCLK;
60 

61 // add by oomusou
62 
always@(H_Cont or V_Cont) begin
63   if
(H_Cont >= X_START && H_Cont < X_START + H_SYNC_ACT &&
64 
      V_Cont >= Y_START && V_Cont < Y_START + V_SYNC_ACT)
65 
    oVGA_R = iRed;
66   else

67     oVGA_R = 0
68 
   
69   if
(H_Cont >= X_START && H_Cont < X_START + H_SYNC_ACT &&
70 
      V_Cont >= Y_START && V_Cont < Y_START + V_SYNC_ACT)
71 
    oVGA_G = iGreen;
72   else

73     oVGA_G = 0;
74 

75   if (H_Cont >= X_START && H_Cont < X_START + H_SYNC_ACT &&
76 
    V_Cont >= Y_START && V_Cont < Y_START + V_SYNC_ACT)
77 
    oVGA_B = iBlue;
78   else

79     oVGA_B = 0;
80 
   
81   if (coord_x > 200 && coord_x < 320
 && 
82       coord_y > 200 && coord_y < 240
) begin
83       oVGA_R = 10
'h000;
84       oVGA_G = 10
'h000;
85       oVGA_B = 10
'h000;
86 
  end
87 
end
88 

89 // Pixel LUT Address Generator
90 
always@(posedge iCLK or negedge iRST_N) begin
91   if
(!iRST_N) begin
92     oRequest   <= 0
;
93     coord_x     <= 0
;
94     coord_y     <= 0
;
95 
  end
96   else
begin
97   if (H_Cont >= X_START - 2 && H_Cont < X_START + H_SYNC_ACT-2
 &&
98 
      V_Cont >= Y_START && V_Cont < Y_START + V_SYNC_ACT) begin
99     oRequest <= 1
;
100     coord_x     <= H_Cont - (X_START - 2
);
101 
    coord_y     <= V_Cont - Y_START;
102 
  end
103   else

104     oRequest <= 0;
105 
  end
106 
end
107 

108 // H_Sync Generator, Ref. 25.175 MHz Clock
109 
always@(posedge iCLK or negedge iRST_N) begin
110   if
(!iRST_N) begin
111     H_Cont      <= 0
;
112     oVGA_H_SYNC <= 0
;
113 
  end
114   else
begin
115    
// H_Sync Counter
116     if
(H_Cont < H_SYNC_TOTAL)
117       H_Cont <= H_Cont + 1
;
118     else

119       H_Cont <= 0;
120 
     
121    
// H_Sync Generator
122     if
(H_Cont < H_SYNC_CYC)
123       oVGA_H_SYNC <= 0
;
124     else

125       oVGA_H_SYNC <= 1;
126 
  end
127 
end
128 

129 // V_Sync Generator, Ref. H_Sync
130 
always@(posedge iCLK or negedge iRST_N) begin
131   if
(!iRST_N) begin
132     V_Cont      <= 0
;
133     oVGA_V_SYNC <= 0
;
134 
  end
135   else
begin
136    
// When H_Sync Re-start
137     if (H_Cont == 0
) begin
138    
// V_Sync Counter
139     if
(V_Cont < V_SYNC_TOTAL)
140       V_Cont <= V_Cont + 1
;
141     else

142       V_Cont <=    0;
143 
     
144    
// V_Sync Generator
145     if
(V_Cont < V_SYNC_CYC)
146       oVGA_V_SYNC <= 0
;
147     else

148       oVGA_V_SYNC <= 1;
149 
    end
150 
  end
151 
end
152 

153 endmodule<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />



89


// Pixel LUT Address Generator
always@(posedge iCLK or negedge iRST_N) begin
 
if
(!iRST_N) begin
    oRequest <= 
0
;
    coord_x     <= 
0
;
    coord_y     <= 
0
;
  end
 
else
begin
 
if (H_Cont >= X_START - 2 && H_Cont < X_START + H_SYNC_ACT-2
 &&
      V_Cont >= Y_START && V_Cont < Y_START + V_SYNC_ACT) begin
    oRequest   <= 
1
;
    coord_x     <= H_Cont - (X_START - 
2
);
    coord_y     <= V_Cont - Y_START;
  end
 
else

    oRequest <= 
0;
  end
end



加入coord_xcoord_yreg,計算出目前的XY座標。


81


if (coord_x > 200 && coord_x < 320 && 
    coord_y > 
200 && coord_y < 240
) begin
  oVGA_R = 
10
'h000;
  oVGA_G = 10
'h000;
  oVGA_B = 10
'h000;
end



如此就能在指定的座標下指定特定的顏色,以上會在中間的區域顯示黑色,如下圖所示。


 点击看大图


 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 


 


/*************************************************************************************** 


ALTERA-DE2官方开发板的配套摄像头模组和液晶显示模组,有配套的图像采集显示全部源码和和相应的技术支持,可以根据你的要求更换相应型号的sensor,比如OV系列和美光系列。所有模组7天包退,1年保修。想要的话联系我:


QQ: 50186788 注明:DE2


Email: hzh1024n@163.com


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条