Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!
8 B; o" Z! B' l
; p; q8 w- T" C1 n# Rmodule 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);/ c0 d7 Y; ]5 l5 A
    input clk;4 V* Q$ S: k4 b0 [( Y: C0 Z! w
    input rst;4 q$ Z& ^+ C6 D2 @! f7 l# R
    input [7:0] R_in;+ N7 F; w( Y6 W4 b- Q8 M% G1 o% G
    input [7:0] G_in;
- u0 c; M. G; L8 K" I6 d5 s( j    input [7:0] B_in;
1 q( k# n7 s0 W. D4 N    output oRequest;
) T+ |# c- I# B8 ^) `/ r) s4 L    output oVGA_H_SYNC;
' [4 \, @/ A: Z) e  k6 C! s8 U    output oVGA_V_SYNC;* s9 [  \# ]/ `" X* R) b
    output oVGA_SYNC;
4 m& s; g# e9 q$ H" t    output oVGA_BLANK;# @2 l( \" ?9 f2 S) J& t( G# C
    output oVGA_CLOCK;$ T/ i; C) y2 X% x2 F$ j9 s
    output [7:0] oVGA_R;
* \) P) L. Q- t  D    output [7:0] oVGA_G;0 A2 u* ]0 j% I$ ~# ?9 u  F
    output [7:0] oVGA_B;7 V) {4 z8 o! f7 Y- E' D
         & w% W# X9 r& ?* O
         reg oVGA_H_SYNC,oVGA_V_SYNC;
8 d2 Y+ ]# o1 w0 \) L  O' |  _         reg oRequest;/ @" o$ A! K1 m7 k
         reg oVGA_SYNC;
6 B9 u7 Z. ]5 G         reg [7:0] oVGA_R;: v2 a3 b4 I; p
    reg [7:0] oVGA_G;' W3 j! C5 E) |7 [; E
    reg [7:0] oVGA_B;! E8 |: N, y6 X& b3 l/ ]$ L! `! p
         
' ^7 B4 b' L, I1 e  e         parameter LENGHT = 1024;8 g- k( d+ j7 L* Y# i
         parameter CNT_SIZE = clogb2(LENGHT);$ ~% D( k, k8 U, a
         
: r9 L8 P; z7 B- _. W" y         `include "VGA_Param.h"2 s: U8 ?8 [. g* M
         
2 n* \/ K! a7 m2 t% x4 Y3 c         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;
+ L. R2 X9 ]1 y/ _6 K5 P9 \1 K& _
8 C) b5 r. Z/ x4 dalways @(posedge clk)9 c& v6 R5 K8 j3 b& P( A- y) Z
begin
$ Q9 M6 Z8 L+ x  if (rst) begin0 v. m% _. i* h+ ^0 Y
   oVGA_R <= 8'd0;
2 {% a' @5 _# g6 N% C, s   oVGA_G <= 8'd0;
! U* D; o/ d$ q4 X   oVGA_B <= 8'd0;0 y$ p# t6 }- L+ k/ L3 v- A* S
  end
4 h$ Q. e/ U5 o. 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) begin0 I# t; _, d8 Q) B5 F) u6 X5 c
   oVGA_R <= R_in;* K  b% I6 C$ _  r& H! u* ]
   oVGA_G <= G_in;
