diff --git a/Labs/13. Peripheral units/README.md b/Labs/13. Peripheral units/README.md index a1e8f05..65fcd8a 100644 --- a/Labs/13. Peripheral units/README.md +++ b/Labs/13. Peripheral units/README.md @@ -701,43 +701,45 @@ _Рисунок 6. Отрисовка символа `F` в разрешении ```SystemVerilog module vgachargen ( - input logic clk_i, // системный синхроимпульс - input logic clk100m_i, // клок с частотой 100МГц - input logic rst_i, // сигнал сброса + input logic clk_i, // системный синхроимпульс + input logic clk100m_i, // клок с частотой 100МГц + input logic rst_i, // сигнал сброса /* Интерфейс записи выводимого символа */ - input logic [ 9:0] char_map_addr_i, // адрес позиции выводимого символа - input logic char_map_we_i, // сигнал разрешения записи кода - input logic [ 3:0] char_map_be_i, // сигнал выбора байтов для записи - input logic [31:0] char_map_wdata_i, // ascii-код выводимого символа - output logic [31:0] char_map_rdata_o, // сигнал чтения кода символа + input logic char_map_req_i, // запрос к памяти выводимых символов + input logic [ 9:0] char_map_addr_i, // адрес позиции выводимого символа + input logic char_map_we_i, // сигнал разрешения записи кода + input logic [ 3:0] char_map_be_i, // сигнал выбора байтов для записи + input logic [31:0] char_map_wdata_i, // ascii-код выводимого символа + output logic [31:0] char_map_rdata_o, // сигнал чтения кода символа /* Интерфейс установки цветовой схемы */ - input logic [ 9:0] col_map_addr_i, // адрес позиции устанавливаемой схемы - input logic col_map_we_i, // сигнал разрешения записи схемы - input logic [ 3:0] col_map_be_i, // сигнал выбора байтов для записи - input logic [31:0] col_map_wdata_i, // код устанавливаемой цветовой схемы - output logic [31:0] col_map_rdata_o, // сигнал чтения кода схемы + input logic col_map_req_i, // запрос к памяти цветов символов + input logic [ 9:0] col_map_addr_i, // адрес позиции устанавливаемой схемы + input logic col_map_we_i, // сигнал разрешения записи схемы + input logic [ 3:0] col_map_be_i, // сигнал выбора байтов для записи + input logic [31:0] col_map_wdata_i, // код устанавливаемой цветовой схемы + output logic [31:0] col_map_rdata_o, // сигнал чтения кода схемы /* - Интерфейс установки шрифта + Интерфейс установки шрифта. */ - input logic [ 9:0] char_tiff_addr_i, // адрес позиции устанавливаемого шрифта - input logic char_tiff_we_i, // сигнал разрешения записи шрифта - input logic [ 3:0] char_tiff_be_i, // сигнал выбора байтов для записи - input logic [31:0] char_tiff_wdata_i,// отображаемые пиксели в текущей позиции шрифта - output logic [31:0] char_tiff_rdata_o,// сигнал чтения пикселей шрифта + input logic char_tiff_req_i, // запрос к памяти шрифтов символов + input logic [ 9:0] char_tiff_addr_i, // адрес позиции устанавливаемого шрифта + input logic char_tiff_we_i, // сигнал разрешения записи шрифта + input logic [ 3:0] char_tiff_be_i, // сигнал выбора байтов для записи + input logic [31:0] char_tiff_wdata_i, // отображаемые пиксели в текущей позиции шрифта + output logic [31:0] char_tiff_rdata_o, // сигнал чтения пикселей шрифта - - output logic [3:0] vga_r_o, // красный канал vga - output logic [3:0] vga_g_o, // зеленый канал vga - output logic [3:0] vga_b_o, // синий канал vga - output logic vga_hs_o, // линия горизонтальной синхронизации vga - output logic vga_vs_o // линия вертикальной синхронизации vga + output logic [3:0] vga_r_o, // красный канал vga + output logic [3:0] vga_g_o, // зеленый канал vga + output logic [3:0] vga_b_o, // синий канал vga + output logic vga_hs_o, // линия горизонтальной синхронизации vga + output logic vga_vs_o // линия вертикальной синхронизации vga ); ``` @@ -748,9 +750,10 @@ module vgachargen ( - firmware/mem_files/lab_13_ps2_vga_instr.mem — этим файлом необходимо проинициализировать память инструкций - firmware/mem_files/lab_13_ps2ascii_data.mem — этим файлом необходимо проинициализировать память данных - firmware/mem_files/lab_13_vga_ch_t.mem +- firmware/mem_files/lab_13_vga_ch_map.mem - firmware/mem_files/lab_13_vga_col_map.mem -Вам необходимо добавить в проект все эти файлы. Последние два файла отвечают за инициализацию памятей шрифтов и цветов. Инициализация будет выполнена автоматически. Главное, чтобы файлы были добавлены в проект. +Вам необходимо добавить в проект все эти файлы. Последние три файла отвечают за инициализацию памятей шрифтов, символов и цветов. Инициализация будет выполнена автоматически. Главное, чтобы файлы были добавлены в проект. Для управления данным модулем, необходимо написать модуль-контроллер со следующим прототипом: @@ -800,16 +803,25 @@ module vga_sb_ctrl ( 2. `col_map_be_i`, 3. `char_tiff_be_i`. -Остается только разобраться с сигналами `write_enable_i` и `read_data_o`. +Остается только разобраться с сигналами `req_i`, `write_enable_i` и `read_data_o`. -Оба эти сигнала мультиплексируются / демультиплексируются с помощью одного и того же управляющего сигнала: `addr_i[13:12]` в соответствии с диапазонами адресов (рис. 4): +Все эти сигналы мультиплексируются / демультиплексируются с помощью одного и того же управляющего сигнала: `addr_i[13:12]` в соответствии с диапазонами адресов (рис. 4): -- `addr_i[13:12] == 2'b00` — сигнал `write_enable_i` поступает на вход `char_map_we_i`, выход `char_map_rdata_o` подается на выход `read_data_o`; -- `addr_i[13:12] == 2'b01` — сигнал `write_enable_i` поступает на вход `col_map_we_i`, выход `col_map_rdata_o` подается на выход `read_data_o`; -- `addr_i[13:12] == 2'b10` — сигнал `write_enable_i` поступает на вход `char_tiff_we_i`, выход `char_tiff_rdata_o` подается на выход `read_data_o`. +- `addr_i[13:12] == 2'b00` + - `req_i` подается на вход `char_map_req_i`, + - `write_enable_i` поступает на вход `char_map_we_i`, + - `char_map_rdata_o` подается на выход `read_data_o`; +- `addr_i[13:12] == 2'b01` + - `req_i` поступает на вход `col_map_req_i`, + - `write_enable_i` поступает на вход `col_map_we_i`, + - `col_map_rdata_o` подается на выход `read_data_o`; +- `addr_i[13:12] == 2'b10` + - `req_i` поступает на вход `char_tiff_req_i`, + - `write_enable_i` поступает на вход `char_tiff_we_i`, + - `char_tiff_rdata_o` подается на выход `read_data_o`. > [!Important] -> Обратите внимание на то что, контроллер vga является единственным контроллером, для которого не нужно реализовывать регистр перед выходом read_data_o для реализации синхронного чтения. Данная особенность обусловленна тем, что внутри модуля `vgachargen` уже находится блочная память с синхронным портом на чтение. Добавление еще одного регистра приведет к тому, данные будут "опаздывать" на один такт. Таким образом, данные на выход `read_data_o` необходимо подавать с помощью чисто комбинационной логики. +> Обратите внимание на то что, контроллер vga является единственным контроллером, для которого не нужно реализовывать регистр перед выходом read_data_o для реализации синхронного чтения. Данная особенность обусловлена тем, что внутри модуля `vgachargen` уже находится блочная память с синхронным портом на чтение. Добавление еще одного регистра приведет к тому, данные будут "опаздывать" на один такт. Таким образом, данные на выход `read_data_o` необходимо подавать с помощью чисто комбинационной логики. ## Список использованной литературы diff --git a/Labs/13. Peripheral units/firmware/mem_files/lab_13_vga_ch_map.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_13_vga_ch_map.mem index 7c45aea..6791998 100644 --- a/Labs/13. Peripheral units/firmware/mem_files/lab_13_vga_ch_map.mem +++ b/Labs/13. Peripheral units/firmware/mem_files/lab_13_vga_ch_map.mem @@ -1,600 +1,600 @@ -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c -63626160 -67666564 -6b6a6968 -6f6e6d6c -73727170 -77767574 -7b7a7978 -7f7e7d7c -03020100 -07060504 -0b0a0908 -0f0e0d0c -13121110 -17161514 -1b1a1918 -1f1e1d1c -23222120 -27262524 -2b2a2928 -2f2e2d2c -33323130 -37363534 -3b3a3938 -3f3e3d3c -43424140 -47464544 -4b4a4948 -4f4e4d4c -53525150 -57565554 -5b5a5958 -5f5e5d5c +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +20202020 +56202020 +6D204147 +726F6D65 +61682079 +65622073 +66206E65 +6873616C +63206465 +6572726F +796C7463 \ No newline at end of file diff --git a/Labs/13. Peripheral units/peripheral modules/vgachargen.sv b/Labs/13. Peripheral units/peripheral modules/vgachargen.sv index c0141a5..0380b54 100644 --- a/Labs/13. Peripheral units/peripheral modules/vgachargen.sv +++ b/Labs/13. Peripheral units/peripheral modules/vgachargen.sv @@ -19,42 +19,45 @@ module vgachargen parameter COL_MAP_INIT_FILE_NAME = "lab_13_vga_col_map.mem", parameter bit COL_MAP_INIT_FILE_IS_BIN = 1'b0 ) ( - input logic clk_i, // системный синхроимпульс - input logic clk100m_i, // клок с частотой 100МГц - input logic rst_i, // сигнал сброса + input logic clk_i, // системный синхроимпульс + input logic clk100m_i, // клок с частотой 100МГц + input logic rst_i, // сигнал сброса /* Интерфейс записи выводимого символа */ - input logic [ 9:0] char_map_addr_i, // адрес позиции выводимого символа - input logic char_map_we_i, // сигнал разрешения записи кода - input logic [ 3:0] char_map_be_i, // сигнал выбора байтов для записи - input logic [31:0] char_map_wdata_i, // ascii-код выводимого символа - output logic [31:0] char_map_rdata_o, // сигнал чтения кода символа + input logic char_map_req_i, // запрос к памяти выводимых символов + input logic [ 9:0] char_map_addr_i, // адрес позиции выводимого символа + input logic char_map_we_i, // сигнал разрешения записи кода + input logic [ 3:0] char_map_be_i, // сигнал выбора байтов для записи + input logic [31:0] char_map_wdata_i, // ascii-код выводимого символа + output logic [31:0] char_map_rdata_o, // сигнал чтения кода символа /* Интерфейс установки цветовой схемы */ - input logic [ 9:0] col_map_addr_i, // адрес позиции устанавливаемой схемы - input logic col_map_we_i, // сигнал разрешения записи схемы - input logic [ 3:0] col_map_be_i, // сигнал выбора байтов для записи - input logic [31:0] col_map_wdata_i, // код устанавливаемой цветовой схемы - output logic [31:0] col_map_rdata_o, // сигнал чтения кода схемы + input logic col_map_req_i, // запрос к памяти цветов символов + input logic [ 9:0] col_map_addr_i, // адрес позиции устанавливаемой схемы + input logic col_map_we_i, // сигнал разрешения записи схемы + input logic [ 3:0] col_map_be_i, // сигнал выбора байтов для записи + input logic [31:0] col_map_wdata_i, // код устанавливаемой цветовой схемы + output logic [31:0] col_map_rdata_o, // сигнал чтения кода схемы /* Интерфейс установки шрифта. */ - input logic [ 9:0] char_tiff_addr_i, // адрес позиции устанавливаемого шрифта - input logic char_tiff_we_i, // сигнал разрешения записи шрифта - input logic [ 3:0] char_tiff_be_i, // сигнал выбора байтов для записи - input logic [31:0] char_tiff_wdata_i, // отображаемые пиксели в текущей позиции шрифта - output logic [31:0] char_tiff_rdata_o, // сигнал чтения пикселей шрифта + input logic char_tiff_req_i, // запрос к памяти шрифтов символов + input logic [ 9:0] char_tiff_addr_i, // адрес позиции устанавливаемого шрифта + input logic char_tiff_we_i, // сигнал разрешения записи шрифта + input logic [ 3:0] char_tiff_be_i, // сигнал выбора байтов для записи + input logic [31:0] char_tiff_wdata_i, // отображаемые пиксели в текущей позиции шрифта + output logic [31:0] char_tiff_rdata_o, // сигнал чтения пикселей шрифта - output logic [3:0] vga_r_o, // красный канал vga - output logic [3:0] vga_g_o, // зеленый канал vga - output logic [3:0] vga_b_o, // синий канал vga - output logic vga_hs_o, // линия горизонтальной синхронизации vga - output logic vga_vs_o // линия вертикальной синхронизации vga + output logic [3:0] vga_r_o, // красный канал vga + output logic [3:0] vga_g_o, // зеленый канал vga + output logic [3:0] vga_b_o, // синий канал vga + output logic vga_hs_o, // линия горизонтальной синхронизации vga + output logic vga_vs_o // линия вертикальной синхронизации vga ); logic vga_clk_i; assign vga_clk_i = clk100m_i; @@ -62,13 +65,13 @@ module vgachargen if (CLK_FACTOR_25M == 0 || CLK_FACTOR_25M > 4) error_unsupported_factor error_unsupported_factor (); logic [3:0] char_map_be_gated; - assign char_map_be_gated = char_map_be_i & {4{char_map_we_i}}; + assign char_map_be_gated = char_map_be_i & {4{char_map_we_i & char_map_req_i}}; logic [3:0] col_map_be_gated; - assign col_map_be_gated = col_map_be_i & {4{col_map_we_i}}; + assign col_map_be_gated = col_map_be_i & {4{col_map_we_i & col_map_req_i}}; logic [3:0] char_tiff_be_gated; - assign char_tiff_be_gated = char_tiff_be_i & {4{char_tiff_we_i}}; + assign char_tiff_be_gated = char_tiff_be_i & {4{char_tiff_we_i & char_tiff_req_i}}; logic arstn_i; assign arstn_i = ~rst_i;