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

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

§ TOP модуль

Подключение видеоадаптера на 256K слов на 4 бита каждое.
wire [17:0] vga_a;
wire [ 3:0] vga_i;

// Видеоадаптер HI-RES
vga G1
(
    .clock      (clock_106),
    // Вывод на экране
    .R          (VGA_R),
    .G          (VGA_G),
    .B          (VGA_B),
    .HS         (VGA_HS),
    .VS         (VGA_VS),
    // Связь с памятью
    .A          (vga_a),
    .I          (vga_i)
);

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

Ниже приведен код видеоадптера vga.v. На вход clock принимается 106 Мгц.
module vga
(
    input               clock,
    output  reg  [3:0]  R,
    output  reg  [3:0]  G,
    output  reg  [3:0]  B,
    output              HS,
    output              VS,
    output  reg  [17:0] A,
    input        [ 3:0] I
);

// ---------------------------------------------------------------------
// Тайминги для горизонтальной и вертикальной развертки
//           Visible       Front        Sync        Back       Whole
parameter hzv = 1440, hzf =   80, hzs =  152, hzb =  232, hzw = 1904,
          vtv =  900, vtf =    1, vts =    3, vtb =   28, vtw =  932;
// ---------------------------------------------------------------------
assign HS = X  < (hzb + hzv + hzf); // NEG.
assign VS = Y >= (vtb + vtv + vtf); // POS.
// ---------------------------------------------------------------------
// Позиция луча в кадре и максимальные позиции (x,y)
reg  [10:0] X = 0;
reg  [ 9:0] Y = 0;
wire        xmax = (X == hzw - 1);
wire        ymax = (Y == vtw - 1);
wire [10:0] x    = (X - hzb); // x=[0..1439]
wire [ 9:0] y    = (Y - vtb); // y=[0..899]
wire [10:0] xm   = x - 80 + 2;
wire [ 9:0] ym   = y - 50;
// ---------------------------------------------------------------------
wire [15:0] color =
    I == 4'h0 ? 12'h000 : I == 4'h8 ? 12'h888 :
    I == 4'h1 ? 12'h008 : I == 4'h9 ? 12'h00F :
    I == 4'h2 ? 12'h080 : I == 4'hA ? 12'h0F0 :
    I == 4'h3 ? 12'h088 : I == 4'hB ? 12'h0FF :
    I == 4'h4 ? 12'h800 : I == 4'hC ? 12'hF00 :
    I == 4'h5 ? 12'h808 : I == 4'hD ? 12'hF0F :
    I == 4'h6 ? 12'h880 : I == 4'hE ? 12'hFF0 :
    I == 4'h7 ? 12'hCCC :             12'hFFF;

always @(posedge clock) begin

    // Черный цвет за пределами
    {R, G, B} <= 12'h000;

    // Кадровая развертка
    X <= xmax ?         0 : X + 1;
    Y <= xmax ? (ymax ? 0 : Y + 1) : Y;

    // Генерация изображения
    A <= 640*ym[9:1] + xm[10:1];

    // Вывод окна видеоадаптера
    if (X >= hzb && X < hzb + hzv && Y >= vtb && Y < vtb + vtv)
        {R, G, B} <= (x >= 80 && x < 1360 && y >= 50 && y < 850) ? color : 12'h111;
end

endmodule