|
4#
樓主 |
發表於 2007-2-15 17:05:19
|
只看該作者
// CCD
8 d: M. X( h0 O5 jwire [9:0] CCD_DATA;' J' ?6 {5 Y; k, q: v
wire CCD_SDAT;- Y! c3 @' q A9 R- z, c" W
wire CCD_SCLK;
4 O- S. h# e6 Twire CCD_FLASH;
2 |; @4 x# W; D3 n" M9 d: zwire CCD_FVAL;
8 k9 y2 o3 L; R* n! \9 `wire CCD_LVAL;
6 o% e; w) r- n6 _/ u- N# Uwire CCD_PIXCLK;2 ` T, f/ t$ W% I3 d# S
reg CCD_MCLK; // CCD Master Clock+ h; j; B4 _7 ~4 I4 d
, Z2 Q; n" s5 Q+ j" o R! k
wire [15:0] Read_DATA1;/ G2 k! \/ I( l- n! i
wire [15:0] Read_DATA2;, n0 a4 ` F! _
wire VGA_CTRL_CLK;& ~' e: Z4 g4 @# N
wire AUD_CTRL_CLK; s: E3 m2 e Y; I9 v, k/ P
wire [9:0] mCCD_DATA; h$ N! G# F2 I& Q; s
wire mCCD_DVAL;9 B& a; n) J. {- O% t3 L
wire mCCD_DVAL_d;( E, D! \7 \3 j9 q9 Z0 k
wire [10:0] X_Cont;* q) P; s: w- J" d
wire [10:0] Y_Cont;
J; y$ [# Z# @2 }3 ewire [9:0] X_ADDR;1 ]+ L4 W4 r% T, [% t4 V. }
wire [31:0] Frame_Cont;
1 b4 `; T* p. a5 Y' Lwire [9:0] mCCD_R;
3 }% Z5 ?: \8 } V p& ?! Nwire [9:0] mCCD_G;
4 a3 T8 U1 w0 g ]wire [9:0] mCCD_B;
% E5 i5 S8 _5 }+ I9 ~" U, v( [" ~wire [9:0] mVGA_R;7 C, q7 M* n/ `; Q" P9 V% V9 v
wire [9:0] mVGA_G;
+ v. k& i. F8 [$ D, y! ?; H" c" awire [9:0] mVGA_B;
8 g; H, b: I6 v5 F+ iwire DLY_RST_0; P3 \6 Q; w3 f, f- ^6 B7 b
wire DLY_RST_1;1 E2 Q4 s7 E! G% L
wire DLY_RST_2;- K+ R3 t; k: X6 E# l
wire Read;
+ O; C: o, D+ O' f+ Mreg [9:0] rCCD_DATA;
) s$ d* _' V6 u; A2 `3 a. m, @8 V7 [reg rCCD_LVAL;
1 @* U' n( e# K3 vreg rCCD_FVAL;
- v8 a1 [% g7 V; v2 X( Q8 l7 y6 T7 h4 f1 L& B* @" a
// For Sensor 1
" f0 W }" W6 Zassign CCD_DATA[0] = GPIO_1[0];( n4 ?8 O6 q) _% p
assign CCD_DATA[1] = GPIO_1[1];
: D( `" P- q0 kassign CCD_DATA[2] = GPIO_1[5];
2 n; A- f- i; C! N. ^assign CCD_DATA[3] = GPIO_1[3];6 n7 o. | ~7 T/ v; V! e
assign CCD_DATA[4] = GPIO_1[2];) {) Y+ D" W, {5 x9 o
assign CCD_DATA[5] = GPIO_1[4];
7 D' y: ^2 c- r/ ?9 uassign CCD_DATA[6] = GPIO_1[6];# I k/ f+ j- X
assign CCD_DATA[7] = GPIO_1[7];
i X: T: K$ o" eassign CCD_DATA[8] = GPIO_1[8];; Y0 i: x- {$ [7 T! c- ]
assign CCD_DATA[9] = GPIO_1[9];
: J% N: y+ y0 U& I* l4 M6 A3 ~! rassign GPIO_1[11] = CCD_MCLK;! r9 b m1 _& ~# k; ]+ s
assign CCD_FVAL = GPIO_1[13];0 e$ r. C* ^% W9 S: }- L: s* U# V
assign CCD_LVAL = GPIO_1[12]; a+ K1 r! b$ `8 ?/ w
assign CCD_PIXCLK = GPIO_1[10];
0 k! u0 f! Z8 w! y
# ^) K$ Y7 h! Lassign LEDR = SW;
6 G& n! |1 P+ L' |assign LEDG = Y_Cont;
4 p# L' T: q' ]. Iassign VGA_CTRL_CLK= CCD_MCLK;
1 g; ^0 S9 J3 [: q& }& Yassign VGA_CLK = ~CCD_MCLK;1 ~) z5 I$ H- b2 C7 i6 M6 G# V
8 o! d/ O; u/ x4 X# c" u3 f
VGA_Controller u1 ( // Host Side7 G+ R" E: b: Y6 L: `
.oRequest(Read),
, ^- E$ [: z, `) m1 L' a1 b* f .iRed( DISP_R ), }) F# _7 h+ E: j
.iGreen( DISP_G ),3 f; ~ j5 x$ t6 P2 e
.iBlue( DISP_B ),
& A5 E7 l6 g. b! G$ G% ? // VGA Side! V0 k6 W+ t4 n g& c+ b& S
.oVGA_R(VGA_R),
5 [/ `" N% T7 F# Z# z3 W! t .oVGA_G(VGA_G),: M$ ?+ p y: R; u4 |0 @4 [
.oVGA_B(VGA_B),
+ j- s9 A- S" P1 O) T .oVGA_HS(VGA_HS),8 q+ O' l$ P' ^1 H7 t
.oVGA_VS(VGA_VS),
4 c/ y+ X: @. Z4 B' O- R .oVGA_SYNC(VGA_SYNC)," w$ d1 J1 _3 H5 b( p* k. x# q% X
.oVGA_BLANK(VGA_BLANK),0 e+ O" d' |7 O5 O$ W
// Control Signal1 i+ Y- y7 x6 h& c; a
.iCLK(VGA_CTRL_CLK),+ F9 i1 y) _" E0 ?/ F' V. T
.iRST_N(DLY_RST_2) );
' {0 N% W! l9 a8 l- u! T5 Q) Y3 ?$ _- E9 F% ]4 s5 ^
Reset_Delay u2 ( .iCLK(CLOCK_50),
* }/ {1 H, A2 ]4 p+ O+ v .iRST(KEY[0]),
6 i# g! s5 B' M4 m/ ~% z- { .oRST_0(DLY_RST_0),
- K# P7 }: r" @4 `: X5 x. r7 n .oRST_1(DLY_RST_1),
) A2 ^+ ~5 e) \ .oRST_2(DLY_RST_2) );% ^7 t8 R! T o
9 P6 E, T% {; S. o" W( uCCD_Capture u3 ( .oDATA(mCCD_DATA),& X) {% R# g0 G% A/ d1 j. D* V( a2 t* F
.oDVAL(mCCD_DVAL),
4 }3 t$ F7 I& a. ^$ p .oX_Cont(X_Cont),: b1 ]* Q- [0 }5 k' P' s
.oY_Cont(Y_Cont),
. E* Q$ A |/ j( S3 Q! t .oFrame_Cont(Frame_Cont),
9 u- v) v9 r: ]+ V .iDATA(rCCD_DATA),
0 A6 y7 b% H* v& A) F6 Z# a .iFVAL(rCCD_FVAL),) e. O5 ?; ?; v/ j8 t( i* y
.iLVAL(rCCD_LVAL),) I$ E) A0 T$ e G$ J; A: O
.iSTART(!KEY[3]),
. f1 N1 {0 ~$ G6 Q) d .iEND(!KEY[2]),
7 B* c0 |1 L: q6 h3 g4 h3 R .iCLK(CCD_PIXCLK),
{ G& G- e( |5 l5 P .iRST(DLY_RST_1) );9 u8 z3 p7 d0 j# h' t9 B
]1 `/ X/ j6 \& C8 V
RAW2RGB u4 ( .oRed(mCCD_R),8 Z/ I9 ?) _5 h6 c) {
.oGreen(mCCD_G),/ I7 i, O, n. c) d/ [
.oBlue(mCCD_B),( x% l7 Y. u$ r4 R( m
.oDVAL(mCCD_DVAL_d),
. V; g8 T7 Y3 z6 f: J& Q+ C .iX_Cont(X_Cont),% }( B4 B2 c _
.iY_Cont(Y_Cont),
& k, k4 e1 G# L1 l I' J .iDATA(mCCD_DATA),7 A9 m/ {" f! Y& ?
.iDVAL(mCCD_DVAL),
+ r0 r2 h# N4 s .iCLK(CCD_PIXCLK),3 B3 I5 O6 S! [, ~4 I U( P8 o6 l
.iRST(DLY_RST_1) );
' r9 y# G* S, s; a' S5 o& d; J% N9 Y$ F% _7 j$ P
SEG7_LUT_8 u5 ( .oSEG0(HEX0),.oSEG1(HEX1),
2 t9 h8 X- w8 y4 e( x; H9 m .oSEG2(HEX2),.oSEG3(HEX3),
6 m3 f3 X& s# a6 A .oSEG4(HEX4),.oSEG5(HEX5),
2 ^1 J7 V4 A: I! ~- Q, I% K/ h .oSEG6(HEX6),.oSEG7(HEX7),- c( s3 J. a9 Y
.iDIG(Frame_Cont) );+ ]% E+ B X. ^' f# S) S, ?
/ d4 ?' L. [- n0 \( ]
Sdram_Control_4Port u6 ( // HOST Side
0 x. l+ c4 L' ` f$ R .REF_CLK(CLOCK_50),- O$ g4 V* [* s2 c) A) i9 ?
.RESET_N(1'b1),
! B4 s. M* j5 L9 I // FIFO Write Side 1# t* Q/ s T' ?; W
.WR1_DATA( {mCCD_G[9:5],: |, T. U! Z9 \) O# ?( B; L* L
mCCD_B[9:0]}),
6 g. i* m% ?0 z .WR1(mCCD_DVAL_d),, K$ u: d2 d" w1 R" H0 Y
.WR1_ADDR(0),
$ l3 \/ y2 V' Q6 s .WR1_MAX_ADDR(640*512),6 m ^8 N# v8 F9 ~1 _) L
.WR1_LENGTH(9'h100),# B' m' v0 Y) H" n! E
.WR1_LOAD(!DLY_RST_0),
- I9 \* A$ ^3 @" M0 x .WR1_CLK(CCD_PIXCLK),+ L8 w' k- t) W7 m
// FIFO Write Side 2: c9 d* u; g5 R7 x2 o- d- [
.WR2_DATA( {mCCD_G[4:0],1 _" H( D: a- Y+ k3 \ h. w
mCCD_R[9:0]}),+ j4 q* G* {' }8 W2 g
.WR2(mCCD_DVAL_d),
' u$ K- p- H2 _ .WR2_ADDR(22'h100000),) c" ]- [/ L3 t+ D) j* _
.WR2_MAX_ADDR(22'h100000+640*512),$ G% D/ W) P9 k7 j9 [/ V% b; [
.WR2_LENGTH(9'h100),
: O2 e0 y7 \$ |( K3 V" S! O2 x .WR2_LOAD(!DLY_RST_0),! P, ]5 f9 O8 ]2 A* M8 m* r
.WR2_CLK(CCD_PIXCLK),
! p* F2 r, P/ ~, ^ // FIFO Read Side 1
3 Z% ^; S0 n. @9 x* } .RD1_DATA(Read_DATA1),
' _6 j2 a) Q, q! K$ u r .RD1(Read),- W+ c% A4 @$ ?8 z
.RD1_ADDR(640*16),5 G! V, x* p% e3 G9 X: H; X/ S) n
.RD1_MAX_ADDR(640*496),
; ^# ~( O) ]7 o, w .RD1_LENGTH(9'h100),) P V! b9 t w, w: x
.RD1_LOAD(!DLY_RST_0),
, n) v/ X5 u, x- z, @ .RD1_CLK(VGA_CTRL_CLK),3 `5 X J1 t1 A# ?' w$ ?, ^
// FIFO Read Side 2
1 k* i5 F9 l& ?/ Q .RD2_DATA(Read_DATA2),+ i; m! a0 y6 G+ c. y0 v6 P1 P& ?
.RD2(Read),
- g0 g' I$ N* X" F) K9 A$ D2 O2 o) P .RD2_ADDR(22'h100000+640*16),
: X) d" x; S- |/ d% h7 \9 m" S9 O .RD2_MAX_ADDR(22'h100000+640*496),
9 l$ R) L) B% R# v# J7 _( F .RD2_LENGTH(9'h100),( H# q) K9 J/ q7 z9 G7 K
.RD2_LOAD(!DLY_RST_0),
" R( {1 h0 R5 t$ O8 H5 U .RD2_CLK(VGA_CTRL_CLK),/ O* T9 E2 y) _& ~1 q3 U
// SDRAM Side
Z4 k. L9 i. W H$ i2 D5 M .SA(DRAM_ADDR),
) c, v3 L0 m/ a0 |* G2 J .BA({DRAM_BA_1,DRAM_BA_0}),! J7 ^: {/ l# b. a/ K2 `0 Z
.CS_N(DRAM_CS_N),, Q2 Z2 c" \) Y5 @- X2 ~4 P; r
.CKE(DRAM_CKE),5 J* z3 q8 n1 ^ h
.RAS_N(DRAM_RAS_N),
. _, C9 {/ B$ O .CAS_N(DRAM_CAS_N),
- e2 \- [ e- ^! U3 Z6 {' `1 I .WE_N(DRAM_WE_N),) c! B& z6 B6 a/ U
.DQ(DRAM_DQ),
* g; d/ i+ C# H& m2 Y .DQM({DRAM_UDQM,DRAM_LDQM}),- }# c5 _. r/ s4 L: @5 e5 L
.SDR_CLK(DRAM_CLK) );
4 X& i2 d8 d2 a# n0 A# K# Z+ U u8 h5 ~
I2C_CCD_Config u7 ( // Host Side) h7 b9 l) o0 v' F- A. P
.iCLK(CLOCK_50),2 x/ d$ m3 a% J1 `; x: N% P
.iRST_N(1'b1),
/ `* Q7 j) k) C5 N3 m .iExposure(16'h0600),- E4 X% l8 }- N; B$ w
// I2C Side
8 g5 y/ x5 O2 E1 j% @9 D .I2C_SCLK(GPIO_1[14]),5 o( \; |! A2 y- K1 |$ A% \
.I2C_SDAT(GPIO_1[15]) );
# `9 B. p) C9 \/////////////////////////////////////////////////////////////////////4 C2 |, Q c [4 V) h* R# j! g
wire [9:0] DISP_R;
" Z- t- s8 u! ~: v' z# jwire [9:0] DISP_G;: [3 `: O* w; t! |/ Q, I
wire [9:0] DISP_B;
# Z" f1 B# X2 V/ ]; I. f, X* X
4 Z! b" E' z) K& n; R// To Display
1 s% o% T# q% @8 cassign DISP_R = SW[17] ? mVGA_R : // Red4 F9 g2 L( [ `. S; v
SW[16] ? mVGA_G : // Green
0 |8 ^0 @1 h6 T! u9 E3 A9 f SW[15] ? mVGA_B : // Blue& R" I9 x7 r( i# l: s
mVGA_R ; // Color
. r$ z9 e- ^1 X' k7 e+ `% W! ?) [assign DISP_G = SW[17] ? mVGA_R : // Red
. k0 s. E+ ]( V6 T SW[16] ? mVGA_G : // Green
* G8 b' n) t' b$ g SW[15] ? mVGA_B : // Blue
& w: m( b' E6 E* ] mVGA_G ; // Color
" l: n% R# `, o' {assign DISP_B = SW[17] ? mVGA_R : // Red( S ^ G, L# O: c3 l
SW[16] ? mVGA_G : // Green! u6 c& Y6 z5 n) a& }. H/ \* n
SW[15] ? mVGA_B : // Blue }! m9 G2 y+ f( n# A
mVGA_B ; // Color
7 r `+ I$ N7 z* \2 o3 \# {* z& Y/ t9 l$ q
// SDRAM
9 H' N H; c9 d7 I" Z9 |8 owire [21:0] mSD_ADDR;
# M3 z) m( v; q! v8 @wire [15:0] mSD2RS_DATA,mRS2SD_DATA;# R( L1 P& Z: M1 T. q& H6 r( w
wire mSD_WR,mSD_RD,mSD_Done;
2 e5 J- A' P2 w. F: C* Z// SRAM Async Port7 }' D$ {5 B3 N. v3 B% I+ O
wire [15:0] mSRAM_VGA_DATA;- o5 ~! A: [( u2 k! r
wire DLY_RST;
5 J5 h1 \; K$ X9 W4 u+ O$ E' f) V( k( r- c9 C
// VGA- W( S7 L x# K: m m
wire [9:0] mOSD_R;: [- S5 i" Y3 R% ]3 y0 [" n' l; a
wire [9:0] mOSD_G;
5 w: ^6 E/ e5 P& |& c, rwire [9:0] mOSD_B;' q. h! `. m$ [+ q
wire [9:0] mVIN_R;
5 ]: b" Q# c$ D2 d; J4 k5 qwire [9:0] mVIN_G;' k6 X7 S3 w/ X
wire [9:0] mVIN_B;( ]; H K! S, O' O+ D9 g
wire [19:0] mVGA_ADDR;
# a- ]; \5 ]" o! `! pwire [9:0] mCursor_X;5 G6 m, j+ T; m
wire [9:0] mCursor_Y;
* ?+ z9 Y+ \4 `1 Q( p- \wire [9:0] mCursor_R;0 K/ A: I; A" _" K1 O( q& {
wire [9:0] mCursor_G;2 ?% d1 {7 j! y% x2 Y- c/ H" t3 u
wire [9:0] mCursor_B;. m3 E$ R* c; P3 \
wire [1:0] mOSD_CUR_EN;
( e7 Z/ q8 C4 f; Y* o// Async Port Select- w0 a) N: T- i r/ C/ }
wire [2:0] mSDR_Select;
1 w! q+ p' i. E* T5 b4 c// External IO6 k# @ G! D9 o
wire [7:0] mExt_IO;
; h) y& n) }& _) @7 z! P// SDRAM Async Port8 L) F) t* c9 r! ?
wire [15:0] mSDR_AS_DATAOUT_1;; ^4 _+ Y& c9 p4 q& Q
wire [15:0] mSDR_AS_DATAOUT_2;. ]5 @; h# ~. G: r6 D& t
wire [15:0] mSDR_AS_DATAOUT_3;
, Q5 Y( V# Q6 x3 F2 y2 Y' g, ^% B+ Kwire [21:0] mSDR_AS_ADDR_1 = 0;7 K2 a) \$ o4 n5 X, d. W
wire [21:0] mSDR_AS_ADDR_2 = 0;
g% ]9 \0 T2 t- Q% Swire [21:0] mSDR_AS_ADDR_3 = 0;
1 u S* k# }6 s, K8 B- r% Cwire [15:0] mSDR_AS_DATAIN_1= 0;
% \! `- ?2 |; G% K5 pwire [15:0] mSDR_AS_DATAIN_2= 0;
$ r4 }, x0 W/ p# V: h! Hwire [15:0] mSDR_AS_DATAIN_3= 0;- V0 o: X) Z" c5 z9 b# p0 j
wire mSDR_AS_WR_n_1 = 0;2 [# Y- ^: ?& ]0 P( E
wire mSDR_AS_WR_n_2 = 0;3 P% _6 P8 [' d- Q& o% l! }( `
wire mSDR_AS_WR_n_3 = 0;/ M- K. U! e3 l& T
// USB JTAG" _* ~2 e; l0 m, l0 q
wire TDI;
5 P0 ^. C6 O% b5 C! R& y: Zwire [7:0] mRXD_DATA,mTXD_DATA;
j2 C: k2 w4 l: f0 ]2 uwire mRXD_Ready,mTXD_Done,mTXD_Start;
: e' z0 l4 |& d0 V2 p5 Ireg mTCK;
& \! |& R" }# q6 v, f( B# g! ~reg TDO;
( l9 ]9 k3 K$ c( |! Greg [7:0] oRXD_DATA,oTXD_DATA;
f4 j* I7 `; o$ vreg oRXD_Ready,oTXD_Done,oTXD_Start;
. J( a8 \9 |$ ^ D. G2 v// All inout port turn to tri-state
7 s/ `0 @+ m3 A6 Massign OTG_DATA = 16'hzzzz;# ~6 P6 S; h* S3 I; _
assign SD_DAT = 1'bz;
+ j: ?7 g1 X; ]( _, h+ ]# {assign GPIO_1 = 36'hzzzzzzzzz;
0 Q; U0 Z; U* x// Audio
: S( V5 U" z" Z/ Passign AUD_ADCLRCK = AUD_DACLRCK;
$ U' X4 H5 `7 d; h" Z6 zassign AUD_XCK = AUD_CTRL_CLK;5 P) ]' U" X: b5 V
( l9 M6 ?+ z# Q- d
always@(posedge CLOCK_50) CCD_MCLK <= ~CCD_MCLK; n! O3 l/ s( d! P
1 I8 N/ j/ n7 n
always@(posedge CCD_PIXCLK); [+ j3 C' T2 o/ M8 m1 j' X/ J
begin+ w( J* X6 c, d( g. a7 D
rCCD_DATA <= CCD_DATA;
. k0 L2 n2 S2 \$ p V7 I! _rCCD_LVAL <= CCD_LVAL;
7 U0 f2 j0 j8 p2 p& \1 krCCD_FVAL <= CCD_FVAL;/ H, v v! P6 p8 I. P. u9 _
if (!KEY[0]) begin, d- O- z0 {; G9 P2 S8 v: f
mTCK <= TCK;! U9 U# D- v7 `* v$ R* w; u5 i
oRXD_DATA <= mRXD_DATA;
" n- Z) m# h( u9 E6 L$ k5 f oTXD_DATA <= mTXD_DATA;9 e. O: v+ k5 w: ]" e! [
oRXD_Ready <= mRXD_Ready;
7 U* @5 B! a( i, s( b# @ oTXD_Done <= mTXD_Done;
# A( M! |; @" y7 h& a; E" D oTXD_Start <= mTXD_Start;( T% {: n( I% a- j, B- P
end
5 N) V! W* b5 L else begin
( n. G/ C1 @5 v3 T& d6 J2 }5 Y! A mTCK <= ~TCK;8 J1 L" H7 q2 b( c! _ g u
end
9 m$ o; N: l4 Y* J% ~end0 Z/ S4 x, z$ `
assign mVGA_R = Read_DATA2[9:0];- h& f3 ]% u" k; t3 s
assign mVGA_G = {Read_DATA1[14:10],Read_DATA2[14:10]};
$ D; z4 [$ M/ s6 }+ X7 x. S! I) s* Y6 Aassign mVGA_B = Read_DATA1[9:0];/ e* Q1 |' R' }# D: r' E& Y) j
endmodule
3 k) J/ m5 W8 H& d' ]
g1 \6 |9 H! K/ f- U以上是我自己修改過後的CCD+USB程式,CCD影像還是能成功的執行,但卻無法驅動USB程式下載影像檔7 u# a" X! z6 `3 L7 [
先說明一下驅動的流程.....
' G9 _( }/ q6 }. i) \在驅動CCD程式之後,先按KEY[3]鍵,VGA螢幕就會出現CCD所攝取到的動態影像,
3 `: g1 Q! F8 c- N待調整好CCD位置,按KEY[2]鍵,即可定格影像選取所欲下載的畫面...
, k- z. ?5 \# S' |1 f- l/ h只要再按KEY[3]鍵,即可回復原先的動態影像....
N* R' @, @) u8 h" ^( L而通常存取畫面都是再按KEY[2]鍵等影像定格後,再驅動USB程式.
' q# |* A. F6 p將USB程式下載到FPGA之後,即可在CPLD裡使用一套程式download由USB傳回來的影像檔...
' H3 u+ J$ E7 x7 l1 Y& [+ B# q等檔案download完成後,在開啟一個影像軟體打開下載後的檔案....# Z2 f5 Q' K | v$ g$ l
即可得到CCD所攝取到的畫面........
1 V1 d& u, f2 H( P( z9 O以上是整各程式驅動的內容及流程..& B% T8 W5 w3 B3 L
請各位高手給予一些建議與討論....
4 q; b0 a2 g, s _( T r/ C2 M謝謝....... |
|