§ Видеоразрешение

Базовое разрешение 1440x900, 106 Mhz
Отображаемые данные 640 x 400 x 16 цвета
Это лишь часть модуля проекта. Необходимо скопировать и вставить в нужные файлы, чтобы было хорошо.

§ TOP модуль

Подключение видеоадаптера на 256K слов на 4 бита каждое.
1wire [17:0] vga_a;
2wire [ 3:0] vga_i;
3
4// Видеоадаптер HI-RES
5vga G1
6(
7    .clock      (clock_106),
8    // Вывод на экране
9    .R          (VGA_R),
10    .G          (VGA_G),
11    .B          (VGA_B),
12    .HS         (VGA_HS),
13    .VS         (VGA_VS),
14    // Связь с памятью
15    .A          (vga_a),
16    .I          (vga_i)
17);

§ Код видеоадаптера

Ниже приведен код видеоадптера vga.v. На вход clock принимается 106 Мгц.
1module vga
2(
3    input               clock,
4    output  reg  [3:0]  R,
5    output  reg  [3:0]  G,
6    output  reg  [3:0]  B,
7    output              HS,
8    output              VS,
9    output  reg  [17:0] A,
10    input        [ 3:0] I
11);
12
13// ---------------------------------------------------------------------
14// Тайминги для горизонтальной и вертикальной развертки
15//           Visible       Front        Sync        Back       Whole
16parameter hzv = 1440, hzf =   80, hzs =  152, hzb =  232, hzw = 1904,
17          vtv =  900, vtf =    1, vts =    3, vtb =   28, vtw =  932;
18// ---------------------------------------------------------------------
19assign HS = X  < (hzb + hzv + hzf); // NEG.
20assign VS = Y >= (vtb + vtv + vtf); // POS.
21// ---------------------------------------------------------------------
22// Позиция луча в кадре и максимальные позиции (x,y)
23reg  [10:0] X = 0;
24reg  [ 9:0] Y = 0;
25wire        xmax = (X == hzw - 1);
26wire        ymax = (Y == vtw - 1);
27wire [10:0] x    = (X - hzb); // x=[0..1439]
28wire [ 9:0] y    = (Y - vtb); // y=[0..899]
29wire [10:0] xm   = x - 80 + 2;
30wire [ 9:0] ym   = y - 50;
31// ---------------------------------------------------------------------
32wire [15:0] color =
33    I == 4'h0 ? 12'h000 : I == 4'h8 ? 12'h888 :
34    I == 4'h1 ? 12'h008 : I == 4'h9 ? 12'h00F :
35    I == 4'h2 ? 12'h080 : I == 4'hA ? 12'h0F0 :
36    I == 4'h3 ? 12'h088 : I == 4'hB ? 12'h0FF :
37    I == 4'h4 ? 12'h800 : I == 4'hC ? 12'hF00 :
38    I == 4'h5 ? 12'h808 : I == 4'hD ? 12'hF0F :
39    I == 4'h6 ? 12'h880 : I == 4'hE ? 12'hFF0 :
40    I == 4'h7 ? 12'hCCC :             12'hFFF;
41
42always @(posedge clock) begin
43
44    // Черный цвет за пределами
45    {R, G, B} <= 12'h000;
46
47    // Кадровая развертка
48    X <= xmax ?         0 : X + 1;
49    Y <= xmax ? (ymax ? 0 : Y + 1) : Y;
50
51    // Генерация изображения
52    A <= 640*ym[9:1] + xm[10:1];
53
54    // Вывод окна видеоадаптера
55    if (X >= hzb && X < hzb + hzv && Y >= vtb && Y < vtb + vtv)
56        {R, G, B} <= (x >= 80 && x < 1360 && y >= 50 && y < 850) ? color : 12'h111;
57end
58
59endmodule