|
2#
樓主 |
發表於 2009-6-11 12:43:50
|
只看該作者
ODDR2 #(* M$ U) g7 H) |0 i& [2 X- i
.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" ; @% T# d; u: v: c
.INIT(1'b0), // Sets initial state of the Q output to 1'b0 or 1'b1
. K# W! Z- Y6 K- r .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset# ] M% {, s8 w5 H7 O
) ODDR2_inst (
& A' _0 c( V$ m9 X: F( {4 D. { .Q(oVGA_CLOCK), // 1-bit DDR output data
% W5 }+ `+ m6 D5 M; F# n .C0(clk), // 1-bit clock input2 }/ e3 P& | s7 O1 [7 }4 z
.C1(~clk), // 1-bit clock input
; e' E6 T7 T3 e8 k. O; J5 w7 f .CE(1'b1), // 1-bit clock enable input
; c5 l' Z3 Z+ G- u% G) d .D0(1'b0), // 1-bit data input (associated with C0)
9 d* J& _* L( Y" M .D1(1'b1), // 1-bit data input (associated with C1) v, i3 d y$ i Y
.R(1'b0), // 1-bit reset input$ S. N: z+ P" y6 f& J
.S(1'b0) // 1-bit set input! D a0 O7 \; r5 M
);
3 H' m# ]4 f7 e& X b% T
0 d r$ ~: |3 |2 c& J8 Ualways @(posedge clk)
7 W0 N, }4 a3 d9 d* g _begin
! _- F+ v% T+ s* X7 F5 I$ l- q oVGA_SYNC <= oRequest;8 z3 B6 t" p; [2 S. M2 x. V
end * I& P% A0 _( A
8 }9 ]5 q+ w- {: d6 Y' Xalways @(posedge clk)
; T8 V, U' k. w2 M8 ^- n1 nbegin# u2 F: t/ K1 T7 ]% K1 b9 N' }
if (rst). K% i2 }, F7 d. `# }( d
oRequest <= 1'b0;
0 m1 G( |8 |, S6 y else begin
3 y5 L% v M7 \ if (h_cnt >= (X_START-2) && h_cnt< (X_START+H_SYNC_ACT-2) && v_cnt>=Y_START && v_cnt<(Y_START+V_SYNC_ACT)) h7 Y8 s4 L' S8 {* P; i9 K
oRequest <= 1'b1;
, @+ S1 w7 I E$ i else; a% d$ `; l) p: v1 s" X, }
oRequest <= 1'b0;( o+ `$ H3 C1 `+ R" r# \6 l
end/ {6 \: E2 F5 ?
end
% [- ]. H ?. ^2 w, g 8 W5 W: N. B6 I$ z
// H_Sync Generator, Ref. 25.175 MHz Clock h5 Z0 p/ f- \
always @(posedge clk)6 x6 F6 c# ]" R2 N
begin
, r& `8 U; t( N/ ^, g6 [ if (rst) begin' e% Y( ` w* w, H! Q$ d; @7 _' C
h_cnt <= 12'd0;
4 c7 _( ?: F: ^ oVGA_H_SYNC <= 1'b0;
t! E; R: m3 o! r! p! I end
! A# T$ X: n7 A# P+ j else begin
, I) h* T) Y+ k* D; V // H_Sync Counter
I3 |2 \5 T( {$ ` if (h_cnt < (H_SYNC_TOTAL-1) )
; q& A) Z0 E& f+ H h_cnt <= h_cnt + 12'd1;: M/ M C7 m/ w7 U
else% p- i- e- D9 I
h_cnt <= 12'd0;; K* ~8 F$ d3 `0 s
1 L" D- s0 B8 Q( ^% e( `6 F // H_Sync Generator) z# ^. P) C: h- r! M4 ^. [+ N
if( h_cnt < H_SYNC_CYC )
' B- e4 Q* a( l9 E9 S: @0 x% d oVGA_H_SYNC <= 0;
' b, w* ^9 {9 a+ s+ U" }( @5 L else: D$ W3 P* Q' N3 `
oVGA_H_SYNC <= 1;' o8 r3 w% e @/ [
end
# r' O+ b' y4 F- b: Mend; X$ f; O+ K% T
- G4 }3 { n/ X1 m8 Y7 V1 ~always @(posedge clk)# ~2 N! E8 d C% i/ Q# b
begin4 M* u* v7 j, w4 t* K
if (rst) begin
( t7 j I) a- N+ e! U v_cnt <= 12'd0;
7 M7 j; G- c. ]9 x7 Q oVGA_V_SYNC <= 1'b0;7 `7 w) }9 y+ t O, j5 M0 S. I
end( R/ P2 @! T( p* b$ l
else
2 L, m' t# n# o: U; e if (h_cnt == 0 )
, `& N, ?4 R8 l; V# `1 D2 q# v# T$ H begin
7 T* F5 ^$ i# `6 N N0 y9 j+ M3 o // V_Sync Counter
9 g/ E: r. n8 f; `* M2 ~ if (v_cnt < (V_SYNC_TOTAL-1))
3 n& g: E! |. T g7 @: Y v_cnt <= v_cnt + 12'd1;
+ N! q8 e( n6 H- \8 n1 L else
( B; q6 e( V9 r- S+ p( O% `$ N D- i v_cnt <= 12'd0;% D: i7 z% X3 D9 D/ ^" R9 t
// V_Sync Generator2 `+ I V6 t, ^3 [' m; c; ^$ P1 c
if (v_cnt < V_SYNC_CYC)! l( R; ~8 k3 X& H+ b# K8 `, F
oVGA_V_SYNC <= 1'b0;2 [3 d" q K0 L6 P; Z
else+ u Y7 F/ K# x+ k2 f* H, w( l* r
oVGA_V_SYNC <= 1'b1;
* d0 j3 U' d; o end5 H J% _8 d$ R: \- o( e
end
1 ?: b* [ ?8 ?; N6 a1 W4 L
8 Z1 s) f* ^+ J: C7 T6 l: k
) c0 d7 v0 w, s) L4 o6 o; mendmodule |
|