Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!
, L7 m& z& W: q- y* i) `+ ^0 k% e% {
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);# |3 i# S# {* N6 _+ M8 n6 `
    input clk;3 M: S8 v; f6 {5 J: _: M5 S
    input rst;) D8 \) A! b( h" C1 w5 X
    input [7:0] R_in;
, o( W3 \# ^* r/ O) |: N3 H% X4 }    input [7:0] G_in;2 @! z! r5 C* ^+ |
    input [7:0] B_in;. J) _# Z! A* g; K. p2 V
    output oRequest;3 y  W: b% G! U! u
    output oVGA_H_SYNC;1 w$ Q5 P  u6 G: {# ~
    output oVGA_V_SYNC;
8 a/ I# `- w4 V( W3 F+ ?& ^; _, _    output oVGA_SYNC;
- j# P" D3 E5 w) U    output oVGA_BLANK;3 I2 Z8 @) R' |, N! y4 F0 m. p/ g
    output oVGA_CLOCK;
6 I. K$ d5 A* f* [% n5 R    output [7:0] oVGA_R;
6 I- ], i( w+ Z% m& u    output [7:0] oVGA_G;7 E1 O4 ?+ a$ }6 x. e# [# W
    output [7:0] oVGA_B;
; J( m' Q$ A6 r         # J. q2 Y% x6 N  `* ^+ v
         reg oVGA_H_SYNC,oVGA_V_SYNC;
: D) m( B0 ]$ y- ^9 l) P         reg oRequest;
* c7 S/ |$ Q( ]8 o' L! W         reg oVGA_SYNC;3 O; b% f5 C( v+ k5 V- V0 x
         reg [7:0] oVGA_R;
9 G6 H' U7 j6 Q" r# \8 e    reg [7:0] oVGA_G;5 Y$ Z" U- O, a; B9 S  [6 E# o
    reg [7:0] oVGA_B;! @# \+ ~4 A5 c. e
         * `! f. A4 l; g! K, d' n9 E! }
         parameter LENGHT = 1024;
5 G8 n' y. G0 _5 C# V  J% u0 o5 S: [8 b         parameter CNT_SIZE = clogb2(LENGHT);2 g  E: K) s# p
         6 [, T. v9 T. f0 p
         `include "VGA_Param.h"
2 Z) T6 y1 M) `! k         7 G  ]; d: s! |8 L1 ~7 ?& \3 a
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;7 v4 X' D5 S% ?8 N; x5 g/ U
3 ^; l: _3 p* F
always @(posedge clk)
% m5 h9 p# Q1 ~begin
+ J0 J+ e+ q& `# R5 ?  if (rst) begin
2 G# Q" W* i+ [4 k4 e- n$ H& k   oVGA_R <= 8'd0;/ d  M) u2 _0 i3 |/ B5 p* s
   oVGA_G <= 8'd0;
' `  y! F8 e0 Q; H& K   oVGA_B <= 8'd0;
+ R3 i1 z. r5 C3 x2 S7 E" r  end2 t" u7 C1 G$ O/ v, X, 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; u6 U4 U$ ~$ L+ n; x- W4 ]
   oVGA_R <= R_in;
. G8 U# r8 Q! J! y- _' w   oVGA_G <= G_in;# L0 @1 E6 J  [
   oVGA_B <= B_in;
1 d. ~. B7 o" k# P- m6 Z, V  end( n5 P! P* e* Z/ r9 U
  else begin& B! e" x& x" G) W& L
   oVGA_R <= 8'd0;1 ]3 Z4 g3 J- j: Y- f( j$ d9 I
   oVGA_G <= 8'd0;
$ }3 \# s" K( P/ N6 r2 y+ I9 y   oVGA_B <= 8'd0;# j8 D1 j2 g+ n/ ?4 c. c3 ?
  end  I7 ^- {. m) Y' j- l
