集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 834|回复: 1

vga控制程序实现

[复制链接]
fpga_feixiang 发表于 2021-3-13 16:02:12 | 显示全部楼层 |阅读模式
module vga_ctrl (pi_clk, pi_rst_n, po_hs, po_vs, po_rgb,
        data, rdreq);
       
        input pi_clk, pi_rst_n; //ϵͳʱ�Ӹ�λ
        input [7:0]  data;
//        output rdreq;
        output  rdreq;
        output reg po_vs;                  //VGA��ͬ���ź�
        output reg po_hs;                        //VGA��ͬ���ź�
        output  [7:0] po_rgb;        //VGA�����������ɫ
//        output [15:0] po_rgb;        //VGA�����������ɫ
//        output [7:0] po_rgb;                //VGA�����������ɫ
       
        //----------------VGAʱ��-----------------------------------
        //                ��ʾģʽ                  ʱ��          
        //                800*600@60  40MHz       
        //��/��        ͬ��(a)        ��������(b)        ��Ч��ʾ(c)        ����ǰ��(d)        ɨ��ʱ��(e)
        //hs                128                88                                800                        40                                1056
        //vs                4                        23                                600                        1                                628       

        //----------------VGAʱ��-----------------------------------
        //                ��ʾģʽ                  ʱ��          
        //                640*480@60  25MHz       
        //��/��        ͬ��(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 [10:0] 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)) //&#616;&#65533;&#65533;&#65533;&#65533;&#1211;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
                                        hcnt <= 11'd0;
                                else
                                        hcnt <= hcnt + 1'b1;
                        end
        end
       
        //&#65533;&#65533;&#616;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
        reg [10:0] 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        

        //&#65533;&#65533;&#876;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
        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;
       
        //&#65533;&#65533;&#876;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
        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[15:13],data[10:8],data[4:3]} : 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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-17 01:12 , Processed in 0.062317 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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