% X* g9 l  `; }+ X7 K   oVGA_B <= B_in;+ _5 f/ z5 x: b# A' z6 z/ w
  end9 `& y7 p, z( `7 @: K+ y
  else begin% n9 L/ U( i, y- F3 {  m' H
   oVGA_R <= 8'd0;
  a6 `' y7 p* |4 h5 v# u- t! O0 W0 n( ?3 }   oVGA_G <= 8'd0;
3 X. ~# F, p4 r/ x% ]7 f   oVGA_B <= 8'd0;5 n3 d* A1 A1 |6 o0 n
  end
# V! N, {; g1 J0 Hend& O: v: w, P# A5 N5 s8 u0 |

1 t( i0 m# i. O+ u, aassign 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;& g& y* ]5 S4 D( Z6 O, V3 W
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;) M" n8 i: z. `) D6 m
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;
0 F, I: D+ S: a: g1 x; L9 sassign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(+ F* A8 d5 K) r2 K4 M
      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 1 A; z/ w! a6 f# K% ~
      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1
/ c4 f7 _* W- q5 C0 t) F      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset/ g- B( i0 ~. R
   ) ODDR2_inst (
$ s4 s! g- T* V9 ~9 V% z      .Q(oVGA_CLOCK), // 1-bit DDR output data
8 \) E. q( f/ o! v" u      .C0(clk),  // 1-bit clock input7 \- y* F5 E' q  a
      .C1(~clk), // 1-bit clock input
" ]0 U# S: ^" r, h  `' Z3 @& O; S      .CE(1'b1), // 1-bit clock enable input
* B& g2 P- W/ D& @+ c  o      .D0(1'b0), // 1-bit data input (associated with C0)
7 c; d5 r' e7 O+ ~' q2 x; S      .D1(1'b1), // 1-bit data input (associated with C1)3 y) [& E* I; b* a+ K/ O
      .R(1'b0),  // 1-bit reset input9 S1 C  D; F4 h- ]
      .S(1'b0)   // 1-bit set input
; ?- ~2 b# M, ~) x# S" @6 H   );, q% Z& p( U# U
        7 Y& t$ f9 e3 D7 N7 Q. y
always @(posedge clk), e! f8 A8 ^6 K% Z! d& l5 j
begin; G! T; U2 T: [/ U+ P9 z4 o9 x
  oVGA_SYNC <= oRequest;
! s$ |" K& l1 a0 Rend       
) X1 Z7 A) e4 e) _: Z3 \" E% T) Q6 i/ ~$ U; w, f) c& ^7 X6 D
always @(posedge clk)
) A, ^- F: S, n, W7 T4 Hbegin
" Z) {- w( @/ Q2 M# K: X  if (rst)
6 k# V: K0 {8 a. q   oRequest <= 1'b0;+ c* B8 [  T* t; V
  else begin2 O2 m( g& d, G! |; X' T
    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 W6 A  K6 S+ W) p9 a+ N' g          oRequest <= 1'b1;* `6 _2 h" w* x3 u
         else5 H4 c6 [2 R2 }( C: \4 F5 g
          oRequest <= 1'b0;- o( I( l$ D& O; H) A# X8 f
  end
7 @& k, O% l/ Zend8 P9 m8 r, y- ]" p# `
         * C, s4 _; Q, f2 I! F5 z7 _, i
//        H_Sync Generator, Ref. 25.175 MHz Clock
; K- Y- K5 {+ k7 ^! balways @(posedge clk)
* }7 V5 [7 \) \9 ~% j! @- Fbegin9 Q1 Q  G1 _/ r, C! a
  if (rst) begin
, J* [4 u$ [8 k. W: ]    h_cnt <= 12'd0;# v. p9 ^+ u! X' F5 K
         oVGA_H_SYNC <= 1'b0;
/ R: }& K: D, }! c% N( r  end* l) V6 z5 j6 l6 c
  else begin
  H! P  ]0 p% F/ N$ p   //        H_Sync Counter# @! a; D$ l4 d( c9 C5 V" ]
   if (h_cnt < (H_SYNC_TOTAL-1) )
( ]6 r  O0 t2 x& A5 |' ~          h_cnt <= h_cnt + 12'd1;
* z- P0 G5 x1 `7 a+ e; ]   else
% {6 W( o. F0 Y3 H9 q: V; ]0 w     h_cnt <= 12'd0;
7 p4 K" H) j' c* f( b          ; N8 |6 O! Q2 @& {, `
        //        H_Sync Generator
