Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

請教Verliog問題 (VGA)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-6-11 12:43:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下,有人可以幫我看看Verliog問題出在哪嗎? 畫面異常啊!!; C; y$ a2 U5 C3 L
6 p0 U% c& i/ s; a
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);
4 Z6 G+ D  v( G7 G; e! t# _    input clk;# Q0 J3 l+ q- \$ c! S8 }
    input rst;4 g, o( H6 k- p7 {; W5 R9 [
    input [7:0] R_in;7 \' P6 m6 N( a1 V. g9 R+ c2 z
    input [7:0] G_in;
* {# R) m8 h6 M8 [4 X6 y    input [7:0] B_in;* b) N: g8 \7 x+ M  r
    output oRequest;
, l% v0 {+ l$ ]7 m2 G" H# f% T    output oVGA_H_SYNC;. }  `. \6 f0 `& ?, H
    output oVGA_V_SYNC;
2 t7 s) u* z$ a! ^    output oVGA_SYNC;) U) K$ D: j: }9 K* N3 _7 r/ @
    output oVGA_BLANK;7 f$ a) q. c$ G2 M; n$ {
    output oVGA_CLOCK;
* {! f4 V0 e$ r4 G    output [7:0] oVGA_R;9 E3 `5 p" ?. E3 Z! X7 b2 ^9 ~
    output [7:0] oVGA_G;/ A4 Y6 T: {& f- g' `
    output [7:0] oVGA_B;" N% P$ Y) f3 R
         : R3 T, B( V- w0 X) I
         reg oVGA_H_SYNC,oVGA_V_SYNC;
$ @: _$ O7 E4 W2 g         reg oRequest;
2 M) P# |' P: M* w8 u         reg oVGA_SYNC;$ F" C6 S& n8 O+ J7 ^8 e. U. Y
         reg [7:0] oVGA_R;; _( S* I" u, k% o' M6 V4 R
    reg [7:0] oVGA_G;
2 f6 {( z+ m8 c8 t    reg [7:0] oVGA_B;
6 h. q8 u" I& C0 B7 `         
% I: U. d9 @/ `. e9 x) H         parameter LENGHT = 1024;  b$ _6 d0 U- v% d
         parameter CNT_SIZE = clogb2(LENGHT);
3 A1 r4 ^+ e+ L5 o* O8 G         
" o+ Y$ c3 j( R% V* R; I         `include "VGA_Param.h"
. w" r0 M* k( r9 ?3 m3 v         5 m  k% @, B$ P0 m/ J: t/ p
         reg [CNT_SIZE - 1:0] h_cnt,v_cnt;( U) f7 U& V+ s" u/ G3 l. Z0 [

# r2 ^$ R0 U" Ualways @(posedge clk)
0 d" c3 X$ ]* X. e$ U& Xbegin' c0 c" y) `8 D+ v
  if (rst) begin
6 M( L0 }0 u" f1 z3 k   oVGA_R <= 8'd0;/ M- G# B2 \9 Y
   oVGA_G <= 8'd0;3 O( ~( q) I! W+ N+ x
   oVGA_B <= 8'd0;
$ g* W7 H7 ]* J6 m- r" S  end
6 |! h% B3 w, a, d+ 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) begin2 l) U$ v" F, {" U" S
   oVGA_R <= R_in;
  t0 b$ E7 V) s5 x6 D8 L   oVGA_G <= G_in;
0 ]- p3 L/ C% ~8 q+ j1 o7 I5 L2 x( }   oVGA_B <= B_in;" k6 v6 K% \( J  U- U
  end
1 n# ]5 `2 I! c) }$ x; D; h  else begin
* }+ @- n* w% F' a9 A   oVGA_R <= 8'd0;
( ]0 n1 C, H& s  ^8 e# i   oVGA_G <= 8'd0;
2 A0 K! V3 D) s7 }   oVGA_B <= 8'd0;# u" ~& m  O& w% `$ x) P
  end
3 T( w; u* n  d# U% @end
$ r/ d7 Z+ N1 u  R6 l% N8 t3 }% Z* }; W
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;, x. B. z, J. T4 E6 C  H
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 f9 k% W9 ]8 h+ a" q
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;2 G0 G: t5 o" l  V
assign oVGA_CLOCK = ~ clk;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-6-11 12:43:50 | 只看該作者
ODDR2 #(8 I0 `" f. U$ v; r# q: i
      .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
