代码拉取完成,页面将自动刷新
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2018/03/19 14:33:50
// Design Name:
// Module Name: vga_module
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module vga_module(
input wire sclk ,
input wire rst_n ,
input wire vga_clk ,
input wire[23:0] rgb_data ,
output reg h_sync ,
output reg v_sync ,
output wire pixel_de ,
output wire pixel_start_flag ,//屏幕上衣服图片的开始,即打到屏幕上的第一个像素点
output wire[7:0] r ,
output wire[7:0] g ,
output wire[7:0] b
);
//-----------------------------------------------------------//
// 水平扫描参数的设定1024*768 60Hz VGA
//-----------------------------------------------------------//
parameter LinePeriod =1344; //行周期数
parameter H_SyncPulse=136; //行同步脉冲(Sync a)
parameter H_BackPorch=160; //显示后沿(Back porch b)
parameter H_ActivePix=1024; //显示时序段(Display interval c)
parameter H_FrontPorch=24; //显示前沿(Front porch d)
parameter Hde_start=296;
parameter Hde_end=1320;
//-----------------------------------------------------------//
// 垂直扫描参数的设定1024*768 60Hz VGA
//-----------------------------------------------------------//
parameter FramePeriod =806; //列周期数
parameter V_SyncPulse=6; //列同步脉冲(Sync o)
parameter V_BackPorch=29; //显示后沿(Back porch p)
parameter V_ActivePix=768; //显示时序段(Display interval q)
parameter V_FrontPorch=3; //显示前沿(Front porch r)
parameter Vde_start=35;
parameter Vde_end=803;
//-----------------------------------------------------------//
// 水平扫描参数的设定800*600 VGA
//-----------------------------------------------------------//
//parameter LinePeriod =1056; //行周期数
//parameter H_SyncPulse=128; //行同步脉冲(Sync a)
//parameter H_BackPorch=88; //显示后沿(Back porch b)
//parameter H_ActivePix=800; //显示时序段(Display interval c)
//parameter H_FrontPorch=40; //显示前沿(Front porch d)
//-----------------------------------------------------------//
// 垂直扫描参数的设定800*600 VGA
//-----------------------------------------------------------//
//parameter FramePeriod =628; //列周期数
//parameter V_SyncPulse=4; //列同步脉冲(Sync o)
//parameter V_BackPorch=23; //显示后沿(Back porch p)
//parameter V_ActivePix=600; //显示时序段(Display interval q)
//parameter V_FrontPorch=1; //显示前沿(Front porch r)
//-----------------------------------------------------------//
// 水平扫描参数的设定640*480 60Hz VGA
//-----------------------------------------------------------//
//parameter LinePeriod =800; //行周期数
//parameter H_SyncPulse=96; //行同步脉冲(Sync a)
//parameter H_BackPorch=40; //显示后沿(Back porch b)
//parameter H_ActivePix=640; //显示时序段(Display interval c)
//parameter H_FrontPorch=8; //显示前沿(Front porch d)
//parameter Hde_start=144;
//parameter Hde_end=784;
//-----------------------------------------------------------//
// 垂直扫描参数的设定640*480 60Hz VGA
//-----------------------------------------------------------//
//parameter FramePeriod =525; //列周期数
//parameter V_SyncPulse=2; //列同步脉冲(Sync o)
//parameter V_BackPorch=25; //显示后沿(Back porch p)
//parameter V_ActivePix=480; //显示时序段(Display interval q)
//parameter V_FrontPorch=2; //显示前沿(Front porch r)
//parameter Vde_start=35;
//parameter Vde_end=515;
reg[10:0] h_cnt ; //h_cnt==LinePeriod
reg[10:0] v_cnt ; //v_cnt==FramePeriod
reg hsync_de ; //行有效区域(Vde_start~Vde_end)
reg vsync_de ; //场有效区域(Hde_start~Hde_end)
assign pixel_start_flag =(h_cnt==H_SyncPulse&&v_cnt==V_SyncPulse)?1'b1:1'b0;
//H_cnt行计数器
always@(posedge vga_clk or negedge rst_n)
if(rst_n==0)
h_cnt <= 0;
else if(h_cnt==LinePeriod-1)
h_cnt <= 0;
else
h_cnt <= h_cnt + 1;
//V_cnt行计数器
always@(posedge vga_clk or negedge rst_n)
if(rst_n==0)
v_cnt <= 0;
else if(v_cnt==(FramePeriod-1)&&h_cnt==(LinePeriod-1))
v_cnt <= 0;
else if(h_cnt==LinePeriod-1)
v_cnt <= v_cnt + 1;
//h_sync行同步信号
always@(posedge vga_clk or negedge rst_n)
if(rst_n==0)
h_sync <= 0;
else if(h_cnt==1)
h_sync <= 0;
else if(h_cnt>=H_SyncPulse-1)
h_sync <= 1;
//产生hsync_de信号
always@(posedge vga_clk or negedge rst_n)
if(~rst_n)
hsync_de <= 1'b0;
else if(h_cnt == Hde_start-1)
hsync_de <= 1'b1;
else if(h_cnt == Hde_end-1)
hsync_de <= 1'b0;
//v_sync行同步信号
always@(posedge vga_clk or negedge rst_n)
if(rst_n==0)
v_sync <= 1;
else if(v_cnt==0)
v_sync <= 0;
else if(v_cnt==V_SyncPulse-1)
v_sync <= 1;
//产生vsync_de信号
always@(posedge vga_clk or negedge rst_n)
if(~rst_n)
vsync_de <= 1'b0;
else if(v_cnt == Vde_start-1)
vsync_de <= 1'b1;
else if(v_cnt == Vde_end-1)
vsync_de <= 1'b0;
assign pixel_de = hsync_de&vsync_de;
assign {r,g,b} = pixel_de?rgb_data:24'h0;
endmodule
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。