Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 5955|回復: 16
打印 上一主題 下一主題

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!
- B$ p; w0 a- P8 Q2 H% m; r1 R; ~$ V( Q) Y, [% P4 C# P
module vga_ctrl(clk, rst, R_in, G_in, B_in, oRequest, oVGA_H_SYNC, oVGA_V_SYNC, oVGA_SYNC, oVGA_BLANK, oVGA_CLOCK, oVGA_R, oVGA_G, oVGA_B);& y3 ?# O4 C1 l1 g6 F; ^
    input clk;" V4 }* H& I9 j$ P% o6 X$ ]
    input rst;3 D; `. W1 m7 U3 X
    input [7:0] R_in;/ s$ p4 P; {& n5 ]5 ]/ L
    input [7:0] G_in;! C3 e( g8 u, q3 J/ ^
    input [7:0] B_in;
( K* E# N  E1 i    output oRequest;
* z7 J& f5 \! N; b  g    output oVGA_H_SYNC;2 d' T$ S* U/ [2 J: O& M
    output oVGA_V_SYNC;4 }) e  }/ k8 J* S8 h0 S
    output oVGA_SYNC;
  `* q* u1 S9 i4 h# t; t6 z    output oVGA_BLANK;% ]/ H& Y% C6 H
    output oVGA_CLOCK;
1 Y* g# n1 W9 h& ?& _( v    output [7:0] oVGA_R;& z% [6 b" h; N- Z# j8 M
    output [7:0] oVGA_G;8 ^9 l% n% P  P
    output [7:0] oVGA_B;
1 U4 y. _0 [0 ?. z7 s9 {         
* D4 L9 C' `$ c         reg oVGA_H_SYNC,oVGA_V_SYNC;
! U3 D) {0 Q' x1 o9 \9 l6 x         reg oRequest;3 K9 E9 p: h7 p: T
         reg oVGA_SYNC;
6 n' |( F4 I& I! R) W         reg [7:0] oVGA_R;4 w0 p) o+ o' C  K$ {' W" H
    reg [7:0] oVGA_G;
- Q7 z! r! _! Q& n$ X: D    reg [7:0] oVGA_B;
3 P$ v1 K. ^1 L         3 y& N* ^) B* b( h, }
         parameter LENGHT = 1024;" r: J' q  M1 B- Z* [; e
         parameter CNT_SIZE = clogb2(LENGHT);
, r2 `# d+ L3 z( M         0 x5 u' ?* Y+ n* g; J* f
         `include "VGA_Param.h"
- P0 `" c( T; Z$ V( d         
, Q! g: x, T8 B4 I         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;
1 o! ]9 }% ]% z
! P5 a: \* B+ _! ralways @(posedge clk)
+ t* S2 p3 B4 `' w( c1 \begin- l: F, M% [0 c
  if (rst) begin! ~* X; V% u/ Z! F0 J* l
   oVGA_R <= 8'd0;
' U, Y+ u) ^7 Q% Q: e   oVGA_G <= 8'd0;$ @& Y! }! Y. R2 @4 m
   oVGA_B <= 8'd0;
6 ^# Q) s4 q1 I" r8 Y  end" P* A( `* q* q: Q) G
  else if(h_cnt>=(X_START-1) && h_cnt<(X_START+H_SYNC_ACT-1) && v_cnt>=Y_START && v_cnt<Y_START+V_SYNC_ACT) begin) o7 _& z" e  Q# C, @: W- R
   oVGA_R <= R_in;0 f- P: ^8 y" K" `/ h9 L
   oVGA_G <= G_in;
# |0 L+ S1 O- i   oVGA_B <= B_in;( I* a3 e. N0 n: `) [
  end
: f. O$ s& ~1 ]4 l6 o+ F  else begin0 Q" U; e5 H. F5 D" V1 w
   oVGA_R <= 8'd0;4 J. d" i) ]+ H" L. H6 W( ?
   oVGA_G <= 8'd0;8 D& x, k0 P* R& F2 C6 l4 Q  l
   oVGA_B <= 8'd0;& b' {, t* H/ Y/ j
  end
7 K0 Y  R* {: P3 hend
  U8 c" o% f6 J: e" a7 ~2 Z: K% r* J/ T+ C  C4 Y) N' M
assign oVGA_R = (h_cnt>=X_START && h_cnt<X_START+H_SYNC_ACT && v_cnt>=Y_START && v_cnt<Y_START+V_SYNC_ACT) ? R_in : 10'd0;
1 {/ X: r2 O: R2 Q7 iassign oVGA_G = (h_cnt>=X_START && h_cnt<X_START+H_SYNC_ACT && v_cnt>=Y_START && v_cnt<Y_START+V_SYNC_ACT) ? G_in : 10'd0;7 f& r* J# H, s# j+ X. l4 u5 {
assign oVGA_B = (h_cnt>=X_START && h_cnt<X_START+H_SYNC_ACT && v_cnt>=Y_START && v_cnt<Y_START+V_SYNC_ACT) ? B_in : 10'd0;) m1 u+ }) G/ Z( i) v! e; m
assign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
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
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?
8 `9 q6 ~* z* B: H7 ]5 x5 l  y8 l+ H; m
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
% I4 {% R5 l# v- R9 b以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表 ; a- n6 D) z  c) q2 F9 U6 T
你的code應該不完整吧,很多參數我找不到你給的值?
1 `* X$ g5 F7 x. d3 H3 G0 F: l
! Y6 t7 N, M* t% m7 M7 }你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
* S" L3 {# {- `! y# @以及是數位或是類比的,在去驗證code吧。

, S+ I0 P% W1 e; _+ B; C: P8 M' e
3 o: U& C8 X2 `PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?
/ j' X% x5 h; D9 v, c& p& \7 \" j3 i) m0 q我是直接輸出為VGA, H.V.RGB, 送到monitor使用
/ _, b; K/ t5 Q8 J5 w. t% ?9 n不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了. S9 |( q) Z% H; P$ K) C; `' _$ F
VGA輸出是FPGA->ADV7125,透過7125去做轉換
3 P* j  j6 [8 ]/ S6 C現在用此份Verliog code已經實驗出640x480 60hz. c! L3 X0 |; @* b, \7 `
但是調成800x600 60hz出問題
* ^+ q( f5 Y; Y" x; m測量H.V and PixelClock為正確數值了
6 ~8 N/ o$ d( h6 _  l不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題0 d: J+ _! Z" G6 b+ g
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
5 B9 A: y# B% G/ H7 P5 U. M7 E# v1 f
你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表
; }' F% J* |$ r& t  V假設你的VGA verilog core設定沒有問題
; t% r" L. L8 S  y4 Z) L你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
0 ?* _2 A7 M' ]  f5 h8 g+ p  u. }5 }3 S4 q4 y: Y
你說畫面出問題.是否可以解說一下
( V' w1 n1 s* p( r5 Y6 `

. c* N. |* E# Q1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)' Q' s: \9 J! z% O9 _
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
# m4 o) o2 P+ ]5 P% s" z   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core( Y3 z# t  ^5 V
我只用過xps_tft 而且是在edk內+ t0 ~8 N$ L: s5 {" S0 q, N* y5 k

; w* v# D# ?. K1 G: y6 Q這樣聽起來像是你vga memory size 大小設錯了
: g/ {& y' L4 `/ j0 H8 n: N我之前在edk內設錯時也有類似的狀況. ( O& p3 m6 J5 q" ?$ _5 ?
可是我不知道你的情況是不是跟我一樣
* r* I+ y1 ]- H" z" ^$ {8 r
( V& `" Z/ O! k& ^: E剛剛看了一下你的core0 T: F6 F5 W- F( h' v$ q
設定值應該都在 VGA_Param.h 內
2 L$ A8 x. J3 V  o) c5 Z: iinclude "VGA_Param.h"* b; P) ]! k4 |% a# g
  S. C7 q2 H3 @  ^5 B5 P6 y, {) u
[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表
7 n" U0 t6 f) Z% q& V& a4 g4 C! U說真的我也不知道這要在哪設 因為我沒有用過你的core
* @, n! L: Z- v; r8 b我只用過xps_tft 而且是在edk內
' a% X  y2 k7 l' Q) y& @2 t
  n) ^0 Q" a4 B這樣聽起來像是你vga memory size 大小設錯了
' P* \+ p. b4 L2 T我之前在edk內設錯時也有類似的狀況.
+ P0 x+ {+ l; {. f) A. z可是我不知道你的情況是不是跟我一樣
* i0 g0 [' A) s! j& H8 x ...

: z* K. ^" v  v) F* o/ c
: o- m! e3 Z1 e5 t$ F3 f//800x600
6 Y0 I& x) Q  l( R/ Hparameter        H_SYNC_CYC        =        128;
$ g* q( a3 y1 H" Y5 ?$ A" ~parameter        H_SYNC_BACK        =        88;+ O& k6 x7 h9 \% [5 ~
parameter        H_SYNC_ACT        =        800;        //        800
% w4 R: _6 S/ |6 U( Y" L; Qparameter        H_SYNC_FRONT=        40;
5 a0 k& z" `; x, Gparameter        H_SYNC_TOTAL=        1056;3 w: T/ X/ c  N* d# k
//        Virtical Parameter                ( Line )2 K8 i5 c1 L, N1 }1 a
parameter        V_SYNC_CYC        =        4;' ~0 c# L# Y7 L: r1 c5 ]* h4 r
parameter        V_SYNC_BACK        =        21;0 ~: ^7 q5 ~& V9 Z! v- x
parameter        V_SYNC_ACT        =        600;        //        6003 E7 t0 a4 Q2 `* i
parameter        V_SYNC_FRONT=        3;% o; _# G; j/ A, Q0 k6 n
parameter        V_SYNC_TOTAL=        628;
( s$ t" f. |1 v# q) y  f" z//        Start Offset8 j" I; k. Y5 z0 E
parameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
; q. x/ @9 N$ j( i/ vparameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;
  @0 ?0 w' ]/ e# u- P8 C: G5 f; w- Y7 B$ B+ e
以上這些參數應該都有設定對,我是follow vesa standard作設定) O9 A3 P2 Z' Q4 d6 e
不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源, v) s" {, D" c4 H8 `* }: `2 d
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
3 G/ ^( n' v, ^1 W不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表 9 D& f; s& `) f6 M; c
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,1 Y( i* s' I$ o  @/ o
不過可以查查看。
! u7 v0 L+ \2 n

- H- j3 l, v/ {0 Y% I' @# l# q& A預估應該不是參數設定錯誤,而是IP有問題吧?$ X9 W( K  k+ E9 H, F  y+ B; l0 [  x6 ^
不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?
9 D2 Q/ O* ?8 k* A想要自己修改看看,希望有人可以提供啊!
) H! M% Q; B7 B1 b* c( w2 W感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表
9 @; H4 m0 l9 T再講一下自己手邊版子的架構好了. E7 {0 `) H) L4 q
VGA輸出是FPGA->ADV7125,透過7125去做轉換
% J( h+ Z* T  n% _% z現在用此份Verliog code已經實驗出640x480 60hz( y4 [. c* v4 G( N- f/ U) k
但是調成800x600 60hz出問題. p' H! l& Q! t1 G2 @
測量H.V and PixelClock為正確數值了
3 e# o+ J3 C* H! ?' Z/ |: n% S( G不曉得那邊有問題 ...

' D, H3 ~4 D7 z+ b0 P2 ]6 V7 j
" }6 v3 K: G+ ^3 N請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表 0 k3 [4 }6 y; f3 ^4 p4 l. N( A
請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?

& U* Y( m/ K  u8 e  ?3 q" w8 k, T3 d: _. q1 l4 L* P9 S  Q8 {& q' t9 D
嗯!6 M- I/ m2 v3 {2 \8 P( c# v* e! H
H:38KHz
* |; F) b% k# xV:60Hz
8 R( `# e4 y# v2 ]( ^PixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表
( T* ]1 x/ a- o, u5 q
- ]2 n: Z+ y+ W7 d- Y" y" [# j% \3 Y" v. ?- u
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
7 N' B. z$ g: V+ T   而且偶爾會有影像被切割成好幾塊被換位置的現象

4 J+ o& z2 f8 [. @  d  ^8 V$ _( `' e- D& i+ \+ y
我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表
3 D2 ]$ w2 H9 Y7 v3 W1 y我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?

$ d( y2 N8 y, i+ D
" q9 Y; v3 z6 }- ^0 Q7 W請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊. W" A- L3 E: Z$ O% f
可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-6-18 01:55 AM , Processed in 0.133517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表