ET创芯网论坛(EETOP)

您现在是游客状态

请您   登录   或  注册  享受更多权益

电子书:《模拟对话》,共50卷,数百篇精品文章,下载即奖励400信元!
查看: 6585|回复: 18

[求助] PAL制式显示FPGA实现问题

[复制链接]
发表于 2010-3-30 00:41:09 | 显示全部楼层 |阅读模式
本帖最后由 logilas 于 2010-3-30 00:42 编辑

小弟用FPGA写了个PAL制式隔行扫描的显示模块,使用的是50HZ的帧频,产生奇偶场的复合消隐和复合同步控制信号,并送给DAV7123显示,但是在监视器上发现显示图像在上下抖动,但是接到LCD显示器上却只看到图像在左右晃动(图像数据本身无问题),不知道是怎么回事呀?我还专门用摄像机产生的信号和用FPGA生成的信号用示波器做过对比,没看到有差异,但是摄像机接到监视器上就没有上下抖动的现象。请各位指点迷境呀!!谢谢
发表于 2010-3-30 11:16:45 | 显示全部楼层
与图象内容的数据无关,是时序信号不稳
回复 支持 反对

使用道具 举报

发表于 2010-3-30 19:23:34 | 显示全部楼层
查一下资料,把行扫描和列扫描信号标准化。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-1 23:08:19 | 显示全部楼层
最近查了下资料,主要是电视原理方面的书,发现书中对复合同步信号画的挺详细的,但是对于复合消隐信号确说的很模糊,不清楚复合消隐到底是个怎么样的时序和复合同步时个什么关系??看书中只讲了场消隐持续时间为1600us+12us(行逆程),但是书上画的确是25个行周期,即1600us。同时书上介绍以场同步前均衡起始作为第一行,则从第23.5到310行,和从336到622.5行都是行数据有效期,其余时刻都为场消隐期,按照这个来算的话,2个场消隐加起来也只有50个行周期;如果算场消隐是在场同步前均衡起始处开始的,那么场消隐的起始就不会和行消隐的起始重合了~~~~
    这几天开了半天真是百思不得其解呀,完全被书和资料弄混了,求大家帮帮忙看下我到底哪儿理解错了啊,道理复合同步和复合消隐是个什么样的关系呀??小生跪谢了!!
回复 支持 反对

使用道具 举报

发表于 2010-4-2 08:03:07 | 显示全部楼层
主要还是时序的问题吧?
回复 支持 反对

使用道具 举报

发表于 2010-4-21 23:46:17 | 显示全部楼层
也关注一下
回复 支持 反对

使用道具 举报

发表于 2010-5-12 16:08:32 | 显示全部楼层
最近也在做这个 我写了行场同步 可是一点输出也没有?能看一下你写的时序吗?
可以的话发我邮箱slq8966@139.com 万分感谢  我用AD723显示。
回复 支持 反对

使用道具 举报

发表于 2010-7-5 11:06:17 | 显示全部楼层
消隐信号不会引发图象抖动
回复 支持 反对

使用道具 举报

发表于 2010-7-5 15:33:01 | 显示全部楼层
查一下是不是 Even/Odd不一樣(X,Y)
或是LCD對Even/Odd的Vsync長度不一樣會發生.
回复 支持 反对

使用道具 举报

