Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!
- ^5 M- b- ~9 m' \8 j6 l  u6 N: ?0 U5 e" j/ E5 q. @; ~
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);9 u  ~( ~6 ~! m5 F" E
    input clk;) b! P5 l' |' |8 M  w. P7 x
    input rst;
) q7 H0 H' t" J6 l$ e    input [7:0] R_in;7 O4 ~$ T5 L" J7 H" F
    input [7:0] G_in;3 O! A5 j% _3 x; W
    input [7:0] B_in;" @: U/ t7 g3 V' v
    output oRequest;$ Z! T) ?" s2 Z1 Q
    output oVGA_H_SYNC;
1 q  e5 W; [7 n9 B! l) I) \% `    output oVGA_V_SYNC;
  r6 `% w. z( m, \' d    output oVGA_SYNC;
: W# q. O3 m4 @% j    output oVGA_BLANK;4 G- ~2 h, e3 w4 v
    output oVGA_CLOCK;
$ i7 b2 o9 e1 `1 O: O$ u    output [7:0] oVGA_R;
! o1 ]1 ^& N$ I  R    output [7:0] oVGA_G;
2 _# \8 }8 e8 p8 @# [0 C  a$ J    output [7:0] oVGA_B;$ x) `( ~: R( f" x( {. D
         
* k. f$ [& r: w         reg oVGA_H_SYNC,oVGA_V_SYNC;6 G3 {: l, N) V) ~
         reg oRequest;5 `: }, @4 P1 b
         reg oVGA_SYNC;$ W2 ]6 e% g5 h% {+ Y) w
         reg [7:0] oVGA_R;  T( |/ ~/ E! s" Q
    reg [7:0] oVGA_G;4 C$ \  H  n" p- x5 H5 A8 ^9 _- L4 I
    reg [7:0] oVGA_B;
4 p3 C6 |9 R: p  v         , Q+ P# X7 ]9 j9 [4 n! |9 Z; x
         parameter LENGHT = 1024;! n) h% M9 p3 n) V
         parameter CNT_SIZE = clogb2(LENGHT);7 @: c# R! e2 b) V( @. ]
         * d6 o; f! a/ W5 S6 |$ {
         `include "VGA_Param.h"3 I0 S5 |5 f" t
         6 f5 t, ?7 m1 e7 |, w7 ^: j5 Z
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;6 t7 h7 f/ b) t) _8 x# `

9 Z5 W% Q6 a% `* [1 O6 N9 I8 Ealways @(posedge clk); d4 r  ^6 B3 G1 E8 m. \
begin
8 `' q& n% C* g7 c- e9 A( L% W  if (rst) begin
4 s% Y3 z. _5 \6 _. p   oVGA_R <= 8'd0;
/ E; m; P# }8 F+ k! h   oVGA_G <= 8'd0;3 K- N  V8 m$ P# F: H( B6 V% ?
   oVGA_B <= 8'd0;/ U+ ^+ P% i. M. r) u8 H: X* C5 w0 j
  end
1 q( X) R7 h; Y- O9 Y  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" u2 |. Z' K0 L. n2 \
   oVGA_R <= R_in;
/ I- T# M3 m7 }! ^% o0 I/ F! {   oVGA_G <= G_in;
( ?3 ^% a: S# u. _# Z, B   oVGA_B <= B_in;' W* r5 n% Y- l. C
  end
$ I9 a  Y" I& c# |  E' i! t  else begin' ~' i, X6 a# X  j0 `' U+ t, ^
   oVGA_R <= 8'd0;
! o- ~* `1 B% Z9 w   oVGA_G <= 8'd0;0 b$ X5 c* N: w9 ^$ ?9 ]6 ?5 o3 d4 ?
   oVGA_B <= 8'd0;
6 y' _5 o& j& o' @  g. r5 T1 S  end
  c" s, ?# j, H5 w8 mend
9 F3 M, v" q: P2 Z
& `4 o$ p8 B" {! }4 w3 Kassign 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;
8 }" ]& D9 q- e' P8 aassign 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;
/ u* K3 T" G. ^& ^  X4 J9 \& ^- cassign 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;' Z( s. Y  {' o+ i' }/ k
assign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(
/ I1 z$ G# E+ i+ H, M      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
) B( l; e5 e  ?* r0 x) i, X      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b11 I/ V. I; ~8 Z5 W9 z  {/ N
      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
5 Z9 }! w  S  Q( h) @   ) ODDR2_inst () F1 \' `& ~0 P3 D
      .Q(oVGA_CLOCK), // 1-bit DDR output data, w4 f) F* x$ R6 e+ G; b3 Y$ x
      .C0(clk),  // 1-bit clock input
