|
4#
樓主 |
發表於 2007-2-15 17:05:19
|
只看該作者
// CCD
8 _3 r: A7 s) L# S. Awire [9:0] CCD_DATA;
" U$ L# D) v0 x# Awire CCD_SDAT;2 l' `) t7 y) g, ~. t
wire CCD_SCLK;1 ^7 U$ n& q+ }) p* j# F! }+ J& w8 t1 Y
wire CCD_FLASH;
! }7 L% D8 {' Z$ Y* Owire CCD_FVAL;
% J `. {2 S" G+ e$ O( m" ]wire CCD_LVAL;
& C, f' b0 ?1 D/ I9 o4 Owire CCD_PIXCLK; i; A) f9 k# {& z; D q
reg CCD_MCLK; // CCD Master Clock( p+ b- A0 D1 S( x* g6 {6 Y4 y
/ d6 `) ]1 Y) M swire [15:0] Read_DATA1;- }* X9 o* u |' U' f
wire [15:0] Read_DATA2;
6 \4 L9 ?+ B. k7 A S; M2 x) Cwire VGA_CTRL_CLK;* S f8 _. o6 B% I' ]7 m
wire AUD_CTRL_CLK;
' f. \9 v. B# Y8 }; ?" F \% r" Jwire [9:0] mCCD_DATA;
) l4 k5 ] ^; u8 Xwire mCCD_DVAL;) u7 ~: r( H+ m; \: u
wire mCCD_DVAL_d;
0 z3 @0 {& |% c4 pwire [10:0] X_Cont;( T/ u. v- M/ N
wire [10:0] Y_Cont;: f) y1 I: p, P4 r. m
wire [9:0] X_ADDR;3 [3 o. N8 K0 j& T: P
wire [31:0] Frame_Cont;! L* {6 K0 k6 ~, g- o* t
wire [9:0] mCCD_R;
% g9 c8 o% w" Xwire [9:0] mCCD_G;
9 J( }6 J, ?* z* q6 Uwire [9:0] mCCD_B;; }/ P& k" q- B! ^
wire [9:0] mVGA_R;
% k7 i+ x5 g% x" F% S6 Y6 n Vwire [9:0] mVGA_G;, N1 B1 p' U- v! @: S9 H
wire [9:0] mVGA_B;
) j& H: g1 l8 u& }' H& iwire DLY_RST_0;# q$ }8 v/ D1 @& y* Q9 G' U; B: \
wire DLY_RST_1;
, u" X( Q+ f1 n5 f8 Ewire DLY_RST_2;7 [6 A- a; ]" Z& z
wire Read;
2 b( t$ l" h, y0 g* Treg [9:0] rCCD_DATA;* s; s7 [$ N) N6 S
reg rCCD_LVAL;
2 h1 Y6 T: V8 z+ O* Yreg rCCD_FVAL;
n* a9 d1 t: K$ f3 Z
8 ]( f3 Z3 R5 T7 Z1 y// For Sensor 11 n+ s+ w4 x% e: \: r0 v
assign CCD_DATA[0] = GPIO_1[0];
! v7 m, w5 k) a. s8 Rassign CCD_DATA[1] = GPIO_1[1]; j' ?* L3 v x" }
assign CCD_DATA[2] = GPIO_1[5];
# H. L5 q! G: E" P8 i3 Rassign CCD_DATA[3] = GPIO_1[3];$ A, N) ]4 P( S5 r! K& H
assign CCD_DATA[4] = GPIO_1[2];. A# k. ~- R- ~/ v! {+ Q. ^# H5 i
assign CCD_DATA[5] = GPIO_1[4];# f8 w" f& d4 q/ U p; @
assign CCD_DATA[6] = GPIO_1[6];! _$ _- U! \: e7 j4 J/ I
assign CCD_DATA[7] = GPIO_1[7];. J. a) J" R3 I5 ]5 Y$ S' |
assign CCD_DATA[8] = GPIO_1[8];
' W6 ^, ? B4 J2 u% T8 y j2 | s4 m# xassign CCD_DATA[9] = GPIO_1[9];
8 }) C1 ^$ G0 F! Z2 xassign GPIO_1[11] = CCD_MCLK;
$ y: c s6 I6 S7 g6 kassign CCD_FVAL = GPIO_1[13];
- ?! G0 J6 \; ^2 l7 S6 S2 dassign CCD_LVAL = GPIO_1[12];1 n- \5 i$ O" {3 v1 A: _7 f
assign CCD_PIXCLK = GPIO_1[10];
0 `* ~9 D5 f0 D' ]; r: D; y Q5 p( c# f4 b2 B4 F
assign LEDR = SW;
& h, F5 C: t2 i9 l4 }assign LEDG = Y_Cont;
7 r. v. g. _/ massign VGA_CTRL_CLK= CCD_MCLK;
: n M" Q/ M+ }. eassign VGA_CLK = ~CCD_MCLK;
' C# _; ~! X: G0 {! N% @4 p1 K. O" p0 ~# D5 L2 _
VGA_Controller u1 ( // Host Side
. c# n: S0 [( O8 Y+ X) b .oRequest(Read),
2 f `' u/ y6 l, U .iRed( DISP_R ),$ S! G7 J+ c/ J7 t* v
.iGreen( DISP_G ),
5 f5 X) u# H | .iBlue( DISP_B ),
, t9 }0 e+ C( w // VGA Side# Z) @& s3 e' ], @/ J
.oVGA_R(VGA_R),8 P: J3 v3 N) A) `$ \! o4 p
.oVGA_G(VGA_G),' T, X, J/ F ?, j; q7 x, g
.oVGA_B(VGA_B),
0 [% `( y, o) Q2 O .oVGA_HS(VGA_HS), i+ [* o3 F4 a' j/ E. y
.oVGA_VS(VGA_VS),# @% X8 i: V7 j, y& v* U$ C, C
.oVGA_SYNC(VGA_SYNC),
1 q) `6 W: \: h/ \, _8 @. B .oVGA_BLANK(VGA_BLANK),. F( H% T( O. g) h9 M, E& _% [
// Control Signal9 S! x' x7 n! {
.iCLK(VGA_CTRL_CLK),3 N( S O5 W5 D2 U0 K& S
.iRST_N(DLY_RST_2) ); q- n* x! S8 d2 C. u
3 n9 V; j, Z& |Reset_Delay u2 ( .iCLK(CLOCK_50),
6 r6 t3 a8 ]% E# R9 z/ \ .iRST(KEY[0]),5 Q# ], ? Y' ^8 ~/ A* [3 I2 B
.oRST_0(DLY_RST_0),! D! t. U' F1 v. ~
.oRST_1(DLY_RST_1),3 l8 J% u, g3 h1 t& d7 e0 T- ?0 Y. l
.oRST_2(DLY_RST_2) );
5 b3 E4 L( | \3 h D: W
% R+ L" U" I8 RCCD_Capture u3 ( .oDATA(mCCD_DATA),
4 U! u( f) C# Q, I2 Z+ h .oDVAL(mCCD_DVAL),, n: e0 \ w6 \, v$ `. c
.oX_Cont(X_Cont),& l$ t" E0 l4 s5 q8 k
.oY_Cont(Y_Cont),- K, z2 S/ s) {( Y4 W0 f2 E
.oFrame_Cont(Frame_Cont),
. Q* L% x: f9 j; F .iDATA(rCCD_DATA),
" z; P) n8 o; d! K7 _7 y, F' O' [ .iFVAL(rCCD_FVAL),
6 d2 m: u1 O* P! H6 u g) P .iLVAL(rCCD_LVAL),, h* D; C/ W# g
.iSTART(!KEY[3]),4 m7 w+ |8 }8 v
.iEND(!KEY[2]),
( o$ Y. f0 _* Q j .iCLK(CCD_PIXCLK),
" s$ S' N7 a6 ^6 f% P" l. f+ ^" K .iRST(DLY_RST_1) );8 k% ]: t+ ~4 h. Q
8 D* b8 V7 @) H6 I8 r; E% bRAW2RGB u4 ( .oRed(mCCD_R),
, J) K9 m# x) T! F; L .oGreen(mCCD_G),% ~" k0 R W' P8 |
.oBlue(mCCD_B)," g7 V0 m& H& V. J* L
.oDVAL(mCCD_DVAL_d),
# y8 E4 }' Y, h( c3 M% {- [ .iX_Cont(X_Cont),
7 p0 M/ u, U9 l' t! t .iY_Cont(Y_Cont),% u, ^8 O$ L; G9 l4 b
.iDATA(mCCD_DATA),: z, c* p4 Z+ R1 d, S; d
.iDVAL(mCCD_DVAL),
8 K4 c/ Q& ]5 A1 P- S2 B .iCLK(CCD_PIXCLK),
+ \* A- Y9 f+ t* X7 c7 F .iRST(DLY_RST_1) );. m: l7 Z3 p' u0 c/ B3 k$ `
$ y8 E' [: m4 y
SEG7_LUT_8 u5 ( .oSEG0(HEX0),.oSEG1(HEX1),
2 q7 |5 B) e8 R4 P .oSEG2(HEX2),.oSEG3(HEX3),
- ]4 \9 D! S5 m. f) L! |8 Z0 U8 C6 \ .oSEG4(HEX4),.oSEG5(HEX5),
& O, i, N0 }. b, N( |& e; R .oSEG6(HEX6),.oSEG7(HEX7),- H1 s; w3 F2 N/ [& A
.iDIG(Frame_Cont) );: U; B* @/ I; p0 x, V. @, J3 v% O
+ B9 w% X8 S7 A0 b# S1 k; Y0 q
Sdram_Control_4Port u6 ( // HOST Side* m0 s) g# o& }4 Z! ?, d9 ]
.REF_CLK(CLOCK_50),/ R5 D5 C y6 _' v, S+ a! s
.RESET_N(1'b1),: q/ B5 l+ Q+ {* G W O9 r& D" I
// FIFO Write Side 1* k, ]4 V: g7 ?% v8 y9 i
.WR1_DATA( {mCCD_G[9:5],
7 t u' A+ _8 E mCCD_B[9:0]}),+ d% a$ A/ C! e% c
.WR1(mCCD_DVAL_d),5 S& U1 s6 W- z, {2 C
.WR1_ADDR(0),
2 z2 z0 _- ?; L3 A3 F1 i .WR1_MAX_ADDR(640*512),
, D2 i( x" h, [- S7 G; \7 I: ] .WR1_LENGTH(9'h100),6 c6 K+ M. }6 l' }
.WR1_LOAD(!DLY_RST_0),* q, W N/ S# g8 j7 |" D. O
.WR1_CLK(CCD_PIXCLK),, E7 W$ ]2 H a5 I- f: ~3 [
// FIFO Write Side 2
! o, l4 \* n5 J- f" l .WR2_DATA( {mCCD_G[4:0],4 p) k. y0 ]/ q" a3 g' A8 ?
mCCD_R[9:0]}),2 N2 D# X+ ?( w$ v
.WR2(mCCD_DVAL_d),. h2 s. m+ V5 W* V8 d" ^/ x
.WR2_ADDR(22'h100000),& t5 P" S% n/ i0 d8 |
.WR2_MAX_ADDR(22'h100000+640*512),
4 f# ~- v- u! l% k. ]3 ~" j7 { .WR2_LENGTH(9'h100),
. E) L+ T" I1 R# a6 I/ s .WR2_LOAD(!DLY_RST_0),
, `1 j/ b, z& i' D! [ .WR2_CLK(CCD_PIXCLK),
, P6 F. i9 m) {1 H7 j \ // FIFO Read Side 1. P+ q+ w! c1 x
.RD1_DATA(Read_DATA1),, y X) S% b4 J3 z3 K2 ^" }6 I! [! A
.RD1(Read),+ F1 W$ l7 ], H* W
.RD1_ADDR(640*16),* U6 U! q/ k- i$ V7 d& g
.RD1_MAX_ADDR(640*496),
3 @" q+ M7 |( G0 U% L .RD1_LENGTH(9'h100),
! q3 N+ ^) K, T2 C6 _ .RD1_LOAD(!DLY_RST_0),4 x' Y% l( \5 D" x2 x
.RD1_CLK(VGA_CTRL_CLK),
- K! t: K9 I& V' p% [ // FIFO Read Side 2
# c* q- |7 Y* f+ J& P .RD2_DATA(Read_DATA2),
! i y+ k ?8 `4 Q2 U .RD2(Read),* K- ?& c E" w) x$ d+ @7 @
.RD2_ADDR(22'h100000+640*16),
; e4 @0 |( x' ~' V. r .RD2_MAX_ADDR(22'h100000+640*496),
; k7 G3 @/ V. M# x% B4 |) X .RD2_LENGTH(9'h100),
0 r( g7 V! C1 L" h/ k7 I: o .RD2_LOAD(!DLY_RST_0),
: R; ~. N6 \2 S6 ~$ C .RD2_CLK(VGA_CTRL_CLK),
9 ~: H; G6 d/ F$ r3 f9 K // SDRAM Side
0 h) G/ M7 K. ]: t0 S: [( ~ .SA(DRAM_ADDR),
0 [: i- I$ m2 o6 q .BA({DRAM_BA_1,DRAM_BA_0}),
9 f: p2 V1 |8 b8 }/ } .CS_N(DRAM_CS_N),
4 y% X/ n" G/ [* g/ a+ } .CKE(DRAM_CKE),
% y9 h- ?; k! P- j5 v! _ g$ Q1 Y .RAS_N(DRAM_RAS_N),
3 t2 _7 ^: S8 T9 i; N1 E/ w# _$ P .CAS_N(DRAM_CAS_N),) y" q0 |. X1 w( |& z- a8 ]
.WE_N(DRAM_WE_N),
9 A, a1 G3 k2 {( X+ n .DQ(DRAM_DQ),# u! \/ h2 O' ~# L. O- X7 f" q* x, ^+ ]0 Z
.DQM({DRAM_UDQM,DRAM_LDQM}),
3 j. y7 S+ u) F @$ h$ i X* i .SDR_CLK(DRAM_CLK) );
& `; ?. U5 X# U% T6 B" @0 Y( }+ C! i$ V, w% _( E( E; o! Z- f4 c
I2C_CCD_Config u7 ( // Host Side" i" p2 u, Q/ V: @, r7 v
.iCLK(CLOCK_50),2 Y8 D: x/ Z4 [' g8 j' m
.iRST_N(1'b1),
" ^/ P1 b- O6 _( F; R .iExposure(16'h0600),
4 ^8 |6 H: Z) H# I // I2C Side7 z0 ~0 G/ |+ N
.I2C_SCLK(GPIO_1[14]),' ^4 ^1 y) Q9 {9 U
.I2C_SDAT(GPIO_1[15]) );
3 q& R/ y5 g+ g4 G9 x# d! m1 \/////////////////////////////////////////////////////////////////////
, y8 A# X) y: s! f1 K( fwire [9:0] DISP_R;
; Z) U4 q6 ?* q! _9 h4 A1 Mwire [9:0] DISP_G;' m6 r( G6 @2 h7 P7 N& [! f. x4 H) O
wire [9:0] DISP_B;
/ }. o! E! u0 u3 ?; d8 z3 x
7 |6 B$ H8 u. g: E5 C) \) U( j; ~// To Display, ] o0 E/ `6 v
assign DISP_R = SW[17] ? mVGA_R : // Red
3 S* ~; m2 ^1 t+ F$ ] SW[16] ? mVGA_G : // Green9 Q% N: v/ y1 S7 \5 s7 c. _$ ?
SW[15] ? mVGA_B : // Blue* y# p9 T9 C, [$ b8 E) g
mVGA_R ; // Color2 {- z) b, @- z3 l. h, R$ e- \
assign DISP_G = SW[17] ? mVGA_R : // Red" }( x9 e& K% A0 d. r1 _
SW[16] ? mVGA_G : // Green
Z8 w& S% f4 ^1 R SW[15] ? mVGA_B : // Blue4 B- S1 M. ]6 E( a1 N/ c8 P- {. k
mVGA_G ; // Color
5 k k6 Z/ P" C+ kassign DISP_B = SW[17] ? mVGA_R : // Red
' U1 v N- b5 l" V5 N' Y5 b SW[16] ? mVGA_G : // Green/ s2 D) Q n' p u
SW[15] ? mVGA_B : // Blue
( [; Z3 d% Z6 H0 D+ p7 `& R; h mVGA_B ; // Color8 ~4 v6 R1 [& u) v9 c
% T' ?% y0 _/ D// SDRAM
+ h6 _; g. R% m4 H3 L# ^; Qwire [21:0] mSD_ADDR;
+ ~3 @9 [ l$ X. _wire [15:0] mSD2RS_DATA,mRS2SD_DATA;9 K+ z8 t: h0 Y9 Y6 R8 y
wire mSD_WR,mSD_RD,mSD_Done;
! B1 e S7 O _$ S// SRAM Async Port7 Z8 A/ _8 u: ^3 z$ ^4 u' H" C
wire [15:0] mSRAM_VGA_DATA;
1 i5 Q3 d( ]. D- \! O5 kwire DLY_RST;! T* e8 T& N; Y. O/ ^' z& V1 y
" e5 c! E6 |6 C$ s6 i// VGA
; H7 Y1 C5 p; M5 X9 r4 ~wire [9:0] mOSD_R;
* e; i+ S; M5 g- E0 pwire [9:0] mOSD_G;
+ G5 @, i9 |) Iwire [9:0] mOSD_B;. a. S4 s5 U) p, r/ J
wire [9:0] mVIN_R;
4 J5 ? F6 f/ m/ j, ]* zwire [9:0] mVIN_G;7 s7 ^. O% y' E7 Y( T
wire [9:0] mVIN_B;( A9 l% Y$ i* ]- D% A8 e! Q
wire [19:0] mVGA_ADDR;% L$ C9 T; n# l! T! }7 x
wire [9:0] mCursor_X;' ^+ C) S* V, B/ T! L( D
wire [9:0] mCursor_Y;
2 W1 x: \; K1 I6 C+ C @wire [9:0] mCursor_R;
. Y( N+ \( O+ h+ Owire [9:0] mCursor_G;+ ?0 u2 k" V z# ?. g$ h7 w
wire [9:0] mCursor_B;$ u) A* M# |. D! `3 t' H
wire [1:0] mOSD_CUR_EN;* m5 |5 ` w2 c: ^. T; A$ b; t
// Async Port Select
. K! ~6 H" |7 b% S3 H/ H/ wwire [2:0] mSDR_Select;6 N& E5 R- s+ t' b
// External IO& {* c- o# V) \& T: C ^& j
wire [7:0] mExt_IO;
& }$ ~% U6 x8 J1 q$ ]2 L// SDRAM Async Port
7 c0 N7 k5 U* @wire [15:0] mSDR_AS_DATAOUT_1;
# J/ y! C7 N% N" Twire [15:0] mSDR_AS_DATAOUT_2;
. g, Z; r; g; X& T5 uwire [15:0] mSDR_AS_DATAOUT_3;' W0 N; ^4 E& w" }
wire [21:0] mSDR_AS_ADDR_1 = 0;/ V9 R6 h1 J6 S/ J h6 K y; b
wire [21:0] mSDR_AS_ADDR_2 = 0;
8 \5 S# c; P1 A% l9 _% f/ awire [21:0] mSDR_AS_ADDR_3 = 0;4 J; Q; Z7 s K; C- S9 c( b
wire [15:0] mSDR_AS_DATAIN_1= 0;! g9 [. y5 ]7 u* Q
wire [15:0] mSDR_AS_DATAIN_2= 0;
" a4 n t/ K2 }/ b' k/ R# C' kwire [15:0] mSDR_AS_DATAIN_3= 0;. ?2 t- x+ L$ H9 g- z# g0 u( I7 I: J
wire mSDR_AS_WR_n_1 = 0;, K' Y6 Z% `. N
wire mSDR_AS_WR_n_2 = 0;$ E8 e6 v5 w5 l
wire mSDR_AS_WR_n_3 = 0;
, l" R" |2 y/ _5 f3 L G// USB JTAG
/ @8 p4 p: x, a( Q% l! j7 awire TDI;
' ?* {2 W- h ~# @wire [7:0] mRXD_DATA,mTXD_DATA;8 ~: N N+ D6 z+ c% Q" _
wire mRXD_Ready,mTXD_Done,mTXD_Start;
5 ~# b, }- a5 F7 {reg mTCK;/ }8 @- T S- H! ^- L6 b
reg TDO;
9 k/ k c( r2 l( t& H/ \# oreg [7:0] oRXD_DATA,oTXD_DATA;
' A! |% r/ d+ |, r, }5 o- xreg oRXD_Ready,oTXD_Done,oTXD_Start;% C( E E P/ @5 p
// All inout port turn to tri-state% ]) a3 f- r4 Y4 N" B. _
assign OTG_DATA = 16'hzzzz;
& d: p; b7 V( J$ }1 s& n+ e. ~assign SD_DAT = 1'bz;( V( s7 T, m8 ]+ I. j
assign GPIO_1 = 36'hzzzzzzzzz;+ k8 J3 U2 J7 s: _% \& W
// Audio
" W5 B: p; K/ f) \assign AUD_ADCLRCK = AUD_DACLRCK;
; f6 A4 J; x; M+ [) U C/ H- ^& Jassign AUD_XCK = AUD_CTRL_CLK;
5 j- F" X! Z$ V9 F
' T* X( O) F- t" C: |, Y5 y1 w6 ~; Walways@(posedge CLOCK_50) CCD_MCLK <= ~CCD_MCLK;( N& ^! {# p9 {, [- [8 t
5 Z2 R% g% ]8 Z3 m( a6 a
always@(posedge CCD_PIXCLK)* K& C1 ~+ Y0 r7 \
begin, z2 I3 y3 |! b3 [6 e6 A
rCCD_DATA <= CCD_DATA;
0 L* v# v' P% ]/ m8 ]9 FrCCD_LVAL <= CCD_LVAL;" Y$ V! h1 v% S: e# w, f7 k. D& [
rCCD_FVAL <= CCD_FVAL;2 u' x& B+ e7 X6 X6 w6 r0 h
if (!KEY[0]) begin- N7 L3 h+ W0 n7 T& o
mTCK <= TCK;
, ]7 p8 o0 {8 k/ v; ^( l2 M" M- S oRXD_DATA <= mRXD_DATA;
( n( U& @, l9 V- L3 m+ g7 C: \ oTXD_DATA <= mTXD_DATA;
1 y1 y, _- G5 h; B! j3 ] oRXD_Ready <= mRXD_Ready;
. o1 C) W' v2 F6 R2 S3 ] oTXD_Done <= mTXD_Done;
9 c+ [7 r, L1 \9 J oTXD_Start <= mTXD_Start;
: ~* M4 }% ~+ j5 u) i end
9 O3 x6 ?8 H7 ] j else begin
' h$ v6 ?& x0 Z+ W3 g! n mTCK <= ~TCK;
. A& h0 F: W" p" i end
: i8 }% _ }. `( D0 k3 {5 Bend
+ _. U: g3 f+ W O: b. D6 c* vassign mVGA_R = Read_DATA2[9:0];
6 q4 l; K% Q5 ]; O$ Lassign mVGA_G = {Read_DATA1[14:10],Read_DATA2[14:10]};" I. i. D: s$ i) w
assign mVGA_B = Read_DATA1[9:0];5 {! c+ k" `3 u* U. p
endmodule
n) w4 |0 G. w" s& S3 F" w* e5 h" V% v, d& Y& X8 b
以上是我自己修改過後的CCD+USB程式,CCD影像還是能成功的執行,但卻無法驅動USB程式下載影像檔
/ G' N2 G7 t3 a% v5 F; S1 Z先說明一下驅動的流程.....* R+ z( e# G; q! g! U
在驅動CCD程式之後,先按KEY[3]鍵,VGA螢幕就會出現CCD所攝取到的動態影像,# E! u8 n0 L7 X' u; O
待調整好CCD位置,按KEY[2]鍵,即可定格影像選取所欲下載的畫面...
- l% ]& k. Z' T7 J+ J只要再按KEY[3]鍵,即可回復原先的動態影像....
, O# S* J6 o6 E$ l4 t6 T# [; `而通常存取畫面都是再按KEY[2]鍵等影像定格後,再驅動USB程式.
! F+ {$ A; m+ y8 G$ v3 t% f- v8 G- h5 T將USB程式下載到FPGA之後,即可在CPLD裡使用一套程式download由USB傳回來的影像檔...
8 u0 m( g7 ?, s1 c等檔案download完成後,在開啟一個影像軟體打開下載後的檔案....$ X( d; i4 ?" k- a
即可得到CCD所攝取到的畫面........
* g. d* x6 C( \7 C N3 J! ~) M/ L以上是整各程式驅動的內容及流程..2 z ?) u# S0 @
請各位高手給予一些建議與討論....5 a% `4 ?8 c; J- w. X2 |
謝謝....... |
|