: J* s& ?9 k. k! @8 s) K2 t      .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1- t) y3 c2 r4 b, i" Y
      .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
9 m% l+ ~7 c4 p; c4 i! N   ) ODDR2_inst (
3 o- p9 X2 p+ i/ I( C7 W& \/ ]      .Q(oVGA_CLOCK), // 1-bit DDR output data
2 [* T+ m8 ~) p5 z) }      .C0(clk),  // 1-bit clock input
, Y. N, {* L. v      .C1(~clk), // 1-bit clock input
" i, Q5 Q8 R" U- t9 T      .CE(1'b1), // 1-bit clock enable input
4 f* [0 u* s: Y      .D0(1'b0), // 1-bit data input (associated with C0)# G! v' ?7 t- {5 q8 {
      .D1(1'b1), // 1-bit data input (associated with C1). V4 Q  p0 |$ H) E. f. k9 B8 m
      .R(1'b0),  // 1-bit reset input' h+ C3 Z# Q. i/ x6 j( y; ?
      .S(1'b0)   // 1-bit set input
4 J  a2 ]2 C! ~: c. @$ n   );
' p- M- [7 Q9 N8 u- k% O       
# s9 w  k! [8 k! [) u' g' q  qalways @(posedge clk)* [' w+ |2 j3 g3 t/ F) N  S8 v
begin% N: C5 K4 O0 U* n* _
  oVGA_SYNC <= oRequest;" I7 g' Q. t, P8 B( t. J# V
end       
  W# t! H+ f7 N% k' @5 S3 j
4 j& F! V- g8 F" L: Ealways @(posedge clk)) G6 l0 H* W1 T( D5 P& S' h- `+ W
begin
( @& ?* B$ D' o" x9 Z# H) P  if (rst)7 b! K# R6 w, P6 \  \
   oRequest <= 1'b0;
2 ]9 W! L  `- q2 T! y" _& J  else begin# C, @8 k& r3 i/ t- g0 l* o
    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))
$ t# z" l7 i* e1 E; r3 H8 o! g2 O! k: X          oRequest <= 1'b1;: B( ^# a& V& H1 k/ [
         else, G* e$ `; g  s0 l( p, K, p
          oRequest <= 1'b0;- D+ U; _% @9 C- g" h9 h* @
  end1 z' g( q# K, R1 e2 G
end+ |9 X2 L7 p- ]5 @: G6 L' F* {( r
         3 Z$ O+ Q6 q7 p1 q
//        H_Sync Generator, Ref. 25.175 MHz Clock
' I* G; `7 l" m% h# h# walways @(posedge clk)% X! q9 k( T- f5 L& i4 [  u( G
begin
- n7 z8 C( k8 t7 e5 F  if (rst) begin2 P/ \, f: P7 c( b- D
    h_cnt <= 12'd0;1 Y& x" d0 h# T
         oVGA_H_SYNC <= 1'b0;' C6 Z9 c* \$ I2 i# ]; J; p0 h
  end9 j0 J% w4 }% G+ p* Q! X0 O4 l
  else begin0 z0 e  C9 X& F$ X! B
   //        H_Sync Counter5 P4 O4 f$ ~/ r' y; j
   if (h_cnt < (H_SYNC_TOTAL-1) )
' I( ^$ o% `0 A1 b5 Q6 @$ ]          h_cnt <= h_cnt + 12'd1;1 ]9 |) ?- u; ?( @9 h* j
   else
  r& g2 R# _  x) }9 N     h_cnt <= 12'd0;/ b* U3 i& A  ~' k" |6 M
          ( Q) e0 e% ^& @$ c3 l
        //        H_Sync Generator% S" s9 l: x, l% l- `  L2 o* ]
        if( h_cnt < H_SYNC_CYC )
4 Q0 Z' ~3 Y5 @7 ?& _) s          oVGA_H_SYNC        <=        0;) B3 ~' d$ t9 I
        else
' ]# M7 w  ?: x3 D: c          oVGA_H_SYNC        <=        1;
$ W* N- O+ z4 S; i" Z" J2 E  end
& G; F0 S1 k" t7 A$ }$ gend" g& q# O; z. ~. R- [
  V. N& j  F! P" L
always @(posedge clk)( P! X* Q/ i2 p' v8 `) u& {' A8 i
begin
; [7 e7 l8 r; Z  c2 i% H  if (rst) begin
6 S$ d1 [7 x7 Q/ z2 f" s  d4 M. n   v_cnt <= 12'd0;% \% A8 w% A5 B& o2 Y& n
   oVGA_V_SYNC <= 1'b0;
7 h4 Y0 U/ F8 |8 }# [. [6 a* b  end
2 k$ j0 T) Y! d0 w  else
# s% e& H9 G  e' ~" }1 G    if (h_cnt == 0 )
/ u+ J0 J+ v) a8 k- K/ D          begin! r9 `. T4 n1 k1 W" ^$ V
            // V_Sync Counter
9 r* P! q$ G! V% p5 U' Y            if (v_cnt < (V_SYNC_TOTAL-1))! m& H2 q1 N) z: L3 v) X. I
                  v_cnt <= v_cnt + 12'd1;
* F- ^( w1 Q$ J  _. q1 b$ Y                 else9 I2 K- _1 L4 i  k: U: J' C
                  v_cnt <= 12'd0;
% [' Q& e6 y4 D  X- z5 {/ Z                 //        V_Sync Generator
5 r3 J' c2 X3 F& ]$ H8 b& L) I( ?                 if (v_cnt < V_SYNC_CYC)' h' Y) w: p- U8 E4 A
                  oVGA_V_SYNC <= 1'b0;4 X3 t- z: g7 e$ j/ t* R* D
                 else
, t- H9 A* _7 B2 z% n                  oVGA_V_SYNC <= 1'b1;
, Q' w  m* `% a/ K          end
+ e" G! @( d9 B$ Fend
. M. ], @& Z  H' d* S0 Q
, L5 ]. g& B4 B+ C7 Q' a, c! n! H# K( ?7 Z
endmodule
3#
 樓主| 發表於 2009-6-17 21:24:57 | 只看該作者
請問有人知道該怎麼修正嗎? 畫面異常狀況為資料扭掉,垂直信號異常。
4#
發表於 2009-6-18 00:24:50 | 只看該作者
你的code應該不完整吧,很多參數我找不到你給的值?
/ C) V4 ~3 E& t5 C1 n6 _; V  }+ ^: c: }  b* W
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,6 F: B5 x8 q( G3 t9 {% F: E
以及是數位或是類比的,在去驗證code吧。
5#
 樓主| 發表於 2009-6-18 09:11:03 | 只看該作者
原帖由 spring69393 於 2009-6-18 12:24 AM 發表 " h/ [1 G8 N" D" b2 u8 M1 K* v- d
你的code應該不完整吧,很多參數我找不到你給的值?; }) G' P) G2 [$ ^0 s! s4 H' O
; _0 _. X2 X2 a% F* B+ U3 E
你先確認一下面板跑的clk 、bp 、 面板的h跟v 有沒有設錯,& \: B. y' F9 a- r1 p5 H. C
以及是數位或是類比的,在去驗證code吧。
! W6 C/ ?' v1 f5 V8 \, j
9 J1 g, [! {4 Q, o3 R8 [
PixelClock.H.V送出來是對的, BP不曉得你指的是什麼?* r0 X1 y8 H$ [4 V0 f
我是直接輸出為VGA, H.V.RGB, 送到monitor使用
  G5 _$ I6 V# U不是直接送給面板囉!! ^^
6#
 樓主| 發表於 2009-6-18 11:54:00 | 只看該作者
再講一下自己手邊版子的架構好了
* x/ e/ B6 V4 ^7 U3 @: eVGA輸出是FPGA->ADV7125,透過7125去做轉換0 ?0 w2 F  |" U9 w$ A+ f. z! j
現在用此份Verliog code已經實驗出640x480 60hz( w4 V& ?6 b# [- N, m; z, {5 p+ A
但是調成800x600 60hz出問題
  Q) ?8 h' v+ n3 t測量H.V and PixelClock為正確數值了4 x6 a' @& b! O' Y
不曉得那邊有問題,有人可以提點嗎?
7#
發表於 2009-6-23 10:24:50 | 只看該作者
假設你的VGA verilog core設定沒有問題# y# G- \  Z# S7 f
你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size
3 j( Q# L9 d. l) n& W" j+ w5 a5 l, e* Y1 I8 {
你說畫面出問題.是否可以解說一下
8#
 樓主| 發表於 2009-6-23 20:20:02 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:24 AM 發表
# C' A. w( Y, Y  f9 \: V2 U+ M假設你的VGA verilog core設定沒有問題
/ D' i8 D. r5 @- I1 j. Y你 VGA memory 有設夠嗎? 你最少要需要800*600*3 memory size  E6 X& V$ {+ j& q

8 T* X( v9 u* `) s1 o* l3 Y# m4 H你說畫面出問題.是否可以解說一下

2 [# ?/ T6 |* {4 q# ?3 b& p' A+ ]" _6 Z
1. VGA memory -> 請問該去哪裡確定大小呢? (這個真的就不清楚了!)
: T" C# m: Z" d* N' F2 Y2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
9 Y' E- `8 h( A/ X4 n4 ^   而且偶爾會有影像被切割成好幾塊被換位置的現象
9#
發表於 2009-6-23 22:23:01 | 只看該作者
說真的我也不知道這要在哪設 因為我沒有用過你的core
: d' q% M! B$ l/ U+ d我只用過xps_tft 而且是在edk內
9 @$ y# P  q& g' Q% E8 j
$ u) _, e/ ?; `/ V- i2 g: I6 l這樣聽起來像是你vga memory size 大小設錯了
. |( M5 q" h& O! S我之前在edk內設錯時也有類似的狀況.
; H8 v7 n  o( f" @/ ^/ R$ {可是我不知道你的情況是不是跟我一樣
9 L+ I1 L# z- \: J/ D" c  Y0 F- Z% @' d/ `9 c- f
剛剛看了一下你的core$ E) o3 Y* C3 {( o0 }( Z" H7 j8 Q/ A
設定值應該都在 VGA_Param.h 內
. r. K8 T6 x$ a7 V9 yinclude "VGA_Param.h"5 \5 m5 P7 s! r- K
7 o2 \; u/ @% @8 Z9 q; Z1 e- z
[ 本帖最後由 huanyu 於 2009-6-23 10:32 PM 編輯 ]
10#
 樓主| 發表於 2009-6-24 09:04:58 | 只看該作者
原帖由 huanyu 於 2009-6-23 10:23 PM 發表
5 E% k) r3 {) {' M! X+ V$ m% O說真的我也不知道這要在哪設 因為我沒有用過你的core
) b3 Q" c" z$ z我只用過xps_tft 而且是在edk內* f. X; C9 n2 z) k1 H: K
  A: S/ X* L: k& V4 m* i6 d' \
這樣聽起來像是你vga memory size 大小設錯了
- P. J/ f8 _/ N% r- X/ V! U! a/ I6 s我之前在edk內設錯時也有類似的狀況.
, O+ G1 C! e/ N$ Z7 }8 d可是我不知道你的情況是不是跟我一樣0 q4 K1 s( L4 u* @: {$ v
...

( k) {& X7 g. e$ O, c. m+ R( x9 d1 Q( y# J0 u6 k
//800x600
$ s5 r6 z: d- _, z4 Qparameter        H_SYNC_CYC        =        128;
5 L- r3 x9 M$ S" c* Q+ ]: f- rparameter        H_SYNC_BACK        =        88;: v3 W$ b* ]' T1 D. N. @
parameter        H_SYNC_ACT        =        800;        //        800
$ t+ z7 r5 V" H2 A. \! `$ tparameter        H_SYNC_FRONT=        40;
+ b# w( H7 t# p+ M7 o4 uparameter        H_SYNC_TOTAL=        1056;
- A- J& x1 E, ~5 R//        Virtical Parameter                ( Line )3 T' U9 u' s" }3 ?
parameter        V_SYNC_CYC        =        4;
: s- u  u4 a) T% L7 p* z" Iparameter        V_SYNC_BACK        =        21;; i* r$ T; f) ^% }; C/ v
parameter        V_SYNC_ACT        =        600;        //        600
( w8 h# P5 j- _$ ?8 `parameter        V_SYNC_FRONT=        3;% i1 Z+ v7 e: O; b
parameter        V_SYNC_TOTAL=        628;
/ S# v8 d& m; ?//        Start Offset# J& f9 g, y1 w% C. `6 i
parameter        X_START                =        H_SYNC_CYC+H_SYNC_BACK;' A  ~& _1 n4 }  t
parameter        Y_START                =        V_SYNC_CYC+V_SYNC_BACK;; I5 e6 M# p5 {: R2 M4 B' f0 g
: `% D7 i. ^. j0 K' N
以上這些參數應該都有設定對,我是follow vesa standard作設定2 W! \( W, q' M' e4 E& }
不過我沒有使用xps_tft來作,我使用的是代理商建議的IP,比較省資源+ ^, V: O& U; _% i3 d! v
不曉得有沒有做過非xps_tft ip?
11#
發表於 2009-6-27 19:10:00 | 只看該作者
clk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,4 S* U5 e/ ?6 _7 H
不過可以查查看。
12#
 樓主| 發表於 2009-7-2 14:20:35 | 只看該作者
原帖由 spring69393 於 2009-6-27 07:10 PM 發表
, J, Z3 L/ r- q, Xclk 跑多少也是規格書訂的嗎,不同的面板跑的clk速度也不一樣哦,monitor的話是不確定,8 ^1 n4 j) e) ?4 R9 Z7 @) X2 y
不過可以查查看。

% W7 J7 W/ s( B5 L9 m  d
8 p8 r- n  @9 g, H4 V0 W預估應該不是參數設定錯誤,而是IP有問題吧?! v0 {" w9 v8 v4 i  v$ ~$ H& X3 O
不曉得該從哪裡看起了!對IP還不是那麼熟悉!
13#
 樓主| 發表於 2009-7-7 22:47:29 | 只看該作者
有沒有人可推薦一下?哪裡有這種DEMO IP可以看呢?
+ N& g* s: K+ {: M想要自己修改看看,希望有人可以提供啊!3 ~. I8 w% t/ Q  [: L# a2 w9 c* X
感恩
14#
發表於 2009-7-11 10:51:40 | 只看該作者
原帖由 chchtono 於 2009-6-18 11:54 AM 發表
& K# r4 N: }" e" q, Y% h8 r再講一下自己手邊版子的架構好了$ Z4 ]  W7 G7 @6 ]4 B( v
VGA輸出是FPGA->ADV7125,透過7125去做轉換
: z7 Z7 o: L) O7 r現在用此份Verliog code已經實驗出640x480 60hz
( q9 L* u; `) n* c但是調成800x600 60hz出問題# H: h! `1 b- Q/ }% v
測量H.V and PixelClock為正確數值了0 o5 u+ o( c( Q6 D& X
不曉得那邊有問題 ...

# z+ g3 O# q& T1 Z; D2 G6 g( w$ J  ^7 z9 X( z
請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
15#
 樓主| 發表於 2009-7-15 09:37:06 | 只看該作者
原帖由 yuming 於 2009-7-11 10:51 AM 發表
3 D# o/ n( d8 Y( }$ `1 u: N請問你量測 800x600 下的 H.V and PixelClock 數值分別是多少 ?
1 g: ^) o5 `! z: l" c

: ~, Z+ J! x( N& `/ ~0 {5 g- a; W% Z嗯!
  G* Z% O, M  x; s! |H:38KHz
4 z- \: N4 R5 y& A5 M) WV:60Hz) ?7 n" V* L6 _! v/ L
PixelClock:40Mhz
16#
發表於 2009-7-16 21:22:35 | 只看該作者
原帖由 chchtono 於 2009-6-23 08:20 PM 發表
" M9 l( r1 ?; {  C! W% V0 {
+ L* Q, l# j. l) v4 a3 v
  R+ W7 I/ l5 v1 I0 n2. 畫面出問題為影像偏移以及畫面會有橫向條紋覆蓋在正確的圖向上,
  L; B, B& E7 Z, T+ y   而且偶爾會有影像被切割成好幾塊被換位置的現象
, j% B) f! O  l

1 m. b8 k# d. X0 Z  w我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
17#
 樓主| 發表於 2009-7-19 16:57:43 | 只看該作者
原帖由 yuming 於 2009-7-16 09:22 PM 發表 $ L' ], l1 A6 \  K' o
我想 800*600 timing 應該沒問題 , 會不會問題在 VGA XY座標和顯示記憶體的對映上?
# I- B8 G( i! K; _, `
  c! F* W  }5 \. `2 k5 D# b
請問該從哪裡查起呢?不太確定記憶體對應該怎麼查啊$ O) H  G2 q8 t5 s* t: N
可以指導一下嗎?感恩
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 05:13 PM , Processed in 0.178010 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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