§ Видеоразрешение
Базовое разрешение 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