1 E4 t: w: g" m. L+ G      .C1(~clk), // 1-bit clock input
, L; d8 e$ s& c: Q      .CE(1'b1), // 1-bit clock enable input
/ n' @. j8 _* I! `      .D0(1'b0), // 1-bit data input (associated with C0)
9 r. E" e8 i' l3 m, ]      .D1(1'b1), // 1-bit data input (associated with C1)
5 T; L/ M. c" x+ t' {9 R# _) D5 M, m% x      .R(1'b0),  // 1-bit reset input6 y8 x3 U; h6 Z
      .S(1'b0)   // 1-bit set input) F& o% _; s4 n* p: _
   );
2 {8 n7 g0 Q( H/ a# I  }       
; o5 f8 ~2 i5 ]& F5 M: g% Y) z% F8 Q: Kalways @(posedge clk)
, Z1 k+ `/ G1 P8 g: Lbegin: P1 ]7 r' W7 `( D; D
  oVGA_SYNC <= oRequest;3 |! w' D! q: C& X- i
end        ( T: F! L  l# B9 V( }, t

2 K9 ]8 T1 ]1 V: zalways @(posedge clk)2 u5 S  e- v" {1 H* J/ Y8 R
begin
- g) v9 N/ X' C, F8 W6 i, y  if (rst)
5 G8 a1 z) v2 L! j   oRequest <= 1'b0;8 M3 f6 Z. \. t) y5 i" t# w
  else begin
