Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!
  U6 p5 `  D4 s* R0 K  n# ?, Y' }  B1 S# R( ?, M
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);
' ?) K- j0 ]. u# F; U0 `8 E    input clk;. Q5 `, r: X/ n% P
    input rst;7 l; `: y8 f$ _: H
    input [7:0] R_in;" E3 `) f& g) f/ D, p, R
    input [7:0] G_in;
) C" ?7 p8 n3 u" _% Z    input [7:0] B_in;9 ^9 {8 Y  b+ J7 S( e$ ?* h4 _: c  b+ p4 @
    output oRequest;! d2 n( J" U0 d
    output oVGA_H_SYNC;- `" c  ^/ Q/ o3 U! n  c
    output oVGA_V_SYNC;
- W6 t, w7 d2 F  o4 f* q6 z  D9 q    output oVGA_SYNC;! H4 {7 B1 i+ t+ k
    output oVGA_BLANK;3 s$ [$ G) ?$ L  D# K
    output oVGA_CLOCK;9 y4 [8 N+ _; ~+ U- l, _5 I( V
    output [7:0] oVGA_R;
2 }. t0 o" e8 ]! `# B0 a. M    output [7:0] oVGA_G;
; d1 v/ H; K8 w* M    output [7:0] oVGA_B;& y6 |# f- Q6 x* a
         & m4 Y2 ^" D6 w7 F# @" a
         reg oVGA_H_SYNC,oVGA_V_SYNC;
9 @3 r* l: h5 F6 ?. b$ x- o9 P         reg oRequest;
/ G% |& `4 ?1 h' p: C5 C) U. N' w         reg oVGA_SYNC;
% A, M8 u* Z% H! }: ~4 J         reg [7:0] oVGA_R;: w* k+ X% L5 ?
    reg [7:0] oVGA_G;- S. \! D$ K) b6 B) h
    reg [7:0] oVGA_B;7 v7 ]+ l- d6 k: c  {
         ) x# Y9 I2 O* f; B4 m$ E
         parameter LENGHT = 1024;  g, T. k# D1 o( K
         parameter CNT_SIZE = clogb2(LENGHT);! R! Y1 H, h) C6 V* l
         ) t- L# O2 z: z
         `include "VGA_Param.h"
- K! B+ K7 W- z/ {% j9 S% T+ U( X% l         8 |' y# v- ~+ q! Z0 b: |
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;, F! M# _, ^$ D* q

/ Z/ O1 B' k+ l; t. Oalways @(posedge clk)! s( F3 \' i  r- o, U. D+ p
begin
  t$ b  h& h& U0 s  Q6 K  if (rst) begin1 Y8 a0 W" c2 O! b( ^
   oVGA_R <= 8'd0;6 t1 H$ D6 w4 r$ t
   oVGA_G <= 8'd0;
  ^% y, z+ b" b- F   oVGA_B <= 8'd0;
  X$ Q: I) l* f5 G  end
9 P8 M$ i4 p" Z$ B) i6 Y% b! W  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
+ [( u, ?' a& h   oVGA_R <= R_in;
/ L' u( l$ A3 D5 u  L5 ?   oVGA_G <= G_in;4 S! e! N7 r  t& d8 w
   oVGA_B <= B_in;
2 \" N& I" w" y7 L) {9 K6 Y  end$ \8 r9 w; O, B* @1 a/ [
  else begin
3 o8 p) J! u% k5 _3 b( r   oVGA_R <= 8'd0;7 O/ t7 Z2 i5 I. w8 a! e- m& q' T
   oVGA_G <= 8'd0;
$ `- ^) b* M( ]) M7 ~, M   oVGA_B <= 8'd0;
& ?0 Y7 I0 V0 ?; J' Q  end  o% O  v6 }8 M! e) z% Z
end
9 J# Q6 U9 Y* [4 Y: Z3 W% h3 N( l# l% T
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;  w6 |( q/ @" y- n
assign 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;
. n* D, n/ i( e  H3 R3 ~: f4 zassign 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;
$ O, t( y& F& ~7 d7 j6 V- lassign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(+ V- z5 ?( s6 i$ q* g; L2 b
      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" ( d  q) @4 q) [# A0 g$ t( b" N
      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b15 l7 z+ f/ v9 a$ a" w1 w& R
      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
9 Y% A; ^, N, D   ) ODDR2_inst (. J$ M+ S) b: H- p3 Y  {
      .Q(oVGA_CLOCK), // 1-bit DDR output data/ Q9 `* I/ ?  Q: Y) w
      .C0(clk),  // 1-bit clock input
, d' T4 u6 m0 S      .C1(~clk), // 1-bit clock input
: F* X9 o# S4 y! G      .CE(1'b1), // 1-bit clock enable input
, `1 a% }, \/ b4 F& u" o      .D0(1'b0), // 1-bit data input (associated with C0)
7 Q- K/ K. |) I( U6 ]      .D1(1'b1), // 1-bit data input (associated with C1)
' L" x3 A$ o. B      .R(1'b0),  // 1-bit reset input
/ B5 \! r1 k, _5 A  [: L" l9 E5 y      .S(1'b0)   // 1-bit set input* w6 c, ]6 O# p
   );
; E9 k* A; m+ J( N+ t) t# d        3 M7 e- A: w" b7 `7 a
always @(posedge clk)2 u, L" f7 d% v3 ^! A, r6 {# l
begin& n5 d3 p' J; m3 W/ m" N; w+ t
  oVGA_SYNC <= oRequest;7 ^  q  K/ t* V# I7 H
end        ' E  w8 p' ?( n7 e5 c. b4 r/ A
7 ^$ s4 T; s- B9 s
always @(posedge clk)
- W/ `6 m, F6 j( @/ i7 n4 c0 rbegin
; _; J! {: H# Q" E# |1 E( s* Z  if (rst)
8 d" r+ O9 L6 ?) w   oRequest <= 1'b0;
7 F% w- i) t4 P! t* D9 Y% a  else begin
; L3 o% n) d: m0 ]% R% N    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))2 ^6 z7 F% E4 J$ ?
          oRequest <= 1'b1;
: K! R% n. U0 t6 v8 c# C- s7 T: ~         else
& }5 A" |1 d7 |/ q  A$ H          oRequest <= 1'b0;
% H5 o( q: w7 a4 R2 o5 ~/ J. p  end; N7 X, R% k% X/ C- J+ M
end4 X0 v) [$ Q, R; F
         
& D, |' e/ G5 A; N//        H_Sync Generator, Ref. 25.175 MHz Clock2 Y4 ^" J+ t  i
always @(posedge clk)8 n2 A: U* E" z1 g4 W/ j1 r/ C
begin+ H4 f! y( I: w% y+ s4 K
  if (rst) begin
$ I% S; x! @4 ?" P5 [: l8 V    h_cnt <= 12'd0;0 P, G& v( }$ B5 L/ `
         oVGA_H_SYNC <= 1'b0;- r/ b6 I3 q% J$ D, |, K  ^
  end
7 W- L7 O, x! S4 X" O+ k' H  else begin: o8 g% K" y" A8 r  l! K  g! U: g
   //        H_Sync Counter2 u9 P. u4 P% `3 t) [
   if (h_cnt < (H_SYNC_TOTAL-1) )
# z) D; [# B: q2 b& W# U. D          h_cnt <= h_cnt + 12'd1;
: W" S0 h8 U( \; m, z0 i   else% `- o5 @' \& z
     h_cnt <= 12'd0;
* s# a4 ^, U; p          
, a4 t6 p- h9 q+ U9 J! }" x        //        H_Sync Generator+ f0 V2 V( [- H  \. |
        if( h_cnt < H_SYNC_CYC )! [/ Q1 L- V0 ]  s$ U9 E, m
          oVGA_H_SYNC        <=        0;& a+ ?( O; t0 q$ y, H  t! g1 F
        else
4 e! t. p, X4 I: |3 D" P  H          oVGA_H_SYNC        <=        1;0 l0 C6 m8 `: z+ k& R' R
  end
6 G6 J7 c' N! v- ]+ M3 |end
: O! O" P" G1 ?( r( L
" I/ u% X* P$ q$ I* |always @(posedge clk)% N1 {* m7 u5 @7 D
begin4 q0 g; I1 l/ s* J, o) S4 I
  if (rst) begin
; m( ~7 U$ ]5 Q' Y' W9 h/ E& x' S. i   v_cnt <= 12'd0;4 j( w8 Z: w( Z  ^, Z) i" q
   oVGA_V_SYNC <= 1'b0;( g+ k9 E  a0 b
  end4 m. y8 ^! |7 ]+ y
  else' A3 D1 _* {3 X  u) t4 @4 q
    if (h_cnt == 0 )
6 a9 g6 }3 R8 r# B* ?          begin+ }9 W; m" I- B! e1 }
            // V_Sync Counter+ E; _6 _+ n/ d2 [( V
            if (v_cnt < (V_SYNC_TOTAL-1))
! |: ^. ?: r2 x: h* U  z9 Q  h2 R                  v_cnt <= v_cnt + 12'd1;" m+ W2 c$ W; r4 B
                 else* B& |$ n# ?, M3 [6 E
                  v_cnt <= 12'd0;6 {: \* `' |5 w" f& u
                 //        V_Sync Generator
* G8 n6 b+ M) }9 [                 if (v_cnt < V_SYNC_CYC)1 i* E. A( q0 L/ x
                  oVGA_V_SYNC <= 1'b0;- {: d, I5 o/ {
                 else8 O" j% J' n2 M7 N* q. U
                  oVGA_V_SYNC <= 1'b1;
& a: J" j' Z( X2 @  i! W1 U          end
7 c! W" Z0 [2 f* \end0 y7 T  [- `6 e2 D
. N: u7 G- h) q0 H) g" k& S" k
0 o, ~) N+ l& x9 @* ]: @
endmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?! G( X' E7 D0 }6 z

+ u) _3 G. ^/ o5 N% F+ e你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
# q$ N0 H4 F( _; L- M以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表
- C- c! z5 }5 o- L1 Q2 o& k/ _6 ?你的code應該不完整吧,很多參數我找不到你給的值?; K5 H) |& y* {0 {6 ~4 M
4 v+ a! [& S3 v: h" p: C: h! ^
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,* g, t3 g5 q6 v# h- X1 w  A1 l
以及是數位或是類比的,在去驗證code吧。
3 H0 |3 \/ b2 B" l/ p: v% j7 c: |3 m6 }
1 L5 G6 O7 s% ]
PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?( X! f0 \- J5 a1 c9 I6 w, j! ?) K) w
我是直接輸出為VGA, H.V.RGB, 送到monitor使用
# v! [$ f. v! K) W9 M, [& M9 |* Z不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
: R; ~( P& B3 T6 i; _VGA輸出是FPGA->ADV7125,透過7125去做轉換) c5 d0 [- ~/ I& j0 _5 Q
現在用此份Verliog code已經實驗出640x480 60hz
! g, |/ U" Z. n2 e$ P9 N7 Z但是調成800x600 60hz出問題
( S/ ^* S$ I4 X* B測量H.V and PixelClock為正確數值了( G& o7 x8 K) q+ ~, {! z
不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題+ ]& o+ T% O0 P
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
2 L5 V6 c* U9 u& x3 C. S( D2 b" k$ g6 _, {  @/ _! o
你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表
3 C2 ~) e. d, a/ W! Q! u假設你的VGA verilog core設定沒有問題
/ P/ B0 e- L$ o) B6 T你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size1 w- h0 R* f: J; w' X1 [- }

  S) K% A& G& r3 `% ~你說畫面出問題.是否可以解說一下
+ G& r5 Q5 l6 ]: \  @2 t
# |3 R* v2 ?2 u: v) f) H9 }/ E2 q$ q
1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)( [( f1 d; U2 s& u
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,$ U% E% F; i0 f* g
   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core7 a2 T2 _1 P7 W1 k' I& S; x1 Z
我只用過xps_tft 而且是在edk內
0 v& l; U2 i& A1 {4 k9 M' r; |& a2 E5 s
這樣聽起來像是你vga memory size 大小設錯了) t9 d  Y  C1 |- V1 g3 J- j
我之前在edk內設錯時也有類似的狀況. 4 v: F; I( S4 w7 v) g4 F! ~
可是我不知道你的情況是不是跟我一樣8 i: T3 ?9 P- \! L

& v" W  A7 }0 M9 m) N剛剛看了一下你的core$ k0 \7 ?2 ]. k7 {; `9 H1 j3 s6 w  J
設定值應該都在 VGA_Param.h 內
  `3 h$ G- r  X- S3 dinclude "VGA_Param.h"- K1 d. [  Y& X8 ~" I

; H2 P, [4 }' Y) s[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表 : ^8 H* g3 ]+ L* H  I# K8 S
說真的我也不知道這要在哪設 因為我沒有用過你的core$ A! P8 `6 @) O8 e& |4 H
我只用過xps_tft 而且是在edk內/ r  f3 @' d. e  k

