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 vga控制程序实现
页:
[1]