|
4#
樓主 |
發表於 2007-2-15 17:05:19
|
只看該作者
// CCD
8 E/ p! u$ o$ r) \; g) I0 dwire [9:0] CCD_DATA;
& T. E" _* q/ p2 kwire CCD_SDAT;) c& O. s4 O( e/ i- \. b
wire CCD_SCLK;5 W$ T; O7 U, D/ F( @- R
wire CCD_FLASH;
2 [' T8 L/ A; `( |( b; v" {& v- s' Qwire CCD_FVAL;/ r- j: B$ z7 \8 V
wire CCD_LVAL;
% x7 Y- c2 [% [; ?. n; _+ e swire CCD_PIXCLK;
- q1 A. W& c9 V) Y! l8 |7 _reg CCD_MCLK; // CCD Master Clock
2 G6 K, K* P" ]2 i
; C9 M) m; i- u u" H5 Ywire [15:0] Read_DATA1;
L9 W0 D1 b! t1 X0 U/ N. Kwire [15:0] Read_DATA2;
' m$ E+ f$ K. s# U% C2 kwire VGA_CTRL_CLK;& F/ x: z; w: s! v
wire AUD_CTRL_CLK;
9 ^9 V- X7 c& q: y0 \# ~& S K2 Kwire [9:0] mCCD_DATA;7 Y2 c/ X% t: k7 H- T
wire mCCD_DVAL;
& \' ~3 F4 L) u( {$ Ywire mCCD_DVAL_d;" O/ H, c4 ^6 y3 w# u; ^
wire [10:0] X_Cont;7 t5 }* _* I. x
wire [10:0] Y_Cont;7 Y% o$ {0 a" T7 o7 J0 j1 o
wire [9:0] X_ADDR;
4 E0 s7 t/ V; I0 Z9 B, ^3 iwire [31:0] Frame_Cont;5 ?% g. Q/ h$ W5 G' @
wire [9:0] mCCD_R;5 [/ o! X, S& [
wire [9:0] mCCD_G;$ v7 \9 [# S2 m( G/ b* Z
wire [9:0] mCCD_B;
3 m5 `* w. n" n- r$ V& x7 y% Xwire [9:0] mVGA_R;
X: y; _- g" a5 D! O- gwire [9:0] mVGA_G;1 e9 W1 g5 w1 o2 F* Q d
wire [9:0] mVGA_B;
! F. l& h- B* y n0 ~wire DLY_RST_0;
y4 @. Y3 F+ f+ \6 mwire DLY_RST_1;7 A1 w7 e+ o* V* s! G
wire DLY_RST_2;
) c Z8 S/ Z! l( U5 Uwire Read;$ R2 k) D( V$ T: U. U2 u0 @
reg [9:0] rCCD_DATA;
. o; A' v6 Y |" a! I3 A, K0 j# Q+ X4 lreg rCCD_LVAL;
j& ~1 J+ e! }8 o- _, ireg rCCD_FVAL;9 a$ b* Y. h/ b/ B, A' d' O- z
$ S- M0 M: z6 x$ L// For Sensor 1+ F" t& w& S+ _1 q9 j
assign CCD_DATA[0] = GPIO_1[0];8 n' c! _5 Y0 R
assign CCD_DATA[1] = GPIO_1[1];
# r# y! [4 `) U0 \# ^2 T! cassign CCD_DATA[2] = GPIO_1[5];
# R2 [0 H% R; h) X0 W. o" w( h: passign CCD_DATA[3] = GPIO_1[3];
8 [7 B: m! ~% j# sassign CCD_DATA[4] = GPIO_1[2];! _. w# x" S8 m' w+ D1 I
assign CCD_DATA[5] = GPIO_1[4];+ z9 y1 w2 |1 r2 u/ N
assign CCD_DATA[6] = GPIO_1[6];5 x1 H: |7 j8 S, C0 q
assign CCD_DATA[7] = GPIO_1[7];
6 P2 y4 K0 \6 q7 cassign CCD_DATA[8] = GPIO_1[8];' L! N' {# s6 k1 c7 J% V9 F& Y
assign CCD_DATA[9] = GPIO_1[9];8 o8 ^, {" I( t0 X
assign GPIO_1[11] = CCD_MCLK;3 l2 Z7 R1 R1 F X
assign CCD_FVAL = GPIO_1[13];
. I* A/ u/ E! A8 i" Bassign CCD_LVAL = GPIO_1[12];0 F* `" B R) Z8 w1 V
assign CCD_PIXCLK = GPIO_1[10];( X0 G8 a, x6 F
# t. |) d+ k7 N6 \5 ^0 g* V" X
assign LEDR = SW; K: R e& e# \' S* ~
assign LEDG = Y_Cont;
[" Z6 M/ M( ^# nassign VGA_CTRL_CLK= CCD_MCLK;/ o* ]0 W! _6 [+ \2 x; i
assign VGA_CLK = ~CCD_MCLK;" d' Y& j9 B5 X2 Q" T1 W
- `( F7 @( |7 Y0 M+ ~/ ^# U$ { VGA_Controller u1 ( // Host Side
7 m) A. c& v3 N, R" e( O .oRequest(Read),3 \& ^2 w3 J4 i1 N( ~
.iRed( DISP_R ),
. ^2 M6 p4 ~* R% E) }% @ .iGreen( DISP_G ),6 ^2 B& O/ q$ H' n0 l
.iBlue( DISP_B ),
! L- N( r j* X8 d# S8 @) J6 f // VGA Side
+ z, K: q7 }& R& ?0 h0 n4 @ .oVGA_R(VGA_R),
0 j- E* d4 K& N! o0 P' X .oVGA_G(VGA_G),2 G" i3 X( W9 ~0 z+ h1 b
.oVGA_B(VGA_B),& q3 O1 S" ^5 L a. H
.oVGA_HS(VGA_HS),
2 y2 {! y8 c6 t _3 Y8 O ^; ] .oVGA_VS(VGA_VS),- x! f) p* B' e# f. d, Q' q, ?
.oVGA_SYNC(VGA_SYNC),
# v) h) T8 l$ }" c0 A .oVGA_BLANK(VGA_BLANK),4 _* i6 O/ e" m" Q0 \
// Control Signal
' g! O* l9 q a# d+ J( z .iCLK(VGA_CTRL_CLK),
- C$ E2 Y" K d9 Q .iRST_N(DLY_RST_2) );4 ~1 n8 J+ x4 r, f2 A0 ]! Q
1 | R! E, I2 Z }4 B& FReset_Delay u2 ( .iCLK(CLOCK_50),8 ` _3 w2 s% V/ P+ g& C6 i
.iRST(KEY[0]),
# ?5 ?6 L- p3 ] .oRST_0(DLY_RST_0),8 P2 ]4 Y% e- Z$ ~3 ^' u+ u( [
.oRST_1(DLY_RST_1),
5 Y8 I: P( m; \ .oRST_2(DLY_RST_2) );( F* }. m9 d& Q0 k% b
- A( x. s6 A2 Z( JCCD_Capture u3 ( .oDATA(mCCD_DATA),
! L4 t8 ~) E% d# R) V- D; k# c5 B+ z .oDVAL(mCCD_DVAL),
$ a1 R+ o3 {- i' J .oX_Cont(X_Cont),8 } s R0 i# T" T
.oY_Cont(Y_Cont),5 U' i J8 C) I) |( c
.oFrame_Cont(Frame_Cont),
. ]0 O3 y- g% [7 y .iDATA(rCCD_DATA),# ]1 L* c3 m6 k" y8 ]3 v
.iFVAL(rCCD_FVAL), Z5 U/ P/ ]9 i9 Q2 d0 B
.iLVAL(rCCD_LVAL),6 v& K) a5 g* p% n/ x$ t6 @
.iSTART(!KEY[3]),
, I! N- g6 G* d .iEND(!KEY[2]),- v# A; n0 S) C8 j K5 E
.iCLK(CCD_PIXCLK),: s# w6 [# `$ q4 G5 q5 M
.iRST(DLY_RST_1) );
$ q0 \ l9 H) J
6 @: I& h; z9 Z: L" P& QRAW2RGB u4 ( .oRed(mCCD_R),8 ~, D" ?- s1 V3 N: f
.oGreen(mCCD_G),
$ c# f: i L( z1 j .oBlue(mCCD_B),
L: ]+ S# e# p! W .oDVAL(mCCD_DVAL_d),
1 C W7 ~, ]0 Y .iX_Cont(X_Cont),
j L# k+ q; ^9 p# u( J3 X) \# P .iY_Cont(Y_Cont),5 f' N7 H. m1 c# Y2 c7 r
.iDATA(mCCD_DATA),
% g, F+ m& A' q$ W .iDVAL(mCCD_DVAL),
/ j- ^( n& J$ Y' A* f3 s .iCLK(CCD_PIXCLK),: w2 g' j$ C: u2 y/ i2 Q
.iRST(DLY_RST_1) );
8 }2 ^3 ^4 X( e5 C' M
9 M+ T1 Z+ s" \( {' sSEG7_LUT_8 u5 ( .oSEG0(HEX0),.oSEG1(HEX1),
( q/ o* t: k5 e0 s% _ .oSEG2(HEX2),.oSEG3(HEX3),# \, N1 h; d* M0 W& w" U
.oSEG4(HEX4),.oSEG5(HEX5),4 Q; M# w" w' L1 z T
.oSEG6(HEX6),.oSEG7(HEX7),* p3 W; x) r) ^9 R% N+ @
.iDIG(Frame_Cont) );" z7 W$ m9 z2 a* {. s
9 m8 f% Y/ w& `
Sdram_Control_4Port u6 ( // HOST Side
" z6 p! M! \7 F" z2 O .REF_CLK(CLOCK_50),
& m- f0 Q+ F M .RESET_N(1'b1),
- Z- H$ |& {& J8 ^ // FIFO Write Side 1- a! X8 W9 A5 a1 }) U( [
.WR1_DATA( {mCCD_G[9:5],
: @. x& [7 Z: ?& A2 [- `) B mCCD_B[9:0]}),
$ d9 N6 G. V) H/ z) X .WR1(mCCD_DVAL_d),
) S" e! s2 I! w( h R2 U7 b: L$ g% Q .WR1_ADDR(0),3 t& R" A0 d/ R, ^' f: o
.WR1_MAX_ADDR(640*512),
' U/ ?& S c! D& Y9 Y" u6 w5 S9 y' \ .WR1_LENGTH(9'h100),
& N5 w I/ C5 x# Z1 }8 K; Q .WR1_LOAD(!DLY_RST_0),& c3 O- {) U+ Q' X! W
.WR1_CLK(CCD_PIXCLK),
' U+ L5 E5 x: l8 c! A& H2 E W // FIFO Write Side 2
) t) n0 \9 ~' A& T5 f# S .WR2_DATA( {mCCD_G[4:0],2 w5 v x* M# h: R$ }& }
mCCD_R[9:0]}),+ `# R$ P C: }1 {: c+ p: A/ V1 D! b
.WR2(mCCD_DVAL_d),
& D5 x' F* L0 r) {/ p" @6 F .WR2_ADDR(22'h100000),) Y# M9 A i8 h) Y5 M1 s' |: A/ n! ]
.WR2_MAX_ADDR(22'h100000+640*512),% F+ \9 I9 J7 i" w- J3 [
.WR2_LENGTH(9'h100),
* j8 J# r4 {% k- p .WR2_LOAD(!DLY_RST_0),
: G( j- _( I' V+ ]' M1 u( w .WR2_CLK(CCD_PIXCLK),& a4 u' u5 m6 m: P; `& I+ g
// FIFO Read Side 1 Q) O- a/ L/ `9 ?0 A( \' p
.RD1_DATA(Read_DATA1),
$ | z- C' |$ G .RD1(Read),9 z! Q0 f( R: W v# _" U
.RD1_ADDR(640*16),
4 j5 T7 M) ~ s& ^- I! N: z8 i .RD1_MAX_ADDR(640*496),
$ {! n V4 J+ w; m" k( } .RD1_LENGTH(9'h100),# e# h# R5 _8 r& s6 i% f
.RD1_LOAD(!DLY_RST_0),; c9 ~. P0 ~: ]& q& N! h# ~; d
.RD1_CLK(VGA_CTRL_CLK),
& w* E7 K8 c! o/ A0 Q // FIFO Read Side 2
3 |* q" A! u; b5 u s. m& ^ .RD2_DATA(Read_DATA2),
1 [% [) Y+ o; x1 M$ f1 b .RD2(Read),
: Z& o+ f, T5 L( P( I0 U1 M .RD2_ADDR(22'h100000+640*16),
# ^3 p) A7 P9 f h2 j) }, a .RD2_MAX_ADDR(22'h100000+640*496),
( s; l+ c- r# {' S& Z+ n- [# Y: V .RD2_LENGTH(9'h100),5 s8 U% K% Q. y
.RD2_LOAD(!DLY_RST_0),
1 g2 D# n- x8 y3 Z: T# x .RD2_CLK(VGA_CTRL_CLK),
$ s* S& u1 ^2 t/ M9 a3 l: _; N% c: n5 R // SDRAM Side6 \) P k1 l a. q
.SA(DRAM_ADDR),
9 c6 ~+ t' p, ]# f0 C* ^% G .BA({DRAM_BA_1,DRAM_BA_0}),
3 X! f4 N/ y" `* m .CS_N(DRAM_CS_N),+ U3 w8 a. o0 ]# L1 X
.CKE(DRAM_CKE),
- ^" ]" P/ }) c: y5 U: `9 Y2 Y' \ .RAS_N(DRAM_RAS_N),0 E8 r. g3 `" W0 ~7 b" A
.CAS_N(DRAM_CAS_N),( g" x4 I9 K% r3 x/ ]4 O2 L
.WE_N(DRAM_WE_N),% y3 R9 y. c6 w* g. o3 {. T
.DQ(DRAM_DQ),
' F5 Q: Z6 X4 z9 I .DQM({DRAM_UDQM,DRAM_LDQM}),# F9 L6 D: d+ p4 w3 B$ I6 ^
.SDR_CLK(DRAM_CLK) );
6 C7 y% {0 M% B$ O
5 M. R$ ]' e: Z* g1 KI2C_CCD_Config u7 ( // Host Side
# p- J. R4 t; \8 c) i, y8 y .iCLK(CLOCK_50),3 K) m6 [! v1 ^, ~6 d: a
.iRST_N(1'b1),, \1 Y8 y4 v5 `3 B4 g& t0 ]3 T: ^, t
.iExposure(16'h0600),
% C* A3 b) u7 ~& M // I2C Side' ?' |% G6 `' @1 D9 Q+ ^* \% p$ u
.I2C_SCLK(GPIO_1[14]),
1 g* c/ ^% y0 b# V6 H .I2C_SDAT(GPIO_1[15]) );
3 A9 X9 U0 T3 E' Y& C4 X g/ A/////////////////////////////////////////////////////////////////////& _& R- S+ y* Z% y4 q
wire [9:0] DISP_R;
' r6 O6 d. C4 E3 N$ s$ F0 D( [wire [9:0] DISP_G;3 l5 t( Y6 V4 d; S$ C$ o `
wire [9:0] DISP_B; d- ?, k6 ?4 E& r% _0 U
3 @3 s1 G. t! _& U: h1 N
// To Display
7 o7 Q9 J9 B# S9 E* V: L) kassign DISP_R = SW[17] ? mVGA_R : // Red
7 U! d. c' z* K4 ^ SW[16] ? mVGA_G : // Green
# a6 j) i) O! B3 Z5 l7 c SW[15] ? mVGA_B : // Blue/ q$ O0 K; U- A4 D; Y- H
mVGA_R ; // Color
9 R& _+ V9 [: p& W4 }' c" Aassign DISP_G = SW[17] ? mVGA_R : // Red
+ h5 c# D& u" D0 m# m! { SW[16] ? mVGA_G : // Green
& z' M" Z5 B, v0 z" a9 k v3 q SW[15] ? mVGA_B : // Blue
- e& ]: i9 ]: J2 z mVGA_G ; // Color6 p) W* w8 q7 {9 X
assign DISP_B = SW[17] ? mVGA_R : // Red/ Y$ A+ V9 o# p
SW[16] ? mVGA_G : // Green) O2 t5 h+ z% B6 Q( m2 I
SW[15] ? mVGA_B : // Blue
, K- d: X# o- Y6 [ mVGA_B ; // Color3 w, U% d8 }4 T9 w8 [8 r+ W
3 H1 Y0 J. J; j: i6 @// SDRAM
* a6 x" X9 H3 m% w* wwire [21:0] mSD_ADDR;4 i" \* ^6 x+ L2 O, ~; w7 {
wire [15:0] mSD2RS_DATA,mRS2SD_DATA;
/ h( J6 t; Q3 P! p5 }! _4 `8 R3 I* r! N6 |wire mSD_WR,mSD_RD,mSD_Done;7 M7 F! Z& P$ z5 r' N
// SRAM Async Port
3 A: _9 R Y" j; v" g/ r: y, Awire [15:0] mSRAM_VGA_DATA;
. Y" ?. }3 V8 o1 l2 m) l0 jwire DLY_RST;+ @) B) u! r: U4 y5 t
5 @; o. S3 L- P3 X* j. ?6 J) Y! N% q& G
// VGA
0 u$ D9 s' I- c7 f2 p1 ?* ]( ewire [9:0] mOSD_R;% ^& ^5 P: W0 v5 d0 W
wire [9:0] mOSD_G;5 d# V; @. F$ \0 t, M5 ?* f `0 M
wire [9:0] mOSD_B;
+ J8 g* p9 `; x8 v: d& s6 hwire [9:0] mVIN_R;) o1 _# T! G8 V& v
wire [9:0] mVIN_G;
- P8 C1 m% E$ Mwire [9:0] mVIN_B;
1 p6 \) ?) Y8 |( [wire [19:0] mVGA_ADDR;# U% W2 A" ^1 w/ K
wire [9:0] mCursor_X;, d" S! E' `4 F2 m# Y* a. H
wire [9:0] mCursor_Y;. m, L% U0 V7 [# M2 K5 i
wire [9:0] mCursor_R;. q& @5 F+ [& F$ b5 [2 O
wire [9:0] mCursor_G;
; O& V, J: q2 m5 E& K- rwire [9:0] mCursor_B;
( l. k; @' z f F; H. Bwire [1:0] mOSD_CUR_EN;
5 J! q6 ~: p+ ]) ?; Y// Async Port Select
6 W% U7 |% Z: \% a8 Y" G/ ~/ c' ~wire [2:0] mSDR_Select;
) T( x2 D3 M* \: \) z// External IO
6 ]' J- o7 V$ u. bwire [7:0] mExt_IO;5 _! M. X% A* H, d3 O3 a
// SDRAM Async Port3 z4 b! A. O j$ ?8 [; c) r9 g% h
wire [15:0] mSDR_AS_DATAOUT_1;) `1 q) s/ E+ s
wire [15:0] mSDR_AS_DATAOUT_2;
d( s1 B0 h8 Q+ y* R9 Y' W4 r1 [wire [15:0] mSDR_AS_DATAOUT_3;
d% E: `6 E) B, u: D# l9 fwire [21:0] mSDR_AS_ADDR_1 = 0; x. T& S0 b9 R( b3 o& Z/ O
wire [21:0] mSDR_AS_ADDR_2 = 0;
) q! c$ J9 e( |3 ywire [21:0] mSDR_AS_ADDR_3 = 0;$ V* \- j5 P6 h6 \9 @$ C
wire [15:0] mSDR_AS_DATAIN_1= 0;/ g+ |; H9 ?, t. M; c3 U' J, q: s! \
wire [15:0] mSDR_AS_DATAIN_2= 0;8 L$ h# ~& A" Q' i& a' b
wire [15:0] mSDR_AS_DATAIN_3= 0;
8 C4 Q+ z" C; U u7 l: D4 Ywire mSDR_AS_WR_n_1 = 0;- R A' U' E* I% I q3 }( N" q# H' w
wire mSDR_AS_WR_n_2 = 0;/ Q) s+ p! l/ [
wire mSDR_AS_WR_n_3 = 0;
) ~2 E) L2 d" x) o0 H/ ~// USB JTAG3 c8 L, B' b$ y7 C1 c" J
wire TDI;0 S& g% g% P- f8 H D" H
wire [7:0] mRXD_DATA,mTXD_DATA;
# V( a. u' {' D% b1 S$ Swire mRXD_Ready,mTXD_Done,mTXD_Start;! a+ \: @$ m0 t1 }1 W
reg mTCK;. }& j8 P- V" K& ~
reg TDO;, J0 r7 P& M; C2 u) U/ U
reg [7:0] oRXD_DATA,oTXD_DATA;
! A1 q6 U! z6 D3 ~reg oRXD_Ready,oTXD_Done,oTXD_Start;3 Q( W3 z6 Y7 u; G( }9 R& E; `
// All inout port turn to tri-state7 I- w7 e" T7 F
assign OTG_DATA = 16'hzzzz;
* Y9 a% L: w( w2 j1 E* w8 Sassign SD_DAT = 1'bz;
0 z/ Q4 A* G: K6 @. C+ V- u9 P Aassign GPIO_1 = 36'hzzzzzzzzz;
7 f% K5 v7 |9 D* W- t// Audio; M4 X1 N5 A5 Y% { b
assign AUD_ADCLRCK = AUD_DACLRCK;* b7 ]2 g! m+ m: s% \
assign AUD_XCK = AUD_CTRL_CLK;
- D4 g9 R+ s( Q' G; S/ s5 T5 F i$ G. n; v- P
always@(posedge CLOCK_50) CCD_MCLK <= ~CCD_MCLK;3 |% P4 [. s8 X; f2 o
# Q4 ~/ Q: g u. D3 M
always@(posedge CCD_PIXCLK)
# ^, t" |, t/ S6 t) J pbegin
' t7 K. f6 E* E$ o* grCCD_DATA <= CCD_DATA; ~- C, C# [# l8 Q- t* @" [+ W
rCCD_LVAL <= CCD_LVAL;
$ k s! X. i' O( Q* `, M YrCCD_FVAL <= CCD_FVAL;
* W5 }7 N1 x: W3 J if (!KEY[0]) begin, C4 ]2 g# q# W
mTCK <= TCK;
" o, _' c+ k) z: X* g oRXD_DATA <= mRXD_DATA;
0 D, u) t p( v) k# ~9 M oTXD_DATA <= mTXD_DATA;
+ g6 ^. Y$ H1 x# ~, U3 R9 C7 o oRXD_Ready <= mRXD_Ready;
Q7 n: |* U: ?2 D7 i oTXD_Done <= mTXD_Done;
8 U( H' g; z$ J: [; X, J oTXD_Start <= mTXD_Start;$ C8 R: n. |" i
end' ]3 C8 s- S" ?3 a g- V2 b
else begin
2 C8 f3 {6 W0 C- C/ M" r" L. t, M8 f# x mTCK <= ~TCK;. }4 z+ S8 a& A5 V
end L8 I# k/ H! W. S2 i
end
( q8 y& ]! s- b( z: O) Gassign mVGA_R = Read_DATA2[9:0];4 _, y0 n! a' M; E: a7 @
assign mVGA_G = {Read_DATA1[14:10],Read_DATA2[14:10]};
: Z% q9 z R7 k+ Z; V: g( Y0 fassign mVGA_B = Read_DATA1[9:0];
- H! k. z$ J9 G8 sendmodule; o+ ?) j! ]1 ?2 E
1 J6 _: C. N& ^& C以上是我自己修改過後的CCD+USB程式,CCD影像還是能成功的執行,但卻無法驅動USB程式下載影像檔
. K0 z6 P* R: G5 H( D) X# K先說明一下驅動的流程.....0 l! P! B( ~+ j2 A" _% c& P
在驅動CCD程式之後,先按KEY[3]鍵,VGA螢幕就會出現CCD所攝取到的動態影像,. F0 o/ [$ k+ T3 y6 P- s
待調整好CCD位置,按KEY[2]鍵,即可定格影像選取所欲下載的畫面...7 c2 p! R3 U9 |! c
只要再按KEY[3]鍵,即可回復原先的動態影像....- m7 O1 Z5 }" ~* j8 w/ x* K
而通常存取畫面都是再按KEY[2]鍵等影像定格後,再驅動USB程式.
! `( ^) |4 J0 l4 {將USB程式下載到FPGA之後,即可在CPLD裡使用一套程式download由USB傳回來的影像檔...
+ H% _/ o" ^) F4 D# A' S等檔案download完成後,在開啟一個影像軟體打開下載後的檔案....* o/ L1 M1 E/ x7 ~2 f* J8 r. s* l. P
即可得到CCD所攝取到的畫面........
. }/ w6 C" N6 X. Y- C- b5 X$ |; ?以上是整各程式驅動的內容及流程..
) j6 i; V- c4 ]# F0 D9 W請各位高手給予一些建議與討論....
. A) S7 Y8 q- [謝謝....... |
|