Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!- T9 a, i- j' @* ?# H
# F% _. P  R3 |9 S
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);
) g4 i' _  Y" P7 u8 m    input clk;
" L% W* Z  D) Q  o6 ^, D6 F7 `9 o    input rst;
. o$ ^! `! s9 K: B9 C  `6 D) X    input [7:0] R_in;7 ]2 }( \$ b- ~! b& Q6 v
    input [7:0] G_in;
+ p8 `) s. |5 K/ g    input [7:0] B_in;. H9 P! j* a" d) N+ C
    output oRequest;
4 `6 u. c# _& V# K    output oVGA_H_SYNC;
, _0 }. w) w; ~    output oVGA_V_SYNC;9 }) p7 m% @& X0 G+ p
    output oVGA_SYNC;
& `  k5 \& O# z- ?" q7 y: w( v) \    output oVGA_BLANK;
& n9 N. b0 `1 E& D/ }2 g; G    output oVGA_CLOCK;- F* x/ G: J% e
    output [7:0] oVGA_R;
) q1 ^' C5 x5 Z; `4 i. ]" Z# Y, A6 ^    output [7:0] oVGA_G;
5 e5 u: ?# r1 k: x# X( {    output [7:0] oVGA_B;& \9 }: |1 x3 z$ a9 {4 ~% [; |/ V
         
