|
4#
樓主 |
發表於 2007-2-15 17:05:19
|
只看該作者
// CCD" ]5 W# g" X5 Y7 P# x, U
wire [9:0] CCD_DATA;) I2 U! \) D2 G# [2 [$ }9 t
wire CCD_SDAT;. w3 E$ h0 Z% m
wire CCD_SCLK;
5 ]) {) `0 v7 Pwire CCD_FLASH;
' `" t! S' Z9 lwire CCD_FVAL;
Z. I( ?8 `/ T( g0 m& j. M) N3 twire CCD_LVAL;& V t$ H0 P/ |7 I0 h. S. u
wire CCD_PIXCLK;
* v' d& X8 n0 q8 S2 J# \$ \9 jreg CCD_MCLK; // CCD Master Clock F" ~. b& e% f4 G# ]7 q5 h9 c
* i# \! J8 o b; b' E* O e- fwire [15:0] Read_DATA1;
4 z3 a5 G+ z9 z, qwire [15:0] Read_DATA2;
/ x7 F, w& f* nwire VGA_CTRL_CLK;
( v# ^. S% E7 V( D# e% u, a0 ewire AUD_CTRL_CLK;
2 f) m/ F2 ~# J) ?5 m$ d$ j4 i4 Gwire [9:0] mCCD_DATA;
' d. w8 @1 W* V: w( n; u# bwire mCCD_DVAL;+ A* Q( M4 x0 B0 Y
wire mCCD_DVAL_d;
+ Y* Z3 h- L/ m% A" qwire [10:0] X_Cont;
M* k6 m3 x+ y! I1 dwire [10:0] Y_Cont;# I4 C* ~& C; t
wire [9:0] X_ADDR;# \% J) Q3 C Z2 G2 k; S
wire [31:0] Frame_Cont;' F8 _4 Z4 r4 b! h! A
wire [9:0] mCCD_R;
9 j" q2 U6 j& ~2 _* p' R. Vwire [9:0] mCCD_G;
$ @3 ?% B8 f- Q `* k, r: {9 B+ {+ Xwire [9:0] mCCD_B;' Z4 g1 w$ q( P K- l. C+ a
wire [9:0] mVGA_R;
+ v$ k ]% c3 A- {7 Uwire [9:0] mVGA_G;
0 M: d( \/ X- j3 owire [9:0] mVGA_B;
4 s5 e+ i8 x* j4 \! q3 H; [wire DLY_RST_0;
8 L }. C9 a. c' e' u% {1 Lwire DLY_RST_1;3 N( `1 @5 f, F. _
wire DLY_RST_2;3 p! j, j( O* |& m& t
wire Read;
4 J2 P0 G+ k. p( Z) z+ ?# Dreg [9:0] rCCD_DATA;3 h" m. J4 O: A% ?! a2 V7 e
reg rCCD_LVAL;
9 D" d$ N- ~9 `$ preg rCCD_FVAL;
8 G4 u; u8 j- e9 h
% f% O Q4 C6 M! ^5 {0 I9 C- C// For Sensor 1
+ p4 z# Z6 U" \* iassign CCD_DATA[0] = GPIO_1[0];
7 x3 ]$ E; @+ e( m: Massign CCD_DATA[1] = GPIO_1[1];
6 j6 n3 R) F0 x/ e( d$ j* I$ Yassign CCD_DATA[2] = GPIO_1[5];
3 d4 C5 g& s7 e& t( rassign CCD_DATA[3] = GPIO_1[3];+ G" {( o* Z4 \) [
assign CCD_DATA[4] = GPIO_1[2];
1 U3 x' r& h$ c4 n) vassign CCD_DATA[5] = GPIO_1[4];
3 N0 s) x* N7 r$ v" Nassign CCD_DATA[6] = GPIO_1[6];
* I3 m; h# `3 Cassign CCD_DATA[7] = GPIO_1[7];
5 `7 ~% ~ {! M# g! u/ E( n9 Kassign CCD_DATA[8] = GPIO_1[8];& L# H# T, n6 j5 o4 O% y
assign CCD_DATA[9] = GPIO_1[9];" u& D; u; v9 @- D# T8 h
assign GPIO_1[11] = CCD_MCLK;
7 z" d- a2 y5 [( m9 `" Wassign CCD_FVAL = GPIO_1[13];
5 X4 p' E9 Z3 Q1 V& O: O6 sassign CCD_LVAL = GPIO_1[12];3 U y( M& [( C* K ]: [
assign CCD_PIXCLK = GPIO_1[10];% ?) B* F* S6 C
% P, F( M! o: |7 j% F
assign LEDR = SW;, h: u4 F9 [- @; R# I
assign LEDG = Y_Cont;
% y' i z5 Y8 _& {assign VGA_CTRL_CLK= CCD_MCLK;
1 r# h* k$ V* N$ \. sassign VGA_CLK = ~CCD_MCLK;
3 K4 ]9 l8 V4 [/ s% R9 C! o. E- }: ?% p r s/ F1 l7 S) c
VGA_Controller u1 ( // Host Side2 {1 N; U) g2 p' T) q
.oRequest(Read),5 G2 b( z$ V; X! H+ d; d! E
.iRed( DISP_R ),
, N" Q$ M5 c2 G* ~' y6 V$ Z .iGreen( DISP_G ),0 q( E5 |: |* c
.iBlue( DISP_B ),
7 s' ~# u3 o" u& V7 v4 B; W% C // VGA Side) ?- ~' d- R' |& D8 C: {8 q. N
.oVGA_R(VGA_R),0 Y2 q5 L- f7 v+ k4 g: ^6 s- ?) s
.oVGA_G(VGA_G),& u0 k. |; {$ H, i9 F) a2 x% w1 \
.oVGA_B(VGA_B),# }! Y& @" T; `0 x6 e
.oVGA_HS(VGA_HS),
r- ~4 ~- ^/ u U2 a( ~2 Y .oVGA_VS(VGA_VS),
6 u6 N$ e% a4 @0 }! d' J i3 p .oVGA_SYNC(VGA_SYNC),
8 }( V" o- s8 z# y) K: _ .oVGA_BLANK(VGA_BLANK),) s& ]0 X% s; w1 w* k: E
// Control Signal) j" @" \3 ]* u& g2 A2 K$ c
.iCLK(VGA_CTRL_CLK),4 L/ g6 f1 V$ Z. L
.iRST_N(DLY_RST_2) );
; t. E5 x& s/ g9 D( L4 R9 ~
: D' U; K# p3 |- R5 i; gReset_Delay u2 ( .iCLK(CLOCK_50),
8 B5 O l, u/ e; x .iRST(KEY[0]),+ W: @" p0 d" K$ Y( s; k, b. [
.oRST_0(DLY_RST_0),
" h M. D' y6 d( S .oRST_1(DLY_RST_1),4 R+ G( g5 J n; s J3 d7 _
.oRST_2(DLY_RST_2) );$ I1 M' \" h/ n o& G
. A S* ]& v0 g5 h- Q* r
CCD_Capture u3 ( .oDATA(mCCD_DATA),* p1 s5 u) ]5 n4 b# J. e
.oDVAL(mCCD_DVAL),7 e- a, J, O. o' o
.oX_Cont(X_Cont),+ W& S' J1 j4 t% `- |8 m- I/ m1 X
.oY_Cont(Y_Cont),: M- ^8 h: i1 z2 A/ d3 Q1 f
.oFrame_Cont(Frame_Cont),
/ q v& s* E6 A t* Y7 Y. o" }" ~ .iDATA(rCCD_DATA),5 _3 m- [3 l! n
.iFVAL(rCCD_FVAL),0 a% ?. n) u4 a5 F
.iLVAL(rCCD_LVAL),
) R2 M: p! y1 ? .iSTART(!KEY[3]),
5 y+ W8 n6 ]" v4 W6 x, f .iEND(!KEY[2]), m9 g7 n/ z/ t
.iCLK(CCD_PIXCLK), O! V4 E; j4 W
.iRST(DLY_RST_1) );
7 r, e9 B0 E" T) y* Y7 O5 x4 {: ~# O' c& ~& ~
RAW2RGB u4 ( .oRed(mCCD_R),9 P- w0 p5 W4 J0 Q7 c2 z W
.oGreen(mCCD_G),
! Z, F; M( ?9 a .oBlue(mCCD_B),
6 ^8 O+ Z9 S' I+ U- E# \1 l3 ?+ N .oDVAL(mCCD_DVAL_d),; g( a, G: m( _) g
.iX_Cont(X_Cont),9 r. O& { V8 y, X; s- ?
.iY_Cont(Y_Cont),
, V0 k4 }# f7 `. V: W .iDATA(mCCD_DATA),! `+ d' C0 d4 f: o
.iDVAL(mCCD_DVAL),
1 n2 Q; ^" t1 J8 a* K .iCLK(CCD_PIXCLK),
: C0 f; d- R; s; B6 L# B6 W .iRST(DLY_RST_1) );
/ o# a8 w) }1 ]4 z; X6 O. j1 j0 m R) L
SEG7_LUT_8 u5 ( .oSEG0(HEX0),.oSEG1(HEX1),
& v l; B6 i; ]0 s: g. e .oSEG2(HEX2),.oSEG3(HEX3),8 f& G. J0 \4 E0 w9 i5 ^+ Q
.oSEG4(HEX4),.oSEG5(HEX5),/ [" T! ~5 t/ |) t, Z) J" y+ z4 L! w
.oSEG6(HEX6),.oSEG7(HEX7),
$ V5 X! \! V* G .iDIG(Frame_Cont) );% _9 E5 J3 A) s' `
: u: C* r' x/ n" }Sdram_Control_4Port u6 ( // HOST Side9 ~! J; _# L) P4 s
.REF_CLK(CLOCK_50),
" Y0 ]/ N7 I( n8 |0 j0 M- W .RESET_N(1'b1),
2 t P s* y/ g! P2 J( A: t // FIFO Write Side 1
0 L0 L6 S! \- r, }% q0 z .WR1_DATA( {mCCD_G[9:5],
$ f2 a# G& k# e mCCD_B[9:0]}),
' Q/ i3 V8 H2 x .WR1(mCCD_DVAL_d),/ T. E& A0 e7 Q6 Z3 H8 c
.WR1_ADDR(0),. t' b- L' u% @# e) |: O9 B
.WR1_MAX_ADDR(640*512),4 N: ^& U% m8 E) I' _! n
.WR1_LENGTH(9'h100),
& U4 d4 R9 E/ [ .WR1_LOAD(!DLY_RST_0),' d' f' V: F$ E5 Z
.WR1_CLK(CCD_PIXCLK),
, \+ ]7 T3 u% K) d // FIFO Write Side 26 f( E# P( Y5 n0 |6 I
.WR2_DATA( {mCCD_G[4:0],
9 \ a6 T) M* P5 O* U' J mCCD_R[9:0]}),1 S: x1 [" c* a$ g
.WR2(mCCD_DVAL_d),& T7 @: p) K" z; h( Z+ Q
.WR2_ADDR(22'h100000),
3 t; T) u' S9 C .WR2_MAX_ADDR(22'h100000+640*512),4 G0 @6 W( j. A6 n4 q8 G
.WR2_LENGTH(9'h100),
4 U: w% K( O2 `! @# x+ ?# y .WR2_LOAD(!DLY_RST_0),
4 @* c0 @0 T9 z S6 j; U .WR2_CLK(CCD_PIXCLK),
7 B5 S8 l' K& g: E' `5 j // FIFO Read Side 1
- S4 N, r2 J+ x# U* G .RD1_DATA(Read_DATA1),
' V- `5 }. B" l; L) J9 u .RD1(Read), C T \4 t [. T6 ~/ {3 W
.RD1_ADDR(640*16),
3 `" S0 T! e$ L7 J .RD1_MAX_ADDR(640*496),$ h# L! b! u7 A6 v3 r; a- q
.RD1_LENGTH(9'h100),% b" [# n7 O4 S7 E
.RD1_LOAD(!DLY_RST_0),
) Z! E8 B0 U- i. b) [, z- H) | .RD1_CLK(VGA_CTRL_CLK),
1 f9 t: K, _# Y* I // FIFO Read Side 2
( x# g3 d5 M% ~' W8 z9 k B .RD2_DATA(Read_DATA2),& i# u& c5 N K7 i/ J# ~% f9 D
.RD2(Read),
; D/ G+ I* \4 Z! n: h) S .RD2_ADDR(22'h100000+640*16),
. l- C) L$ |! \" r+ e0 b* w; { .RD2_MAX_ADDR(22'h100000+640*496),
. B# f! [7 a4 }5 N7 P9 P .RD2_LENGTH(9'h100),
9 O [' H# F! p0 c$ w/ S .RD2_LOAD(!DLY_RST_0),
! r' }; u z( _! H/ } .RD2_CLK(VGA_CTRL_CLK),
% V" l6 A! [4 K3 x // SDRAM Side( O' s. g) h" N% x3 E" V
.SA(DRAM_ADDR),* E2 z6 r, }1 {- Y; y. \
.BA({DRAM_BA_1,DRAM_BA_0}),$ V( u: g' [1 g! d1 v1 p& X$ @
.CS_N(DRAM_CS_N),- T' ? W. ]4 E$ Q+ E( E5 ~
.CKE(DRAM_CKE), w+ [0 G P" ~
.RAS_N(DRAM_RAS_N),) q. s0 D$ E/ p4 M
.CAS_N(DRAM_CAS_N),! S# r; M& W. G2 F
.WE_N(DRAM_WE_N),6 M+ @3 p# ?* ~1 W/ N2 [* T( b0 a( O1 ~
.DQ(DRAM_DQ),
6 V4 G$ z6 a; i8 L0 n .DQM({DRAM_UDQM,DRAM_LDQM})," I' t2 I" _ m4 [/ o6 [& s. G
.SDR_CLK(DRAM_CLK) );/ M. Y2 ~; [, v
T f+ m( W3 [
I2C_CCD_Config u7 ( // Host Side( n- r3 S+ q) U- I( p
.iCLK(CLOCK_50)," M5 ^$ d, {- M4 h1 M
.iRST_N(1'b1),
0 Q8 U6 W6 N* Z$ o: Z .iExposure(16'h0600),2 i5 K8 t! n% y' M. T5 h; w
// I2C Side7 I! ]+ g/ e; U' J& x3 U
.I2C_SCLK(GPIO_1[14]),
2 S# Q* D+ Z- i .I2C_SDAT(GPIO_1[15]) );" Z1 H: {# ], v, C+ J( e
/////////////////////////////////////////////////////////////////////* b4 f, S; B" E! N
wire [9:0] DISP_R;
- D% c$ E" E- G. Y. Iwire [9:0] DISP_G;3 C1 C7 ]1 {# e
wire [9:0] DISP_B;
* O5 `7 `3 k N7 `, a' @3 S, p+ K' U9 L3 o9 ^2 I
// To Display& {& J. t/ Q* W* T: v" d
assign DISP_R = SW[17] ? mVGA_R : // Red
7 Q ?" J. B% o6 B7 C7 ^ SW[16] ? mVGA_G : // Green
# V" {, S( K8 B, N5 B SW[15] ? mVGA_B : // Blue
! s$ I. B0 Y8 s! [) G( [& u mVGA_R ; // Color# S! l+ J) K: F% F3 a
assign DISP_G = SW[17] ? mVGA_R : // Red" w' m6 G* [/ }* X$ j2 L$ h
SW[16] ? mVGA_G : // Green
1 _( N5 m9 v8 ^1 K6 z# T SW[15] ? mVGA_B : // Blue
+ J% D1 o# v! n( I# t8 q mVGA_G ; // Color5 W2 s5 @3 k! r! j9 `
assign DISP_B = SW[17] ? mVGA_R : // Red* D9 R: |6 P4 P8 T8 Q e
SW[16] ? mVGA_G : // Green
. U- c+ K5 l! _# R' u1 j' f SW[15] ? mVGA_B : // Blue
9 \7 o8 i( {3 s, `- g8 k' F mVGA_B ; // Color
: f, i4 p2 A6 `8 `, ~
( t, m; G8 B) j2 e* w; \// SDRAM. Y5 G8 r0 l9 y8 b3 v5 w
wire [21:0] mSD_ADDR;3 ^& A( i; `2 a ~5 g" G9 c) i
wire [15:0] mSD2RS_DATA,mRS2SD_DATA;& A8 F! `2 |7 D, w& x
wire mSD_WR,mSD_RD,mSD_Done;
+ Q B9 d7 w/ a# A( }# S* b// SRAM Async Port
/ s& L( M, Y5 R/ T" ywire [15:0] mSRAM_VGA_DATA;
0 y) R, R2 l! c# O' Wwire DLY_RST;
% W+ O7 B! m5 Q7 o; ^
7 ?9 s4 L1 C- M9 T% j! M6 r// VGA% g3 Q7 c8 f L& K4 y5 A. M, |# b
wire [9:0] mOSD_R;+ I4 {! F' N p
wire [9:0] mOSD_G;+ }& m5 E8 P( s# c; Y! M% Q
wire [9:0] mOSD_B;
# m/ v+ `# O x, G8 G+ I4 d. ~* zwire [9:0] mVIN_R;
# p0 P/ D6 S4 p$ u$ c. x- xwire [9:0] mVIN_G;
2 T9 s4 @4 }0 [2 }; m& Kwire [9:0] mVIN_B;5 c/ Y) w8 B/ O; {0 P8 U
wire [19:0] mVGA_ADDR;
; _2 `4 v1 f& twire [9:0] mCursor_X;
5 O' t9 a, X. Y. G7 {+ b' G! Fwire [9:0] mCursor_Y;: N6 x& u e9 `/ x, V, k! |& ~
wire [9:0] mCursor_R;) B1 g+ g+ C' V' \1 I% q/ |
wire [9:0] mCursor_G;
1 R0 F, f! o1 g9 i+ Y* dwire [9:0] mCursor_B;
9 g4 I, e& Y2 F$ W! E+ A! z7 F1 owire [1:0] mOSD_CUR_EN;
% |7 S5 ^& L! q( \# {8 _' H& h// Async Port Select5 e" g7 q8 F9 R9 ~0 G
wire [2:0] mSDR_Select;, [& b' e. o- }# N
// External IO d4 w( H( }6 w4 C% {
wire [7:0] mExt_IO;7 R7 C, U8 g9 {2 z; v [( u; r
// SDRAM Async Port. ]) c. G5 r. Z; a( \% x0 D i5 V6 g
wire [15:0] mSDR_AS_DATAOUT_1;" C3 j9 k* h: |, A
wire [15:0] mSDR_AS_DATAOUT_2;
" Z# |$ `/ X' L& K' \: n+ _9 swire [15:0] mSDR_AS_DATAOUT_3;
! K# C! c) J- R4 p- q4 D6 J3 hwire [21:0] mSDR_AS_ADDR_1 = 0;
, e( x, W1 j2 Ewire [21:0] mSDR_AS_ADDR_2 = 0;7 S: w2 _$ y- X& {: d" k
wire [21:0] mSDR_AS_ADDR_3 = 0;: B/ T6 n" X0 S2 M: a2 x1 W
wire [15:0] mSDR_AS_DATAIN_1= 0;8 W2 {6 h, ^, n1 V+ ~. I- r, y
wire [15:0] mSDR_AS_DATAIN_2= 0;
9 x! V& l8 T) {wire [15:0] mSDR_AS_DATAIN_3= 0;
; N$ z9 ^4 z: C$ G2 Hwire mSDR_AS_WR_n_1 = 0;; ]$ g( }0 K1 X. w1 }
wire mSDR_AS_WR_n_2 = 0;0 O4 p: @7 H1 \! J( S/ q) V
wire mSDR_AS_WR_n_3 = 0;5 q: C* X* {7 z( p- t
// USB JTAG
0 U! B1 s- s! w; _. E' Uwire TDI;
! ^% P ?7 Q2 I" T& g& twire [7:0] mRXD_DATA,mTXD_DATA;) F$ k; ]4 `+ ^
wire mRXD_Ready,mTXD_Done,mTXD_Start;9 L* z% l' g9 S9 W
reg mTCK;: n3 D7 a+ }5 D8 ^
reg TDO;
, Q# d8 a4 F, {" w. freg [7:0] oRXD_DATA,oTXD_DATA;; a& ]/ {% [7 ?+ R8 y7 f; y% \) U
reg oRXD_Ready,oTXD_Done,oTXD_Start;' V6 I; N, M1 d4 b. i# q
// All inout port turn to tri-state+ ~7 P8 |5 C& _
assign OTG_DATA = 16'hzzzz;
3 ?- U5 I1 o4 Sassign SD_DAT = 1'bz;% f3 J/ N- D8 c0 ]) |
assign GPIO_1 = 36'hzzzzzzzzz;
) r& y. w" D7 J4 J/ a9 M" J// Audio! }0 i7 Y6 m/ Q/ E6 `
assign AUD_ADCLRCK = AUD_DACLRCK;/ { Z9 S1 u: M% m
assign AUD_XCK = AUD_CTRL_CLK;
( g+ v4 J7 {/ f; W( V: m- K5 N" _; f8 A: m4 T
always@(posedge CLOCK_50) CCD_MCLK <= ~CCD_MCLK;
# j$ z( p: ~ n/ B
0 ~( P& e/ Y2 p' \) a4 valways@(posedge CCD_PIXCLK)
/ |/ _. h" L8 ], v6 A$ g. T3 q: E2 k: mbegin. \. N3 W; K8 |& w
rCCD_DATA <= CCD_DATA;; K5 X+ }. E* a
rCCD_LVAL <= CCD_LVAL;! T L. l5 u' |) A+ \) {
rCCD_FVAL <= CCD_FVAL;
# n5 }+ r% S: H9 [: g2 e/ G" ^ if (!KEY[0]) begin2 c3 f4 M7 @6 J
mTCK <= TCK;
5 V" B& }) A6 e9 Q oRXD_DATA <= mRXD_DATA;
$ r( c6 R M$ J9 g+ y oTXD_DATA <= mTXD_DATA;$ e, z B: E1 V+ k8 Z
oRXD_Ready <= mRXD_Ready;; G0 W4 n! {/ T, B. N
oTXD_Done <= mTXD_Done;8 _( V9 d" V6 @: F7 [+ c1 [
oTXD_Start <= mTXD_Start;
) Z% g( Y; ~+ x4 u% ` end9 Q& P2 ?0 A2 t$ P
else begin
( Z, g$ T+ [( U7 z( T: K mTCK <= ~TCK;' ~9 v, N; h6 b6 T& D
end
4 F* Y u- [2 `/ C- k- Kend
% r! k* y: A7 x- f# p7 m9 ?+ lassign mVGA_R = Read_DATA2[9:0];4 r2 K& e. h+ [6 |; N0 Q* _" K$ v5 F; v
assign mVGA_G = {Read_DATA1[14:10],Read_DATA2[14:10]};, c a) N) _' D& a: \# D+ J6 m- A" k
assign mVGA_B = Read_DATA1[9:0];
8 ` }0 Y6 j, z" o. Nendmodule
; [4 N: F& B# o$ J' C& E$ [2 j0 ^0 O, y! Q; y; l/ }; q
以上是我自己修改過後的CCD+USB程式,CCD影像還是能成功的執行,但卻無法驅動USB程式下載影像檔
) b' i& H( ^; B( V* \+ J先說明一下驅動的流程.....: W( M ^0 @( i$ u/ F- L
在驅動CCD程式之後,先按KEY[3]鍵,VGA螢幕就會出現CCD所攝取到的動態影像,& K# ] Z- j5 b Y# [
待調整好CCD位置,按KEY[2]鍵,即可定格影像選取所欲下載的畫面...
! l' V% g8 i4 e! m4 |" H只要再按KEY[3]鍵,即可回復原先的動態影像....+ A! a5 c5 u$ I8 a3 @9 C
而通常存取畫面都是再按KEY[2]鍵等影像定格後,再驅動USB程式.3 B: d+ M3 `2 L! J, q7 |- d
將USB程式下載到FPGA之後,即可在CPLD裡使用一套程式download由USB傳回來的影像檔.... K. i) j9 V) I6 k
等檔案download完成後,在開啟一個影像軟體打開下載後的檔案....2 [' [& Z! e* K) J+ v8 \: c; _
即可得到CCD所攝取到的畫面........
: R3 ~* p1 Q p以上是整各程式驅動的內容及流程..# r- S$ j/ H- x9 |5 R/ D" S% |! T
請各位高手給予一些建議與討論....
+ D. \ O* d" M. n+ @謝謝....... |
|