: Y% B* @* [) ]- Q# P這樣聽起來像是你vga memory size 大小設錯了
- [9 u3 |5 q; l9 j( T7 l我之前在edk內設錯時也有類似的狀況.
/ D' U1 U9 g+ A( ~可是我不知道你的情況是不是跟我一樣9 C. f+ P8 p6 N( P" d0 d8 ^- ?$ _$ y$ z
...

* l, w  Y3 Y8 [8 Q' ]9 R& ~6 |$ d0 e
//800x6002 \: Z# V, y- n- @- ~, r5 _
parameter        H_SYNC_CYC        =        128;
0 e5 @( N  n' \/ F( a: N& kparameter        H_SYNC_BACK        =        88;
7 {1 V% X( ?6 [! _" cparameter        H_SYNC_ACT        =        800;        //        8003 Y! O9 p( v2 t1 ~- c% R- d
parameter        H_SYNC_FRONT=        40;
, x6 T7 R( I7 F; a. ^6 Uparameter        H_SYNC_TOTAL=        1056;2 C3 J9 @+ G  l2 C5 R5 u% b  g; f
//        Virtical Parameter                ( Line )
$ g. C( H/ G( h* |# ]+ dparameter        V_SYNC_CYC        =        4;7 ?4 z; M9 D9 o, v0 d4 v
parameter        V_SYNC_BACK        =        21;$ r; [" L: l) U# V: S" D: F5 R5 ~  N
parameter        V_SYNC_ACT        =        600;        //        600. A  Z( K& T8 m2 k( b+ U6 b9 r3 c3 P
parameter        V_SYNC_FRONT=        3;
* v/ B5 m/ V& h) yparameter        V_SYNC_TOTAL=        628;% i1 D: A# v$ V3 C  V' o- E
//        Start Offset
* X5 x" l) ~; ]0 k) Nparameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;8 a0 }6 B/ ?& R4 {5 I) w" z4 V. U$ w
parameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;
# d- R$ c% H, x7 ~7 o. \+ Z( i, J5 d7 b3 S6 d7 V% t8 w
以上這些參數應該都有設定對,我是follow vesa standard作設定
) v; C% M3 P9 h不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源4 h0 H: ^4 C9 w0 v( O4 C1 U
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,, z; A6 H, r2 Y3 @% L8 N% s+ Z! A
不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表
  ~( k/ @( d) H/ ]& X- o4 Fclk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,; |& k7 [% ]0 U
不過可以查查看。

! U/ g  {& L' j1 f7 ]. @; j, z" j/ l$ A2 y( J; {
預估應該不是參數設定錯誤,而是IP有問題吧?. Z+ X0 M  a6 Q9 \# ]; E; W  W
不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?6 M' G% ]8 W% ?+ ~- f! j3 l
想要自己修改看看,希望有人可以提供啊!, }* z( S. ?* v/ t6 j+ l5 D: D
感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表
4 x( o! c  z7 w: B再講一下自己手邊版子的架構好了
6 r( a5 n! l8 K$ s! [5 Q! QVGA輸出是FPGA->ADV7125,透過7125去做轉換/ p8 I2 r) U" n2 f. |) `" r
現在用此份Verliog code已經實驗出640x480 60hz# z& x6 t( c1 k/ W1 r
但是調成800x600 60hz出問題# O& ^1 P, }" A4 X, }
測量H.V and PixelClock為正確數值了
, l' I) h3 K/ [( n不曉得那邊有問題 ...
9 S* E# ?" m  A8 A$ `( d

' e5 k% ]+ M5 w5 `$ q請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表
$ ?0 Q- A8 S! U2 P: k6 P; |請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
$ m9 u6 C9 Q" G8 o5 w* C

" x3 S$ R2 ^7 E4 n嗯!! C" g) m0 b: \5 x9 S' K
H:38KHz
  _* z5 C( D' I& d4 a4 pV:60Hz5 a6 s; X: {8 ~# }7 z1 b2 J- [" j2 c. h
PixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表 7 s  j- N' O! _" p

  `  W3 {' T" @) l
: |" E2 H% }) c+ ~# J1 ^3 m2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,7 I& o" i8 ^" V+ B- B* F
   而且偶爾會有影像被切割成好幾塊被換位置的現象
+ @, a6 l1 r6 f) J" a) k3 V0 ]+ m

2 C! @/ r9 I1 ?0 B我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表
% M6 }: X( A' o我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
9 K6 A: F+ y1 M0 Y8 g) l4 g& a/ P
" ~$ U% m! _$ @
請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊, ?7 W$ |2 x6 K4 c5 e
可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-3 03:46 PM , Processed in 0.118007 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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