3 s5 q7 [' N/ L+ n* O$ j         reg oVGA_H_SYNC,oVGA_V_SYNC;" R9 g4 N" q! l& H+ c1 Q5 l$ D; X
         reg oRequest;
+ A/ ?2 A3 Y) z0 X* W" ]" A% t         reg oVGA_SYNC;6 w% n0 S/ y0 L9 i
         reg [7:0] oVGA_R;; k7 S5 u5 ~) ~3 f& H5 ^; Y0 H, v
    reg [7:0] oVGA_G;( Y- s+ Q4 R0 c' {- e* z8 E
    reg [7:0] oVGA_B;
1 T! |7 `( _2 B; D( V& S* Y! ^         
+ g+ w, o( v' S! s# m% l         parameter LENGHT = 1024;) ]# l9 i# g$ N* C1 p: }
         parameter CNT_SIZE = clogb2(LENGHT);
7 G1 g/ y4 \: j! o) w; V" V         
+ I$ J9 @0 o/ h1 e         `include "VGA_Param.h"
3 F: L0 A; o, j3 k1 G- X         ! n% D2 N! M2 U: N) {. T+ E- K% i
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;
5 L8 [" r; L$ W, A# J
0 K! {) }  h- walways @(posedge clk): @+ \( P$ d" S9 T! J8 c5 i
begin
, _0 o( u! e& U" ]" L7 j$ X  if (rst) begin7 `: M7 ^) [4 A
   oVGA_R <= 8'd0;: i# s; \" R5 X, }
   oVGA_G <= 8'd0;
! v8 n  W4 z' t) Z$ P  A5 N   oVGA_B <= 8'd0;" _4 N' r( T- i8 z! i
  end- g3 r2 r0 C" i" l  f( d
  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
% G# B; ]( ~2 b& `) L( L) l9 m   oVGA_R <= R_in;3 L4 V- w, x! G( m
   oVGA_G <= G_in;( ~9 I: q' @( s7 H1 _
   oVGA_B <= B_in;- z( H" \2 e0 W  O* w, N' n. D
  end
4 Q; o- K. }6 z0 G0 Y/ D( E! v  else begin* M; `) l& Z: N2 c/ B: K
   oVGA_R <= 8'd0;
: u; p. i7 v7 f, B, ~! A0 @   oVGA_G <= 8'd0;; D& o' ?; l3 P3 V
   oVGA_B <= 8'd0;
% w3 T* }3 S8 v  end
2 ?* G4 \( \: d( Yend) Q- Z$ U+ y8 N: ^) n) r, H: L* c9 l

/ }, b" Z5 O: d3 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;
/ S! x$ |; o' p* ?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;
' v3 [. S9 ~! j6 x9 N" jassign 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;
# J% K3 Z% N. D2 v4 i5 I# s: V& rassign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(
7 [1 v' N; X  _      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 4 g  l! m1 k: ]: K$ }8 W+ h2 Y
      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1
5 Y1 X( {6 @4 r! n8 |( M* T+ ~2 }      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
! w" ~: b& B/ ]) v4 T   ) ODDR2_inst (
6 P7 e3 S+ k8 V6 @- J. C+ H1 H      .Q(oVGA_CLOCK), // 1-bit DDR output data
$ R. u7 J9 Z; A, y' a; N      .C0(clk),  // 1-bit clock input# I$ X* A: i: X! `+ @* |* i4 U$ ]
      .C1(~clk), // 1-bit clock input  e' J7 w0 K: _- y7 H, x
      .CE(1'b1), // 1-bit clock enable input$ I" n8 {5 `0 X& n* s/ }7 s
      .D0(1'b0), // 1-bit data input (associated with C0)$ l" _& C" u4 C8 T3 \
      .D1(1'b1), // 1-bit data input (associated with C1)
1 J* l& X9 N! k( @1 I7 p      .R(1'b0),  // 1-bit reset input7 C  Q1 {% g( t
      .S(1'b0)   // 1-bit set input
) x1 q0 M6 `& ~5 u0 A+ g   );) D% u6 {8 s& r
        - A+ [; ]5 T  j3 d* R
always @(posedge clk)
" t2 p% n/ p* K5 b6 Lbegin9 W  u6 w- V/ {! k
  oVGA_SYNC <= oRequest;0 K3 ]7 k4 n1 x( P  L! X
end        ! A2 U+ z; X/ L# p
4 y+ {, W; o! [- n, z4 c" [
always @(posedge clk)
; E  Y; o4 E0 X; Vbegin( G) d$ }2 Q& b+ }
  if (rst)
$ G' {' r) E9 ]; U   oRequest <= 1'b0;
, ]2 Y4 l% \' t) {/ p  else begin
4 Y, p: C! P8 A1 u. a8 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))$ P4 f% l7 C0 ]  `
          oRequest <= 1'b1;9 O3 K" d, m- c& m/ V; E+ `1 A
         else
; m) y/ V/ i8 n          oRequest <= 1'b0;
- s" O+ I7 [. W8 c3 g) X4 W, ]  end
5 ^. R1 e0 l5 Y' }4 E6 x0 |; C7 ]end$ L/ g( P1 Z! C
         
% s% S! d  q; k3 P6 i$ U% X- w" ]//        H_Sync Generator, Ref. 25.175 MHz Clock& Q4 I! B; u3 F( w
always @(posedge clk)
" \! u0 f5 i+ G2 W# u' o4 w( ~4 Rbegin: M" t% g. k. i* P
  if (rst) begin
: B! D. N5 ]( W0 \) p. n3 m% r    h_cnt <= 12'd0;  v0 ~+ W% r1 l8 [
         oVGA_H_SYNC <= 1'b0;
; u, E& O2 L: R6 h8 w  end! [$ O5 F7 V: j4 f% S+ ^
  else begin
5 V( h4 _% J9 W5 f! D( t0 `) }   //        H_Sync Counter
! v* s2 ~* y% u; R- |1 [   if (h_cnt < (H_SYNC_TOTAL-1) )
; S9 }* X) R/ W5 H0 W: H          h_cnt <= h_cnt + 12'd1;2 a* W. t5 F9 }" m6 i1 K3 s
   else* B7 N, q1 L. g: ?& b% H
     h_cnt <= 12'd0;$ a$ g: @9 [8 Y- H
          / v  l$ }! Y! Q' w
        //        H_Sync Generator8 X! q) S1 m# F$ R$ E
        if( h_cnt < H_SYNC_CYC )& h( t0 {6 i+ F5 T9 J0 J" w
          oVGA_H_SYNC        <=        0;
. w" c! f4 F/ L6 ]& L% t        else1 N% h! D0 _1 o5 K3 |" m4 \
          oVGA_H_SYNC        <=        1;
$ ]( I. s* Y1 r  c/ F& j8 p* F  end
+ k& K" U$ F, o( @4 r/ Oend' x2 R3 H$ k1 b+ @% x  ?/ Y( D3 h
+ V% f( Z( X8 z9 m
always @(posedge clk)
- j0 V8 q0 P, W$ ybegin1 Z5 _8 R8 B; {% j
  if (rst) begin
1 r4 m7 @* p' a6 T  e1 T1 S   v_cnt <= 12'd0;
/ R# P* G1 c, }4 C; q. c" w+ V* a   oVGA_V_SYNC <= 1'b0;
/ V( f; W( ^/ M7 R  end
0 |) z6 ^8 m% v/ r" a' R  else. \5 Q5 U0 C$ J! d; r$ o
    if (h_cnt == 0 )
! n" F$ D8 s  M2 u; R8 \# e          begin& T, ~7 X1 q0 A, U: T
            // V_Sync Counter
  b7 I, Z! y. |4 ], j1 F* D2 |) W            if (v_cnt < (V_SYNC_TOTAL-1))
$ B2 V. n8 F  [( b, {  J                  v_cnt <= v_cnt + 12'd1;
6 |% h8 Q; u5 f) J$ x4 P8 c                 else/ t! b6 k9 j" U
                  v_cnt <= 12'd0;
' Y0 |+ ~( K. w. D- K                 //        V_Sync Generator
: ~, Q% V8 t1 N" q                 if (v_cnt < V_SYNC_CYC)9 K0 ?" z0 k8 K* [
                  oVGA_V_SYNC <= 1'b0;
/ c4 h7 b8 G* }4 [$ B                 else
) e7 f/ l  P0 r1 p                  oVGA_V_SYNC <= 1'b1;; b7 Y# o0 i4 u
          end" Z; k/ x9 z. d# h0 \5 S
end5 W' F4 Z" y& B  D+ T+ C# B

5 p# [8 }$ B8 a  o" A- N8 p7 v! ~, c: I4 L4 k/ {
endmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?2 w. l7 P: W/ u$ M$ s

3 @$ f: `' G0 j& K0 `你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
& [; G# o4 _: v( N以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表
3 C1 g! b. J6 n8 f, T' _1 _' l你的code應該不完整吧,很多參數我找不到你給的值?. i/ _' ]1 E' }" D
7 C' ?& a0 V6 s' ]# B
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,
' U/ z5 Q' K9 x* Q1 p6 f以及是數位或是類比的,在去驗證code吧。
% t' ]7 F) I' t: I  n0 ]

+ v5 H# n" Z) J$ w& SPixelClock.H.V送出來是對的, BP不曉得你指的是什麼?; p" q+ O, \8 ?; H8 q' B' _! c
我是直接輸出為VGA, H.V.RGB, 送到monitor使用0 R9 X1 O/ F7 s2 B4 c8 n) ]; W
不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
5 e  `, e/ z+ g6 G1 o: f1 wVGA輸出是FPGA->ADV7125,透過7125去做轉換2 o! R' ^; G  q. l
現在用此份Verliog code已經實驗出640x480 60hz
$ E: h4 S4 N$ h, b  ]  Z9 |但是調成800x600 60hz出問題( z, ?' X& y2 A- C3 ]
測量H.V and PixelClock為正確數值了
- Q9 x3 g/ o2 W3 z9 U* q3 \! k不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題
" f8 ~! c2 S( e+ C& M/ S$ ^你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size# C1 v; @9 i8 q3 q. O

/ c5 v$ L, p$ A你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表 ( I. F, U4 s# h! w
假設你的VGA verilog core設定沒有問題
' r( R# W3 E/ `你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
% P6 }' h; ~* ~1 b" H0 W2 B9 |$ y$ a7 ^' O7 V3 W
你說畫面出問題.是否可以解說一下

' I, `% g6 {8 X% x$ v( s$ O' g, x, n" |  B3 J2 [
1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!), `6 m$ M5 A& h8 g( N4 a4 c: P1 E. C
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,( ~4 A. f+ U8 H5 s
   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core
  ^3 n  I; I) X. j$ i9 G我只用過xps_tft 而且是在edk內
$ Z: }3 l, v; k3 m( |" X; a4 R8 ?# s$ E- M0 p; W
這樣聽起來像是你vga memory size 大小設錯了
3 W7 c! X1 F/ B0 J/ }# o+ Y  x我之前在edk內設錯時也有類似的狀況.   W3 d9 C. i. @% J! I8 U: C+ f+ c. ]
可是我不知道你的情況是不是跟我一樣
6 g' |5 j. j( y7 \8 U3 o& K# U
" L- j3 |+ E- D' d, ?5 n. e剛剛看了一下你的core
; @- {" i. O& y1 b) y設定值應該都在 VGA_Param.h 內  Y; D' d. [! e+ o; {3 O) ^
include "VGA_Param.h"
2 [( w5 e: {" N# e: P6 p( @6 Z$ A5 u& R: S$ ?  k: e+ B/ e
[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表 % p& A- w% H7 T6 B/ H/ d4 |
說真的我也不知道這要在哪設 因為我沒有用過你的core7 a  S% M. F% _( A- Y) \3 g: v
我只用過xps_tft 而且是在edk內
/ q4 B' s9 C# y5 q# A# c# r8 p) E: j* x2 t0 ~: P8 Q
這樣聽起來像是你vga memory size 大小設錯了
0 T, `% s+ c! g" x( T5 [我之前在edk內設錯時也有類似的狀況.
. u3 r; Z7 G* M1 \9 N; K可是我不知道你的情況是不是跟我一樣/ E4 z' m( P  e6 d* \0 R( ^
...

3 x' P8 ~8 r9 @3 l! {2 G
, A) x8 d+ k! p4 t5 c3 N//800x600  b0 X# [& d5 m
parameter        H_SYNC_CYC        =        128;
4 l6 }0 Y7 `3 s7 ^0 R% f1 g5 @" t( jparameter        H_SYNC_BACK        =        88;' y5 ?9 H/ i: a/ G; s. K, [" ?7 S
parameter        H_SYNC_ACT        =        800;        //        800
% S( Z2 v0 @5 ]7 K; }' j7 N, kparameter        H_SYNC_FRONT=        40;
* S/ B) W9 f- t* S- n& Zparameter        H_SYNC_TOTAL=        1056;8 C& C/ a8 C) o' h; K* h, [
//        Virtical Parameter                ( Line )
3 w* ?/ N8 {$ O: Rparameter        V_SYNC_CYC        =        4;
2 J# V/ L+ W# Qparameter        V_SYNC_BACK        =        21;
6 J) l! K/ s, C# k1 }/ B4 Q3 iparameter        V_SYNC_ACT        =        600;        //        6003 Z3 h$ W3 f/ C
parameter        V_SYNC_FRONT=        3;
. o7 [" K/ L' e, oparameter        V_SYNC_TOTAL=        628;4 ^" F0 o1 o9 a
//        Start Offset
4 d; G1 x% G! {& }& R; y% @parameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
2 A- H& ~4 U: }, P9 }& Pparameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;: `6 q3 l9 Y3 \' {3 S

