|
4#
樓主 |
發表於 2007-2-15 17:05:19
|
只看該作者
// CCD6 O& x; P4 {# W4 E
wire [9:0] CCD_DATA;
0 l0 g- H! {& Z# {( `/ awire CCD_SDAT;, ^; b- _5 h1 _* I
wire CCD_SCLK;( Y, p# D2 I m* e5 B
wire CCD_FLASH;1 m; g/ n- W. d) b
wire CCD_FVAL;- [7 j9 E% ]* v/ T
wire CCD_LVAL;5 x( D, S9 K5 {8 ^ _* _
wire CCD_PIXCLK; D; P$ H" j' s9 e+ N+ v
reg CCD_MCLK; // CCD Master Clock
' G% h0 ]4 R2 e" |5 h: e
& u3 S1 Y' b$ ywire [15:0] Read_DATA1;
/ c; Y, I4 `/ [5 ?8 B7 [2 y( Iwire [15:0] Read_DATA2;
3 ? R" I9 y; E" R. dwire VGA_CTRL_CLK;
& S9 Z* {8 Q1 `! t* d- h+ e' H1 mwire AUD_CTRL_CLK;0 s4 a8 q2 S8 M& Y5 i3 m h. `
wire [9:0] mCCD_DATA;7 i! x* c0 J/ H N& q9 V3 @# Q6 C/ l( h
wire mCCD_DVAL; L0 j4 i* v2 }! C/ r( o
wire mCCD_DVAL_d;
4 j$ b4 ?) S Y& R* R% s1 I8 qwire [10:0] X_Cont;
8 F& U3 A2 x- Bwire [10:0] Y_Cont;
5 P' t6 y1 \3 d/ v' x) E) [wire [9:0] X_ADDR;
; |% S/ |1 f; `! }wire [31:0] Frame_Cont;
# y) c Z1 x3 ~ vwire [9:0] mCCD_R;
- \7 i* C. B$ ]5 X! U1 iwire [9:0] mCCD_G;
3 W0 O: |! x1 n- ewire [9:0] mCCD_B;
* V5 W4 ?) ?) Kwire [9:0] mVGA_R;
' }# J- N6 n( c* }wire [9:0] mVGA_G;/ ^# A1 k3 M7 `0 U# j
wire [9:0] mVGA_B;
5 O! W, s& V M% Z# Iwire DLY_RST_0;
, B4 B8 i$ s- o; {wire DLY_RST_1;, K% c f5 q: d6 B: o
wire DLY_RST_2;, w0 |$ p& B" ]! Z. H
wire Read;. d; E8 M# S. h/ b
reg [9:0] rCCD_DATA;% [+ P* o- l( p+ M1 v* k. \8 t
reg rCCD_LVAL;3 X1 Z4 F+ {4 M9 |! p
reg rCCD_FVAL;
( v$ ~9 q) I; B! z' o3 f2 q
. T" b1 L# w; e1 d d// For Sensor 1- n0 N6 ^; S. S5 {2 A! y4 p" K) c
assign CCD_DATA[0] = GPIO_1[0];" L, C+ R6 [) P; H
assign CCD_DATA[1] = GPIO_1[1];% c' g6 `: c5 g9 d6 ~9 @
assign CCD_DATA[2] = GPIO_1[5];
6 O' w: t; h1 l* t7 hassign CCD_DATA[3] = GPIO_1[3];
" P- T3 r6 q5 F3 ]- I1 m" kassign CCD_DATA[4] = GPIO_1[2];
4 n4 B2 j( u9 H/ W/ @( wassign CCD_DATA[5] = GPIO_1[4];8 i4 T5 x; X- g2 e# C% |9 `
assign CCD_DATA[6] = GPIO_1[6];! Z6 |) |% @3 h* O; X c, _" r
assign CCD_DATA[7] = GPIO_1[7];" S- s# {2 H0 @# \$ R: k
assign CCD_DATA[8] = GPIO_1[8];
" o% W' W! Z& c+ `assign CCD_DATA[9] = GPIO_1[9];3 E3 R+ E1 _' [% |/ t8 P% u1 P: \
assign GPIO_1[11] = CCD_MCLK;& X* E3 V' c1 _$ F
assign CCD_FVAL = GPIO_1[13];
1 a; P2 G5 G/ q9 A) R. aassign CCD_LVAL = GPIO_1[12];9 B$ J/ ]' W3 a0 H
assign CCD_PIXCLK = GPIO_1[10];2 l8 a! d" z, w5 m$ w+ c
6 @. F/ h$ d4 z
assign LEDR = SW;
, a3 A" D) j9 J( K" h q6 l4 yassign LEDG = Y_Cont;
* T) C: Y+ m& [7 c* y2 e" \assign VGA_CTRL_CLK= CCD_MCLK;& _: |% b" w5 A! ~
assign VGA_CLK = ~CCD_MCLK;( u5 `% g; g% O4 P" o
' P7 F$ X$ S- `- v: h2 d
VGA_Controller u1 ( // Host Side
+ z) A* [* @4 T4 t- c .oRequest(Read),, v7 F% M8 m" _
.iRed( DISP_R ),
/ o* Z. X! c) Q' V7 Y .iGreen( DISP_G ),
" c9 \$ P U; m .iBlue( DISP_B ),
* f+ z4 _$ y, j! N6 R" w // VGA Side' P( X% j2 Q0 W; b# O6 C# j2 b
.oVGA_R(VGA_R),
- \/ \ k% E$ K) ?: B0 T .oVGA_G(VGA_G),
4 W5 P& |) l' J$ s1 r/ B& Y .oVGA_B(VGA_B),
! X2 U* ]3 e! k& z .oVGA_HS(VGA_HS),
- f2 w3 l: n* A* E4 u( i$ x5 D* }2 h3 S .oVGA_VS(VGA_VS),$ b7 o; T, m3 f- M. s
.oVGA_SYNC(VGA_SYNC),4 I$ K6 n* J3 o: y, G# l
.oVGA_BLANK(VGA_BLANK),
' A8 n% R0 X2 A4 R8 k2 E // Control Signal$ x# E/ k7 E: `2 Z3 y+ V
.iCLK(VGA_CTRL_CLK),) n1 [' Q1 u4 ^2 v% s
.iRST_N(DLY_RST_2) );9 k& D2 }& j, u2 _8 ]% U3 t
# @& | M! e; J, V- t/ @Reset_Delay u2 ( .iCLK(CLOCK_50),
$ J1 ] s4 G9 d& E* n: A& l .iRST(KEY[0]),
' ^- J8 Y/ w* y% `$ C: U .oRST_0(DLY_RST_0),2 ]/ i: Z, O7 @8 H* W
.oRST_1(DLY_RST_1),: b8 `0 P( Z8 R. Z) h& o
.oRST_2(DLY_RST_2) );- g* p' H7 G, p- g+ b
. X4 [- }2 V$ @% R/ p: Q7 k
CCD_Capture u3 ( .oDATA(mCCD_DATA),
8 J5 ^% R, f( Y+ G2 ? .oDVAL(mCCD_DVAL),* [$ [$ Y9 D& w% @
.oX_Cont(X_Cont),
' q) [! o4 G4 Y .oY_Cont(Y_Cont),$ c# G5 l3 w; a6 S
.oFrame_Cont(Frame_Cont),
W! {/ e/ U1 M% L+ Z .iDATA(rCCD_DATA),9 C2 I- `3 z5 G$ M5 {4 _
.iFVAL(rCCD_FVAL),
; O$ ~) a; _/ U# _ .iLVAL(rCCD_LVAL)," _/ {) a) M9 V7 [- x
.iSTART(!KEY[3]), p* R, t* }3 `- F' r; i
.iEND(!KEY[2]),
4 s$ r5 u3 I/ i0 y, Y .iCLK(CCD_PIXCLK),* ?/ {( X) [; U. ?
.iRST(DLY_RST_1) );
: d) K, o* k# h* N* ~* t& N1 q
+ Y* ?& R* f b0 z. k! sRAW2RGB u4 ( .oRed(mCCD_R),' | e/ H) |; _
.oGreen(mCCD_G),
- _! F+ b$ F& A- S% ]. d$ E: t8 { .oBlue(mCCD_B),
$ u1 z d0 q: I8 W. v .oDVAL(mCCD_DVAL_d), g I$ a7 s# W( ^1 g$ @) H
.iX_Cont(X_Cont),; u/ I$ Q! T; L- d0 i) K
.iY_Cont(Y_Cont),% f+ n1 E0 o( a- l G4 O8 B! u
.iDATA(mCCD_DATA),8 O% S [ [( m' K) N6 _
.iDVAL(mCCD_DVAL),
' c4 R- B+ y- T" x ]2 o .iCLK(CCD_PIXCLK),
5 N. O+ E" t" n+ R. F+ D .iRST(DLY_RST_1) );
- h3 y- @) A; g/ i2 e* S4 {, _. w$ K/ s5 y* K
SEG7_LUT_8 u5 ( .oSEG0(HEX0),.oSEG1(HEX1), S9 I. h% b+ A
.oSEG2(HEX2),.oSEG3(HEX3),0 a9 L: t! S4 ^! Z
.oSEG4(HEX4),.oSEG5(HEX5),& G2 S% f! x. o$ j
.oSEG6(HEX6),.oSEG7(HEX7),' b8 P$ e6 i# G- a8 P! d5 h
.iDIG(Frame_Cont) );
E& A+ ]# }* u, l$ d
1 o; l( ~* M% f" ^. X! V, Z5 KSdram_Control_4Port u6 ( // HOST Side3 t) J5 Z& X, A7 d7 ^
.REF_CLK(CLOCK_50),1 W/ p1 W, D1 @% }0 ?
.RESET_N(1'b1),
0 f3 [1 k0 Q) ?- B& ] // FIFO Write Side 1' M Y+ U; {" }$ G @4 k: h
.WR1_DATA( {mCCD_G[9:5],
9 j+ L' X: S: ?9 J0 ^ mCCD_B[9:0]}),
' h+ {( w' V& K1 B( b" c .WR1(mCCD_DVAL_d),
5 Z- m& p! D* H7 G6 D' U( p .WR1_ADDR(0),+ q9 ]+ j& R1 H( {1 t$ N p
.WR1_MAX_ADDR(640*512),
! i! A% O3 y: j) L3 V7 z$ i .WR1_LENGTH(9'h100),2 f0 S& {# j. T% b& ?2 R
.WR1_LOAD(!DLY_RST_0),
7 @1 }9 c. R5 y1 I* n .WR1_CLK(CCD_PIXCLK),) z) w! w& m1 P, W! R
// FIFO Write Side 2
$ ~) D! a6 f( y. {1 | .WR2_DATA( {mCCD_G[4:0],
$ [0 t- D* J& ` mCCD_R[9:0]}),
, y" [( a( `" P8 E! ^ .WR2(mCCD_DVAL_d),
_/ `: y& R4 X" J" K# `; }3 {- C .WR2_ADDR(22'h100000), ?) ]# |* K" v, ?" \+ \2 h
.WR2_MAX_ADDR(22'h100000+640*512),& o' ^' Q, [ B5 _. \
.WR2_LENGTH(9'h100),# Q! [8 B0 v/ R
.WR2_LOAD(!DLY_RST_0),
( K$ D; z4 @, W1 d I .WR2_CLK(CCD_PIXCLK),
) D" f( h% A- t v3 i // FIFO Read Side 1# v; ^3 [4 ~' f( B& `
.RD1_DATA(Read_DATA1),
5 n" R8 j+ j% {4 Y* q% L .RD1(Read),
, I6 A) V: c6 J& u6 ^ .RD1_ADDR(640*16),
, ?+ x1 H X, z9 f5 {2 P5 | .RD1_MAX_ADDR(640*496),
( v* O, B0 x1 p, C- h .RD1_LENGTH(9'h100),
: C ?, O& b% [; T+ {" M .RD1_LOAD(!DLY_RST_0),
- @! R2 G& D% D .RD1_CLK(VGA_CTRL_CLK),* Q2 Z+ O% H( f5 C9 @% b8 S
// FIFO Read Side 2
) L1 _; X5 ~0 R1 |# s) _ .RD2_DATA(Read_DATA2),
( ?1 K& y' B) D# @' g- p .RD2(Read),5 Y* [3 V d: P) z+ W8 E8 O
.RD2_ADDR(22'h100000+640*16),- _# S: _ N' }/ o0 T
.RD2_MAX_ADDR(22'h100000+640*496),$ D+ q( X C7 k( @, n4 U
.RD2_LENGTH(9'h100),, G* U; q4 p; x9 Z8 {& Z$ l& U& z
.RD2_LOAD(!DLY_RST_0),
* Y" z0 L0 s! J0 n* Y) @ .RD2_CLK(VGA_CTRL_CLK),
+ h* A& t% U; J // SDRAM Side
5 w$ b, {+ j. ?) P/ v# F! z j7 H .SA(DRAM_ADDR),, d% x& r9 [7 d( W% G4 x
.BA({DRAM_BA_1,DRAM_BA_0}),* S3 D% n. M& h; h% R
.CS_N(DRAM_CS_N),* `9 ]) B8 R0 z5 Y
.CKE(DRAM_CKE),
+ P- w( ]$ K9 y0 N .RAS_N(DRAM_RAS_N),+ w& ~( [0 X5 t& i4 P
.CAS_N(DRAM_CAS_N),
3 a' y j- I% n! _5 ^ .WE_N(DRAM_WE_N),2 ^. G# m6 A8 y, [9 Y& u
.DQ(DRAM_DQ),
9 H7 `/ b; o' D' C% T .DQM({DRAM_UDQM,DRAM_LDQM}),% p* }% T! W# f* a& ?1 ^% v
.SDR_CLK(DRAM_CLK) );$ r9 K( A4 x8 @5 d
: ~$ w6 e7 X4 LI2C_CCD_Config u7 ( // Host Side
$ ^% w# i- t. |$ S5 A5 u .iCLK(CLOCK_50),
; v) K2 s8 |2 @3 d9 V .iRST_N(1'b1),, U4 N+ d V# j- ^2 T
.iExposure(16'h0600),
$ \6 `5 x' I- R& ^ // I2C Side
6 I+ y- B" j) K' G; t7 o7 R .I2C_SCLK(GPIO_1[14]),
$ }4 @$ _7 l4 W+ y: Z0 X( Y .I2C_SDAT(GPIO_1[15]) );
) V3 r0 d- D. a8 {5 S: L4 U. o" U/////////////////////////////////////////////////////////////////////& S, E3 R0 L: s( P& I8 t
wire [9:0] DISP_R;# Y. o& x/ P) e+ d, S2 b8 C
wire [9:0] DISP_G;, W5 c$ O- }0 P; j5 y' _% G& G
wire [9:0] DISP_B;
! \# L7 y* i3 T, E- _9 f' H% t, k* u% p
// To Display* @! [$ K; Q6 L# A+ D
assign DISP_R = SW[17] ? mVGA_R : // Red
, s5 y1 X) `- {. }# I SW[16] ? mVGA_G : // Green
1 Q5 r8 ^8 b Y' [% g7 X SW[15] ? mVGA_B : // Blue
. x1 W# c p x2 A" Y mVGA_R ; // Color, o" A; N0 ?. o M! E; R
assign DISP_G = SW[17] ? mVGA_R : // Red
# ]& \/ l3 e' y5 I SW[16] ? mVGA_G : // Green
* x. V+ y0 {3 E2 \* Z" H3 P SW[15] ? mVGA_B : // Blue
0 \3 w9 A3 \9 a* i M+ ~ mVGA_G ; // Color
# l7 l2 x) x, g5 l8 B. c" _assign DISP_B = SW[17] ? mVGA_R : // Red2 ]% {" c, p8 V8 r8 Z* T6 `
SW[16] ? mVGA_G : // Green/ C) O/ D. _% F/ \/ H. Z
SW[15] ? mVGA_B : // Blue0 e$ R: g, t* B) E F3 F! s( f
mVGA_B ; // Color# c4 |4 \8 V5 @& C& M+ [- t: a
( F& Q/ Q# w" d
// SDRAM
- Y, Y% l0 m# ]wire [21:0] mSD_ADDR;: D4 L: v8 s! l
wire [15:0] mSD2RS_DATA,mRS2SD_DATA;
+ w" ^" A: ?* {! m: Q! g$ H @wire mSD_WR,mSD_RD,mSD_Done;
- }) x- C- I3 e s- y// SRAM Async Port
$ B8 E. h3 a+ X+ swire [15:0] mSRAM_VGA_DATA;- K0 E. O& i6 @( r" x; o
wire DLY_RST;# `% O- y5 E/ x. O$ G( j
* | K/ b9 {, t, {# w0 S// VGA
" q! J2 Z d- c+ i1 p* u3 ?wire [9:0] mOSD_R;
1 p# `' c2 y: U3 \wire [9:0] mOSD_G;
0 v1 H% e, j6 N, L. o* L( }& Cwire [9:0] mOSD_B;0 g; }6 g/ ~' N. K- p
wire [9:0] mVIN_R;2 m& Y& H# O$ U2 {) ?, I7 J
wire [9:0] mVIN_G;
' E$ `2 Z5 ~! S- M s% Q- kwire [9:0] mVIN_B; o" g/ j" N) M0 j- @# E* D
wire [19:0] mVGA_ADDR;. B- Y( |- }0 G
wire [9:0] mCursor_X;
* h' Z; }* l. O* U7 G8 y7 m8 @8 iwire [9:0] mCursor_Y;
) [" ?7 J$ j2 W8 C2 gwire [9:0] mCursor_R;
7 R% k+ Q1 H% f1 Twire [9:0] mCursor_G;) M. Z+ M! z9 ~# j& X
wire [9:0] mCursor_B;. N C) u8 T$ R. g. i- @
wire [1:0] mOSD_CUR_EN;2 R* E7 M, v0 }# @! [
// Async Port Select
5 e' a# k, S! p$ |/ q/ ^wire [2:0] mSDR_Select;
' M9 l: {4 N& c( i; y' t+ q// External IO: t- i6 T" O% D7 k; T' i1 V
wire [7:0] mExt_IO;
9 F6 ] a, m+ J _! c// SDRAM Async Port
1 v$ J- ` e0 ~wire [15:0] mSDR_AS_DATAOUT_1;
t9 t+ f: g" I$ Hwire [15:0] mSDR_AS_DATAOUT_2;
& W, I" |% o/ v6 w" Dwire [15:0] mSDR_AS_DATAOUT_3;
6 x1 d6 S6 _" n2 X2 Y' _. jwire [21:0] mSDR_AS_ADDR_1 = 0;
* H4 u! e- g' ]6 t# J; i1 R& Pwire [21:0] mSDR_AS_ADDR_2 = 0;
* X. h O; ~! J& S0 y! Xwire [21:0] mSDR_AS_ADDR_3 = 0;
5 \' U* n5 p( _/ jwire [15:0] mSDR_AS_DATAIN_1= 0;
: X7 L$ s5 i0 L4 V' a! C! nwire [15:0] mSDR_AS_DATAIN_2= 0;
+ O, V1 Y/ G" M8 n# O( m5 Zwire [15:0] mSDR_AS_DATAIN_3= 0;8 R5 ?1 Q1 L3 Z
wire mSDR_AS_WR_n_1 = 0;, r, N p x* c( S0 t
wire mSDR_AS_WR_n_2 = 0;2 \# x1 F0 n. n+ t5 j
wire mSDR_AS_WR_n_3 = 0;: ?/ N* R9 P8 z+ r N0 x
// USB JTAG" ?$ _4 \# h( ]9 W6 p8 f0 b- b
wire TDI;
* ~3 Z' K; l A. twire [7:0] mRXD_DATA,mTXD_DATA;
" ~1 m9 M& L p& i8 ?wire mRXD_Ready,mTXD_Done,mTXD_Start;
2 x F$ T8 t2 T$ U- N6 nreg mTCK;8 s: w" w/ r/ d3 E/ B0 W. ^
reg TDO;
% P3 X3 J7 Z, H% ?3 D: l% _( v" yreg [7:0] oRXD_DATA,oTXD_DATA;5 Z5 n2 l* |) T2 u9 G; J& o$ G
reg oRXD_Ready,oTXD_Done,oTXD_Start;5 C$ H7 S6 Z' n- @5 z0 [
// All inout port turn to tri-state1 M8 i8 F6 B5 I+ h- `9 ~# Z
assign OTG_DATA = 16'hzzzz;
/ T8 U: y* Q* ?: L4 Uassign SD_DAT = 1'bz;( w9 ~! j* T% N
assign GPIO_1 = 36'hzzzzzzzzz;
6 H6 n! W8 Z* K1 [( i1 K* B// Audio1 i: Y* }9 s" Q
assign AUD_ADCLRCK = AUD_DACLRCK;
" `7 f. S0 P# U, P9 j9 \assign AUD_XCK = AUD_CTRL_CLK;. {& D7 h9 T Q7 k. @
! ^3 a4 U. X/ jalways@(posedge CLOCK_50) CCD_MCLK <= ~CCD_MCLK;& }9 r4 L+ y0 n* @! h" h
0 \1 I+ w; p& y" W- e d: T% G) V* Q
always@(posedge CCD_PIXCLK)" M" t2 L- Y3 e3 j: e) u+ r
begin
0 f n/ Z! ]4 x, ^- k8 NrCCD_DATA <= CCD_DATA;
- M2 n4 o8 d- ^" CrCCD_LVAL <= CCD_LVAL;) y c* I b0 o: E3 l1 E7 l. Q
rCCD_FVAL <= CCD_FVAL;
, R3 s+ b; G6 a4 B7 [% Y; Q if (!KEY[0]) begin
- T$ z1 D( ^8 V6 G$ Y* r7 E8 I8 S( c mTCK <= TCK;
& j! _) }0 D3 J% I& u7 f7 H5 k oRXD_DATA <= mRXD_DATA;( j! {: t4 n/ u' Y/ H# g
oTXD_DATA <= mTXD_DATA;
8 r1 Y/ @4 ~5 F3 }! e oRXD_Ready <= mRXD_Ready;
( S+ ~+ f0 {9 H- ~! I! X oTXD_Done <= mTXD_Done;9 X# Z6 m" J9 j `
oTXD_Start <= mTXD_Start;7 o6 ]: R4 o! A" j4 n
end
. J: S& B2 o( R9 E+ r; B else begin & a6 Z& N* ]3 d1 ?
mTCK <= ~TCK;
: @9 V: e! G. F# J: g4 |4 f end
/ P* N3 H7 u( X7 V0 @end/ P6 y7 a5 x# S8 z4 w
assign mVGA_R = Read_DATA2[9:0];
1 S/ @* c, F8 `; [assign mVGA_G = {Read_DATA1[14:10],Read_DATA2[14:10]};
& C, S, U5 R3 Q. M% }1 Qassign mVGA_B = Read_DATA1[9:0];
8 R; D5 a! e& Y2 y: o8 Wendmodule
j+ l! O9 D) z6 T1 W" ~/ `2 e/ R5 \
以上是我自己修改過後的CCD+USB程式,CCD影像還是能成功的執行,但卻無法驅動USB程式下載影像檔
5 a. N0 U7 h; U7 T+ a. ~3 T先說明一下驅動的流程.....2 @9 E/ `! b0 |- e
在驅動CCD程式之後,先按KEY[3]鍵,VGA螢幕就會出現CCD所攝取到的動態影像,! ]1 K( X2 w- v7 L
待調整好CCD位置,按KEY[2]鍵,即可定格影像選取所欲下載的畫面...5 i5 I8 t$ M' E% F3 w
只要再按KEY[3]鍵,即可回復原先的動態影像....
9 f# r' b: |% Q3 X3 _* {# s& [. d而通常存取畫面都是再按KEY[2]鍵等影像定格後,再驅動USB程式.; }% O6 o6 j3 f$ H0 W
將USB程式下載到FPGA之後,即可在CPLD裡使用一套程式download由USB傳回來的影像檔...
+ k3 Q' R6 P$ s等檔案download完成後,在開啟一個影像軟體打開下載後的檔案....
% G0 w4 ?% D4 L$ e即可得到CCD所攝取到的畫面........
0 O2 O! ]& I3 F! ~. p* B; Y+ s以上是整各程式驅動的內容及流程..7 h. Z* x7 x, T+ n
請各位高手給予一些建議與討論....
2 F7 n+ ^ M8 r0 Q" J( @謝謝....... |
|