ЛР12. Обновление описания цветовой палитры VGA

This commit is contained in:
Andrei Solodovnikov
2023-12-02 12:06:46 +03:00
parent 1722950b07
commit 4795862e41
4 changed files with 620 additions and 614 deletions

View File

@@ -647,12 +647,18 @@ _Рисунок 4. Карта памяти vga-модуля_
* нулевой символ первой строки — `0x0000_1050`
* нижний правый символ — `0x0000_195F`
Цветовая схема каждой позиции состоит из двух цветов: цвета фона и цвета символа. Оба эти цвета выбираются из палитры 8 цветов, каждый из которых содержит два оттенка: цвет на полной яркости и цвет на половинной яркости (см. рис. 5). Один из цветов — черный, оба его оттенка представляют собой один и тот же цвет. Ниже приведены коды цветов их rgb-значения:
Цветовая схема каждой позиции состоит из двух цветов: цвета фона и цвета символа. Оба эти цвета выбираются из палитры 8 цветов, каждый из которых содержит два оттенка: цвет на полной яркости и цвет на уменьшенной яркости (см. рис. 5). Один из цветов — черный, оба его оттенка представляют собой один и тот же цвет. Ниже приведены коды цветов их rgb-значения:
![../../.pic/Labs/lab_12_periph/fig_05.png](../../.pic/Labs/lab_12_periph/fig_05.png)
_Рисунок 5. Цветовая палитра vga-модуля_
Код цвета формируется следующим образом: старший бит определяет яркость оттенка цвета. Оставшиеся 3 бита кодируют используемый канал:
* 0 бит кодирует использование синего канала;
* 1 бит кодирует использование зеленого канала;
* 2 бит кодирует использование красного канала.
Таким образом, для установки цветовой схемы, необходимо выбрать два цвета из палитры, склеить их (в старших разрядах идет цвет символа, в младших — цвет фона) и записать получившееся 8-битное значение по адресу выбранной позиции в диапазоне адресов цветовой схемы (color_map).
К примеру, мы хотим установить черный фоновый цвет и белый цвет в качестве цвета символа для верхней левой позиции. В этом случае, мы должны записать значение `f0` (f(15) — код белого цвета, 0 — код черного цвета) по адресу `0x0000_1000` (нулевой адрес в диапазоне `color_map`).

View File

@@ -34,19 +34,19 @@ package vgachargen_pkg;
typedef enum logic [23:0] {
COL_0 = 24'h000000,
COL_2 = 24'h0000d8,
COL_3 = 24'h0000ff,
COL_1 = 24'h0000d8,
COL_2 = 24'h00d800,
COL_3 = 24'h00d8d8,
COL_4 = 24'hd80000,
COL_5 = 24'hff0000,
COL_6 = 24'hd800d8,
COL_7 = 24'hff00ff,
COL_8 = 24'h00d800,
COL_9 = 24'h00ff00,
COL_10 = 24'h00d8d8,
COL_5 = 24'hd800d8,
COL_6 = 24'hd8d800,
COL_7 = 24'hd8d8d8,
COL_9 = 24'h0000ff,
COL_10 = 24'h00ff00,
COL_11 = 24'h00ffff,
COL_12 = 24'hd8d800,
COL_13 = 24'hffff00,
COL_14 = 24'hd8d8d8,
COL_12 = 24'hff0000,
COL_13 = 24'hff00ff,
COL_14 = 24'hffff00,
COL_15 = 24'hffffff
} rgb_t;
@@ -57,14 +57,14 @@ package vgachargen_pkg;
function automatic logic [11:0] color_decode(logic [3:0] color_encoded_i);
unique case (color_encoded_i)
4'h0 : return rgb2half(COL_0 );
4'h1 : return rgb2half(COL_0 );
4'h1 : return rgb2half(COL_1 );
4'h2 : return rgb2half(COL_2 );
4'h3 : return rgb2half(COL_3 );
4'h4 : return rgb2half(COL_4 );
4'h5 : return rgb2half(COL_5 );
4'h6 : return rgb2half(COL_6 );
4'h7 : return rgb2half(COL_7 );
4'h8 : return rgb2half(COL_8 );
4'h8 : return rgb2half(COL_0 );
4'h9 : return rgb2half(COL_9 );
4'ha : return rgb2half(COL_10);
4'hb : return rgb2half(COL_11);