fpga_feixiang 发表于 2021-3-13 16:02:12

vga控制程序实现

module vga_ctrl (pi_clk, pi_rst_n, po_hs, po_vs, po_rgb,
        data, rdreq);
       
        input pi_clk, pi_rst_n; //ϵͳʱ�Ӹ�λ
        input data;
//        output rdreq;
        outputrdreq;
        output reg po_vs;                //VGA��ͬ���ź�
        output reg po_hs;                        //VGA��ͬ���ź�
        output po_rgb;        //VGA�����������ɫ
//        output po_rgb;        //VGA�����������ɫ
//        output po_rgb;                //VGA�����������ɫ
       
        //----------------VGAʱ��-----------------------------------
        //                ��ʾģʽ                  ʱ��          
        //                800*600@6040MHz       
        //��/��        ͬ��(a)        ��������(b)        ��Ч��ʾ(c)        ����ǰ��(d)        ɨ��ʱ��(e)
        //hs                128                88                                800                        40                                1056
        //vs                4                        23                                600                        1                                628       

        //----------------VGAʱ��-----------------------------------
        //                ��ʾģʽ                  ʱ��          
        //                640*480@6025MHz       
        //��/��        ͬ��(a)        ��������(b)        ��Ч��ʾ(c)        ����ǰ��(d)        ɨ��ʱ��(e)
        //hs                96                        48                                640                        16                                800
        //vs                2                        33                                480                        10                                525       

       
//        //        ��(Horizontal)ɨ��        Parameter �����أ�
//        parameter        HA        =        96;
//        parameter        HB        =        48;
//        parameter        HC        =        640;
//        parameter        HD        =        16;
//        parameter        HE   =        800;
//       
//       
//        //        ��(Vertical)ɨ��        Parameter ��������
//        parameter        VA        =        2;
//        parameter        VB        =        33;
//        parameter        VC        =        480;
//        parameter        VD        =        10;
//        parameter        VE        =        525;
        parameter        HA = 96,        HB = 48,        HC = 640,        HD = 16,                HE = 800;
        parameter        VA = 2,        VB = 33,        VC = 480,        VD = 10,                VE = 525;
                                       
        localparam        HAB = HA + HB,                HAC = HA + HB + HC;
        localparam        VAB = VA + VB,                VAC = VA + VB + VC;
       
        //��ɨ����������
        reg hcnt;
       
        always @ (posedge pi_clk or negedge pi_rst_n)
        begin
                if (!pi_rst_n)
                        hcnt <= 11'd0;
                else
                        begin
                                if (hcnt == (HE - 1'b1)) //ɨ����һ������
                                        hcnt <= 11'd0;
                                else
                                        hcnt <= hcnt + 1'b1;
                        end
        end
       
        //��ɨ��������
        reg vcnt;
       
        always @ (posedge pi_clk or negedge pi_rst_n)
        begin
                if (!pi_rst_n)
                        vcnt <= 11'd0;
                else
                        begin
                                if (hcnt == (HE - 1'b1))
                                        begin
                                                if (vcnt == (VE - 1'b1))
                                                        vcnt <= 11'd0;
                                                else
                                                        vcnt <= vcnt + 11'b1;
                                        end
                        end
//                else if (vcnt == (VE - 1'b1))
//                        vcnt <= 11'd0;
//                else if (hcnt == (HE - 1'b1))
//                        vcnt <= vcnt + 1;
        end        

        //��ͬ������
        always @ (posedge pi_clk or negedge pi_rst_n)
                begin
                        if (!pi_rst_n)
                                po_hs <= 1'b1;
                        else
                                po_hs <=(hcnt < HA) ? 1'b0 : 1'b1;
                end
       
        //assign po_hs = (hcnt <= HA - 1'b1) ? 1'b0 : 1'b1;
       
        //��ͬ������
        always @ (posedge pi_clk or negedge pi_rst_n)
                begin
                        if (!pi_rst_n)
                                po_vs <= 1'b1;
                        else
                                po_vs <= (vcnt < VA) ? 1'b0 : 1'b1;
                end
       
        //assign po_vs = (vcnt <= VA - 1'b1) ? 1'b0 : 1'b1;

        wire rgb_en;
       
        assign rgb_en = (hcnt >= HAB&& hcnt < HAC) &&
                                                (vcnt >= VAB&& vcnt < VAC) ? 1'b1 : 1'b0;
       
//        assign po_rgb = rgb_en ? {data,data,data} : 8'b0000_0000;
        assign po_rgb = rgb_en ? data : 8'd0;
        assign rdreq= rgb_en ? 1'b1 : 1'b0;
       
endmodule

zxopenhl 发表于 2021-3-16 08:26:20

vga控制程序实现
页: [1]
查看完整版本: vga控制程序实现