发表于 2010-7-20 19:22:02 | 显示全部楼层
我也出现这种情况呀,
//project:blank_512_640
//function:generate the 7123's vsync using 7189's vs and fs.
//ok:?
//date:2010.04.21
module sync_blank_13p5(
        //input
        llc_13p5,
        rst,
       
        //vs_7189,
        //fs_7189,
        //sync,
        //output
        frame_count,
        h_count,
        v_count,
       
        hblank,
        vblank,
        hv_sync,
        hv_blank
        );
       
        /***********define io***************/
        input llc_13p5;
        input rst;
        //input sync;
       
        //output
        //output[19:0]frame_count;//864*625=540000=0x83d60
        output[19:0]frame_count;//864*625=540000=0x83d60
        output[9:0]h_count;
        output[9:0]v_count;
        output hblank;
        output vblank;
        output hv_sync;
        output hv_blank;
       
        reg[19:0]frame_count;//864*625=540000=0x83d60
        reg[9:0]h_count;
        reg[9:0]v_count;
        reg hblank;
        reg vblank;
        wire hv_sync;
        wire hv_blank;
        /************************************/
       
        /***********define variable*********/
        parameter ODD_BLANK_START=(20'd23+20'd16)*20'd864;
        parameter ODD_BLANK_END=(20'd23+20'd16+20'd256)*20'd864;
        parameter EVEN_BLANK_START=(20'd23+20'd16+20'd256+20'd15+20'd26+20'd16)*20'd864;
        parameter EVEN_BLANK_END=(20'd23+20'd16+20'd256+20'd15+20'd26+20'd16+20'd256)*20'd864;
       
        parameter ODD_SYNC_START=20'd0;//the data from the chart is 1 row,720
        parameter EVEN_SYNC_START=20'd270000;//the data from the chart is 313 row,360
       
        parameter US_32=9'd432;//32*13.5=432
        parameter US_27P3=9'd368;//27.3*13.5=368.55
        parameter US_2P35=5'd31;//2.35*13.5=31.725

       
       
       
        reg[19:0]frame_count_temp;//864*625=540000=0x83d60
        //reg[9:0]h_count;
       
        reg vsync_flag;
        reg hsync;
        reg vsync;
       
        //reg sync_old;
        //reg sync_new;
       
       
        /***********************************/
       
        /************process start**********/
        //process:1
        //function:generate vf_old,vf_new
        //process:2
        //function:generate frame_count
        /************process start**********/
        //process:1
        //function:generate sync_old,sync_new
        /*always@(posedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        sync_old<=1'b0;
                                        sync_new<=1'b0;
                                end
                        else
                                begin
                                        sync_old<=sync_new;
                                        sync_new<=sync;
                                end
                end*/
        //process:2
        //function:generate frame_count
        always@(negedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        frame_count_temp<=20'd0;
                                end
                        else
                                begin
                                        case(frame_count_temp>=20'd539999)
                                                1'b1:
                                                        frame_count_temp<=20'd0;
                                                default:
                                                        frame_count_temp<=frame_count_temp+20'd1;
                                        endcase
                                        /*if({sync_old,sync_new}==2'b10)
                                                begin
                                                        frame_count_temp<=20'd0;
                                                end
                                        else
                                                begin
                                                        frame_count_temp<=frame_count_temp+20'd1;
                                                end*/
                                end
                end
        always@(posedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        frame_count<=20'd0;
                                end
                        else
                                frame_count<=frame_count_temp;
                end
        //process:3
        //function:generate h_count
        always@(posedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                h_count<=10'd0;
                        else
                                h_count<=frame_count_temp%10'd864;
                end
        //process:4
        //function:generate v_count
        always@(posedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                v_count<=10'd1;
                        else
                                v_count<=frame_count_temp/10'd864+10'd1;
                end
        //process:5
        //function:generate vblank
        always@(negedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        vblank<=1'b0;
                                end
                        else
                                begin
                                        case(frame_count)
                                                ODD_BLANK_START:
                                                        vblank<=1'b1;
                                                ODD_BLANK_END:
                                                        vblank<=1'b0;
                                                EVEN_BLANK_START:
                                                        vblank<=1'b1;
                                                EVEN_BLANK_END:
                                                        vblank<=1'b0;
                                                default:;
                                        endcase
                                end
                end
        //process:6
        //function:generate hblank
        always@(negedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        hblank<=1'b0;
                                end
                        else
                                begin
                                        case(h_count)
                                                10'd0:
                                                        hblank<=1'b0;
                                                10'd184:
                                                        hblank<=1'b1;
                                                10'd824:
                                                        hblank<=1'b0;
                                                default:;
                                        endcase
                                end
                end
        //process:7
        //fuction:generate hv_blank
        assign hv_blank=hblank&&vblank;
        //process:5
        //function:generate vsync
        always@(negedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        vsync<=1'b1;
                                        vsync_flag<=1'b0;
                                end
                        else
                                begin
                                        case(frame_count)
                                       
                                                20'd540000-US_32*5://forthward equalization start
                                                        begin
                                                                vsync_flag<=1'b1;
                                                                vsync<=1'b0;//forward equalization is start,is 5 period.1 period is 1 low,5 high
                                                        end
                                                20'd540000-US_32*5+US_2P35:
                                                        vsync<=1'b1;
                                                20'd540000-US_32*4://2 period start
                                                        vsync<=1'b0;
                                                20'd540000-US_32*4+US_2P35:
                                                        vsync<=1'b1;
                                                20'd540000-US_32*3://3 period start
                                                        vsync<=1'b0;
                                                20'd540000-US_32*3+US_2P35:
                                                        vsync<=1'b1;
                                                20'd540000-US_32*2://4 period start
                                                        vsync<=1'b0;
                                                20'd540000-US_32*2+US_2P35:
                                                        vsync<=1'b1;
                                                20'd540000-US_32://5 period start
                                                        vsync<=1'b0;
                                                20'd540000-US_32+US_2P35:
                                                        vsync<=1'b1;
                                               
                                               
                                                ODD_SYNC_START:
                                                        vsync<=1'b0;//  vsync is start;1 period is start,the low length is US_27P3
                                                ODD_SYNC_START+US_27P3:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32:          //2 period is start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32+US_27P3:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*2:        //3 period is start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*2+US_27P3:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*3:        //4 period is start           
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*3+US_27P3:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*4:        //5 period is start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*4+US_27P3:
                                                        vsync<=1'b1;
                                       
                                                ODD_SYNC_START+US_32*5:        //vsync is finished.backward is start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*5+US_2P35:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*6:        //2 period start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*6+US_2P35:
                                                        vsync<=1'b1;//
                                                ODD_SYNC_START+US_32*7:        //3 period start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*7+US_2P35:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*8:        //4 period start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*8+US_2P35:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*9:        //5 period start
                                                        vsync<=1'b0;
                                                ODD_SYNC_START+US_32*9+US_2P35:
                                                        vsync<=1'b1;
                                                ODD_SYNC_START+US_32*10:       //the backward is finished
                                                        begin
                                                                vsync_flag<=1'b0;
                                                        end
                                                EVEN_SYNC_START-(US_32*6-US_2P35):
                                                        vsync_flag<=1'b1;       
                                                EVEN_SYNC_START-(US_32*5):
                                                        begin
                                                                vsync<=1'b0;       
                                                                vsync_flag<=1'b1;
                                                        end
                                                EVEN_SYNC_START-(US_32*5-US_2P35):
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START-(US_32*4):
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START-(US_32*4-US_2P35):
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START-(US_32*3):
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START-(US_32*3-US_2P35):
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START-(US_32*2):
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START-(US_32*2-US_2P35):
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START-(US_32):
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START-(US_32-US_2P35):
                                                        vsync<=1'b1;       
                               
                                                EVEN_SYNC_START:
                                                        vsync<=1'b0;
                                                EVEN_SYNC_START+US_27P3:
                                                        vsync<=1'b1;
                                                EVEN_SYNC_START+US_32:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32+US_27P3:
                                                        vsync<=1'b1;               
                                                EVEN_SYNC_START+US_32*2:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*2+US_27P3:
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START+US_32*3:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*3+US_27P3:
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START+US_32*4:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*4+US_27P3:
                                                        vsync<=1'b1;
                                       
                                                EVEN_SYNC_START+US_32*5:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*5+US_2P35:
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START+US_32*6:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*6+US_2P35:
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START+US_32*7:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*7+US_2P35:
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START+US_32*8:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*8+US_2P35:
                                                        vsync<=1'b1;       
                                                EVEN_SYNC_START+US_32*9:
                                                        vsync<=1'b0;       
                                                EVEN_SYNC_START+US_32*9+US_2P35:
                                                        vsync<=1'b1;               
                                                 
                                                EVEN_SYNC_START+US_32*10:
                                                        begin       
                                                                vsync_flag<=1'b0;
                                                        end
                                                       
                                                default:;
                                        endcase
                                end
                end
                //process:6
        //function:generate hs
        always@(negedge llc_13p5 or negedge rst)
                begin
                        if(!rst)
                                begin
                                        hsync<=1'b0;
                                end
                        else
                                begin
                                        case(h_count)
                                                10'd0:
                                                        hsync<=1'b0;
                                                //10'd11:
                                                        //hsync<=1'b0;
                                                10'd63:
                                                        hsync<=1'b1;
                                                default:;
                                        endcase
                                end
                end
        assign hv_sync=(hsync||vsync_flag)&&vsync;
endmodule
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|手机版|Archiver|ET创芯网 ( 京ICP备:10050787号 京公网安备:110105001212 )

GMT+8, 2019-3-22 20:33 , Processed in 0.077980 second(s), 12 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表