-
Notifications
You must be signed in to change notification settings - Fork 0
/
Vga.v.bak
83 lines (69 loc) · 1.67 KB
/
Vga.v.bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
module Vga(
input pixelClock,
input [2:0] activePixel,
output reg RED,
output reg GREEN,
output reg BLUE,
output reg HSYNC,
output reg VSYNC,
output reg vSyncStart,
output reg visibleArea,
output reg [15:0] screenX,
output reg [15:0] screenY
);
reg [15:0] hPos = 0;
reg [15:0] vPos = 0;
parameter [15:0] hVisiblePixels = 800;
localparam [7:0] hBackPorchPixels = 88;
localparam [7:0] hSyncPixels = 128;
localparam [7:0] hFrontPorchPixels = 40;
localparam [15:0] hTotalPixels = hVisiblePixels + hFrontPorchPixels + hSyncPixels + hBackPorchPixels;
parameter [15:0] vVisibleLines = 600;
localparam [7:0] vBackPorchLines = 23;
localparam [7:0] vSyncLines = 4;
localparam [7:0] vFrontPorchLines = 1;
localparam [15:0] vTotalLines = vVisibleLines + vFrontPorchLines + vSyncLines + vBackPorchLines;
always @(posedge pixelClock)
begin
hPos <= hPos + 1'b1;
if (hPos >= hTotalPixels)
begin
hPos <= 0;
vPos <= vPos + 1'b1;
if (vPos >= vTotalLines)
vPos <= 0;
end
if ((vPos >= vBackPorchLines)
& (vPos < vBackPorchLines + vVisibleLines)
& (hPos >= hBackPorchPixels)
& (hPos < hBackPorchPixels + hVisiblePixels))
begin
visibleArea <= 1;
RED <= activePixel[2];
GREEN <= activePixel[1];
BLUE <= activePixel[0];
end
else
begin
visibleArea <= 0;
RED <= 0;
GREEN <= 0;
BLUE <= 0;
end
if (hPos < hTotalPixels - hSyncPixels)
HSYNC <= 1;
else
HSYNC <= 0;
if (vPos < vTotalLines - vSyncLines)
VSYNC <= 1;
else
VSYNC <= 0;
// This happens one clock tick per frame.
if (vPos == vTotalLines - vSyncLines & hPos == 0)
vSyncStart <= 1;
else
vSyncStart <= 0;
screenX <= hPos - hBackPorchPixels;
screenY <= vPos - vBackPorchLines;
end
endmodule