diff --git a/Labs/12. Peripheral units/README.md b/Labs/12. Peripheral units/README.md index 350a65e..11dcafb 100644 --- a/Labs/12. Peripheral units/README.md +++ b/Labs/12. Peripheral units/README.md @@ -1,4 +1,4 @@ - # Лабораторная работа 12 "Периферийные устройства" +# Лабораторная работа 12 "Периферийные устройства" На прошлой лабораторной работе вы реализовали свой собственный RISC-V процессор. Однако пока что он находится "в вакууме" и никак не связан с внешним миром. Для исправления этого недостатка вами будет реализована системная шина, через которую к процессору смогут подключаться различные периферийные устройства. @@ -52,7 +52,7 @@ ![../../.pic/Labs/lab_12_periph/fig_01.drawio.png](../../.pic/Labs/lab_12_periph/fig_01.drawio.png) -_Рисунок 1. Итоговая структура процессорной системы_ +_Рисунок 1. Итоговая структура процессорной системы._ ### Активация выбранного устройства @@ -131,7 +131,7 @@ sys_clk_rst_gen divider(.ex_clk_i(clk_i),.ex_areset_n_i(resetn_i),.div_i(10),.sy ![Карта памяти](../../.pic/Labs/lab_12_periph/fig_02.png) -_Рисунок 2. Карта памяти периферийных устройств_ +_Рисунок 2. Карта памяти периферийных устройств._ Работа с картой осуществляется следующим образом. Под названием каждого периферийного устройства указана старшая часть адреса (чему должны быть равны старшие 8 бит адреса, чтобы было сформировано обращение к данному периферийному устройству). Например, для переключателей это значение равно `0x01`, для светодиодов `0x02` и т.п. В самом левом столбце указаны используемые/неиспользуемые адреса в адресном пространстве данного периферийного устройства. Например для переключателей есть только один используемый адрес: `0x000000`. Его функциональное назначение и разрешения на доступ указаны в столбце соответствующего периферийного устройства. Возвращаясь к адресу `0x000000` для переключателей мы видим следующее: @@ -168,10 +168,10 @@ _Рисунок 2. Карта памяти периферийных устрой 1. Для каждой пары контроллеров в папке `firmware/mem_files` представлены файлы, инициализирующие память инструкций. Обратите внимание, что для пары "PS2-VGA" так же необходим файл, инициализирующий память данных (в модуле `ext_mem` необходимо прописать блок `$readmemh`). 2. Исходный код программ с адресами и результирующими инструкциями находится в папке `firmware/software`. 3. При моделировании светодиодов лучше уменьшить значение, до которого считает счетчик в режиме "моргания" в 10 раз, чтобы уменьшить время моделирования. Перед генерацией битстрима это значение будет необходимо восстановить. -7. Переходить к следующему пункту можно только после того, как вы полностью убедились в работоспособности модуля на этапе моделирования (увидели корректные значения на выходных сигналах периферии, либо (если по сигналам периферии сложно судить о работоспособности), значениям в контрольных/статусных регистрах модуля-контроллера этой периферии). Генерация битстрима будет занимать у вас долгое время, а итогом вы получите результат: заработало / не заработало, без какой-либо дополнительной информации, поэтому без прочного фундамента на моделировании далеко уехать у вас не выйдет. +7. Переходить к следующему пункту можно только после того, как вы полностью убедились в работоспособности модуля на этапе моделирования (увидели корректные значения на выходных сигналах периферии, либо (если по сигналам периферии сложно судить о работоспособности), значениям в контрольных/статусных регистрах модуля-контроллера этой периферии). Генерация битстрима будет занимать у вас долгое время, а итогом вы получите результат: заработало / не заработало, без какой-либо дополнительной информации, поэтому без прочного фундамента на моделировании далеко уехать у вас не выйдет. -7. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе. -8. Проверьте работу вашей процессорной системы на отладочном стенде с ПЛИС. +8. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе. +9. Проверьте работу вашей процессорной системы на отладочном стенде с ПЛИС. 1. Обратите внимание, что в данной лабораторной уже не будет модуля верхнего уровня `nexys_...`, так как ваш модуль процессорной системы уже полностью самостоятелен и взаимодействует непосредственно с ножками ПЛИС через модули, управляемые контроллерами периферии. --- @@ -625,13 +625,13 @@ endmodule ![../../.pic/Labs/lab_12_periph/fig_03.png](../../.pic/Labs/lab_12_periph/fig_03.png) -_Рисунок 3. Пример вывода на экран символьной информации_ +_Рисунок 3. Пример вывода на экран символьной информации._ Для управления выводимым на экран содержимым, адресное пространство модуля разделено на следующие диапазоны: ![../../.pic/Labs/lab_12_periph/fig_04.png](../../.pic/Labs/lab_12_periph/fig_04.png) -_Рисунок 4. Карта памяти vga-модуля_ +_Рисунок 4. Карта памяти vga-модуля._ Для того, чтобы вывести символ на экран, необходимо использовать адрес этого символа на сетке `80x30` (диапазон адресов `char_map`). К примеру, мы хотим вывести символ в верхнем левом углу. Это нулевой символ в диапазоне адресов `char_map`. Поскольку данный диапазон начинается с адреса `0x0000_0000`, запись по этому адресу приведет к отображению символа, соответствующего [ASCII-коду](https://www.asciitable.com/), пришедшему на `write_data_i`. @@ -649,7 +649,7 @@ _Рисунок 4. Карта памяти vga-модуля_ ![../../.pic/Labs/lab_12_periph/fig_05.png](../../.pic/Labs/lab_12_periph/fig_05.png) -_Рисунок 5. Цветовая палитра vga-модуля_ +_Рисунок 5. Цветовая палитра vga-модуля._ Код цвета формируется следующим образом: старший бит определяет яркость оттенка цвета. Оставшиеся 3 бита кодируют используемый канал: