Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!
: G. g# g+ M6 l* X/ E1 p$ Y/ h3 @* V
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);" Q& X6 i, z$ t8 n* q7 A; h; A
    input clk;- n. u) T* }% n5 k. T) _3 _& n7 p$ z
    input rst;
6 O. _. l, O' D# W    input [7:0] R_in;
# k( i- N& _( I* k# c$ Q    input [7:0] G_in;7 ^) E8 Q# S% l4 Y3 K! \6 v
    input [7:0] B_in;
" ^1 K% ^4 s3 S    output oRequest;2 r3 v! M9 S; ?" t3 e/ E7 {# L
    output oVGA_H_SYNC;
8 F  z3 z! {3 t2 N# y9 {  d. ]    output oVGA_V_SYNC;* v( c- X; a; N
    output oVGA_SYNC;
" v1 C5 j$ C3 j) f( s5 ^' f5 g7 H9 Y    output oVGA_BLANK;
$ ^! U1 E" |0 l8 H9 K    output oVGA_CLOCK;2 x1 x7 {* N+ s0 j0 m8 ?% D
    output [7:0] oVGA_R;
1 a! k2 F' X1 t( n8 O6 ~& ^+ p& L/ u    output [7:0] oVGA_G;1 s) \; Q2 t# V! F3 Y
    output [7:0] oVGA_B;
9 W4 q6 i* Q$ S4 E  B. e         
# S3 B4 s  e2 @9 o% e3 G         reg oVGA_H_SYNC,oVGA_V_SYNC;' }9 |- G. m+ `/ u, m0 T
         reg oRequest;, {! ], Q  Q. U4 L9 r
         reg oVGA_SYNC;8 b1 W5 c) |* |4 m3 |
         reg [7:0] oVGA_R;
9 q5 z$ }) F$ t! Y, |7 n    reg [7:0] oVGA_G;- {! I# @/ |: d( [
    reg [7:0] oVGA_B;, |+ v# l8 y( T4 K# @# v' S
         
$ G2 {) t: ]- U. x$ j, F, S% B         parameter LENGHT = 1024;
$ L1 B+ a) n2 `. N         parameter CNT_SIZE = clogb2(LENGHT);
5 E) P2 t9 v9 |$ @. |         $ r; T7 [, |$ O/ W5 e$ x
         `include "VGA_Param.h"
9 H  G) U! ]' M. H         8 T- r, d3 y3 ^
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;( K$ }1 C, H/ z+ }
8 }6 x1 `/ D2 n, j
always @(posedge clk)
& f( ^- _: x# M3 @6 ubegin2 L2 a$ V6 a5 w& \+ P
  if (rst) begin
2 I' S+ G# g8 }  D7 N/ j; h) t+ Z   oVGA_R <= 8'd0;) y6 z! |0 G, k6 ?# J* N+ `
   oVGA_G <= 8'd0;
* y& K) C8 `( V: n$ q* ]. h4 }0 w   oVGA_B <= 8'd0;
; ?; y6 i7 p/ j) e4 i0 H  end8 D4 I- T2 W3 r% j5 }) L
  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
  j) l4 e* Y1 _( H8 u! N/ o$ O   oVGA_R <= R_in;9 W2 k! c: y; s
   oVGA_G <= G_in;
# W3 A' V1 P. P3 i6 H, r   oVGA_B <= B_in;
8 B, y9 ?4 T' C6 T! h  end
' d2 `# x' C: ?# k* o* w" D1 c  else begin
# X# L9 P; y9 N2 B+ `, Q' l   oVGA_R <= 8'd0;
- `0 d* q6 a5 B! L   oVGA_G <= 8'd0;) g1 M; ^" N' k0 M- |
   oVGA_B <= 8'd0;# l+ S/ I2 `. n$ z2 x6 \; C/ ]% [
  end
4 Q3 c; g+ f# q7 Iend. Q6 g+ B9 @7 r, Z0 s- Y
% c# j0 k8 y0 d0 A$ g
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;3 W8 a3 u, z& j, t8 l; T7 ]; J3 Y& 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;( }) D0 U' Y6 ~% T* T
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;
7 P+ M- W. ?" N- r3 Nassign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(: x( _8 x# B3 X8 i
      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