& l$ G: E# o2 K" T8 X' I1 x' D        if( h_cnt < H_SYNC_CYC )
4 `: z. ~: V% y7 P$ O          oVGA_H_SYNC        <=        0;7 I9 T+ \. a1 f& m; N; d1 q
        else5 Y8 j, h/ G1 a& C6 ?, E4 _# ]
          oVGA_H_SYNC        <=        1;, U& V1 K0 z* K
  end" ], N$ Q. R" y
end& g' k( ]% ^& R6 R: s9 e, v$ J

& {* s) p6 }- V, V: |: Yalways @(posedge clk)
% E, E% l/ J7 N: ybegin
' \$ i( |% {2 U7 K. P  if (rst) begin, {) B8 C2 b# \. I$ Q; X% `
   v_cnt <= 12'd0;7 {1 g& R1 B! ?; O3 C! c7 W+ L3 W
   oVGA_V_SYNC <= 1'b0;& z0 {' X5 W5 |% r6 f! O
  end9 e6 d+ Z, }4 F. w4 g: H
  else8 _- D7 W& k. ~% E1 g/ g% T0 {
    if (h_cnt == 0 )/ L7 m/ Z1 m( U/ N
          begin
8 o5 ?' a& h2 q9 `, m            // V_Sync Counter1 A9 ]! j4 k8 p# O) f; M8 x( F
            if (v_cnt < (V_SYNC_TOTAL-1))
. b( g/ [% x$ H9 |* n% n                  v_cnt <= v_cnt + 12'd1;- U8 ~7 |, s. I2 N! [4 Q
                 else3 `# m$ g1 N  ~) A. A% z0 i
                  v_cnt <= 12'd0;
. M) _8 p( y, O) M2 ~) D. h                 //        V_Sync Generator
' c( j+ N: [4 ?; k  T                 if (v_cnt < V_SYNC_CYC)" F9 I7 N" B2 z
                  oVGA_V_SYNC <= 1'b0;
7 f: v: U2 U% R3 J0 x                 else! G: @6 A. _3 Q
                  oVGA_V_SYNC <= 1'b1;
0 J: f7 E0 V) e5 P/ \& e- d          end
6 U6 E+ _) C0 lend
, ~& N% `4 q  X) `/ F/ S0 n3 {+ Y9 Y0 p6 g6 ^' ]: g7 j

4 D8 B& D, r- l" Z5 Yendmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?' S! `0 Q! J1 u) n7 v5 W4 ~

" u" P# a3 Z% l  W; U  X3 Y你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
3 z2 H3 S4 \! D' m% w: }以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表
+ v' u  T  q/ q8 k你的code應該不完整吧,很多參數我找不到你給的值?
1 V! H- Y/ Y, Q+ S$ J
5 M$ L- X5 t- S你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
1 Y( B( }7 x+ ^! C3 a% w) t以及是數位或是類比的,在去驗證code吧。
! [* w2 [8 ?; N7 ~( \2 Z
. G' r* d& T- }' u7 }
PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?5 u2 o) ~$ R# l9 b+ }- t, _
我是直接輸出為VGA, H.V.RGB, 送到monitor使用) f% [$ j- f2 t( L& G( O1 |
不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
! l7 w) h1 p8 \  ^, h0 }VGA輸出是FPGA->ADV7125,透過7125去做轉換1 H( Z' `  T  z! b% _
現在用此份Verliog code已經實驗出640x480 60hz
* v# Q, w" n2 s& Y+ A8 a但是調成800x600 60hz出問題1 e8 ~: W, ~; A7 k4 [0 g+ l
測量H.V and PixelClock為正確數值了" @2 N4 _$ J% O0 u9 v- ?; R
不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題3 V& N! `$ w) o
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
) ]; @4 {! {% l$ ]0 A6 S, ?) P. ?6 L$ w! x4 ~; H
你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表
. {1 }8 G( ?) M8 d9 l假設你的VGA verilog core設定沒有問題
3 }9 t" e1 D9 \6 ]你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
; R) g# k- p0 _9 z- m$ p/ @  \# _" }, g' M3 u& ^) P  ]9 f
你說畫面出問題.是否可以解說一下

- a; R# E9 j( L$ ]4 J3 w; {5 e& K: z* o6 _# F6 [7 H6 W
1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)
! A5 A' @; Z# R5 S4 n: G1 Y2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
5 n3 m( f9 {7 l   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core
: k* n' T5 k. t- p1 F3 y. v我只用過xps_tft 而且是在edk內
6 n0 z8 \1 V$ t- B; L1 {9 p6 t$ n* P2 s7 y! m6 T
這樣聽起來像是你vga memory size 大小設錯了' S1 E9 V) E: P8 o* ?% d) z$ O1 E
我之前在edk內設錯時也有類似的狀況. ' `2 t4 g1 b  R1 {
可是我不知道你的情況是不是跟我一樣
, [: ?2 o$ c7 G+ K, [5 k/ F* J$ w5 I# h
剛剛看了一下你的core
2 Q4 d) n1 y; B, q6 }  u設定值應該都在 VGA_Param.h 內
6 v% c& U- M7 ?1 V* M8 _7 e, e) t9 `include "VGA_Param.h"- Y- X9 Z5 ^. b

+ j2 k- s7 T/ U[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表 ) c- d4 p1 Y+ O! B0 n0 h4 r2 Z& _
說真的我也不知道這要在哪設 因為我沒有用過你的core
/ o: J, R" W  F  @: ]我只用過xps_tft 而且是在edk內8 }; V1 j, D# `5 b1 M1 z9 H
( P$ @7 D& ~3 R( T/ @; a
這樣聽起來像是你vga memory size 大小設錯了
1 n/ s( s! ?& r, Z6 E0 f9 f我之前在edk內設錯時也有類似的狀況.
- Y. T9 V5 R; I0 A6 H2 n4 N4 d可是我不知道你的情況是不是跟我一樣: q/ e5 v+ f9 r; ?
...
' m, y8 v4 c; R" [* K

( u  t, T* W2 \# {. v0 U//800x600
2 e5 M# H$ c8 Mparameter        H_SYNC_CYC        =        128;
5 S- y" M$ ~- E5 {) P- K- rparameter        H_SYNC_BACK        =        88;) t" Y* c5 i# l2 U
parameter        H_SYNC_ACT        =        800;        //        800
5 x  a4 }4 m; X' e  y1 s7 m5 ]parameter        H_SYNC_FRONT=        40;
$ x+ A% o3 o* J' D  Hparameter        H_SYNC_TOTAL=        1056;' w$ u, `) I# N4 c4 w0 w
//        Virtical Parameter                ( Line )
% H7 Z$ z% N5 t, @3 |! n2 c$ E; j9 {parameter        V_SYNC_CYC        =        4;2 S$ J0 B+ G; D6 h* }/ g5 ?/ L" j5 K
parameter        V_SYNC_BACK        =        21;
( L3 z5 q. K7 Dparameter        V_SYNC_ACT        =        600;        //        6005 {8 r* W1 Z5 E7 j# N! D
parameter        V_SYNC_FRONT=        3;; m4 R( h4 E" r+ a! Y; w
parameter        V_SYNC_TOTAL=        628;2 W9 s9 |7 b7 N  w
//        Start Offset6 e% [$ k* _. F
parameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
4 T6 \4 U. a7 ^  Dparameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;# `. p6 w2 p" S( U% S  @

) ^$ K6 B0 X; }1 P/ c以上這些參數應該都有設定對,我是follow vesa standard作設定
5 u7 H! E1 ]+ j' H) q不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源; V: N0 E0 F: q; {) l
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,2 e  h. z  o- l" B, z  ~) b
不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表 0 Q. P' |: J& p; }
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
. h; m, S. |+ A& Y: ^* I不過可以查查看。
4 F3 [. J1 r) G8 N8 f  }

9 `5 h! `& Y8 _2 k: y預估應該不是參數設定錯誤,而是IP有問題吧?- ^8 X- `# Y$ P, o  @3 y
不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?2 v1 v  N! v. @+ o/ L
想要自己修改看看,希望有人可以提供啊!
% a' ?  l( ]0 P( l感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表
- K8 t* U# ^6 O8 S# Y' K' F* ]  b# D再講一下自己手邊版子的架構好了$ K2 ?5 E$ w( b2 g& G' n/ `
VGA輸出是FPGA->ADV7125,透過7125去做轉換% S$ |  Y2 v) i/ R+ b& s  `
現在用此份Verliog code已經實驗出640x480 60hz# K) Y0 m7 r" _( U. M1 L
但是調成800x600 60hz出問題5 E, d/ ], {6 Q2 L
測量H.V and PixelClock為正確數值了
* {3 G3 p: N' \& O5 h; F; Z不曉得那邊有問題 ...
7 x" q# k5 c! q6 S% i: b: q
7 W" K2 t- H! X! V/ ?
請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表
, {- Q+ x5 W8 i6 z; s2 [請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?

; n4 p2 C; w3 R$ Y
7 g4 A+ k0 F/ \- G8 ^! T嗯!0 I5 z/ p5 j* `
H:38KHz
% `, C; Y6 p. m2 y- NV:60Hz
6 Q& [% N$ _- `+ S# z) JPixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表 0 U" b- Y$ o( r2 F

1 H" V6 u1 H& V# e6 q# X# ?' w* l4 G* {5 \4 l% L3 i3 w5 A! e
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,0 x. w' i, I' [/ @  b
   而且偶爾會有影像被切割成好幾塊被換位置的現象
% s# w/ v; P, G% R& U9 s

" o, G6 k  W# k/ D/ h6 r$ B' h我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表
$ B1 s9 F7 \6 I! a# O$ @- `我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?

, L+ n  U8 O. M/ w; d. T! l! `3 n; C  s0 P. R7 i
請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊' \2 D( |7 D( h  v
可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-27 12:34 PM , Processed in 0.131016 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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