Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!/ t7 |8 B% j* p
/ ~* K. M) r' L) Z) y% @
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);
' H  n" V1 ~" Y* `    input clk;. c- G& \! G5 P. a% _! `$ e
    input rst;4 }  u# l+ G. O2 e
    input [7:0] R_in;/ u% t+ d' [) d% h) g! [
    input [7:0] G_in;8 E' ~' a$ B! N% a+ @+ V
    input [7:0] B_in;
+ j, _& w- e8 k. w" q# [    output oRequest;
( |7 K+ R! L; Z2 Q    output oVGA_H_SYNC;% x# u$ K: L: T% O: v
    output oVGA_V_SYNC;
: o& I8 M  f  g    output oVGA_SYNC;
5 ]- j9 a: W2 I' l    output oVGA_BLANK;) n; I4 Q& H7 s2 H/ s
    output oVGA_CLOCK;
8 q, y9 b2 t$ E( a    output [7:0] oVGA_R;8 e+ G8 b' J  |3 A4 o5 G' u
    output [7:0] oVGA_G;
9 [6 R5 T0 e# t5 Q$ S    output [7:0] oVGA_B;
( \8 C: j% z+ f# f8 h  Q         
, D5 K1 D" }7 {. F7 G5 t+ T         reg oVGA_H_SYNC,oVGA_V_SYNC;
: x( ?# w- a" \+ [1 Y: p         reg oRequest;# T$ y( f( _  [  N
         reg oVGA_SYNC;+ r2 D2 d& A! M" F0 d1 R
         reg [7:0] oVGA_R;2 F: C; U( }8 X; j
    reg [7:0] oVGA_G;
1 Z. \( X4 n$ C% x/ `( d9 m9 v    reg [7:0] oVGA_B;
( L5 R5 v- p# K" z           r: B' `8 X( V6 h6 z; t! I
         parameter LENGHT = 1024;8 X" ?; l' i, M) [5 d! U: @5 T6 w
         parameter CNT_SIZE = clogb2(LENGHT);
  y/ Q7 ^: r; c. P6 I         # {& n  Z6 U* r/ k. A/ Z! |4 B
         `include "VGA_Param.h"3 ]0 I% e% {1 M, a- I/ h7 V& g
         $ u* P. l( ]$ b- ]
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;+ H  r" d; S! V  A+ M
# A" d/ M8 k3 }; C& \
always @(posedge clk)
& J6 D  `$ y( a6 M1 j4 y6 U, u5 ibegin
# D  a1 G: q5 K) P' F4 T+ i  if (rst) begin9 b' S3 p% c8 P. F: o
   oVGA_R <= 8'd0;
: w/ N8 j- ~9 n  h+ t+ ~1 i   oVGA_G <= 8'd0;# b0 \7 f9 W5 m
   oVGA_B <= 8'd0;
/ p2 f  K$ R1 j; ]6 `( g3 B! i  end( E. m: a! e( C- n) C
  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" A/ V' }6 }( V: R
   oVGA_R <= R_in;
1 u+ a$ X( x- J( I# ?+ x( o% }# H4 \- N   oVGA_G <= G_in;
* w: N; p# r. \0 y   oVGA_B <= B_in;9 b7 M! z3 W+ [+ [) \# d
  end
8 f" \* K/ |/ x4 M  else begin
' q% p4 q4 n8 p% e& Z   oVGA_R <= 8'd0;
3 C0 a" n5 f' I7 N- v  m, B   oVGA_G <= 8'd0;) ^% c" W4 z/ n/ w7 B+ D
   oVGA_B <= 8'd0;! g' }% x- m! @
  end1 ?; W- p! B5 b3 q" o
end7 q3 Z9 j& ]6 j7 _3 H9 v
% M1 p& U( H$ ~: a
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;# k0 U  [% K% h( I3 B( f7 x
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;) G' {, y8 K2 V
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;
; a, \0 f- L+ e9 C4 U) iassign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(
! Q0 E3 V2 J0 w7 g' q      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 5 t! \. E8 h: ~3 N: o. n0 ?
      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1! ^: y( ]) }2 p* V
      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset- V; o1 o$ |! S: q, j
   ) ODDR2_inst (
, m" \$ K3 a, @% K  j9 Q9 z      .Q(oVGA_CLOCK), // 1-bit DDR output data- N0 u9 ~' M* z! k* c4 S
      .C0(clk),  // 1-bit clock input% @" h! }# [& P9 A
      .C1(~clk), // 1-bit clock input
; H. A! I$ ~- j8 C      .CE(1'b1), // 1-bit clock enable input
: A. [, G6 Z; Q3 x+ o! q! M& n      .D0(1'b0), // 1-bit data input (associated with C0)" M7 [# c" Z5 w, V- J, N
      .D1(1'b1), // 1-bit data input (associated with C1)3 O! Y0 D+ `* u' M' S
      .R(1'b0),  // 1-bit reset input
  u1 B! A4 x; [      .S(1'b0)   // 1-bit set input
) {/ k4 d; {# o& E7 S# h- O& m   );
5 [: }6 d$ s& e& O. ~2 r! B  G7 W5 ?        , s7 G1 Z! ~+ `9 A( N  r
always @(posedge clk)
6 F' v& h. `5 r& v; x4 rbegin& X1 _6 C! f9 B
  oVGA_SYNC <= oRequest;
, S- g" a8 ^: Hend       
& q  y5 z3 c' D. C7 m# N* P9 W" [8 j0 C6 x
always @(posedge clk)0 f3 ~& q. G, F4 v5 E0 m8 f
begin
/ |7 W3 P0 Q& f  if (rst)0 U0 O+ z1 d- ]- ]" O
   oRequest <= 1'b0;; N4 a$ r; b! v% r$ I/ v
  else begin
) A. ~$ W: t; X4 {  y5 K- `9 k    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))
% y+ e8 Z' Z( u) |          oRequest <= 1'b1;0 `$ G7 P" `- h' f" G2 D
         else* M! \& L4 S+ M2 q/ P8 }
          oRequest <= 1'b0;9 c! G$ m  M" }5 |
  end
+ j$ X8 O9 {5 qend2 \0 w" B% Q  s2 v" u% ^
         
8 F! ~9 g& [3 b; A- \+ e//        H_Sync Generator, Ref. 25.175 MHz Clock
% {/ [0 Q9 p. W9 R9 qalways @(posedge clk)
9 e) ^! P) B- ]2 A- o$ z8 X  lbegin# X' D2 R2 E# C* c  P
  if (rst) begin
; o- d9 r* D- g' A    h_cnt <= 12'd0;
3 V0 w2 P; J! p; I' s         oVGA_H_SYNC <= 1'b0;; B) ^" ~& H+ i" B6 X/ x6 w+ z
  end
# C6 L* K$ W1 m  else begin
4 Q5 X/ n& ]3 Z9 Z' o9 v) {5 x   //        H_Sync Counter- m  q5 E! z) Y. _9 Q
   if (h_cnt < (H_SYNC_TOTAL-1) )
  U3 u" J4 _+ b' I4 a7 W$ |2 ]          h_cnt <= h_cnt + 12'd1;
* @5 {! I: P# w/ J   else
- n  s( Z" s/ _: h7 f1 U     h_cnt <= 12'd0;
0 S6 R# k' J: [7 L+ Z- I3 u          
; Z) C: l9 V7 j$ {& x2 i" q1 [        //        H_Sync Generator" X2 n8 `1 _& n8 d$ J
        if( h_cnt < H_SYNC_CYC )
3 w) O3 w" g( L# d& D9 b7 }+ i* x          oVGA_H_SYNC        <=        0;1 R, x  z2 ^: s. `2 Y* Y& f  b! c
        else. w  @2 ]# g* [: i7 n0 ~
          oVGA_H_SYNC        <=        1;* }9 z, o. s0 m- Z: I$ a( o
  end8 f, {, x: P$ V! {4 i
end
0 K0 M6 r0 m, J3 x! M! |+ B! b0 C# w+ @0 `) Q# [
always @(posedge clk)
0 X8 E8 v/ J: p. ?, W  ubegin
: ?% A! p+ [" K% x  if (rst) begin1 L/ M2 W5 l' \6 j
   v_cnt <= 12'd0;
; N) Z  y% K$ d/ O% s   oVGA_V_SYNC <= 1'b0;, X: `! d* {( u
  end
$ H0 p7 f3 ^$ v+ U  else
) L/ y: L) L; r    if (h_cnt == 0 )6 n: e* B. B4 _2 Q4 H3 k" y/ W
          begin7 J" V: G' p0 y& @
            // V_Sync Counter
$ f# Q1 a* ]! E& X+ i" w            if (v_cnt < (V_SYNC_TOTAL-1))9 o) x4 [, h# y; y
                  v_cnt <= v_cnt + 12'd1;! Y* c' d2 y; u5 b* s
                 else: H$ m3 y$ a: q) ]+ o$ z! W& Y
                  v_cnt <= 12'd0;
# N% `0 @; ^$ j/ o                 //        V_Sync Generator' z$ @8 @8 O2 d5 d1 X: ^
                 if (v_cnt < V_SYNC_CYC)6 k. |! R5 k; H& {
                  oVGA_V_SYNC <= 1'b0;6 N# j7 i, c/ S5 I- p
                 else7 w4 i1 u4 M9 N- |
                  oVGA_V_SYNC <= 1'b1;
3 T! \! _9 B. |' i          end
7 c3 w( V9 F8 D5 Gend: w( L, m7 E: M; n
7 o9 i9 }, g( G8 G" C) P' H

9 w/ h3 C3 q( S* F( Z4 Q+ ]9 R( H0 F+ ~endmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?
2 G' ~8 Q! R7 f7 b. g: z/ K( Y4 c4 J
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,6 w" q6 T7 h& Q9 Y; ?
以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表
( Z; u5 Q; F8 u/ ^$ |" @6 X你的code應該不完整吧,很多參數我找不到你給的值?7 s* d% |% D8 \1 E6 h. \1 b
7 t' [' T* D/ W! u
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,# q$ S% e" w# {5 D
以及是數位或是類比的,在去驗證code吧。
. z0 P3 j9 L4 `1 a  ]! T
4 n$ ]. T3 Q8 L5 Z
PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?
. a: a  Y$ ]- {+ S, T& O我是直接輸出為VGA, H.V.RGB, 送到monitor使用
, K: u% i, ^! J) |; U4 {* v' S不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
! B9 G$ i9 l# b: A0 I* W7 EVGA輸出是FPGA->ADV7125,透過7125去做轉換7 @+ Y* b3 V# S# p0 r
現在用此份Verliog code已經實驗出640x480 60hz8 x) |# ?- W8 H/ ?. {5 ~6 a
但是調成800x600 60hz出問題5 ^, m" w" `0 h9 }4 h: v
測量H.V and PixelClock為正確數值了
: s* x6 q9 q  g9 l8 m( M7 x不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題0 v# J/ f2 @0 I' ~0 Q" B
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
$ T7 [+ a* n2 y( |; s+ M1 Q) a0 U" y
你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表
7 v3 @* [8 n; C0 O& a0 y! a. O( {假設你的VGA verilog core設定沒有問題/ m) _3 l/ P8 C1 ?4 [$ v; x
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size) [- U& F5 l9 ?
! f/ O: a: t6 p' h! y7 k
你說畫面出問題.是否可以解說一下

. Q- a" _' Z. K: T, S
$ \" \- q) t4 K4 U1 i. |1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)
4 J$ {! G; C% z! t+ l2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,! h% E' m  y$ u$ M; }
   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core6 Z( b2 }# w1 i1 Q
我只用過xps_tft 而且是在edk內
2 ^: L0 ?7 v- u
, s% U, L; o7 c' p0 H這樣聽起來像是你vga memory size 大小設錯了, J- K0 I  N& I2 ~0 u( H( {
我之前在edk內設錯時也有類似的狀況. % G8 @7 L: w' c0 ]  g
可是我不知道你的情況是不是跟我一樣
7 t1 q( E* e# a8 Z: R5 |# R
: `3 ?6 h1 i2 |: M剛剛看了一下你的core1 f" T) W% [$ Z" e: c) _! z/ L
設定值應該都在 VGA_Param.h 內7 V8 ?$ u! {' o* @
include "VGA_Param.h"$ ^9 V  M8 f* o) O/ N7 W  A, {

& Y) p1 I7 c1 M: @[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表 $ }- \: `  B6 @9 z
說真的我也不知道這要在哪設 因為我沒有用過你的core
# A7 o% H  n9 J3 M' r9 m我只用過xps_tft 而且是在edk內
0 M* V+ x( T5 [  ^+ D# }
2 z. B4 @0 F1 d# i! a這樣聽起來像是你vga memory size 大小設錯了
' q& k. r8 j7 A5 ^6 D1 i我之前在edk內設錯時也有類似的狀況. - |4 t1 N  o; w& ?2 C9 j
可是我不知道你的情況是不是跟我一樣
7 U0 d% A, B  a! v ...

/ {$ O5 i3 Q* Z+ e( b9 c/ f
# |  v. ]# [6 F. @( W' p# G/ F& I//800x600* Q5 I$ J  l6 K: E
parameter        H_SYNC_CYC        =        128;( \3 ]& V! `  f8 ?3 B
parameter        H_SYNC_BACK        =        88;, I% c, A- G  q# V9 O
parameter        H_SYNC_ACT        =        800;        //        800
8 b/ e; e' F- ]( ?+ ]' k6 k6 Qparameter        H_SYNC_FRONT=        40;2 L$ p1 t8 j& x. P
parameter        H_SYNC_TOTAL=        1056;4 Y& g# d8 Q. e, Y5 |
//        Virtical Parameter                ( Line )
' m2 W* O9 ]1 {4 L6 i5 A# Jparameter        V_SYNC_CYC        =        4;/ U' p' t8 J+ N/ U) B2 T
parameter        V_SYNC_BACK        =        21;
' n6 p4 B, X0 `parameter        V_SYNC_ACT        =        600;        //        6005 `" ]3 D; c% s/ b2 }6 A" g
parameter        V_SYNC_FRONT=        3;! ~1 `( U' P1 `
parameter        V_SYNC_TOTAL=        628;  f, D4 Y! h# b5 c# Z) O8 _6 S
//        Start Offset
: a' H' D2 w3 Zparameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;
* ?; Z* ^0 j& o8 l% |parameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;% _$ b& g2 b. N8 E( {; V, V' ?& N

, @+ M4 B+ g+ q以上這些參數應該都有設定對,我是follow vesa standard作設定
/ H6 \1 o( E9 _& @8 S4 L1 _$ D不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源; e6 ~6 q' ~. ]3 h( V# U* q
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,; j' I7 [* O1 ], k4 B% ~5 i
不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表
7 Z7 Q$ x1 e/ t' [8 Xclk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,
* ?& X1 b3 Q. M6 z( T不過可以查查看。
/ c4 v7 b5 q4 C* L, C3 s9 E

+ Y" A# v8 {6 v# X/ X1 g預估應該不是參數設定錯誤,而是IP有問題吧?
. m. ?7 `4 @6 ]不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?$ K1 y. S( ]: G: D) @3 k
想要自己修改看看,希望有人可以提供啊!
' A7 u7 h8 O2 r; D. D8 z% Z+ N感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表
; h: j. ^& q  z; u再講一下自己手邊版子的架構好了
$ m/ t4 I3 C; L# `VGA輸出是FPGA->ADV7125,透過7125去做轉換
# `# B, c( K+ R9 u- b' Q現在用此份Verliog code已經實驗出640x480 60hz* ~0 R1 m# ], J* H1 I2 q8 b# K
但是調成800x600 60hz出問題
5 ]8 P3 Q" |, ?; H$ g# c: i測量H.V and PixelClock為正確數值了
; }: D/ G2 z- ?6 \9 Z+ U不曉得那邊有問題 ...
/ t# {, K. j* ~" u4 ?; G$ `0 c2 ~

" I- l/ I  u( m) Y' V2 [- s. H請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表
, `2 U* T& c" v: R. N請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
, N& K" y  P1 k( ~
0 u1 B+ S) ~( Z; Q/ a% S* J
嗯!
, }. [( D( y+ fH:38KHz  {, A3 q8 ?* X6 {% }
V:60Hz
5 N# S2 a6 k; o( i6 L9 sPixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表   I5 _8 V6 l* V* N0 L  g& ~
$ ]* a; \' M: d5 Z

/ k+ x8 |3 p8 n" ~2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,& J8 M7 D1 H; o4 R" q& x& @/ C* M0 m
   而且偶爾會有影像被切割成好幾塊被換位置的現象
6 B3 A, y4 E2 ?2 N& g9 z7 C/ i

+ C! |' n- b" W$ Q$ H我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表 ! p) P$ c2 |3 R
我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?

3 V( u! M" P3 T2 a2 Z& {
: M  j; e' V+ `9 K. m請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊
! y7 @0 e, S% L' c: j3 d可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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