& B# @8 q0 u( k9 [2 D- w      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1
7 S( k# o% C9 e% p, X' |      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset$ T0 j( p  f) [4 _& o  I! }) v
   ) ODDR2_inst (# P* i- x- V2 P$ G% i* @3 A
      .Q(oVGA_CLOCK), // 1-bit DDR output data# B+ C, C; t' |8 w& W; ~2 c
      .C0(clk),  // 1-bit clock input
0 Z- X% S- e; G" X( ?' J      .C1(~clk), // 1-bit clock input3 b3 C- a3 k0 A" S3 H  k
      .CE(1'b1), // 1-bit clock enable input
5 v1 C( _$ P5 h* [+ r0 u      .D0(1'b0), // 1-bit data input (associated with C0)  h6 U) K. {) i. u- Z
      .D1(1'b1), // 1-bit data input (associated with C1)0 o* R( u; ^9 K- E, @1 i# f  x9 s
      .R(1'b0),  // 1-bit reset input
9 I% A# C3 l; F( e! h      .S(1'b0)   // 1-bit set input
& b2 G( }% x, V   );2 f8 {" Z5 \' |0 _( _, T
        ' ^$ s# ]* s+ Z; a
always @(posedge clk)
3 P, X% S1 y8 Y' e, ubegin
* z% S1 a2 g" b! [$ a1 I8 Y) h  oVGA_SYNC <= oRequest;' Z0 i9 O" B9 y$ m5 j8 @. O+ V  k
end        5 r. L! @) X' J5 V
2 J7 G8 `: P/ ?, Y
always @(posedge clk)
' o* ?3 e1 d" b8 ?$ p$ K% @begin
* K4 I$ ~; o: w4 \- S5 l  if (rst)$ N( j7 A0 S* C. R
   oRequest <= 1'b0;. G4 p9 v  a4 M6 m+ U" G( s9 I/ p$ v  I
  else begin
( P% D. s7 R6 ]% F    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))
# G6 G0 u) F8 M2 Z2 y, Y          oRequest <= 1'b1;
5 \7 p! S& s: Y" W& x         else1 D% H- K$ i( O6 f1 g
          oRequest <= 1'b0;( |" Z' |/ v0 {; l# M' O
  end
, I: c1 p3 w" E! @* C! qend8 x$ F% Q9 j6 j; z3 i( p
         
( k! f6 E6 i) H( m* X" w9 S//        H_Sync Generator, Ref. 25.175 MHz Clock, q9 `5 @5 {# R% |9 b8 `! P. X
always @(posedge clk)) s/ D5 ^1 ?. l7 D! Y3 M  }
begin
7 J% A! B! {- h& J  if (rst) begin- |- f1 f4 Q$ ?9 z& Z5 H( q
    h_cnt <= 12'd0;- I  |- S6 J# ~; A: E$ U: `
         oVGA_H_SYNC <= 1'b0;
9 E+ X, n/ x2 [5 X3 {  end
6 {5 D3 l4 H; ?8 B0 n7 P/ I$ X+ G  else begin
( t5 v$ g; |/ ~3 S   //        H_Sync Counter
5 q5 U/ E# p, t6 j/ t   if (h_cnt < (H_SYNC_TOTAL-1) )
& K9 B  S9 i0 B          h_cnt <= h_cnt + 12'd1;
# |9 Q0 E9 D+ b8 Y2 }/ R9 y   else  q4 i, G3 J2 m7 P; H
     h_cnt <= 12'd0;
: P9 O4 n( @$ w( [8 w/ _( i          
$ l& u  Z2 S, R+ M        //        H_Sync Generator
, v% K$ p6 X" |  N        if( h_cnt < H_SYNC_CYC )4 {4 i" S/ ^& e7 C9 H$ z3 Y
          oVGA_H_SYNC        <=        0;/ p! d( h5 u  y4 s' V; v6 U8 A2 k. Z
        else8 ~$ `" T1 I  o
          oVGA_H_SYNC        <=        1;
( K* M2 U9 N2 R- y  end# u' W2 R; g& }1 p/ ~* @# P
end% ~! |  Z9 h# _7 i0 H& ]$ c* T) t! w
# F" W( e; G2 i
always @(posedge clk)
) [! i2 q) r+ _begin  Z: t. s0 H& c2 Q( ]+ C
  if (rst) begin
$ n+ R7 p# e) y8 v2 k! c   v_cnt <= 12'd0;& u) x% ^; Q" j8 C1 b- W+ e
   oVGA_V_SYNC <= 1'b0;- X5 F' K: b* o. y* P0 f$ s" y
  end
, [% L. t+ M4 w3 k  else; y6 n; w4 x% l
    if (h_cnt == 0 )& P( y. M+ A* A# \5 X; {( e
          begin
+ i  M0 Q% ]  \5 X            // V_Sync Counter
: ^8 r& W. p& J; i8 t            if (v_cnt < (V_SYNC_TOTAL-1))
, J. k, u* z% q( U6 W                  v_cnt <= v_cnt + 12'd1;& O8 R7 }. k! w% ^3 C$ b+ I9 h- v
                 else# `( q" l- s* ~- W6 e
                  v_cnt <= 12'd0;
$ m. m7 z. n% ?4 H- M- C, q                 //        V_Sync Generator
" [6 K  |0 D' M' z5 D" R                 if (v_cnt < V_SYNC_CYC)
0 V* a, V/ Y7 O8 b% V# v! |5 W$ t                  oVGA_V_SYNC <= 1'b0;
% D9 R1 J# ?; m" Z+ b" |' ~                 else
5 i/ ~) ]7 a; `9 P! {* `                  oVGA_V_SYNC <= 1'b1;5 d! ~! L0 u1 z- M
          end
; ]8 W8 X9 q# Q2 t# Nend
; H  w" b+ w5 x3 O5 E
0 s7 b1 w5 m$ w, B2 a: f& z  Z1 K3 ]8 z
endmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?
) H! b7 @' q8 T* A/ b2 R2 Z7 P
8 K. |+ A$ R8 C6 ~3 ?% S. ^1 u你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,4 C% N- t' D0 k2 o2 T0 k9 U, S# X
以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表
) l- b+ u+ Q, f5 V" g2 V你的code應該不完整吧,很多參數我找不到你給的值?
8 K* R6 D* _+ W$ F
! |, x. z1 c' ]' D你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,  g: E& r, k' T+ Y/ L
以及是數位或是類比的,在去驗證code吧。
& n  ?& {/ ~9 N2 F8 q
) P4 j' c! {9 G# j
PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?7 M! [2 A9 Z7 M, x/ R1 u* r
我是直接輸出為VGA, H.V.RGB, 送到monitor使用: G2 {) u# r0 x7 l& w+ `& V
不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了7 P% C2 Q3 k/ L: n! m' p% |
VGA輸出是FPGA->ADV7125,透過7125去做轉換
& R8 u: R7 D  X- M) v現在用此份Verliog code已經實驗出640x480 60hz8 l, h# T. G" y) g9 }
但是調成800x600 60hz出問題( o/ R3 z: y% {( L: h7 i
測量H.V and PixelClock為正確數值了( Y( n) |0 Y! n' ~' n5 }- T
不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題4 k# {" C; M5 o2 i4 x
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
: D+ {0 e  y% D6 }* ], l$ d+ G5 I- A/ |3 q
你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表 / f" h; T! }2 B+ P1 t
假設你的VGA verilog core設定沒有問題
  I+ ^+ g4 d6 t! b8 h你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
" [; _; H: b6 v/ k: E1 F
' k1 b0 Y3 ]6 W* X你說畫面出問題.是否可以解說一下
* I& a) w8 J) _  L+ Q
8 B  Z- Q$ x; Z
1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)
  U% j' I: r( D5 W4 c( P0 B% Y2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,  n! H6 f! W! [! T! z7 ?
   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core
) s3 e, p- X. \: p; Z% N我只用過xps_tft 而且是在edk內( F2 Y: U0 o* K

" a& `* u2 K* i% r0 ?# U6 R這樣聽起來像是你vga memory size 大小設錯了
$ p+ b) u: \1 Q我之前在edk內設錯時也有類似的狀況. 4 k! C, Z$ d% _" I8 s( p& U+ l
可是我不知道你的情況是不是跟我一樣
" T* O1 ~$ P! I5 }, U/ j2 n
' g! ^  n8 Y1 v3 `/ U& P$ c剛剛看了一下你的core7 z1 Q6 z- J) G9 @. [( u
設定值應該都在 VGA_Param.h 內, b$ x, ^- z0 X
include "VGA_Param.h"6 F" k- B  }: l1 l- S* V
" {; e( F$ C; j' a. @
[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表 6 O; f! }, ^2 u4 t0 ?
說真的我也不知道這要在哪設 因為我沒有用過你的core: Z) W2 J: S# b7 R9 G
我只用過xps_tft 而且是在edk內
, B4 F0 L% j1 Q  ~0 [; E5 E( r2 z2 ~
這樣聽起來像是你vga memory size 大小設錯了% F* B# G, o" |
我之前在edk內設錯時也有類似的狀況.
7 S; I! X$ A1 |可是我不知道你的情況是不是跟我一樣& c2 C- j# n5 B
...
. @* \1 D" c% H$ d! h: ~, N/ I# R
. z5 _3 l/ r8 ~  g4 c
//800x6008 T: e- u. x" Y: T& y+ q' {6 y( {
parameter        H_SYNC_CYC        =        128;
5 ^( z7 z; D2 }6 n4 m: tparameter        H_SYNC_BACK        =        88;
% D8 o' N0 P5 q0 I. {' xparameter        H_SYNC_ACT        =        800;        //        800
; d9 w( L+ z* s7 Q( S$ d$ r* ~- Hparameter        H_SYNC_FRONT=        40;
- z0 x+ i8 g6 \parameter        H_SYNC_TOTAL=        1056;
( R% l5 a' T+ i//        Virtical Parameter                ( Line )/ M8 Z- m. P8 b  `, @" Q
parameter        V_SYNC_CYC        =        4;
( q: g( U' B& S" dparameter        V_SYNC_BACK        =        21;) q! d& b, u! N- s% o8 L
parameter        V_SYNC_ACT        =        600;        //        600
2 l+ l7 E+ A. S, O" g6 qparameter        V_SYNC_FRONT=        3;, k! B3 k/ e8 N2 g9 t
parameter        V_SYNC_TOTAL=        628;7 f1 p3 e4 J4 Y8 w1 n
//        Start Offset
" G3 c" A+ n% E8 A. h: Xparameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
2 r* h$ y% ^" u2 dparameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;
, ^) h! z- U0 w
6 w' {/ ], _& `7 n6 S6 O9 a/ L. @2 L以上這些參數應該都有設定對,我是follow vesa standard作設定
* Y% o5 ^$ Y& ~- ~4 V$ i不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源
. g' d7 C. x! A' ^* b0 c2 T不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,$ l  x  I5 |; I
不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表
4 X; Z- D3 M0 y: o1 H8 o6 Iclk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,  H5 y0 F& f8 x* W
不過可以查查看。

/ B/ c6 h/ D, @: b" I- Z+ S! c6 m0 }
$ `9 }( X# m$ Y預估應該不是參數設定錯誤,而是IP有問題吧?
- R) t) C. k4 a5 O1 u( E1 W* n不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?$ K) F  e. ~; y) `% d4 X
想要自己修改看看,希望有人可以提供啊!# _* _1 a) ?# U) y6 U0 b
感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表 : u% ^1 o# h) f) e' b
再講一下自己手邊版子的架構好了
9 P4 B+ o; w2 c/ H, z* o6 aVGA輸出是FPGA->ADV7125,透過7125去做轉換- t3 o5 d+ l& t
現在用此份Verliog code已經實驗出640x480 60hz) c2 O9 W+ F% k8 k
但是調成800x600 60hz出問題
% P  ^. d: Q6 `1 _測量H.V and PixelClock為正確數值了
3 i. w. C7 [, c4 d7 a不曉得那邊有問題 ...
: t9 Q- ~$ j$ @9 l* }& R/ `* {2 p1 U

5 o* D) f3 C; Y  h% \' V請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表
( |( ?# {  C& e) n請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
" u5 n+ w! d8 `
) ~& q) p* d$ K9 O
嗯!
, x* G* f# x. dH:38KHz
0 i# {, b  \% DV:60Hz6 Z- Y, R6 o; H2 V
PixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表
% X) C( y+ F, X6 V- H; Z7 M) V9 B. ~4 t" v& K) P. e, n3 Z
4 L1 o. O# t5 r& u0 n4 C" c# Y
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,4 A% ~) W" N& \& b. o# ]
   而且偶爾會有影像被切割成好幾塊被換位置的現象
( i; F% d. h/ K+ X

& @7 a7 x- z; c" d: T我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表 5 p4 [  K, `3 I8 M( Z+ t2 Z
我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?

' `2 {+ P: d2 ]" G, {) f* Q) e3 N; u$ x
請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊
& Q3 g3 w6 K- ~) Z( N3 N) }% D可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-18 12:34 AM , Processed in 0.141018 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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