(原創) 如何將DE2_70_TV範例加上Sobel Edge Detector? (SOC) (Verilog) (Image Processing) (DE2-70)
Abstract
本文將DE2-70平台的DE2_70_TV的範例加上Sobel Edge Detector。
Introduction
使用環境:Quartus II 8.0 + DE2-70 (Cyclone II EP2C70F896C6N)
DE2_70_TV與DE2_70_D5M_LTM的架構非常類似,都是以SDRAM當做frame buffer,所以若要加上演算法,基本上也是放在SDRAM之前做前處理,或者放在SDRAM之後做後處理。
Sobel Edge Detector解說部分,請參考(原創) 如何實現Real Time的Sobel Edge Detector? (SOC) (Verilog) (Image Processing) (DE2-70) (TRDB-D5M) (TRDB-LTM)與(原創) 如何實現Real Time的Sobel Edge Detector? (SOC) (Verilog) (Image Processing) (DE2) (TRDB-DC2),本文主要放在如何在DE2_70_TV範例實現。
DE2_70_TV.v / Verilog
2 // Copyright (c) 2007 by Terasic Technologies Inc.
3 // --------------------------------------------------------------------
4 //
5 // Permission:
6 //
7 // Terasic grants permission to use and modify this code for use
8 // in synthesis for all Terasic Development Boards and Altera Development
9 // Kits made by Terasic. Other use of this code, including the selling
10 // ,duplication, or modification of any portion is strictly prohibited.
11 //
12 // Disclaimer:
13 //
14 // This VHDL/Verilog or C/C++ source code is intended as a design reference
15 // which illustrates how these types of functions can be implemented.
16 // It is the user's responsibility to verify their design for
17 // consistency and functionality through the use of formal
18 // verification methods. Terasic provides no warranty regarding the use
19 // or functionality of this code.
20 //
21 // --------------------------------------------------------------------
22 //
23 // Terasic Technologies Inc
24 // 356 Fu-Shin E. Rd Sec. 1. JhuBei City,
25 // HsinChu County, Taiwan
26 // 302
27 //
28 // web: http://www.terasic.com/
29 // email: support@terasic.com
30 //
31 // --------------------------------------------------------------------
32 //
33 // Major Functions: DE2_70 TV Box
34 //
35 // --------------------------------------------------------------------
36 //
37 // Revision History :
38 // --------------------------------------------------------------------
39 // Ver :| Author :| Mod. Date :| Changes Made:
40 // V1.0 :| Johnny FAN :| 07/07/09 :| Initial Revision
41 // --------------------------------------------------------------------
42
43 module DE2_70_TV
44 (
45 //////////////////// Clock Input ////////////////////
46 iCLK_28, // 28.63636 MHz
47 iCLK_50, // 50 MHz
48 iCLK_50_2, // 50 MHz
49 iCLK_50_3, // 50 MHz
50 iCLK_50_4, // 50 MHz
51 iEXT_CLOCK, // External Clock
52 //////////////////// Push Button ////////////////////
53 iKEY, // Pushbutton[3:0]
54 //////////////////// DPDT Switch ////////////////////
55 iSW, // Toggle Switch[17:0]
56 //////////////////// 7-SEG Dispaly ////////////////////
57 oHEX0_D, // Seven Segment Digit 0
58 oHEX0_DP, // Seven Segment Digit 0 decimal point
59 oHEX1_D, // Seven Segment Digit 1
60 oHEX1_DP, // Seven Segment Digit 1 decimal point
61 oHEX2_D, // Seven Segment Digit 2
62 oHEX2_DP, // Seven Segment Digit 2 decimal point
63 oHEX3_D, // Seven Segment Digit 3
64 oHEX3_DP, // Seven Segment Digit 3 decimal point
65 oHEX4_D, // Seven Segment Digit 4
66 oHEX4_DP, // Seven Segment Digit 4 decimal point
67 oHEX5_D, // Seven Segment Digit 5
68 oHEX5_DP, // Seven Segment Digit 5 decimal point
69 oHEX6_D, // Seven Segment Digit 6
70 oHEX6_DP, // Seven Segment Digit 6 decimal point
71 oHEX7_D, // Seven Segment Digit 7
72 oHEX7_DP, // Seven Segment Digit 7 decimal point
73 //////////////////////// LED ////////////////////////
74 oLEDG, // LED Green[8:0]
75 oLEDR, // LED Red[17:0]
76 //////////////////////// UART ////////////////////////
77 oUART_TXD, // UART Transmitter
78 iUART_RXD, // UART Receiver
79 oUART_CTS, // UART Clear To Send
80 iUART_RTS, // UART Requst To Send
81 //////////////////////// IRDA ////////////////////////
82 oIRDA_TXD, // IRDA Transmitter
83 iIRDA_RXD, // IRDA Receiver
84 ///////////////////// SDRAM Interface ////////////////
85 DRAM_DQ, // SDRAM Data bus 32 Bits
86 oDRAM0_A, // SDRAM0 Address bus 13 Bits
87 oDRAM1_A, // SDRAM1 Address bus 13 Bits
88 oDRAM0_LDQM0, // SDRAM0 Low-byte Data Mask
89 oDRAM1_LDQM0, // SDRAM1 Low-byte Data Mask
90 oDRAM0_UDQM1, // SDRAM0 High-byte Data Mask
91 oDRAM1_UDQM1, // SDRAM1 High-byte Data Mask
92 oDRAM0_WE_N, // SDRAM0 Write Enable
93 oDRAM1_WE_N, // SDRAM1 Write Enable
94 oDRAM0_CAS_N, // SDRAM0 Column Address Strobe
95 oDRAM1_CAS_N, // SDRAM1 Column Address Strobe
96 oDRAM0_RAS_N, // SDRAM0 Row Address Strobe
97 oDRAM1_RAS_N, // SDRAM1 Row Address Strobe
98 oDRAM0_CS_N, // SDRAM0 Chip Select
99 oDRAM1_CS_N, // SDRAM1 Chip Select
100 oDRAM0_BA, // SDRAM0 Bank Address
101 oDRAM1_BA, // SDRAM1 Bank Address
102 oDRAM0_CLK, // SDRAM0 Clock
103 oDRAM1_CLK, // SDRAM1 Clock
104 oDRAM0_CKE, // SDRAM0 Clock Enable
105 oDRAM1_CKE, // SDRAM1 Clock Enable
106 //////////////////// Flash Interface ////////////////
107 FLASH_DQ, // FLASH Data bus 15 Bits (0 to 14)
108 FLASH_DQ15_AM1, // FLASH Data bus Bit 15 or Address A-1
109 oFLASH_A, // FLASH Address bus 26 Bits
110 oFLASH_WE_N, // FLASH Write Enable
111 oFLASH_RST_N, // FLASH Reset
112 oFLASH_WP_N, // FLASH Write Protect /Programming Acceleration
113 iFLASH_RY_N, // FLASH Ready/Busy output
114 oFLASH_BYTE_N, // FLASH Byte/Word Mode Configuration
115 oFLASH_OE_N, // FLASH Output Enable
116 oFLASH_CE_N, // FLASH Chip Enable
117 //////////////////// SRAM Interface ////////////////
118 SRAM_DQ, // SRAM Data Bus 32 Bits
119 SRAM_DPA, // SRAM Parity Data Bus
120 oSRAM_A, // SRAM Address bus 22 Bits
121 oSRAM_ADSC_N, // SRAM Controller Address Status
122 oSRAM_ADSP_N, // SRAM Processor Address Status
123 oSRAM_ADV_N, // SRAM Burst Address Advance
124 oSRAM_BE_N, // SRAM Byte Write Enable
125 oSRAM_CE1_N, // SRAM Chip Enable
126 oSRAM_CE2, // SRAM Chip Enable
127 oSRAM_CE3_N, // SRAM Chip Enable
128 oSRAM_CLK, // SRAM Clock
129 oSRAM_GW_N, // SRAM Global Write Enable
130 oSRAM_OE_N, // SRAM Output Enable
131 oSRAM_WE_N, // SRAM Write Enable
132 //////////////////// ISP1362 Interface ////////////////
133 OTG_D, // ISP1362 Data bus 16 Bits
134 oOTG_A, // ISP1362 Address 2 Bits
135 oOTG_CS_N, // ISP1362 Chip Select
136 oOTG_OE_N, // ISP1362 Read
137 oOTG_WE_N, // ISP1362 Write
138 oOTG_RESET_N, // ISP1362 Reset
139 OTG_FSPEED, // USB Full Speed, 0 = Enable, Z = Disable
140 OTG_LSPEED, // USB Low Speed, 0 = Enable, Z = Disable
141 iOTG_INT0, // ISP1362 Interrupt 0
142 iOTG_INT1, // ISP1362 Interrupt 1
143 iOTG_DREQ0, // ISP1362 DMA Request 0
144 iOTG_DREQ1, // ISP1362 DMA Request 1
145 oOTG_DACK0_N, // ISP1362 DMA Acknowledge 0
146 oOTG_DACK1_N, // ISP1362 DMA Acknowledge 1
147 //////////////////// LCD Module 16X2 ////////////////
148 oLCD_ON, // LCD Power ON/OFF
149 oLCD_BLON, // LCD Back Light ON/OFF
150 oLCD_RW, // LCD Read/Write Select, 0 = Write, 1 = Read
151 oLCD_EN, // LCD Enable
152 oLCD_RS, // LCD Command/Data Select, 0 = Command, 1 = Data
153 LCD_D, // LCD Data bus 8 bits
154 //////////////////// SD_Card Interface ////////////////
155 SD_DAT, // SD Card Data
156 SD_DAT3, // SD Card Data 3
157 SD_CMD, // SD Card Command Signal
158 oSD_CLK, // SD Card Clock
159 //////////////////// I2C ////////////////////////////
160 I2C_SDAT, // I2C Data
161 oI2C_SCLK, // I2C Clock
162 //////////////////// PS2 ////////////////////////////
163 PS2_KBDAT, // PS2 Keyboard Data
164 PS2_KBCLK, // PS2 Keyboard Clock
165 PS2_MSDAT, // PS2 Mouse Data
166 PS2_MSCLK, // PS2 Mouse Clock
167 //////////////////// VGA ////////////////////////////
168 oVGA_CLOCK, // VGA Clock
169 oVGA_HS, // VGA H_SYNC
170 oVGA_VS, // VGA V_SYNC
171 oVGA_BLANK_N, // VGA BLANK
172 oVGA_SYNC_N, // VGA SYNC
173 oVGA_R, // VGA Red[9:0]
174 oVGA_G, // VGA Green[9:0]
175 oVGA_B, // VGA Blue[9:0]
176 //////////// Ethernet Interface ////////////////////////
177 ENET_D, // DM9000A DATA bus 16Bits
178 oENET_CMD, // DM9000A Command/Data Select, 0 = Command, 1 = Data
179 oENET_CS_N, // DM9000A Chip Select
180 oENET_IOW_N, // DM9000A Write
181 oENET_IOR_N, // DM9000A Read
182 oENET_RESET_N, // DM9000A Reset
183 iENET_INT, // DM9000A Interrupt
184 oENET_CLK, // DM9000A Clock 25 MHz
185 //////////////// Audio CODEC ////////////////////////
186 AUD_ADCLRCK, // Audio CODEC ADC LR Clock
187 iAUD_ADCDAT, // Audio CODEC ADC Data
188 AUD_DACLRCK, // Audio CODEC DAC LR Clock
189 oAUD_DACDAT, // Audio CODEC DAC Data
190 AUD_BCLK, // Audio CODEC Bit-Stream Clock
191 oAUD_XCK, // Audio CODEC Chip Clock
192 //////////////// TV Decoder ////////////////////////
193 iTD1_CLK27, // TV Decoder1 Line_Lock Output Clock
194 iTD1_D, // TV Decoder1 Data bus 8 bits
195 iTD1_HS, // TV Decoder1 H_SYNC
196 iTD1_VS, // TV Decoder1 V_SYNC
197 oTD1_RESET_N, // TV Decoder1 Reset
198 iTD2_CLK27, // TV Decoder2 Line_Lock Output Clock
199 iTD2_D, // TV Decoder2 Data bus 8 bits
200 iTD2_HS, // TV Decoder2 H_SYNC
201 iTD2_VS, // TV Decoder2 V_SYNC
202 oTD2_RESET_N, // TV Decoder2 Reset
203 //////////////////// GPIO ////////////////////////////
204 GPIO_0, // GPIO Connection 0 I/O
205 GPIO_CLKIN_N0, // GPIO Connection 0 Clock Input 0
206 GPIO_CLKIN_P0, // GPIO Connection 0 Clock Input 1
207 GPIO_CLKOUT_N0, // GPIO Connection 0 Clock Output 0
208 GPIO_CLKOUT_P0, // GPIO Connection 0 Clock Output 1
209 GPIO_1, // GPIO Connection 1 I/O
210 GPIO_CLKIN_N1, // GPIO Connection 1 Clock Input 0
211 GPIO_CLKIN_P1, // GPIO Connection 1 Clock Input 1
212 GPIO_CLKOUT_N1, // GPIO Connection 1 Clock Output 0
213 GPIO_CLKOUT_P1 // GPIO Connection 1 Clock Output 1
214
215 );
216
217 //===========================================================================
218 // PARAMETER declarations
219 //===========================================================================
220
221
222 //===========================================================================
223 // PORT declarations
224 //===========================================================================
225 //////////////////////// Clock Input ////////////////////////
226 input iCLK_28; // 28.63636 MHz
227 input iCLK_50; // 50 MHz
228 input iCLK_50_2; // 50 MHz
229 input iCLK_50_3; // 50 MHz
230 input iCLK_50_4; // 50 MHz
231 input iEXT_CLOCK; // External Clock
232 //////////////////////// Push Button ////////////////////////
233 input [3:0] iKEY; // Pushbutton[3:0]
234 //////////////////////// DPDT Switch ////////////////////////
235 input [17:0] iSW; // Toggle Switch[17:0]
236 //////////////////////// 7-SEG Dispaly ////////////////////////
237 output [6:0] oHEX0_D; // Seven Segment Digit 0
238 output oHEX0_DP; // Seven Segment Digit 0 decimal point
239 output [6:0] oHEX1_D; // Seven Segment Digit 1
240 output oHEX1_DP; // Seven Segment Digit 1 decimal point
241 output [6:0] oHEX2_D; // Seven Segment Digit 2
242 output oHEX2_DP; // Seven Segment Digit 2 decimal point
243 output [6:0] oHEX3_D; // Seven Segment Digit 3
244 output oHEX3_DP; // Seven Segment Digit 3 decimal point
245 output [6:0] oHEX4_D; // Seven Segment Digit 4
246 output oHEX4_DP; // Seven Segment Digit 4 decimal point
247 output [6:0] oHEX5_D; // Seven Segment Digit 5
248 output oHEX5_DP; // Seven Segment Digit 5 decimal point
249 output [6:0] oHEX6_D; // Seven Segment Digit 6
250 output oHEX6_DP; // Seven Segment Digit 6 decimal point
251 output [6:0] oHEX7_D; // Seven Segment Digit 7
252 output oHEX7_DP; // Seven Segment Digit 7 decimal point
253 //////////////////////////// LED ////////////////////////////
254 output [8:0] oLEDG; // LED Green[8:0]
255 output [17:0] oLEDR; // LED Red[17:0]
256 //////////////////////////// UART ////////////////////////////
257 output oUART_TXD; // UART Transmitter
258 input iUART_RXD; // UART Receiver
259 output oUART_CTS; // UART Clear To Send
260 input iUART_RTS; // UART Requst To Send
261 //////////////////////////// IRDA ////////////////////////////
262 output oIRDA_TXD; // IRDA Transmitter
263 input iIRDA_RXD; // IRDA Receiver
264 /////////////////////// SDRAM Interface ////////////////////////
265 inout [31:0] DRAM_DQ; // SDRAM Data bus 32 Bits
266 output [12:0] oDRAM0_A; // SDRAM0 Address bus 13 Bits
267 output [12:0] oDRAM1_A; // SDRAM1 Address bus 13 Bits
268 output oDRAM0_LDQM0; // SDRAM0 Low-byte Data Mask
269 output oDRAM1_LDQM0; // SDRAM1 Low-byte Data Mask
270 output oDRAM0_UDQM1; // SDRAM0 High-byte Data Mask
271 output oDRAM1_UDQM1; // SDRAM1 High-byte Data Mask
272 output oDRAM0_WE_N; // SDRAM0 Write Enable
273 output oDRAM1_WE_N; // SDRAM1 Write Enable
274 output oDRAM0_CAS_N; // SDRAM0 Column Address Strobe
275 output oDRAM1_CAS_N; // SDRAM1 Column Address Strobe
276 output oDRAM0_RAS_N; // SDRAM0 Row Address Strobe
277 output oDRAM1_RAS_N; // SDRAM1 Row Address Strobe
278 output oDRAM0_CS_N; // SDRAM0 Chip Select
279 output oDRAM1_CS_N; // SDRAM1 Chip Select
280 output [1:0] oDRAM0_BA; // SDRAM0 Bank Address
281 output [1:0] oDRAM1_BA; // SDRAM1 Bank Address
282 output oDRAM0_CLK; // SDRAM0 Clock
283 output oDRAM1_CLK; // SDRAM1 Clock
284 output oDRAM0_CKE; // SDRAM0 Clock Enable
285 output oDRAM1_CKE; // SDRAM1 Clock Enable
286 //////////////////////// Flash Interface ////////////////////////
287 inout [14:0] FLASH_DQ; // FLASH Data bus 15 Bits (0 to 14)
288 inout FLASH_DQ15_AM1; // FLASH Data bus Bit 15 or Address A-1
289 output [21:0] oFLASH_A; // FLASH Address bus 22 Bits
290 output oFLASH_WE_N; // FLASH Write Enable
291 output oFLASH_RST_N; // FLASH Reset
292 output oFLASH_WP_N; // FLASH Write Protect /Programming Acceleration
293 input iFLASH_RY_N; // FLASH Ready/Busy output
294 output oFLASH_BYTE_N; // FLASH Byte/Word Mode Configuration
295 output oFLASH_OE_N; // FLASH Output Enable
296 output oFLASH_CE_N; // FLASH Chip Enable
297 //////////////////////// SRAM Interface ////////////////////////
298 inout [31:0] SRAM_DQ; // SRAM Data Bus 32 Bits
299 inout [3:0] SRAM_DPA; // SRAM Parity Data Bus
300 output [18:0] oSRAM_A; // SRAM Address bus 21 Bits
301 output oSRAM_ADSC_N; // SRAM Controller Address Status
302 output oSRAM_ADSP_N; // SRAM Processor Address Status
303 output oSRAM_ADV_N; // SRAM Burst Address Advance
304 output [3:0] oSRAM_BE_N; // SRAM Byte Write Enable
305 output oSRAM_CE1_N; // SRAM Chip Enable
306 output oSRAM_CE2; // SRAM Chip Enable
307 output oSRAM_CE3_N; // SRAM Chip Enable
308 output oSRAM_CLK; // SRAM Clock
309 output oSRAM_GW_N; // SRAM Global Write Enable
310 output oSRAM_OE_N; // SRAM Output Enable
311 output oSRAM_WE_N; // SRAM Write Enable
312 //////////////////// ISP1362 Interface ////////////////////////
313 inout [15:0] OTG_D; // ISP1362 Data bus 16 Bits
314 output [1:0] oOTG_A; // ISP1362 Address 2 Bits
315 output oOTG_CS_N; // ISP1362 Chip Select
316 output oOTG_OE_N; // ISP1362 Read
317 output oOTG_WE_N; // ISP1362 Write
318 output oOTG_RESET_N; // ISP1362 Reset
319 inout OTG_FSPEED; // USB Full Speed, 0 = Enable, Z = Disable
320 inout OTG_LSPEED; // USB Low Speed, 0 = Enable, Z = Disable
321 input iOTG_INT0; // ISP1362 Interrupt 0
322 input iOTG_INT1; // ISP1362 Interrupt 1
323 input iOTG_DREQ0; // ISP1362 DMA Request 0
324 input iOTG_DREQ1; // ISP1362 DMA Request 1
325 output oOTG_DACK0_N; // ISP1362 DMA Acknowledge 0
326 output oOTG_DACK1_N; // ISP1362 DMA Acknowledge 1
327 //////////////////// LCD Module 16X2 ////////////////////////////
328 inout [7:0] LCD_D; // LCD Data bus 8 bits
329 output oLCD_ON; // LCD Power ON/OFF
330 output oLCD_BLON; // LCD Back Light ON/OFF
331 output oLCD_RW; // LCD Read/Write Select, 0 = Write, 1 = Read
332 output oLCD_EN; // LCD Enable
333 output oLCD_RS; // LCD Command/Data Select, 0 = Command, 1 = Data
334 //////////////////// SD Card Interface ////////////////////////
335 inout SD_DAT; // SD Card Data
336 inout SD_DAT3; // SD Card Data 3
337 inout SD_CMD; // SD Card Command Signal
338 output oSD_CLK; // SD Card Clock
339 //////////////////////// I2C ////////////////////////////////
340 inout I2C_SDAT; // I2C Data
341 output oI2C_SCLK; // I2C Clock
342 //////////////////////// PS2 ////////////////////////////////
343 inout PS2_KBDAT; // PS2 Keyboard Data
344 inout PS2_KBCLK; // PS2 Keyboard Clock
345 inout PS2_MSDAT; // PS2 Mouse Data
346 inout PS2_MSCLK; // PS2 Mouse Clock
347 //////////////////////// VGA ////////////////////////////
348 output oVGA_CLOCK; // VGA Clock
349 output oVGA_HS; // VGA H_SYNC
350 output oVGA_VS; // VGA V_SYNC
351 output oVGA_BLANK_N; // VGA BLANK
352 output oVGA_SYNC_N; // VGA SYNC
353 output [9:0] oVGA_R; // VGA Red[9:0]
354 output [9:0] oVGA_G; // VGA Green[9:0]
355 output [9:0] oVGA_B; // VGA Blue[9:0]
356 //////////////// Ethernet Interface ////////////////////////////
357 inout [15:0] ENET_D; // DM9000A DATA bus 16Bits
358 output oENET_CMD; // DM9000A Command/Data Select, 0 = Command, 1 = Data
359 output oENET_CS_N; // DM9000A Chip Select
360 output oENET_IOW_N; // DM9000A Write
361 output oENET_IOR_N; // DM9000A Read
362 output oENET_RESET_N; // DM9000A Reset
363 input iENET_INT; // DM9000A Interrupt
364 output oENET_CLK; // DM9000A Clock 25 MHz
365 //////////////////// Audio CODEC ////////////////////////////
366 inout AUD_ADCLRCK; // Audio CODEC ADC LR Clock
367 input iAUD_ADCDAT; // Audio CODEC ADC Data
368 inout AUD_DACLRCK; // Audio CODEC DAC LR Clock
369 output oAUD_DACDAT; // Audio CODEC DAC Data
370 inout AUD_BCLK; // Audio CODEC Bit-Stream Clock
371 output oAUD_XCK; // Audio CODEC Chip Clock
372 //////////////////// TV Devoder ////////////////////////////
373 input iTD1_CLK27; // TV Decoder1 Line_Lock Output Clock
374 input [7:0] iTD1_D; // TV Decoder1 Data bus 8 bits
375 input iTD1_HS; // TV Decoder1 H_SYNC
376 input iTD1_VS; // TV Decoder1 V_SYNC
377 output oTD1_RESET_N; // TV Decoder1 Reset
378 input iTD2_CLK27; // TV Decoder2 Line_Lock Output Clock
379 input [7:0] iTD2_D; // TV Decoder2 Data bus 8 bits
380 input iTD2_HS; // TV Decoder2 H_SYNC
381 input iTD2_VS; // TV Decoder2 V_SYNC
382 output oTD2_RESET_N; // TV Decoder2 Reset
383
384 //////////////////////// GPIO ////////////////////////////////
385 inout [31:0] GPIO_0; // GPIO Connection 0 I/O
386 input GPIO_CLKIN_N0; // GPIO Connection 0 Clock Input 0
387 input GPIO_CLKIN_P0; // GPIO Connection 0 Clock Input 1
388 inout GPIO_CLKOUT_N0; // GPIO Connection 0 Clock Output 0
389 inout GPIO_CLKOUT_P0; // GPIO Connection 0 Clock Output 1
390 inout [31:0] GPIO_1; // GPIO Connection 1 I/O
391 input GPIO_CLKIN_N1; // GPIO Connection 1 Clock Input 0
392 input GPIO_CLKIN_P1; // GPIO Connection 1 Clock Input 1
393 inout GPIO_CLKOUT_N1; // GPIO Connection 1 Clock Output 0
394 inout GPIO_CLKOUT_P1; // GPIO Connection 1 Clock Output 1
395 ///////////////////////////////////////////////////////////////////
396 //=============================================================================
397 // REG/WIRE declarations
398 //=============================================================================
399
400 wire CPU_CLK;
401 wire CPU_RESET;
402 wire CLK_18_4;
403 wire CLK_25;
404
405 // For Audio CODEC
406 wire AUD_CTRL_CLK; // For Audio Controller
407
408 // For ITU-R 656 Decoder
409 wire [15:0] YCbCr;
410 wire [9:0] TV_X;
411 wire TV_DVAL;
412
413 // For VGA Controller
414 wire [9:0] mRed;
415 wire [9:0] mGreen;
416 wire [9:0] mBlue;
417 wire [10:0] VGA_X;
418 wire [10:0] VGA_Y;
419 wire VGA_Read; // VGA data request
420 wire m1VGA_Read; // Read odd field
421 wire m2VGA_Read; // Read even field
422
423 // For YUV 4:2:2 to YUV 4:4:4
424 wire [7:0] mY;
425 wire [7:0] mCb;
426 wire [7:0] mCr;
427
428 // For field select
429 wire [15:0] mYCbCr;
430 wire [15:0] mYCbCr_d;
431 wire [15:0] m1YCbCr;
432 wire [15:0] m2YCbCr;
433 wire [15:0] m3YCbCr;
434
435 // For Delay Timer
436 wire TD_Stable;
437 wire DLY0;
438 wire DLY1;
439 wire DLY2;
440
441 // For Down Sample
442 wire [3:0] Remain;
443 wire [9:0] Quotient;
444
445 wire mDVAL;
446
447 wire [15:0] m4YCbCr;
448 wire [15:0] m5YCbCr;
449 wire [8:0] Tmp1,Tmp2;
450 wire [7:0] Tmp3,Tmp4;
451
452 //=============================================================================
453 // Structural coding
454 //=============================================================================
455
456 // Flash
457 assign oFLASH_RST_N = 1'b1;
458
459 // 16*2 LCD Module
460 assign oLCD_ON = 1'b1; // LCD ON
461 assign oLCD_BLON = 1'b1; // LCD Back Light
462
463 // All inout port turn to tri-state
464 assign SD_DAT = 1'bz;
465 assign AUD_ADCLRCK = AUD_DACLRCK;
466 assign GPIO_0 = 32'hzzzzzzzzz;
467 assign GPIO_1 = 32'hzzzzzzzzz;
468
469 // Disable USB speed select
470 assign OTG_FSPEED = 1'bz;
471 assign OTG_LSPEED = 1'bz;
472
473 // Turn On TV Decoder
474 //assign oTD1_RESET_N = 1'b1;
475 assign oTD2_RESET_N = 1'b1;
476
477 // Set SD Card to SD Mode
478 assign SD_DAT3 = 1'b1;
479
480 // Enable TV Decoder
481 assign oTD1_RESET_N = iKEY[0];
482
483 assign oAUD_XCK = AUD_CTRL_CLK;
484
485 assign oLEDG = VGA_Y;
486 assign oLEDR = VGA_X;
487
488 assign m1VGA_Read = VGA_Y[0] ? 1'b0 : VGA_Read ;
489 assign m2VGA_Read = VGA_Y[0] ? VGA_Read : 1'b0 ;
490 assign mYCbCr_d = !VGA_Y[0] ? m1YCbCr :
491 m2YCbCr ;
492 assign mYCbCr = m5YCbCr;
493
494 assign Tmp1 = m4YCbCr[7:0]+mYCbCr_d[7:0];
495 assign Tmp2 = m4YCbCr[15:8]+mYCbCr_d[15:8];
496 assign Tmp3 = Tmp1[8:2]+m3YCbCr[7:1];
497 assign Tmp4 = Tmp2[8:2]+m3YCbCr[15:9];
498 assign m5YCbCr = {Tmp4,Tmp3};
499
500 // 7 segment LUT
501 SEG7_LUT_8 u0 ( .oSEG0(oHEX0_D),
502 .oSEG1(oHEX1_D),
503 .oSEG2(oHEX2_D),
504 .oSEG3(oHEX3_D),
505 .oSEG4(oHEX4_D),
506 .oSEG5(oHEX5_D),
507 .oSEG6(oHEX6_D),
508 .oSEG7(oHEX7_D),
509 .iDIG(iSW) );
510
511 // TV Decoder Stable Check
512 TD_Detect u2 ( .oTD_Stable(TD_Stable),
513 .iTD_VS(iTD1_VS),
514 .iTD_HS(iTD1_HS),
515 .iRST_N(iKEY[0]) );
516
517 // Reset Delay Timer
518 Reset_Delay u3 ( .iCLK(iCLK_50),
519 .iRST(TD_Stable),
520 .oRST_0(DLY0),
521 .oRST_1(DLY1),
522 .oRST_2(DLY2));
523
524 // ITU-R 656 to YUV 4:2:2
525 ITU_656_Decoder u4 ( // TV Decoder Input
526 .iTD_DATA(iTD1_D),
527 // Position Output
528 .oTV_X(TV_X),
529 // YUV 4:2:2 Output
530 .oYCbCr(YCbCr),
531 .oDVAL(TV_DVAL),
532 // Control Signals
533 .iSwap_CbCr(Quotient[0]),
534 .iSkip(Remain==4'h0),
535 .iRST_N(DLY1),
536 .iCLK_27(iTD1_CLK27) );
537
538 // For Down Sample 720 to 640
539 DIV u5 ( .aclr(!DLY0),
540 .clock(iTD1_CLK27),
541 .denom(4'h9),
542 .numer(TV_X),
543 .quotient(Quotient),
544 .remain(Remain));
545
546 // SDRAM frame buffer
547 Sdram_Control_4Port u6 ( // HOST Side
548 .REF_CLK(iTD1_CLK27),
549 .CLK_18(AUD_CTRL_CLK),
550 .RESET_N(1'b1),
551 // FIFO Write Side 1
552 .WR1_DATA(YCbCr),
553 .WR1(TV_DVAL),
554 .WR1_FULL(WR1_FULL),
555 .WR1_ADDR(0),
556 .WR1_MAX_ADDR(640*507), // 525-18
557 .WR1_LENGTH(9'h80),
558 .WR1_LOAD(!DLY0),
559 .WR1_CLK(iTD1_CLK27),
560 // FIFO Read Side 1
561 .RD1_DATA(m1YCbCr),
562 .RD1(m1VGA_Read),
563 .RD1_ADDR(640*13), // Read odd field and bypess blanking
564 .RD1_MAX_ADDR(640*253),
565 .RD1_LENGTH(9'h80),
566 .RD1_LOAD(!DLY0),
567 .RD1_CLK(iTD1_CLK27),
568 // FIFO Read Side 2
569 .RD2_DATA(m2YCbCr),
570 .RD2(m2VGA_Read),
571 .RD2_ADDR(640*267), // Read even field and bypess blanking
572 .RD2_MAX_ADDR(640*507),
573 .RD2_LENGTH(9'h80),
574 .RD2_LOAD(!DLY0),
575 .RD2_CLK(iTD1_CLK27),
576 // SDRAM Side
577 .SA(oDRAM0_A),
578 .BA({oDRAM0_BA[1],oDRAM0_BA[0]}),
579 .CS_N(oDRAM0_CS_N),
580 .CKE(oDRAM0_CKE),
581 .RAS_N(oDRAM0_RAS_N),
582 .CAS_N(oDRAM0_CAS_N),
583 .WE_N(oDRAM0_WE_N),
584 .DQ(DRAM_DQ),
585 .DQM({oDRAM0_UDQM1,oDRAM0_LDQM0}),
586 .SDR_CLK(oDRAM0_CLK) );
587
588 // YUV 4:2:2 to YUV 4:4:4
589 YUV422_to_444 u7 ( // YUV 4:2:2 Input
590 .iYCbCr(mYCbCr),
591 // YUV 4:4:4 Output
592 .oY(mY),
593 .oCb(mCb),
594 .oCr(mCr),
595 // Control Signals
596 .iX(VGA_X),
597 .iCLK(iTD1_CLK27),
598 .iRST_N(DLY0));
599
600 // YCbCr 8-bit to -10 bit
601 YCbCr2RGB u8 ( // Output Side
602 .Red(mRed),
603 .Green(mGreen),
604 .Blue(mBlue),
605 .oDVAL(mDVAL),
606 // Input Side
607 .iY(mY),
608 .iCb(mCb),
609 .iCr(mCr),
610 .iDVAL(VGA_Read),
611 // Control Signal
612 .iRESET(!DLY2),
613 .iCLK(iTD1_CLK27));
614
615 wire [9:0] Sobel_out;
616
617 Sobel sobel0 (
618 .iCLK(iTD1_CLK27),
619 .iRST_N(DLY2),
620 .iTHRESHOLD(iSW[9:2]),
621 .iDATA(mGreen), // gray
622 .oDATA(Sobel_out)
623 );
624
625
626 // VGA Controller
627 VGA_Ctrl u9 ( // Host Side
628 .iRed(Sobel_out),
629 //.iRed(mRed),
630 .iGreen(Sobel_out),
631 //.iGreen(mGreen),
632 .iBlue(Sobel_out),
633 //.iBlue(mBlue),
634 .oCurrent_X(VGA_X),
635 .oCurrent_Y(VGA_Y),
636 .oRequest(VGA_Read),
637 // VGA Side
638 .oVGA_R(oVGA_R),
639 .oVGA_G(oVGA_G),
640 .oVGA_B(oVGA_B),
641 .oVGA_HS(oVGA_HS),
642 .oVGA_VS(oVGA_VS),
643 .oVGA_SYNC(oVGA_SYNC_N),
644 .oVGA_BLANK(oVGA_BLANK_N),
645 .oVGA_CLOCK(oVGA_CLOCK),
646 // Control Signal
647 .iCLK(iTD1_CLK27),
648 .iRST_N(DLY2) );
649
650 // Line buffer, delay one line
651 Line_Buffer u10 ( .clken(VGA_Read),
652 .clock(iTD1_CLK27),
653 .shiftin(mYCbCr_d),
654 .shiftout(m3YCbCr));
655
656 Line_Buffer u11 ( .clken(VGA_Read),
657 .clock(iTD1_CLK27),
658 .shiftin(m3YCbCr),
659 .shiftout(m4YCbCr));
660
661 AUDIO_DAC u12 ( // Audio Side
662 .oAUD_BCK(AUD_BCLK),
663 .oAUD_DATA(oAUD_DACDAT),
664 .oAUD_LRCK(AUD_DACLRCK),
665 // Control Signals
666 .iSrc_Select(2'b01),
667 .iCLK_18_4(AUD_CTRL_CLK),
668 .iRST_N(DLY1) );
669
670 // Audio CODEC and video decoder setting
671 I2C_AV_Config u1 ( // Host Side
672 .iCLK(iCLK_50),
673 .iRST_N(iKEY[0]),
674 // I2C Side
675 .I2C_SCLK(oI2C_SCLK),
676 .I2C_SDAT(I2C_SDAT) );
677
678
679 endmodule
680
681
主要的修改如下:
615行
Sobel sobel0 (
.iCLK(iTD1_CLK27),
.iRST_N(DLY2),
.iTHRESHOLD(iSW[9:2]),
.iDATA(mGreen), // gray
.oDATA(Sobel_out)
);
加上Sobel module,與之前的Sobel,這個地方有小改,將iDVAL與oDVAL拿掉,所以連帶的LineBuffer的clock enable我也拿掉了。
626行
VGA_Ctrl u9 ( // Host Side
.iRed(Sobel_out),
//.iRed(mRed),
.iGreen(Sobel_out),
//.iGreen(mGreen),
.iBlue(Sobel_out),
//.iBlue(mBlue),
.oCurrent_X(VGA_X),
.oCurrent_Y(VGA_Y),
.oRequest(VGA_Read),
// VGA Side
.oVGA_R(oVGA_R),
.oVGA_G(oVGA_G),
.oVGA_B(oVGA_B),
.oVGA_HS(oVGA_HS),
.oVGA_VS(oVGA_VS),
.oVGA_SYNC(oVGA_SYNC_N),
.oVGA_BLANK(oVGA_BLANK_N),
.oVGA_CLOCK(oVGA_CLOCK),
// Control Signal
.iCLK(iTD1_CLK27),
.iRST_N(DLY2) );
將Sobel輸出的信號連至VGA Controller。
完整程式碼下載
DE2_70_TV_sobel.7z
See Also
(原創) 如何實現Real Time的Sobel Edge Detector? (SOC) (Verilog) (Image Processing) (DE2-70) (TRDB-D5M) (TRDB-LTM)
(原創) 如何實現Real Time的Sobel Edge Detector? (SOC) (Verilog) (Image Processing) (DE2) (TRDB-DC2)