, X5 t; j0 ^9 C5 t2 W: [以上這些參數應該都有設定對,我是follow vesa standard作設定
. L+ m0 i& q' r; ]不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源$ U$ h( e. h0 u! E6 ^3 i7 o  z
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
6 @6 a$ l* a+ T* p$ i  r- v. ?& w不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表 ! d+ n: d3 \; N. |
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
0 k  D* ?, O8 u不過可以查查看。

6 E3 l% P% }4 f" T0 Z2 F/ C( o5 Z; W* M' ?; w/ F9 m( }, T# [
預估應該不是參數設定錯誤,而是IP有問題吧?
: p: Y+ G5 q- `. Q3 e" l+ e不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?3 z% `3 j5 L9 B( M1 W3 k
想要自己修改看看,希望有人可以提供啊!
$ @( p3 t7 V( H感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表 ) T2 p1 _& ^0 n0 a8 \
再講一下自己手邊版子的架構好了
3 f# y; t( w6 D& E; B2 o4 DVGA輸出是FPGA->ADV7125,透過7125去做轉換% L) ?' f1 ~& G8 Q$ A( H
現在用此份Verliog code已經實驗出640x480 60hz
! [# v, r" j5 y, U6 |  X+ k+ e# r但是調成800x600 60hz出問題0 y8 n/ C4 N! q1 j, ^
測量H.V and PixelClock為正確數值了
& H, `2 G! u$ }8 K  m6 V& [不曉得那邊有問題 ...

9 i" J  @1 x3 n, d
; c8 B4 ?1 B9 e4 v0 }0 K9 _請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表 . X5 O2 G% h& b6 D1 \3 ?
請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
! k  n0 u7 ?: @( E: N
0 ^; A/ r5 d. @* P+ T6 i- s
嗯!
% o: Y( Y  q7 d* F. s" wH:38KHz1 u: D2 h. j1 k2 p4 r
V:60Hz5 \) {/ N9 t# e. i8 ]
PixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表 + x' l3 u& ^" H/ L5 ]' {# C
2 O8 g0 ]& V5 f# r( v
8 Z7 E$ {0 C$ j
2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,# ]' q+ F3 Z8 K; Z9 U8 b
   而且偶爾會有影像被切割成好幾塊被換位置的現象
: q$ n4 @5 A/ s  B" [# T2 w

8 n) f0 c+ V+ o. y8 T0 T$ O我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表
# b4 F3 n; s2 |& E5 ]; f& w我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?

* ^1 I- u' l0 i) Z# `
9 ?/ Z" h- N, V& I' v6 k  [請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊
: e8 u7 ^2 @9 f& S+ h$ R) e( ]& z可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-19 02:34 PM , Processed in 0.126016 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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