end
6 e- r. r" e2 d4 k: I3 E6 `
0 U. R$ X! [0 j5 F/ M; Xassign 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;9 u: c6 p9 A( ^: k) @
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;9 [4 d( C/ s5 ~
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;5 w5 A. O6 K* k  d- b- f
assign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表 ( s1 J' W+ M! @9 l' m7 h
我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
0 F: t$ p3 }; t7 i' ]

! u  j$ ~/ F6 |  l請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊' Y( R) }* r& c/ `) m% _* m7 i, @
可以指導一下嗎?感恩
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表 1 N1 j) {: Y; o1 a' [' o" a+ p
- v/ E6 D# P3 @: ?$ P; O7 T

; Y0 R9 I4 t6 L& i& V2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
5 c" |: ?5 x2 H: f( \8 M7 K! q# `   而且偶爾會有影像被切割成好幾塊被換位置的現象

( i2 s$ l5 T' a7 [) D2 e. a$ y6 E2 U' ]6 j1 V8 `+ O# H, N
我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表 7 U% G# ~+ y8 w$ I  l% P2 p8 x
請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
# c( F3 m" c. p
3 \' x5 P. @9 Y5 H( _
嗯!
" X9 r2 H8 S  V( RH:38KHz
) f, b- V3 e& ]1 s: w% Q$ p9 oV:60Hz, F" l  N+ P8 W  O3 J% A5 J
PixelClock:40Mhz
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表
5 v4 I: s' I) A$ a% O再講一下自己手邊版子的架構好了
: y* {$ A2 _8 CVGA輸出是FPGA->ADV7125,透過7125去做轉換
9 r. ]; u$ ]# c* B- a現在用此份Verliog code已經實驗出640x480 60hz! z5 X2 b2 c' ^/ ^# d7 r* Y
但是調成800x600 60hz出問題% o7 i2 X! F4 Z* U, f
測量H.V and PixelClock為正確數值了
% @; }, P9 t( ~- B不曉得那邊有問題 ...

6 F* D) D3 k9 L" j6 f& f/ r8 h9 J, @4 u, u2 v: I( m
請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?* d5 r- u) K- O6 A6 g* |5 \
想要自己修改看看,希望有人可以提供啊!
% d& @! c$ [% n/ d1 t: T6 z" r感恩
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表
% i* o% j: Y* ~  \clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,9 m+ @  q8 M$ s! D3 A
不過可以查查看。

* j  n/ j3 u' u% Y$ C) z9 k- ?* Y- g
, t) r4 c) X; P% W, @預估應該不是參數設定錯誤,而是IP有問題吧?$ t2 H( J& l& G. ]0 U" t
不曉得該從哪裡看起了!對IP還不是那麼熟悉!
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
) D9 J, F6 v: X0 d不過可以查查看。
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表
% u- H/ _- z( f- N& _: Q說真的我也不知道這要在哪設 因為我沒有用過你的core! T3 x2 G4 N+ U+ I1 N. k
我只用過xps_tft 而且是在edk內
. M/ B( k, v3 @- [  W5 O5 v7 q9 l
這樣聽起來像是你vga memory size 大小設錯了
3 @2 u* l8 H& N  V! c我之前在edk內設錯時也有類似的狀況. * l* c+ H0 E0 T; \; b7 E3 |
可是我不知道你的情況是不是跟我一樣- U1 V* e& R/ r5 J0 Q2 g2 C% P8 @, c
...

9 r- @; j' V  I2 R2 Y' A$ c/ ]* X
$ [& G% r/ F- k0 {; l0 s( {//800x6004 t8 }3 C* |) _) A
parameter        H_SYNC_CYC        =        128;4 E& `5 ]" N5 n+ g
parameter        H_SYNC_BACK        =        88;- {* o3 a6 r4 _! X/ `- \
parameter        H_SYNC_ACT        =        800;        //        8008 ~2 p! P  u' g) m  T8 ~
parameter        H_SYNC_FRONT=        40;) x5 [+ C3 x/ }6 H) n; Z, n1 m
parameter        H_SYNC_TOTAL=        1056;
# j$ [8 e, t4 I: ?% K2 i" x  T//        Virtical Parameter                ( Line )
( g6 B9 d+ `* x4 w- R' b# qparameter        V_SYNC_CYC        =        4;
3 m% V+ k+ b' w. j5 C2 ]& \# ]+ Nparameter        V_SYNC_BACK        =        21;0 {! |  f: s2 ?* ~3 t% l. A3 j
parameter        V_SYNC_ACT        =        600;        //        600) Z7 h8 k! Z: x  A& p! v
parameter        V_SYNC_FRONT=        3;
4 C' ^3 O3 R% `# r6 I$ U  P5 Zparameter        V_SYNC_TOTAL=        628;
- Z" @& l1 I' y' c$ K# a7 @* c//        Start Offset
% g/ g7 [  R& ?( Oparameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
' S) Q8 d3 I: C) f5 w6 u! `parameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;
, B) C' l, r& o' x- K: _' y$ d4 a: z% O8 W( L5 ^; `
以上這些參數應該都有設定對,我是follow vesa standard作設定
. I1 Y: Z! w8 H3 L9 x( D5 Q. X不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源1 A+ Y3 C$ g1 o) _% k0 ?
不曉得有沒有做過非xps_tft ip?
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core
9 V6 L- k$ Y9 Q- G, t$ n& g我只用過xps_tft 而且是在edk內3 h. m" n1 z: f# U% E1 h

: {. l8 i- w4 L+ d這樣聽起來像是你vga memory size 大小設錯了( D. \& @7 c0 [8 e* U+ F2 P8 ]
我之前在edk內設錯時也有類似的狀況. 6 u$ |5 \, a7 \$ [3 u
可是我不知道你的情況是不是跟我一樣
" h! X& ^" e* j* Q0 e% l" X7 {4 G2 `$ ]- J2 C: J% P6 d. ^+ M6 C  N
剛剛看了一下你的core
9 v9 `  c+ s! S- z9 [設定值應該都在 VGA_Param.h 內
/ B% l1 p, o9 I/ ginclude "VGA_Param.h"
5 ]% Z0 r8 i2 Y! {: h% {9 a& _% h. Q) \
[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表 1 @4 n. m. X  ^7 a' U! @( d
假設你的VGA verilog core設定沒有問題6 W2 a% I8 C" j0 J
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size" X2 F- j& ?0 l0 ^, g5 h  j# m. I

, b) D3 s$ b& O; \( c7 G$ l/ @1 z6 r你說畫面出問題.是否可以解說一下
( j. P) J4 I7 p5 Q5 Z" P, r% P; v

* Q7 p7 C' Y- \9 R1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!): @/ v/ y; @$ D6 m# v/ ~: m- H
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
0 N( |4 f0 T8 h+ H7 f+ q8 M+ |  X   而且偶爾會有影像被切割成好幾塊被換位置的現象
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題3 ~% |) t* M. T) i, \2 x
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
- P7 u" q! P' m: Y2 P" k, F
: B+ `! e% E/ d: R* y, u, @" V. L你說畫面出問題.是否可以解說一下
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
; `% i- [$ |0 N! G& p7 C5 oVGA輸出是FPGA->ADV7125,透過7125去做轉換# F2 l; h' o' s" b, V: t
現在用此份Verliog code已經實驗出640x480 60hz
! W# Z( x1 }$ U, X1 @7 r" M5 @5 s! m9 G但是調成800x600 60hz出問題
5 o* Q. R) `$ v% C& M; C測量H.V and PixelClock為正確數值了& ]# R+ d0 _6 j9 h9 L
不曉得那邊有問題,有人可以提點嗎?
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表 0 B' q% `3 V- F! m: @" l/ ^
你的code應該不完整吧,很多參數我找不到你給的值?
  m- V/ T/ y: c. o8 m2 i0 C: q" B* C5 H/ v5 ]5 k; \7 o
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
# N2 U/ ?% l1 c1 g0 ~* |! t. _以及是數位或是類比的,在去驗證code吧。
  G7 M3 ^- p8 @3 L8 N

( f/ A6 _! e: J- D1 R5 oPixelClock.H.V送出來是對的, BP不曉得你指的是什麼?3 i1 o, t& L: ^! H9 c
我是直接輸出為VGA, H.V.RGB, 送到monitor使用9 M* ~4 a' E5 w3 `% q  A" O
不是直接送給面板囉!! ^^
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?
# g) ?" I; E6 ^5 K9 O/ i7 h0 H
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
9 u; S. C) z8 G4 _2 M以及是數位或是類比的,在去驗證code吧。
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #($ S$ U* g7 x1 T; b
      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
; p! u3 Y/ d8 Z      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1; y  C3 u) c- i- n/ w
      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
. [5 Y' D7 N1 `7 ?   ) ODDR2_inst (& e: p3 z, B$ I6 l9 A
      .Q(oVGA_CLOCK), // 1-bit DDR output data
/ l2 v. X4 o3 c5 D: o$ Y! T      .C0(clk),  // 1-bit clock input, D' m- T3 I5 u$ N& A
      .C1(~clk), // 1-bit clock input% ~& B; p2 Q. U/ P
      .CE(1'b1), // 1-bit clock enable input
, ?, t( ]+ u8 A. W1 }      .D0(1'b0), // 1-bit data input (associated with C0). n# t0 i  Q7 ~9 Y1 \4 b
      .D1(1'b1), // 1-bit data input (associated with C1)
+ Q2 _, b! f" ^# w* n      .R(1'b0),  // 1-bit reset input
) y( \7 a7 {$ i# |) d2 S      .S(1'b0)   // 1-bit set input
  d5 m3 C$ Q9 \! ~! ^+ w6 i   );
5 N4 ^4 Y9 X% [3 f        * `# m6 k& _, Z- m9 r1 q* L1 k
always @(posedge clk)
# f+ d* w* j  q4 I; A/ _begin
1 U5 ^4 N2 c+ O( u& _4 O- [  oVGA_SYNC <= oRequest;; V8 w: o" a1 u4 @" N# l% G
end        9 A  [, n) p8 o4 C, T# W3 P
( {6 h7 k/ M5 t; d$ l
always @(posedge clk)  F) r6 o# W; b/ U4 F: k9 e9 P
begin
0 V' K" f; T$ S2 |' L- l  if (rst)
2 w' R. o# p5 E/ H   oRequest <= 1'b0;$ b8 Q+ v: l& k' C" m
  else begin6 j' L3 ^. B5 U4 Y
    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))
8 g$ ^' ^' o6 P% o) T4 W9 W+ f          oRequest <= 1'b1;
# C" n$ o1 R+ E% x* @         else
6 j8 K# u; |1 c          oRequest <= 1'b0;
( j  h4 N( z$ j7 Q7 C+ Q  end* ~* r$ ?3 w( @9 n- @% i( V% \
end5 Z: C/ C5 B' ?# s: N) ~4 D
         
! k* M  b+ Y2 j7 o0 ?! Q( D//        H_Sync Generator, Ref. 25.175 MHz Clock
' Y4 b. w4 K) i4 @  }# qalways @(posedge clk)/ \( H9 @  Y$ N" O' C5 v' x8 o
begin- `* K. G! d5 \/ y5 ^8 q% M9 {
  if (rst) begin
% a8 t! s* N0 ~  W1 g    h_cnt <= 12'd0;
2 l- K$ X' J) [0 g6 G1 {0 v         oVGA_H_SYNC <= 1'b0;
- ^- k+ I; J8 e; ?# e/ K+ K  end
7 _7 t6 C, O- U, l5 b2 W  else begin& X4 S0 v7 {2 ~. e! r% N
   //        H_Sync Counter- V6 z. @% B8 q9 z' ?
   if (h_cnt < (H_SYNC_TOTAL-1) )5 m/ f3 I: y  a3 q! L
          h_cnt <= h_cnt + 12'd1;& x$ H6 j/ {% ~* ^& l
   else
$ I$ Z1 q: J& J5 v6 z     h_cnt <= 12'd0;8 q+ {6 D" E# W, t8 R+ M
          
9 w, v0 E% h; i( ]! w! ?. ?        //        H_Sync Generator
* B  z' ]2 ~  u7 t$ Z8 \- u: f        if( h_cnt < H_SYNC_CYC )
& \. G; x2 u  T  z          oVGA_H_SYNC        <=        0;3 O" j, `/ K- A& F. Y
        else3 I  G" v  M1 F; w- A- W
          oVGA_H_SYNC        <=        1;
2 J- l- w/ e7 K' |  end
; i5 t4 _& f) Y. w1 a4 Wend' ?( V( I$ m' E; _
1 P; g( J$ `1 g3 U$ L) x
always @(posedge clk)
0 k6 L4 u# S# O* s& d& W; ^begin
7 q( b; v% f2 Y; r) w  if (rst) begin
  y9 K$ N- Q! @5 X& g% n   v_cnt <= 12'd0;$ d' ^# B7 d& A0 \- m& F- f
   oVGA_V_SYNC <= 1'b0;1 f/ L( v% \6 W/ m. c
  end& C/ w: k  k0 Z% L# }8 Z
  else7 j4 b* o$ e" ]3 X: r
    if (h_cnt == 0 )
$ h; x% n- |+ y+ w& x          begin3 f+ f. [9 z+ a# ^2 J/ L& R
            // V_Sync Counter) @0 o7 `- g/ z$ K) m# I
            if (v_cnt < (V_SYNC_TOTAL-1))1 ]# F4 f) M+ H/ u
                  v_cnt <= v_cnt + 12'd1;; ~; |# u7 J! w9 k7 L$ \
                 else
( u2 X8 R+ g+ z3 A( z3 z                  v_cnt <= 12'd0;0 ]& j+ _6 s$ M1 i
                 //        V_Sync Generator0 U. O! l# K2 A% C
                 if (v_cnt < V_SYNC_CYC)( |" [* a! d5 R* z$ ?/ S5 B& T
                  oVGA_V_SYNC <= 1'b0;
6 z7 f% Y5 Z- O2 H3 C1 [- f                 else
& x) N) {! q9 s, F+ e                  oVGA_V_SYNC <= 1'b1;) N+ g/ h( _: B# q+ E
          end: r" D7 F0 [. J  T  H5 {
end* H8 k/ y8 Y: o  k; G5 Y- G2 v

" U0 N- O: E- S- y8 g( }2 m  ^0 L* L# {2 Y/ r; W
endmodule
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-18 02:24 AM , Processed in 0.147019 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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