URL
https://opencores.org/ocsvn/2d_game_console/2d_game_console/trunk
Subversion Repositories 2d_game_console
[/] [2d_game_console/] [trunk/] [Processor_Quartus/] [VGA_Interface.v.bak] - Rev 2
Compare with Previous | Blame | View Log
module VGA_Interface(
clk,
rst,
R_in,
G_in,
B_in,
oAddress,
R,G,B,
BLANK,
VGA_SYNC,
VGA_CLK,
HS,VS,
v_pos,
h_pos
);
input [7:0] R_in, G_in, B_in;
input clk, rst;
output reg [7:0] R, G, B;
output reg HS, VS;
output reg BLANK;
output VGA_SYNC, VGA_CLK;
output reg [9:0] h_pos, v_pos;
output reg [19:0] oAddress;
parameter H_FRONT = 16; //16
parameter H_SYNC = 96; //96
parameter H_BACK = 48; //48
parameter H_DISPLAY = 640;
parameter H_BLANK = H_SYNC+H_BACK;
parameter H_TOTAL = H_FRONT+H_SYNC+H_BACK+H_DISPLAY;
parameter V_FRONT = 12; //12
parameter V_SYNC = 2; //2
parameter V_BACK = 31; //31
parameter V_DISPLAY = 480;
parameter V_BLANK = V_SYNC+V_BACK;
parameter V_TOTAL = V_FRONT+V_SYNC+V_BACK+V_DISPLAY;
reg b_flag;
always @(posedge clk)
begin
if (rst == 1'b1)
begin
h_pos <= 10'b0000000000;
v_pos <= 10'b0000000000;
end
else
begin
if (h_pos<H_TOTAL-1)//800 pulsos
begin
h_pos <= h_pos + 1'b1;
end
else
begin
h_pos <= 1'b0;
if (v_pos<V_TOTAL-1)//525 pulsos
begin
v_pos <= v_pos + 1'b1;
end
else
begin
v_pos <= 1'b0;
end
end
end
end
// Sincronismo Horizontal
always @(posedge clk)
begin
if (rst == 1'b1)
begin
HS <= 1'b1;
end
else
begin
if ( (h_pos > H_DISPLAY+H_FRONT-1) && (h_pos < H_TOTAL-H_BACK-1) )
begin
HS <= 1'b0;
end
else
begin
HS <= 1'b1;
end
end
end
// Sincronismo Vertical
always @(posedge clk)
begin
if (rst == 1'b1)
begin
VS <= 1'b1;
end
else
begin
if ( (v_pos > V_DISPLAY+V_FRONT-1) && (v_pos < V_TOTAL-V_BACK-1) )
begin
VS <= 1'b0;
end
else
begin
VS <= 1'b1;
end
end
end
// Blank
always @(posedge clk)
begin
if (rst == 1'b1)
begin
BLANK <= 1'b1;
end
else
begin
if (h_pos>(H_DISPLAY-1) || v_pos>(V_DISPLAY-1))
begin
BLANK <= 1'b0;
end
else
begin
BLANK <= 1'b1;
end
end
end
assign VGA_CLK = clk;
assign VGA_SYNC = 1'b1;
always @(posedge clk )
begin
R <= R_in;
G <= G_in;
B <= B_in;
end
// Bloco para geracao dos enderecos de cada pixel na memoria
// Cada pixel está guardado em um endereco diferente, sequencialmente
always @(posedge clk )
begin
// Reset no circuito, endereco vai para zero
if (rst == 1'b1)
begin
oAddress <= 20'h00000;
end
// Operacao normal, apos reset
else
begin
// Operacao na parte visivel do video
if( h_pos<=(H_DISPLAY-1) && v_pos<=(V_DISPLAY-1) )
begin
// Enquanto nao tiver atingido o ultimo pixel
if ( oAddress < ((H_DISPLAY*V_DISPLAY) - 1) )
begin
oAddress <= oAddress + 1'b1;
end
// Retorna para o inicio apos atingir o ultimo pixel
else
begin
oAddress <= 1'b0;
end
end
// Operacao na parte de sincronismo do video
else
begin
oAddress <= oAddress;
end
end
end
endmodule