锆石科技社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 362|回复: 1

基于FPGA的VGA图像显示

[复制链接]

2

主题

30

帖子

1288

积分

金牌会员

Rank: 6Rank: 6

积分
1288
发表于 2017-1-28 16:59:49 | 显示全部楼层 |阅读模式
// 800*600
//四色图像显示
//顶层模块

module        Vga(

                        Clk_50M,        //晶振时钟
                        Rst_n,        //复位信号
                        Hys,                //行扫描信号
                        Vys,                 //场扫描信号
                        VGA_DATA //视频信号
                       
);

input                                Clk_50M;
input                                Rst_n;
output                        Hys;
output                        Vys;
output        [7:0] VGA_DATA;
wire                                Clk_40M;

PLL        PLL_inst (
        .inclk0 ( Clk_50M ),
        .c0 ( Clk_40M )
        );
       
Vga_Init        I(

        .Clk_40M(Clk_40M), //帧时钟
        .Rst_n(Rst_n),        //复位信号
        .Hys(Hys),                //行扫描信号
        .Vys(Vys),                 //场扫描信号
        .VGA_DATA(VGA_DATA) //视频信号
);


endmodule



//驱动模块

module Vga_Init(

                        Clk_40M, //帧时钟
                        Rst_n,        //复位信号
                        Hys,                //行扫描信号
                        Vys,                 //场扫描信号
                        VGA_DATA //视频信号
);

input                                                Clk_40M;
input                                                Rst_n;
output        reg                        Hys;
output        reg                        Vys;
output        reg        [7:0] VGA_DATA;

parameter        White                =8'b1111_1111;
parameter        Red                =8'b1110_0000;
parameter        Green                =8'b0001_1100;
parameter        Blue                =8'b0000_0011;
parameter        Yellow        =8'b1111_1100;
parameter        Purple        =8'b0110_0010;//紫色
parameter        Cyan                =8'b0111_1111;//青色
parameter        Pink                =8'b1110_1101;//淡红色
parameter        Black                =8'b0000_0000;

reg                                        [15:0]                H_Cnt; //水平扫描计数器
reg                                        [15:0]                V_Cnt; //垂直扫描计数器
wire                                                                        flag;
//行扫描
always@(posedge Clk_40M or negedge Rst_n)begin
                if(!Rst_n)
                        H_Cnt <=16'd0;
                else if(H_Cnt==1055)
                        H_Cnt <=16'd0;
                else
                        H_Cnt <=H_Cnt+1'b1;
end
//场扫描
always@(posedge Clk_40M or negedge Rst_n)begin
                if(!Rst_n)
                        V_Cnt <=16'd0;
                else if(H_Cnt==1055)begin
                        if(V_Cnt==627)
                                V_Cnt <=16'd0;
                        else
                                V_Cnt <=V_Cnt+1'b1;
                end
                else
                                V_Cnt <=V_Cnt;
end

always@(posedge Clk_40M or negedge Rst_n)begin
                if(!Rst_n)
                        Hys <=1'b0;
                else if(H_Cnt<128)
                        Hys <=1'b0;
                else
                        Hys <=1'b1;
end

always@(posedge Clk_40M or negedge Rst_n)begin
                if(!Rst_n)
                        Vys <=1'b0;
                else if(V_Cnt<4)
                        Vys <=1'b0;
                else
                        Vys <=1'b1;
end


always@(posedge Clk_40M or negedge Rst_n)begin
                if(!Rst_n)
                        VGA_DATA<=Black;
                else if(V_Cnt<27)
                        VGA_DATA<=Black;
                else if(V_Cnt>627)
                        VGA_DATA<=Black;
                else if(V_Cnt<327)begin
                        if(H_Cnt<216)
                                VGA_DATA<=Black;
                        else if(H_Cnt>1016)
                                VGA_DATA<=Black;
                        else  if(H_Cnt<616)
                                VGA_DATA<=Green;
                        else
                                VGA_DATA<=Pink;
                end
                else        begin
                        if(H_Cnt<216)
                                VGA_DATA<=Black;
                        else if(H_Cnt>1016)
                                VGA_DATA<=Black;
                        else  if(H_Cnt<616)
                                VGA_DATA<=White;
                        else
                                VGA_DATA<=Yellow;
                end       
end

endmodule

回复

使用道具 举报

1

主题

34

帖子

1079

积分

金牌会员

Rank: 6Rank: 6

积分
1079
发表于 2017-7-31 15:27:56 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|小黑屋|锆石科技社区 ( 苏ICP备15059756号  

GMT+8, 2019-5-27 12:04 , Processed in 0.140738 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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