|
4#
樓主 |
發表於 2007-2-15 17:05:19
|
只看該作者
// CCD
, y* h* c* {! Z9 I5 Kwire [9:0] CCD_DATA;
" j$ l2 x' y' K, Ywire CCD_SDAT;
3 K6 e& \) ~$ rwire CCD_SCLK;! d; f7 P; B5 s# | q4 {
wire CCD_FLASH;$ P7 ]8 F* i8 ?
wire CCD_FVAL;" L8 ~. c( b4 }% W, k) e; c) }; U; v
wire CCD_LVAL;
6 u. W; M. y# r6 d8 l$ zwire CCD_PIXCLK;
2 U1 g. G* X( @4 p; xreg CCD_MCLK; // CCD Master Clock
% [$ M5 k# B1 T5 f4 X1 h2 Q& W% N! U2 f1 D- w, {; F$ d
wire [15:0] Read_DATA1;
/ Z: @) |+ L5 v" mwire [15:0] Read_DATA2;* g/ Y6 R: ^/ R
wire VGA_CTRL_CLK;
. l, c2 w9 S$ H5 W3 ]wire AUD_CTRL_CLK;
2 S ~, @8 b) Swire [9:0] mCCD_DATA; O [" i7 V1 N: y3 m
wire mCCD_DVAL;4 J; p/ w' H7 W& ^8 I- S" n
wire mCCD_DVAL_d;
6 n! O8 X; l" Y/ C; q4 fwire [10:0] X_Cont;* }% T- \# U& @6 l4 D+ _
wire [10:0] Y_Cont;# T/ y; L U( Z' | g
wire [9:0] X_ADDR;
- L$ E' a3 r/ ^( s+ Hwire [31:0] Frame_Cont;
4 O* [8 X6 m! \9 Z2 I8 Lwire [9:0] mCCD_R;2 P& \8 R6 S% d. Q
wire [9:0] mCCD_G;
# w+ M; \: ]2 x* Hwire [9:0] mCCD_B;# }% _/ \( y+ r: k( Z
wire [9:0] mVGA_R;) Y3 E; \+ y' e. D0 Y, m9 V
wire [9:0] mVGA_G;, X! I T! f: A! F
wire [9:0] mVGA_B;) {9 Y0 s8 ~7 p( n( F! C- Q
wire DLY_RST_0;4 \1 m1 [2 _. J+ m
wire DLY_RST_1;
. i; G3 Q2 l4 D5 I. Z6 ]wire DLY_RST_2;
& K9 J; k. S9 qwire Read;
7 s7 P2 j/ c! oreg [9:0] rCCD_DATA;* `4 F9 l% Z7 w
reg rCCD_LVAL;
; P9 ?% s3 S, I& A; Breg rCCD_FVAL;
9 m# V: H( [' T0 l2 [( [' o2 B6 ]# ]6 P" a J" E
// For Sensor 18 ]' [9 c( \3 t6 M( g2 E8 P2 U# k
assign CCD_DATA[0] = GPIO_1[0];) ~ Q* M7 P* m
assign CCD_DATA[1] = GPIO_1[1];' }$ Z, a, }) h) b& q
assign CCD_DATA[2] = GPIO_1[5];$ @% L# U* o; C
assign CCD_DATA[3] = GPIO_1[3];; Z% t9 s# z6 |* |+ ?7 E7 u
assign CCD_DATA[4] = GPIO_1[2];
& l) M) y f1 H; L: _assign CCD_DATA[5] = GPIO_1[4];
1 n* a5 R d T1 S4 A! Z' Dassign CCD_DATA[6] = GPIO_1[6];& D" f" K2 O* M" J/ D0 E8 G
assign CCD_DATA[7] = GPIO_1[7];" ]6 O ^" x e8 l) H6 E" p
assign CCD_DATA[8] = GPIO_1[8];0 {! r3 s, I7 F
assign CCD_DATA[9] = GPIO_1[9];
1 L$ H. z. Y. M8 y6 ]- g3 @assign GPIO_1[11] = CCD_MCLK;
, O6 e; O7 t! N* Bassign CCD_FVAL = GPIO_1[13];+ e% C5 y3 Z8 d6 l
assign CCD_LVAL = GPIO_1[12];
8 u# f- n3 E7 M4 @% a+ D- x; lassign CCD_PIXCLK = GPIO_1[10];
; @. E3 M1 N7 H$ T$ w* v
" i! I, E- Z0 h6 _, Y* Wassign LEDR = SW;6 w* y( i' z) u5 L% r
assign LEDG = Y_Cont;
, ^+ _) d0 P3 [) Rassign VGA_CTRL_CLK= CCD_MCLK;
& N0 `% ~! T g0 y$ ]assign VGA_CLK = ~CCD_MCLK;
$ W9 ^ |7 Q: ?- g5 F0 ]! p: ~8 S) b/ Q# v
VGA_Controller u1 ( // Host Side
; ?, m3 k8 R* [' [4 W4 V .oRequest(Read),* K- b/ x8 A; `9 m
.iRed( DISP_R ),5 ?9 ^1 Z# M5 c
.iGreen( DISP_G ),
* W+ ]( J% k7 W" b .iBlue( DISP_B ),( G+ Y" M) M( G6 }% f+ y
// VGA Side
/ n' R1 P# r( i .oVGA_R(VGA_R),) b3 W7 a* _. z3 F& f% [
.oVGA_G(VGA_G),
' M0 m. o# M2 @6 L8 V2 M .oVGA_B(VGA_B),
5 I4 e* T1 w" h .oVGA_HS(VGA_HS),9 e- W# [ ~! H+ D- d+ `( i6 m' _
.oVGA_VS(VGA_VS), l/ M" u9 a! o# ~
.oVGA_SYNC(VGA_SYNC),6 H: e+ \8 w2 [2 n$ S" ^
.oVGA_BLANK(VGA_BLANK),
) V4 C" Y* o# } g* e // Control Signal( Z! [4 I5 m& Z ~ K. u: i+ R% O7 H
.iCLK(VGA_CTRL_CLK),: |3 z9 B" |. S- {) d8 D/ m6 Y2 H
.iRST_N(DLY_RST_2) );
5 t J% V) S" J) H
- s6 m- C& z6 `Reset_Delay u2 ( .iCLK(CLOCK_50),3 ~# @1 z; u6 a" q' n, m. Y* m
.iRST(KEY[0]),! d1 G/ i# J4 L( L" |$ a, p
.oRST_0(DLY_RST_0),
: q5 j! H0 H% s .oRST_1(DLY_RST_1),0 ~) {* ?" L9 k* T! c/ \3 U# ]0 E" I
.oRST_2(DLY_RST_2) );
y* O& X8 @6 `2 F" s8 o1 E' j, N2 K- X) J( l7 }) w) ]! o
CCD_Capture u3 ( .oDATA(mCCD_DATA),
' A3 n* V, W- T2 h; _ .oDVAL(mCCD_DVAL),+ o h; l% i+ A! y; a
.oX_Cont(X_Cont),
, a7 U) S8 h6 i3 v; j$ F3 g .oY_Cont(Y_Cont),# u) R3 s( w* k" Y- R$ {$ O
.oFrame_Cont(Frame_Cont),
, u z0 T7 M- f, E0 u- i8 h% { .iDATA(rCCD_DATA),
3 N7 [ Y/ a9 w0 u! D .iFVAL(rCCD_FVAL),9 ?- l, @+ |6 r: o( B
.iLVAL(rCCD_LVAL)," X$ t) a+ G4 ~' ~
.iSTART(!KEY[3]),( c% t9 r0 h% i! G
.iEND(!KEY[2]),8 d0 Q2 j% O, x# f. j1 t7 ?
.iCLK(CCD_PIXCLK),4 C+ C8 H/ ^# c0 |- u
.iRST(DLY_RST_1) );
" X) ~. B$ Z3 K9 g# `; ^. U/ H& `" U1 x/ i3 V* O! n+ A5 t. ]7 e- I
RAW2RGB u4 ( .oRed(mCCD_R),
1 I% P" N; m9 l* f .oGreen(mCCD_G),7 Z% f5 Q8 i- y- ?9 O# p
.oBlue(mCCD_B),9 m9 r9 I( M X( Y2 h5 C$ n
.oDVAL(mCCD_DVAL_d),
( k2 l$ u& ^) K" l9 `, t .iX_Cont(X_Cont),9 p+ s8 v/ @3 `5 ?. c9 ]: T
.iY_Cont(Y_Cont),
% p. Z, r' x6 O$ w .iDATA(mCCD_DATA),
( j% j3 @8 O# B! t/ }- W% N% C1 y .iDVAL(mCCD_DVAL),; i( j! C% a3 x) _/ R
.iCLK(CCD_PIXCLK),2 p0 u5 R' o( l5 z. l( w+ Q/ G
.iRST(DLY_RST_1) );3 [3 F$ G! i1 N0 n* U
) c* ]5 ?4 ?. x4 H+ l! Z$ |: c2 ^SEG7_LUT_8 u5 ( .oSEG0(HEX0),.oSEG1(HEX1),( T) u9 O. F9 d8 C( q6 R1 n& G
.oSEG2(HEX2),.oSEG3(HEX3),
- K4 }' l& e1 U9 F" D7 M .oSEG4(HEX4),.oSEG5(HEX5)," N3 ~( u" t+ h( R* j
.oSEG6(HEX6),.oSEG7(HEX7),
2 b+ X; C- j( P& t .iDIG(Frame_Cont) );6 D* }! J) P9 `' d& u. r% G0 k: B
9 H+ w' F, A% D3 b2 kSdram_Control_4Port u6 ( // HOST Side: R! {4 _- e6 ?
.REF_CLK(CLOCK_50),% j( ?$ A b2 T9 e# d
.RESET_N(1'b1),1 k0 P: q; M: W5 `2 a8 X% {% Z. t
// FIFO Write Side 15 R, v4 X4 h5 ?4 T
.WR1_DATA( {mCCD_G[9:5],/ h0 v/ W8 o% Z" c$ Z& D2 e
mCCD_B[9:0]}),3 I: A- {8 k+ ~7 ^8 e( f
.WR1(mCCD_DVAL_d),( v- K1 v/ I( J& q
.WR1_ADDR(0),
# F' l- v3 {: t; S2 ] .WR1_MAX_ADDR(640*512),
3 f2 k3 |2 ]5 ?: S% G. O) I .WR1_LENGTH(9'h100),- ^( a% B% U( h' m# r
.WR1_LOAD(!DLY_RST_0),0 I" [2 c5 W3 H2 t+ Q+ Q
.WR1_CLK(CCD_PIXCLK),
' l' G& s7 c' \# z( N6 U4 @% C // FIFO Write Side 24 f- S+ K q8 i* L: D/ \- e. N7 P$ w) ^
.WR2_DATA( {mCCD_G[4:0],
: ]: m* e2 w6 j, Z- b mCCD_R[9:0]}),. u, L2 k; B- n, _! A
.WR2(mCCD_DVAL_d),6 R" o/ G) J% r- X# L e" f6 `
.WR2_ADDR(22'h100000),3 l1 E% o# H; h1 K
.WR2_MAX_ADDR(22'h100000+640*512), t) }* K- d7 i( z/ q4 z
.WR2_LENGTH(9'h100),
1 d1 C, A( l% K: {8 m) D* J4 z+ P% i .WR2_LOAD(!DLY_RST_0),
& V8 y) ^; z& {0 X- W5 d& C .WR2_CLK(CCD_PIXCLK),
! p( M# T. t6 M3 i // FIFO Read Side 1
: R q0 }6 }/ ]+ u) L: u .RD1_DATA(Read_DATA1),
+ m) ^$ ^/ Z4 B: P .RD1(Read),* C9 ^, k: `# F$ j1 Z. X' R* h
.RD1_ADDR(640*16),
+ i9 K6 R) K; G; `, f1 L$ t X .RD1_MAX_ADDR(640*496),- U' Q9 g& @) K3 N
.RD1_LENGTH(9'h100),. V+ U7 t' n8 C- _6 l4 x
.RD1_LOAD(!DLY_RST_0),
m e8 Y( [2 n* r$ W) V% J .RD1_CLK(VGA_CTRL_CLK),3 {+ r9 }# ^3 o0 M- ^
// FIFO Read Side 2) n1 W) L2 j, q2 F
.RD2_DATA(Read_DATA2),
6 k, x4 X3 y' T$ a" l& a .RD2(Read),2 y c& ]% G/ l5 S# ?2 i# b
.RD2_ADDR(22'h100000+640*16),
; X5 J+ e5 z; ?4 j# v! p7 \7 F .RD2_MAX_ADDR(22'h100000+640*496),$ C0 O; r1 ]5 l4 h [ {4 ^& N8 B' [; i
.RD2_LENGTH(9'h100),
! Z' g$ k5 v8 Z# }, c6 H. d5 { .RD2_LOAD(!DLY_RST_0),
. S1 S% x( w1 _% z* R( e4 m9 I0 D .RD2_CLK(VGA_CTRL_CLK),: v9 H3 r4 N- C5 A2 G
// SDRAM Side4 ^ X. j$ d+ h8 s/ ]* Y
.SA(DRAM_ADDR),
1 k: p% e4 n7 G& p .BA({DRAM_BA_1,DRAM_BA_0}),6 V% t* j- S3 l* x: |
.CS_N(DRAM_CS_N),
# e& W0 Z+ h- t3 p. I .CKE(DRAM_CKE),
. e- e6 _, n& G2 E; `( Y* K. e .RAS_N(DRAM_RAS_N),: j5 h' e* b" M' t
.CAS_N(DRAM_CAS_N),
0 q6 i- C# d: q- U5 f .WE_N(DRAM_WE_N),
6 ^1 z& I' G6 F4 X& G4 x .DQ(DRAM_DQ),
" {1 @# K7 B* G1 U) ]( i& v; w .DQM({DRAM_UDQM,DRAM_LDQM}),
3 R- w% {7 ]# X" C) [9 ^6 { .SDR_CLK(DRAM_CLK) );
' x/ S/ S% P, [* J* A$ H" A; b0 E& a+ w% ^
I2C_CCD_Config u7 ( // Host Side- P1 M* {& g. ?1 k
.iCLK(CLOCK_50),4 s( J Z! }2 l3 p) A( K8 I+ n
.iRST_N(1'b1),5 X9 p" X3 P/ ^, Q4 Z: J% D2 O
.iExposure(16'h0600),# E3 {9 S' @/ Z5 ?1 u$ G
// I2C Side! y" o& C) B% r" T, v1 B4 u
.I2C_SCLK(GPIO_1[14]),
( @7 F4 ^( U5 T' Y .I2C_SDAT(GPIO_1[15]) ); {6 N+ n+ P$ {% q9 }
/////////////////////////////////////////////////////////////////////# Q* w \. H+ }- `; s* ]: z9 ^
wire [9:0] DISP_R;7 ?7 o/ c* _/ ~
wire [9:0] DISP_G;( [3 T. J* Q5 d. G1 ~
wire [9:0] DISP_B;
" I& K" L6 w$ e/ s) V+ f7 L" ^* y& z0 c3 v
// To Display& D$ K! T3 y2 ^: P7 {; V; Z
assign DISP_R = SW[17] ? mVGA_R : // Red
' ]& r L, g' W; I8 Z SW[16] ? mVGA_G : // Green
1 f4 n/ Z" E0 Z. \9 r. t SW[15] ? mVGA_B : // Blue3 Q$ \4 b3 A% V+ A4 ^2 D* Z! B
mVGA_R ; // Color7 G* W$ H w4 Y7 O3 e, @: X/ j
assign DISP_G = SW[17] ? mVGA_R : // Red
+ l9 c" H" v. s2 d" V& `2 N SW[16] ? mVGA_G : // Green J v+ y% a- I, R( H
SW[15] ? mVGA_B : // Blue1 i; A( [) l' q. L
mVGA_G ; // Color5 ^1 A( q9 s$ H1 ~5 [" q
assign DISP_B = SW[17] ? mVGA_R : // Red7 [6 R' \ m5 d7 m9 l; N
SW[16] ? mVGA_G : // Green
; O+ n& l+ c9 _6 o( p( o; Z, v: _ SW[15] ? mVGA_B : // Blue
# D7 t# n% o$ f: d1 v mVGA_B ; // Color
- a* `/ [ ~& e2 }6 g/ M
/ H" e3 `1 h% ]6 ?// SDRAM
( G; J' e7 Q* ?% K3 c5 F6 c& uwire [21:0] mSD_ADDR;
a) Q# m; u1 pwire [15:0] mSD2RS_DATA,mRS2SD_DATA;
; G- x x9 x6 Q, lwire mSD_WR,mSD_RD,mSD_Done;5 o1 c$ {3 R0 d4 }
// SRAM Async Port* K* U( M5 k( P/ j& g. m
wire [15:0] mSRAM_VGA_DATA;
- k9 B( Q$ u; n6 V9 N; e" Bwire DLY_RST;: e! y: H. B$ ]; B8 Y
1 {6 |% ~: E2 i/ }* h, `: X1 v
// VGA
* o6 ^ n' J& N4 [wire [9:0] mOSD_R;
6 |* l3 y3 C7 A) l* x: b% w$ [wire [9:0] mOSD_G;" y* R! e2 ?8 {
wire [9:0] mOSD_B;
( u$ J* l' n$ S7 L" L% Xwire [9:0] mVIN_R;
# l6 H" }4 O; p# T8 `6 \' `. Rwire [9:0] mVIN_G;
. A. n& u8 t; S) dwire [9:0] mVIN_B;
' a0 {* C; x f: O& M( uwire [19:0] mVGA_ADDR;8 Z. L* f9 z, B @7 h$ `
wire [9:0] mCursor_X;
; B$ t* v2 X2 Awire [9:0] mCursor_Y;
D# ~8 ^# q& m4 dwire [9:0] mCursor_R;
7 f9 O' E% ^5 j i6 Lwire [9:0] mCursor_G;
( R- @6 I ~. [) T" K8 d5 K/ mwire [9:0] mCursor_B;
5 p9 D, Y4 s% t; mwire [1:0] mOSD_CUR_EN;
0 Z! O q1 A( K, x- q// Async Port Select
6 M$ p" K0 R- B5 w9 [wire [2:0] mSDR_Select;
& a( O" |; {+ V2 D( l// External IO
) T" H( n5 _* Y( Y B/ E* Uwire [7:0] mExt_IO;" | a, \: X! P5 S! Z
// SDRAM Async Port- q3 q1 f, Z9 v0 T; m) G" b; C0 y8 E
wire [15:0] mSDR_AS_DATAOUT_1;9 c* m: y$ N$ }) i1 {
wire [15:0] mSDR_AS_DATAOUT_2;$ { U V; ]" @" q# n; g
wire [15:0] mSDR_AS_DATAOUT_3;7 Q( o# w% x7 ?9 E q6 r3 O
wire [21:0] mSDR_AS_ADDR_1 = 0;
! R: o4 H7 c1 v! U/ N8 d$ n' kwire [21:0] mSDR_AS_ADDR_2 = 0;( F! i6 ]9 x) a9 Q8 X" u- M
wire [21:0] mSDR_AS_ADDR_3 = 0;
' G0 o; I0 c4 q7 awire [15:0] mSDR_AS_DATAIN_1= 0;
; P$ q% B' B& A4 Z7 bwire [15:0] mSDR_AS_DATAIN_2= 0;
8 K0 y I4 [5 Q, Dwire [15:0] mSDR_AS_DATAIN_3= 0;% v) F" y, h! ]1 O3 u% e& Q
wire mSDR_AS_WR_n_1 = 0;
4 D! v+ F: m0 d. x0 E/ W) _ bwire mSDR_AS_WR_n_2 = 0;. ~( u7 [& l; v, w
wire mSDR_AS_WR_n_3 = 0; r" B5 N: w/ x' }2 ?
// USB JTAG
8 j' ^9 O5 F- D: t0 e. }+ ^wire TDI;% C" f% d Q4 r: O; G
wire [7:0] mRXD_DATA,mTXD_DATA;
+ c2 A) X! S$ [& R0 k, i4 mwire mRXD_Ready,mTXD_Done,mTXD_Start;
C5 r( a" m6 {- e& d8 Treg mTCK;/ ~, V2 k! A! `: Q* A9 K1 B) y
reg TDO;
" k7 k$ J+ @0 \2 Q! y' H) ureg [7:0] oRXD_DATA,oTXD_DATA;
5 Z: M$ g- r7 O$ ?reg oRXD_Ready,oTXD_Done,oTXD_Start;; @8 ~6 o. B9 [+ u) j2 y: i
// All inout port turn to tri-state
# r) }0 i- W# B- Z, H! zassign OTG_DATA = 16'hzzzz;, k: @4 m/ v5 Y6 l7 c+ W' B% C# h
assign SD_DAT = 1'bz;( W7 E% u/ N* X, X) E
assign GPIO_1 = 36'hzzzzzzzzz;* G ~! g$ x4 v' Y
// Audio
: {2 q7 @* U0 N; }. gassign AUD_ADCLRCK = AUD_DACLRCK;
- n" Y6 |7 {/ Q, t6 x; rassign AUD_XCK = AUD_CTRL_CLK;
7 y2 ~" ~5 T7 Z# N* ^5 E( [1 [- @! y
always@(posedge CLOCK_50) CCD_MCLK <= ~CCD_MCLK;' m* G0 R! W! Z; ^" i6 M1 c
8 x$ Q/ p$ {& a) ^
always@(posedge CCD_PIXCLK). v! V) \* V% n
begin
4 V/ l& K2 P- s; t2 nrCCD_DATA <= CCD_DATA;
! B$ W. C& B& t6 SrCCD_LVAL <= CCD_LVAL;6 c( S; _7 w! A. b& D/ V
rCCD_FVAL <= CCD_FVAL;7 `% I! N6 E! p8 S
if (!KEY[0]) begin& x) b: b* J: e# ]% J( a# |# ^
mTCK <= TCK;% [1 M4 K$ z. |: ^& w$ A* l
oRXD_DATA <= mRXD_DATA;
1 T! O! g' e/ B! q/ U oTXD_DATA <= mTXD_DATA;
% g5 w3 Q- J; V& e( K7 E9 A oRXD_Ready <= mRXD_Ready;
5 o1 S* ^0 L! ~ oTXD_Done <= mTXD_Done;5 |2 Y$ _7 J0 T' Y1 W2 d I! ?
oTXD_Start <= mTXD_Start;
6 h" E- v( T0 C% a end
3 l* M, x" j" V else begin 7 \) B' q* ]$ Y# n( K) t2 Q
mTCK <= ~TCK;& L% S. c9 k9 T- Q
end+ v- }$ u: r/ ^. m
end
( V9 K, O9 v, ^# _assign mVGA_R = Read_DATA2[9:0];
* O) o0 r, Q$ k3 f9 G$ `: H! ?$ Uassign mVGA_G = {Read_DATA1[14:10],Read_DATA2[14:10]};
! ^2 c4 W8 e/ S9 q( iassign mVGA_B = Read_DATA1[9:0];
. I) Z% |* U; j5 {6 Wendmodule) G) p: p8 a- }/ z
& t1 u* q& u: [" q8 A1 O% T0 ^; d以上是我自己修改過後的CCD+USB程式,CCD影像還是能成功的執行,但卻無法驅動USB程式下載影像檔
/ E/ k: d% c* p先說明一下驅動的流程.....$ n. D: y8 `) l, Z& M
在驅動CCD程式之後,先按KEY[3]鍵,VGA螢幕就會出現CCD所攝取到的動態影像,
% [# z0 l9 s; C2 T9 t) D# R; Y$ c7 z待調整好CCD位置,按KEY[2]鍵,即可定格影像選取所欲下載的畫面...# K4 [( K. d9 t6 d, F, e2 H* l
只要再按KEY[3]鍵,即可回復原先的動態影像....
1 A" {! [& _6 p% \+ k5 f% ^+ f而通常存取畫面都是再按KEY[2]鍵等影像定格後,再驅動USB程式.
5 c8 i; ~7 i+ G, _& p: b; J" H* A8 o將USB程式下載到FPGA之後,即可在CPLD裡使用一套程式download由USB傳回來的影像檔...& ~/ u3 b; ~* C
等檔案download完成後,在開啟一個影像軟體打開下載後的檔案....% u- |/ a* s3 Y5 |' |
即可得到CCD所攝取到的畫面........2 T; _- Z0 s! n, N1 ]% s4 f, z. a
以上是整各程式驅動的內容及流程..
0 b C. t* U- C請各位高手給予一些建議與討論....
3 E8 C2 e$ E6 X" o- C謝謝....... |
|