0 `0 r% }# [0 T) O8 h3 J$ l    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))
4 m: g2 w" G% l& G% i; ]# c+ a          oRequest <= 1'b1;
3 M# I- ?- w* ?8 z         else+ s: \2 l  a  ?* J
          oRequest <= 1'b0;
# w* h! a5 n" l. ?" Z  end
2 Z# P4 Q3 D( A$ ^* F0 @9 K( C; bend( e2 Q& b* G8 P. v( I' Z
         ' T+ D) y" n) F2 k% \, G* b
//        H_Sync Generator, Ref. 25.175 MHz Clock
" v* ?# Q# V" palways @(posedge clk), e3 B" b9 F; M6 \) R
begin5 H. z. k' D" P/ s* j
  if (rst) begin; }, K% L  ~" |4 c5 C* l3 ]+ [( h
    h_cnt <= 12'd0;' ?0 z9 [% U8 c, P
         oVGA_H_SYNC <= 1'b0;! x" E/ Z# F2 J" y
  end
! y5 Q4 d4 ~* p  else begin
6 y- {6 \1 Y- d  p. g   //        H_Sync Counter
: v6 a7 e* V5 ?   if (h_cnt < (H_SYNC_TOTAL-1) )! d* y1 l9 ~$ O7 u' O3 Z: ~1 Z
          h_cnt <= h_cnt + 12'd1;
8 O% b5 \# M4 C1 O+ g- _" E: y   else/ [0 c6 ]) h# {; b: I! z
     h_cnt <= 12'd0;7 j# a5 E" N" w2 r& c$ k' G: f
          % h, B0 a/ K/ h. b3 T
        //        H_Sync Generator0 Q6 U" w: m: _" Q
        if( h_cnt < H_SYNC_CYC ): s0 a6 d6 g) g( _4 P$ }
          oVGA_H_SYNC        <=        0;
" e! w& t! `, P( E        else
' }: W  l: a/ n: t; S1 V  I          oVGA_H_SYNC        <=        1;
, o: q2 g9 r( B, S% F% j+ A3 Y7 x! o  end
! t4 M& ^1 x' U# z* \1 lend
7 C; v2 |5 P( @6 \$ N$ ?6 b  i# f& `9 y1 N5 t! v; f8 V
always @(posedge clk)
( j6 [% V. f  jbegin
' p) u  m* }5 E7 E) w) c  if (rst) begin+ D& p, _) l+ Y3 k  X  H  b1 v6 t
   v_cnt <= 12'd0;5 M6 Z3 i" S' x+ G$ C4 \# b
   oVGA_V_SYNC <= 1'b0;
' I7 M$ T; s3 l  z2 C3 S  end" G. b, |- E- e1 |% [7 F$ U. N
  else
% [0 L  L: e; c1 B  \" t+ x1 B    if (h_cnt == 0 )) C+ M2 y1 S: q/ m6 j
          begin0 z5 e* @8 d0 m' O) L
            // V_Sync Counter( V/ g' z: e+ g7 M4 u5 Y
            if (v_cnt < (V_SYNC_TOTAL-1))
' l7 Y5 ~, ^3 q( W7 t* ~1 x5 w' t                  v_cnt <= v_cnt + 12'd1;
0 T+ D7 g; Y9 H1 W/ e; E- _                 else
: p3 ?* ?  ~8 B5 o8 P                  v_cnt <= 12'd0;
# A6 T& Q! e6 W) p2 M. I                 //        V_Sync Generator3 X" N3 ?# N( a9 Y. I& W
                 if (v_cnt < V_SYNC_CYC)6 _. L$ b* s' x; _# K
                  oVGA_V_SYNC <= 1'b0;
' n+ r0 E2 Z) t                 else
3 w3 L& [0 O* n0 z3 v) M                  oVGA_V_SYNC <= 1'b1;
1 }9 F8 o0 Y. @  r& v7 ~          end
6 N  k5 i0 @! |* _( iend6 k" H3 o+ X- U& |8 h% P, }( e
% B# M0 q' x9 K" W

  a  p7 G. m' \* C8 hendmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?
* s' s6 j' A7 A3 B+ r* f
' t$ E( W! I8 l" b& `/ Z. a: o# _你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯," G( T) i$ S, T# T
以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表
' x% A% F8 H7 Y2 m6 D0 h你的code應該不完整吧,很多參數我找不到你給的值?( {6 H+ D" I) [. i4 A

, M* Q& m/ t9 C: U' i你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,6 b) F) W1 u- y/ T2 T/ {% X
以及是數位或是類比的,在去驗證code吧。

# A& J0 E0 u, N; d+ t% _3 L
2 B1 I  d; W+ t8 ^PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?
; ?2 Y/ |+ }: ?1 C5 E我是直接輸出為VGA, H.V.RGB, 送到monitor使用
& {+ o" H% k/ E% y0 k不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
4 o9 b" C% I$ @2 T' a6 b" XVGA輸出是FPGA->ADV7125,透過7125去做轉換: e$ `% N7 N- U3 |- _
現在用此份Verliog code已經實驗出640x480 60hz
! d2 @6 M/ y2 a但是調成800x600 60hz出問題4 k4 i  g; E5 d' T7 w2 E( |
測量H.V and PixelClock為正確數值了
1 e& j- [. P' f8 Z5 |  z! f不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題
/ c6 F/ z& [; p. g/ s你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size+ _2 ?+ W$ f' c$ W  v& G; o# X: p

! r; k- E2 Z+ D* e1 @你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表 ) a5 n& V7 Z% Q! ?3 E
假設你的VGA verilog core設定沒有問題
" }2 {! `$ b- {7 o8 J7 [你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
/ U* L; j. ~" x4 t; @# P
# }4 W6 v! L, c* e3 a( p* w$ Q你說畫面出問題.是否可以解說一下
: P, I+ U8 B1 ]0 X* ~# m/ \+ w
0 z% O; f. k3 H
1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)
2 k% m2 k4 l$ d; U2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,& e" k, @: N5 M  R% O
   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core$ S  A$ O# @1 ]' M
我只用過xps_tft 而且是在edk內
: i) {: k4 k* t, {7 u! ?0 K4 E2 f& q9 }2 d1 D" v4 \
這樣聽起來像是你vga memory size 大小設錯了1 r' T$ }" J2 {7 c1 O) W
我之前在edk內設錯時也有類似的狀況.
7 C  S  Y, D% B9 l$ e可是我不知道你的情況是不是跟我一樣% O, n' q$ m" V

; n# a4 r; B5 ~% ?剛剛看了一下你的core
4 e- k! T/ o# l# ^設定值應該都在 VGA_Param.h 內
+ P. G% B. a/ @5 T7 I* W! Ainclude "VGA_Param.h"
. e/ h5 g4 r, g5 I4 Y6 J0 o
! O: Y; h' v' C( N, B[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表 : l/ x" P8 ^- j5 z- ~' e/ f  e8 D
說真的我也不知道這要在哪設 因為我沒有用過你的core
- ^" L) t7 K7 x( t% G我只用過xps_tft 而且是在edk內
1 b1 L, p0 d/ P1 ~$ G6 m4 A
, p1 G/ D! V8 C8 J- u* `' _5 }這樣聽起來像是你vga memory size 大小設錯了7 [) H% O, U5 y% X5 T" e. `5 `% i
我之前在edk內設錯時也有類似的狀況. : h+ X  I! _9 W! z+ \9 I( s
可是我不知道你的情況是不是跟我一樣
! Q- X8 ^3 p" S* u+ x* w ...
- y, W4 O. k5 [$ x: L/ t) `4 _

9 w  o+ c) Z* a- A9 u# F" C//800x6004 ?; b+ [( D# @3 k7 v4 n
parameter        H_SYNC_CYC        =        128;
8 X9 i) `! i% xparameter        H_SYNC_BACK        =        88;
5 D+ F6 g3 T" {% e: bparameter        H_SYNC_ACT        =        800;        //        800
1 m; ]5 a8 j8 Q# _$ Gparameter        H_SYNC_FRONT=        40;
9 H! V$ m6 ^1 p# j2 M  G: A: Rparameter        H_SYNC_TOTAL=        1056;
1 k5 `2 w1 M( O4 p, O! j9 m* }//        Virtical Parameter                ( Line )( O0 b$ @9 i& \' z/ Q; }
parameter        V_SYNC_CYC        =        4;$ o2 I% g7 w3 ?+ ~7 a
parameter        V_SYNC_BACK        =        21;# ?* f4 j! J4 L  D
parameter        V_SYNC_ACT        =        600;        //        600
* v. J9 t" B/ E3 L# Kparameter        V_SYNC_FRONT=        3;
$ N4 w8 x  Y  A- q  wparameter        V_SYNC_TOTAL=        628;
7 y" E4 ~8 Z: F* {; V; ~//        Start Offset) }3 f+ S9 A2 _% Q# m
parameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
( j: u% }2 e9 o6 e8 V+ Sparameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;
/ c7 }4 `6 ^, o9 R
+ N. Q3 [2 s2 Q. }9 B以上這些參數應該都有設定對,我是follow vesa standard作設定) g' B9 R) ^6 ^* u
不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源/ Z- f2 b2 h$ D/ n9 b* H
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
, W; Q9 O7 Z+ E* Q不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表
, n1 e8 {& X& ~2 A$ X2 v, u$ |clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
+ C5 n0 G& l. T不過可以查查看。
: y4 K% d$ @: d3 t3 a7 F" r( v3 w
% r$ c" s2 D7 L# p9 K
預估應該不是參數設定錯誤,而是IP有問題吧?7 b& b! ^( V' N8 W1 E
不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?" j- b# ^" J  B# p  [  q
想要自己修改看看,希望有人可以提供啊!. h+ f' w8 u6 X! h9 J8 Z
感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表 & B1 Y2 K  L& {; z- Y# Y8 ^
再講一下自己手邊版子的架構好了
9 i, R; X. n) C: m& d1 M! JVGA輸出是FPGA->ADV7125,透過7125去做轉換
) J7 l8 O8 r+ w2 r2 `" V現在用此份Verliog code已經實驗出640x480 60hz
/ k; \- q" F! S( ?" M% I但是調成800x600 60hz出問題7 x/ M& N7 U% f% m6 v
測量H.V and PixelClock為正確數值了8 H% w% ^1 H- w9 r% ]4 ~6 f
不曉得那邊有問題 ...

3 c/ c4 |9 v# I1 f
8 Q4 w" J' w! Y4 _+ f請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表
4 i6 t6 Q8 I1 @; v& X請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?

* c# _) h; f4 R; x$ r
! ?* g! s  \1 }/ M# A3 V嗯!
' D9 R) \7 |6 s7 xH:38KHz. O) G% F" R4 o2 I- m) C4 M: |
V:60Hz
* {. o  R0 p; e2 X3 D& `# pPixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表 & g$ J+ R, S4 x
$ L; J! G1 {3 H9 @4 d0 m

, N/ c3 w1 d! a; F3 w: ?2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
& G( K/ h0 C3 s) C: R   而且偶爾會有影像被切割成好幾塊被換位置的現象

" X( ~. |1 h) d2 _
: r: T# \. K" }  a$ N* ]我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表
+ \9 F0 u5 Q+ q, U0 s7 L$ r我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?

: p# `) `/ y% k# a) Q
; z+ V* [  R- b' v& d2 w$ x' y2 F( \請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊9 F- Q# @4 R# o+ u. z" [0 ^
可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-18 03:48 AM , Processed in 0.137018 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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