From a01f986d8e51ea2928f452a113d5312333b6b58a Mon Sep 17 00:00:00 2001 From: Rufubi <122667207+Rufubi@users.noreply.github.com> Date: Sun, 2 Nov 2025 19:33:22 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=D1=85=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20(#151)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit По умолчанию, якоря на параграфы страницы генерируются в VSCode в нижнем регистре. Гиперссылки работают нормально при просмотре страниц непосредственно в репозитории github, но при просмотре в электронной книге mdbook, эти гиперссылки не открываются. Для того чтобы они работали, необходимо чтобы регистр якорей ссылки совпадал с регистром параграфов страницы. --------- Co-authored-by: Andrei Solodovnikov --- Basic Verilog structures/Common mistakes.md | 8 +-- Basic Verilog structures/Controllers.md | 2 +- Basic Verilog structures/Multiplexors.md | 10 +-- Introduction/How FPGA works.md | 30 ++++----- Introduction/What is HDL.md | 2 +- Labs/01. Adder/README.md | 6 +- Labs/02. Arithmetic-logic unit/README.md | 10 +-- Labs/03. Register file and memory/README.md | 4 +- .../README.md | 10 +-- .../board files/README.md | 4 +- .../Индивидуальное задание/README.md | 4 +- Labs/05. Main decoder/README.md | 8 +-- Labs/06. Main memory/README.md | 2 +- Labs/07. Datapath/README.md | 2 +- Labs/07. Datapath/board files/README.md | 4 +- Labs/11. Interrupt integration/README.md | 2 +- Labs/13. Peripheral units/README.md | 4 +- Labs/14. Programming/README.md | 30 ++++----- Labs/15. Programming device/README.md | 22 +++---- Labs/16. Coremark/README.md | 10 +-- Labs/README.md | 48 +++++++------- Lectures/12. Productivity techniques.md | 28 ++++----- .... Processor architecture classification.md | 24 +++---- Lectures/14. Interrupt subsystem.md | 40 ++++++------ Lectures/15. Memory.md | 36 +++++------ Lectures/16. Cache memory.md | 52 ++++++++-------- .../17. Virtual memory. Operating systems.md | 60 +++++++++--------- .../18. Synchronization. Cache coherence.md | 62 +++++++++---------- Lectures/19. Bus.md | 36 +++++------ Lectures/20. Input-Output System.md | 36 +++++------ Lectures/21. Microcontrollers.md | 14 ++--- Lectures/22. General purpose systems.md | 14 ++--- Lectures/23. Parallel computing systems.md | 32 +++++----- Other/Educators.md | 32 +++++----- Other/FAQ.md | 18 +++--- Other/Further readings.md | 26 ++++---- Other/Students server.md | 2 +- Other/VSCode Verilog Simulation.md | 4 +- Other/rv32i.md | 6 +- README.md | 12 ++-- Vivado Basics/05. Bug hunting.md | 26 ++++---- 41 files changed, 391 insertions(+), 391 deletions(-) diff --git a/Basic Verilog structures/Common mistakes.md b/Basic Verilog structures/Common mistakes.md index a643d08..7d104cc 100644 --- a/Basic Verilog structures/Common mistakes.md +++ b/Basic Verilog structures/Common mistakes.md @@ -1,10 +1,10 @@ # Список типичных ошибок в SystemVerilog -- [Список типичных ошибок в SystemVerilog](#список-типичных-ошибок-в-systemverilog) +- [Список типичных ошибок в SystemVerilog](#Список-типичных-ошибок-в-systemverilog) - [имя сигнала is not a type](#имя-сигнала-is-not-a-type) - [cannot find port on this module](#cannot-find-port-on-this-module) - - [Использование сигнала без его объявления (или до его объявления)](#использование-сигнала-без-его-объявления-или-до-его-объявления) - - [Объявление выхода модуля его входом](#объявление-выхода-модуля-его-входом) + - [Использование сигнала без его объявления (или до его объявления)](#Использование-сигнала-без-его-объявления-или-до-его-объявления) + - [Объявление выхода модуля его входом](#Объявление-выхода-модуля-его-входом) - [](#) ## имя сигнала is not a type @@ -101,4 +101,4 @@ INFO: [Synth 8-11241] undeclared symbol 'ab', assumed default net type 'wire' Очень часто в попытке сэкономить себе немного времени студенты выполняют операцию копирования. В частности, копирования строк вида `input logic [7:0]` в процессе описания портов модуля. В случае, если по итогу подобного копирования, выход модуля будет объявлен как его вход (т.е. с помощью ключевого слова `input` вместо `output`). -## \ No newline at end of file +## diff --git a/Basic Verilog structures/Controllers.md b/Basic Verilog structures/Controllers.md index 1144ab5..42b4e7a 100644 --- a/Basic Verilog structures/Controllers.md +++ b/Basic Verilog structures/Controllers.md @@ -2,7 +2,7 @@ Для того, чтобы лучше понять, что от вас требуется в рамках лабораторной работы по периферийным устройствам, рассмотрим процесс разработки структурной схемы (не SystemVerilog-описания) для контроллера светодиодов. -В первую очередь, здесь будет продублирована выдержка из спецификации на этот контроллер (общая часть раздела "[Описание контроллеров периферийных устройств](../Labs/13.%20Peripheral%20units/README.md#описание-контроллеров-периферийных-устройств)", а также подраздел "[Светодиоды](../Labs/13.%20Peripheral%20units/README.md#светодиоды)"): +В первую очередь, здесь будет продублирована выдержка из спецификации на этот контроллер (общая часть раздела "[Описание контроллеров периферийных устройств](../Labs/13.%20Peripheral%20units/README.md#описание-контроллеров-периферийных-устройств)", а также подраздел "[Светодиоды](../Labs/13.%20Peripheral%20units/#Светодиоды)"): ## Спецификация контроллера diff --git a/Basic Verilog structures/Multiplexors.md b/Basic Verilog structures/Multiplexors.md index 35be89e..083b8ea 100644 --- a/Basic Verilog structures/Multiplexors.md +++ b/Basic Verilog structures/Multiplexors.md @@ -207,13 +207,13 @@ assign one_bit_result = bus1024[select]; 1. Мультиплексор — это **комбинационный** блок, подающий на выход один из нескольких входных сигналов. 2. Мультиплексор можно описать множеством способов, среди них: - 1. использование [тернарного условного оператора](#тернарный-условный-оператор); - 2. использование конструкции [`if-else`](#блок-if-else) внутри блока [`always`](#блок-always); - 3. использование конструкции [`case`](#case-блок) внутри блока [`always`](#блок-always); - 4. использование [оператора '[]'](#оператор-адресации). + 1. использование [тернарного условного оператора](#Тернарный-условный-оператор); + 2. использование конструкции [`if-else`](#Блок-if-else) внутри блока [`always`](#Блок-always); + 3. использование конструкции [`case`](#case-блок) внутри блока [`always`](#Блок-always); + 4. использование [оператора '[]'](#Оператор-адресации). 3. Во избежание появления [защелок](Latches.md) при описании мультиплексора, необходимо убедиться что у блоков `if` есть соответствующие им блоки `else`, а в блоке `case` описаны все комбинации управляющего сигнала (при необходимости, множество оставшихся комбинаций можно покрыть с помощью комбинации `default`). Появление непреднамеренной защелки в дизайне ведет к ухудшению временных характеристик, избыточному использованию ресурсов, а также непредсказуемому поведению схемы из-за возможного удержания сигнала. 4. Важно отметить, что блоки `if-else` и `case` могут использоваться не только для описания мультиплексоров. -5. Конструкции `if-else` и `case` в рамках данных лабораторных работ можно описывать только внутри блока [`always`](#блок-always). При работе с этим блоком необходимо помнить следующие особенности: +5. Конструкции `if-else` и `case` в рамках данных лабораторных работ можно описывать только внутри блока [`always`](#Блок-always). При работе с этим блоком необходимо помнить следующие особенности: 1. Существует несколько типов блока `always`: `always_comb`, `always_ff`, `always_latch`, определяющих то, к чему будет подключена описанная в этом блоке логика: проводу, регистру или защелке соответственно. В данных лабораторных работах вам нужно будет пользоваться блоками `always_ff` и `always_comb`, причем: 1. внутри блока `always_ff` необходимо использовать оператор неблокирующего присваивания (`<=`); 2. внутри блока `always_comb` необходимо использовать оператор блокирующего присваивания (`=`). diff --git a/Introduction/How FPGA works.md b/Introduction/How FPGA works.md index d644e3f..e5b0131 100644 --- a/Introduction/How FPGA works.md +++ b/Introduction/How FPGA works.md @@ -1,19 +1,19 @@ # Что такое ПЛИС и как она работает -- [Что такое ПЛИС и как она работает](#что-такое-плис-и-как-она-работает) - - [История появления ПЛИС](#история-появления-плис) - - [Цифровые схемы и логические вентили](#цифровые-схемы-и-логические-вентили) - - [Цифровые схемы](#цифровые-схемы) - - [Логические вентили](#логические-вентили) - - [Мультиплексоры](#мультиплексоры) - - [Программируемая память](#программируемая-память) - - [Таблицы подстановки (Look-Up Tables, LUTs)](#таблицы-подстановки-look-up-tables-luts) +- [Что такое ПЛИС и как она работает](#Что-такое-ПЛИС-и-как-она-работает) + - [История появления ПЛИС](#История-появления-ПЛИС) + - [Цифровые схемы и логические вентили](#Цифровые-схемы-и-логические-вентили) + - [Цифровые схемы](#Цифровые-схемы) + - [Логические вентили](#Логические-вентили) + - [Мультиплексоры](#Мультиплексоры) + - [Программируемая память](#Программируемая-память) + - [Таблицы подстановки (Look-Up Tables, LUTs)](#Таблицы-подстановки-look-up-tables-luts) - [D-триггеры](#d-триггеры) - - [Арифметика](#арифметика) - - [Логические блоки](#логические-блоки) - - [Сеть межсоединений](#сеть-межсоединений) - - [Итоги главы](#итоги-главы) - - [Список источников](#список-источников) + - [Арифметика](#Арифметика) + - [Логические блоки](#Логические-блоки) + - [Сеть межсоединений](#Сеть-межсоединений) + - [Итоги главы](#Итоги-главы) + - [Список источников](#Список-источников) > Параграфы "Цифровые схемы и логические вентили" и "Таблицы подстановки" во многом используют материалы статьи "[How Does an FPGA Work?[1]](https://learn.sparkfun.com/tutorials/how-does-an-fpga-work/all)" за авторством `Alchitry, Ell C`, распространяемой по лицензии [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). @@ -49,7 +49,7 @@ ### Логические вентили -Существует множество логических вентилей, мы рассмотрим четыре из них: **И**, **ИЛИ**, **Исключающее ИЛИ**, **НЕ**. Каждый из этих элементов принимает на вход **цифровое значение** (см. [**цифровая схема**](#цифровые-схемы)), выполняет определенную **логическую функцию** над входами и подает на выход результат этой функции в виде **цифрового значения**. +Существует множество логических вентилей, мы рассмотрим четыре из них: **И**, **ИЛИ**, **Исключающее ИЛИ**, **НЕ**. Каждый из этих элементов принимает на вход **цифровое значение** (см. [**цифровая схема**](#Цифровые-схемы)), выполняет определенную **логическую функцию** над входами и подает на выход результат этой функции в виде **цифрового значения**. Логические вентили на _рис. 1-4_ иллюстрируются условными графическими обозначениями (**УГО**), взятыми из двух стандартов: **ANSI** и **ГОСТ**. Ввиду повсеместного использования в литературе первого варианта, в дальнейшем в книге будет использован он. @@ -139,7 +139,7 @@ _Рисунок 8. Обозначение Мультиплексора._ _Рисунок 9. Реализация мультиплексора, использующего one-hot кодирование._ -Если мы выставим значение управляющего сигнала, равное `000010`, означающее, что только **первый** бит этого сигнала (**счет ведется с нуля**) будет равен **единице** (`sel[1] = 1`), то увидим, что на один из входов каждого логического вентиля **И** будет подано значение `0`. Исключением будет логический вентиль **И** для входа `b`, на вход которого будет подано значение `1`. Это означает, что все логические вентили **И** (кроме первого, на который подается вход `b`) будут выдавать на выход `0` (см. [Логические вентили](#логические-вентили)) вне зависимости от того, что было подано на входы a,c,d,e и f. Единственным входом, который будет влиять на работу схемы, окажется вход `b`. Когда он равен `1`, на выходе соответствующего логического вентиля **И** окажется значение `1`. Когда он равен `0` на выходе **И** окажется значение `0`. Иными словами, выход **И** будет повторять значение `b`. +Если мы выставим значение управляющего сигнала, равное `000010`, означающее, что только **первый** бит этого сигнала (**счет ведется с нуля**) будет равен **единице** (`sel[1] = 1`), то увидим, что на один из входов каждого логического вентиля **И** будет подано значение `0`. Исключением будет логический вентиль **И** для входа `b`, на вход которого будет подано значение `1`. Это означает, что все логические вентили **И** (кроме первого, на который подается вход `b`) будут выдавать на выход `0` (см. [Логические вентили](#Логические-вентили)) вне зависимости от того, что было подано на входы a,c,d,e и f. Единственным входом, который будет влиять на работу схемы, окажется вход `b`. Когда он равен `1`, на выходе соответствующего логического вентиля **И** окажется значение `1`. Когда он равен `0` на выходе **И** окажется значение `0`. Иными словами, выход **И** будет повторять значение `b`. ![../.pic/Introduction/How%20FPGA%20works/fig_10.drawio.svg](../.pic/Introduction/How%20FPGA%20works/fig_10.drawio.svg) diff --git a/Introduction/What is HDL.md b/Introduction/What is HDL.md index f77b6a7..9a2e7aa 100644 --- a/Introduction/What is HDL.md +++ b/Introduction/What is HDL.md @@ -1,6 +1,6 @@ # Что такое язык описания аппаратуры (HDL) -На заре появления цифровой электроники, [цифровые схемы](https://github.com/MPSU/APS/blob/master/Introduction/How%20FPGA%20works.md#%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D0%B5-%D1%81%D1%85%D0%B5%D0%BC%D1%8B) в виде диаграммы на бумаге были маленькими, а их реализация в виде физической аппаратуры — большой. В процессе развития электроники (и её преобразования в микроэлектронику) цифровые схемы на бумаге становились всё больше, а относительный размер их реализации в виде физических микросхем — всё меньше. На _рис. 1_, вы можете увидеть цифровую схему устройства Intel 4004, выпущенного в 1971 году. +На заре появления цифровой электроники, [цифровые схемы](How%20FPGA%20works.md#Цифровые-схемы) в виде диаграммы на бумаге были маленькими, а их реализация в виде физической аппаратуры — большой. В процессе развития электроники (и её преобразования в микроэлектронику) цифровые схемы на бумаге становились всё больше, а относительный размер их реализации в виде физических микросхем — всё меньше. На _рис. 1_, вы можете увидеть цифровую схему устройства Intel 4004, выпущенного в 1971 году. ![../.pic/Introduction/What%20is%20HDL/i4004.gif](../.pic/Introduction/What%20is%20HDL/i4004.gif) diff --git a/Labs/01. Adder/README.md b/Labs/01. Adder/README.md index 1c06d08..5ad394f 100644 --- a/Labs/01. Adder/README.md +++ b/Labs/01. Adder/README.md @@ -190,13 +190,13 @@ _Рисунок 5. Схема 4-битного сумматора._ Как же реализовать модуль, состоящий из цепочки других модулей? Половину этой задачи мы уже сделали, когда писали тестбенч к 1-битному полусумматору в _Листинге 2_ — мы создавали модуль внутри другого модуля и подключали к нему провода. Теперь надо сделать то же самое, только с чуть большим числом модулей. -Описание 4-битного сумматора, сводится к описанию межсоединения четырёх экземпляров 1-битного сумматора. Подробней о том, как описывать создание экземпляров модулей рассказано в главе [Описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md#иерархия-модулей), который вы изучали перед лабораторной работой. +Описание 4-битного сумматора, сводится к описанию межсоединения четырёх экземпляров 1-битного сумматора. Подробней о том, как описывать создание экземпляров модулей рассказано в главе [Описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md#Иерархия-модулей), который вы изучали перед лабораторной работой. ![../../.pic/Labs/lab_01_adder/fig_06.png](../../.pic/Labs/lab_01_adder/fig_06.png) _Рисунок 6. Схема 4-битного сумматора, сгенерированная САПР Vivado._ -Несмотря на запутанность схемы, если присмотреться, вы увидите, как от шин A, B и S отходят линии к каждому из сумматоров, а бит переноса передаётся от предыдущего сумматора к следующему. Для передачи битов переноса от одного сумматора к другому, потребуется создать вспомогательные провода, которые можно сгруппировать в один [вектор](../../Basic%20Verilog%20structures/Modules.md#векторы) (см. сигналы c[0]-c[2] на _рис. 5_). +Несмотря на запутанность схемы, если присмотреться, вы увидите, как от шин A, B и S отходят линии к каждому из сумматоров, а бит переноса передаётся от предыдущего сумматора к следующему. Для передачи битов переноса от одного сумматора к другому, потребуется создать вспомогательные провода, которые можно сгруппировать в один [вектор](../../Basic%20Verilog%20structures/Modules.md#Векторы) (см. сигналы c[0]-c[2] на _рис. 5_). ## Задание @@ -307,7 +307,7 @@ _Листинг 3. Пример создания массива модулей._ 2. Опишите модуль `fulladder`, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_. 1. Модуль необходимо описать с таким же именем и портами, как указано в задании. 3. Проверьте модуль с помощью верификационного окружения, представленного в файле [`lab_01.tb_fulladder.sv`](lab_01.tb_fulladder.sv). Убедитесь по сигналам временной диаграммы, что модуль работает корректно. В случае обнаружения некорректного поведения сигналов суммы и выходного бита переноса, вам необходимо [найти](../../Vivado%20Basics/05.%20Bug%20hunting.md) причину этого поведения, и устранить её. -4. Опишите модуль `fulladder4`, схема которого представлена на _Рис. 5 и 6_, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9), чтобы в нем выполнялось поразрядное сложение двух 4-битных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде [`векторов`](../../Basic%20Verilog%20structures/Modules.md#векторы). +4. Опишите модуль `fulladder4`, схема которого представлена на _Рис. 5 и 6_, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#Иерархия-модулей), чтобы в нем выполнялось поразрядное сложение двух 4-битных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде [`векторов`](../../Basic%20Verilog%20structures/Modules.md#Векторы). 1. Модуль необходимо описать с таким же именем и портами, как указано в задании. 2. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда. Промежуточные биты переноса передаются с помощью вспомогательных проводов, которые необходимо создать самостоятельно. 5. Проверьте модуль с помощью верификационного окружения, представленного в файле [`lab_01.tb_fulladder4.sv`](lab_01.tb_fulladder4.sv). Убедитесь по сигналам временной диаграммы, что модуль работает корректно. В случае обнаружения некорректного поведения сигналов суммы и выходного бита переноса, вам необходимо [найти](../../Vivado%20Basics/05.%20Bug%20hunting.md) причину этого поведения, и устранить её. diff --git a/Labs/02. Arithmetic-logic unit/README.md b/Labs/02. Arithmetic-logic unit/README.md index f522e04..59c2763 100644 --- a/Labs/02. Arithmetic-logic unit/README.md +++ b/Labs/02. Arithmetic-logic unit/README.md @@ -14,9 +14,9 @@ ## Общий ход выполнения работы -1. Изучить устройство и принцип работы АЛУ (раздел [#теория](#теория)) -2. Изучить языковые конструкции SystemVerilog для реализации АЛУ (раздел [#инструменты](#инструменты)) -3. Внимательно ознакомиться с заданием (раздел [#задание](#задание)) +1. Изучить устройство и принцип работы АЛУ (раздел [#теория](#Теория)) +2. Изучить языковые конструкции SystemVerilog для реализации АЛУ (раздел [#инструменты](#Инструменты)) +3. Внимательно ознакомиться с заданием (раздел [#задание](#Задание)) 4. Описать модуль АЛУ, проверить его предоставленным верификационным окружением. 5. Проверить работу АЛУ в ПЛИС. @@ -316,7 +316,7 @@ _Рисунок 5. Пример схемы, реализующей АЛУ._ 1. Поскольку данный файл не содержит описания модулей, он не отобразится во вкладке `Hierarchy` окна `Sources` Vivado (исключением может быть ситуация, когда в проекте вообще нет ни одного модуля). Добавленный файл можно будет найти во вкладках `Libraries` и `Compile Order`. 2. Обратите внимание, что имена параметров кодов операций АЛУ, объявленных в добавляемом пакете, имеют префикс `ALU_`, которого не было в _таблицах 1 и 2_. 3. В случае, если вы добавили пакет в проект и импортировали его в модуле АЛУ, однако Vivado выдает ошибку о том, что используемые параметры не объявлены, попробуйте сперва исправить все остальные синтаксические ошибки и сохранить файл. Если и это не помогло, можно перейти на вкладку `Compile Order`, нажать правой кнопкой мыши по файлу `alu_opcodes_pkg.sv` и выбрать `Move to Top`. Таким образом, мы сообщаем Vivado, что при компиляции проекта, этот файл всегда необходимо собирать в первую очередь. Это вариант "последней надежды" и должен использоваться только в самом крайнем случае. Когда в проекте нет никаких проблем, Vivado всегда может самостоятельно определить правильный порядок компиляции файлов. Тот факт, что вам приходится менять этот порядок означает, что в проекте есть какие-то проблемы, не позволяющие Vivado определить правильный порядок самостоятельно. -2. Опишите модуль `alu` с таким же именем и портами, как указано в [задании](#задание). +2. Опишите модуль `alu` с таким же именем и портами, как указано в [задании](#Задание). 1. Поскольку у вас два выходных сигнала, зависящих от сигнала `alu_op_i`, вам потребуется описать два разных [мультиплексора](../../Basic%20Verilog%20structures/Multiplexors.md) (их лучше всего описывать через два отдельных блока `case`). При описании, используйте `default` на оставшиеся комбинации сигнала `alu_op_i`. 2. Следите за разрядностью ваших сигналов. 3. Для реализации АЛУ, руководствуйтесь таблицей с операциями, а не схемой в конце задания, которая приведена в качестве референса. Обратите внимание, в одной половине операций `flag_o` должен быть равен нулю, в другой `result_o` (т.е. всегда либо один, либо другой сигнал должен быть равен нулю). Именно поэтому удобней всего будет описывать АЛУ в двух разных блоках `case`. @@ -324,7 +324,7 @@ _Рисунок 5. Пример схемы, реализующей АЛУ._ 5. Описывая операцию сложения вы **должны** использовать ваш 32-битный сумматор из первой лабораторной. При описании вычитания сумматор использовать не надо, можно использовать оператор `-`. 1. При подключении сумматора, на входной бит переноса необходимо подать значение `1'b0`. Если не подать значение на входной бит переноса, результат суммы будет не определен (т.к. не определено одно из слагаемых). 2. Выходной бит переноса при подключении сумматора можно не указывать, т.к. он использоваться не будет. - 6. При реализации операций сдвига, руководствуйтесь [особенностями реализации сдвигов](#особенности-реализации-сдвига). + 6. При реализации операций сдвига, руководствуйтесь [особенностями реализации сдвигов](#Особенности-реализации-сдвига). 3. Проверьте модуль с помощью верификационного окружения, представленного в файле [`lab_02.tb_alu.sv`](lab_02.tb_alu.sv). В случае, если в TCL-консоли появились сообщения об ошибках, вам необходимо [найти](../../Vivado%20Basics/05.%20Bug%20hunting.md) и исправить их. 1. Перед запуском моделирования убедитесь, что у вас выбран корректный модуль верхнего уровня в `Simulation Sources`. 4. [Проверьте](./board%20files) работоспособность вашей цифровой схемы в ПЛИС. diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index 4d9d706..0f88dab 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -17,8 +17,8 @@ ## Ход работы -1. Изучить способы организации памяти (раздел [#теория про память](#теория-про-память)). -2. Изучить конструкции SystemVerilog для реализации запоминающих элементов (раздел [#инструменты](#инструменты-для-реализации-памяти)). +1. Изучить способы организации памяти (раздел [#теория про память](#Теория-про-память)). +2. Изучить конструкции SystemVerilog для реализации запоминающих элементов (раздел [#инструменты](#Инструменты-для-реализации-памяти)). 3. Реализовать модули памяти инструкции и регистрового файла. 4. Проверить с помощью верификационного окружения корректность их работы. 5. Проверить работу регистрового файла в ПЛИС. diff --git a/Labs/04. Primitive programmable device/README.md b/Labs/04. Primitive programmable device/README.md index 8496ed0..b46d231 100644 --- a/Labs/04. Primitive programmable device/README.md +++ b/Labs/04. Primitive programmable device/README.md @@ -14,10 +14,10 @@ ## Ход работы -1. Изучить принцип работы процессоров (соответствующий раздел [#теории](#теория-про-программируемое-устройство)) -2. Познакомиться с архитектурой и микроархитектурой `CYBERcobra 3000 Pro 2.1` (раздел про эту [#архитектуру](#архитектура-cybercobra-3000-pro-21-и-её-микроархитектура)) -3. Изучить необходимые для описания процессора конструкции SystemVerilog (раздел [#инструменты](#инструменты-для-реализации-процессора)) -4. Реализовать процессор с архитектурой `CYBERcobra 3000 Pro 2.1` ([#задание по разработке аппаратуры](#задание-по-реализации-процессора)) +1. Изучить принцип работы процессоров (соответствующий раздел [#теории](#Теория-про-программируемое-устройство)) +2. Познакомиться с архитектурой и микроархитектурой `CYBERcobra 3000 Pro 2.1` (раздел про эту [#архитектуру](#Архитектура-cybercobra-3000-pro-21-и-её-микроархитектура)) +3. Изучить необходимые для описания процессора конструкции SystemVerilog (раздел [#инструменты](#Инструменты-для-реализации-процессора)) +4. Реализовать процессор с архитектурой `CYBERcobra 3000 Pro 2.1` ([#задание по разработке аппаратуры](#Задание-по-реализации-процессора)) 5. Проверить работу процессора в ПЛИС. Доп. задание, выполняемое дома: @@ -38,7 +38,7 @@ Любая инструкция приводит к изменению состояния памяти. В случае процессора с архитектурой `CYBERcobra 3000 Pro 2.1` есть два класса инструкций: одни изменяют содержимое регистрового файла — это инструкции записи. Другие изменяют значение `PC` — это инструкции перехода. В первом случае используются вычислительные инструкции и инструкции загрузки данных из других источников. Во втором случае используются инструкции перехода. -Если процессор обрабатывает вычислительную инструкцию, то `PC` перейдет к следующей по порядку инструкции. В ЛР№3 мы реализовали память инструкций с [побайтовой адресацией](../03.%20Register%20file%20and%20memory/README.md#1-память-инструкций). Это означает, что каждый байт памяти имеет свой собственный адрес. Поскольку длина инструкции составляет `4 байта`, для перехода к следующей инструкции `PC` должен быть увеличен на `4` (`PC = PC + 4`). При этом, регистровый файл сохранит результат некоторой операции на АЛУ или данные с порта входных данных. +Если процессор обрабатывает вычислительную инструкцию, то `PC` перейдет к следующей по порядку инструкции. В ЛР№3 мы реализовали память инструкций с [побайтовой адресацией](../03.%20Register%20file%20and%20memory/#1-Память-инструкций). Это означает, что каждый байт памяти имеет свой собственный адрес. Поскольку длина инструкции составляет `4 байта`, для перехода к следующей инструкции `PC` должен быть увеличен на `4` (`PC = PC + 4`). При этом, регистровый файл сохранит результат некоторой операции на АЛУ или данные с порта входных данных. Если же обрабатывается инструкция перехода, то возможно два варианта. В случае безусловного или успешного условного перехода, значение `PC` увеличится на значение константы, закодированной внутри инструкции `PC = PC + const*4` (иными словами, `const` говорит о том, через сколько инструкций перепрыгнет `PC`, `const` может быть и отрицательной). В случае же неуспешного условного перехода `PC`, как и после вычислительных команд, просто перейдет к следующей инструкции, то есть `PC = PC + 4`. diff --git a/Labs/04. Primitive programmable device/board files/README.md b/Labs/04. Primitive programmable device/board files/README.md index 19120e0..a22dd28 100644 --- a/Labs/04. Primitive programmable device/board files/README.md +++ b/Labs/04. Primitive programmable device/board files/README.md @@ -36,7 +36,7 @@ _Рисунок 1. Структурная схема модуля `nexys_CYBERco - `out` — отображают младшие 8 бит значения, выставленного в данный момент на порте `out_o` модуля дизайна, в виде шестнадцатеричного числа. - `PC` — отображают в виде шестнадцатеричного числа младшие 8 бит программного счетчика, который подается на вход `addr_i` модуля памяти инструкций. - - `operation` — отображают [операцию](#операции-отображаемые-прототипом), исполняемую процессором на текущем такте. + - `operation` — отображают [операцию](#Операции-отображаемые-прототипом), исполняемую процессором на текущем такте. ## Операции, отображаемые прототипом @@ -64,4 +64,4 @@ _Рисунок 2. Соответствие операции ее отображ ## Демонстрационная программа -В качестве демонстрационной программы, предлагается использовать [program.mem](../program.mem). Описание ее работы можно прочитать в разделе [#финальный обзор](../README.md#финальный-обзор). +В качестве демонстрационной программы, предлагается использовать [program.mem](../program.mem). Описание ее работы можно прочитать в разделе [#финальный обзор](../#Финальный-обзор). diff --git a/Labs/04. Primitive programmable device/Индивидуальное задание/README.md b/Labs/04. Primitive programmable device/Индивидуальное задание/README.md index b8fcf3c..2ab9d84 100644 --- a/Labs/04. Primitive programmable device/Индивидуальное задание/README.md +++ b/Labs/04. Primitive programmable device/Индивидуальное задание/README.md @@ -1,6 +1,6 @@ # Написание программы под процессор CYBERcobra -Чтобы максимально "прочувствовать" принцип работы созданного вами процессора, вам необходимо написать один из [вариантов программ](#индивидуальные-задания). Вариант выдаётся преподавателем. +Чтобы максимально "прочувствовать" принцип работы созданного вами процессора, вам необходимо написать один из [вариантов программ](#Индивидуальные-задания). Вариант выдаётся преподавателем. Порядок выполнения задания следующий: @@ -175,7 +175,7 @@ cyberconverter принимает до двух аргументов. Поряд ## Индивидуальные задания -В приведённых ниже заданиях под `a` будет подразумеваться некоторое число, заданное в программе (например, в программе прописано `a=10`), под `sw_i` — вход с внешних устройств. "Вывести в `out_o`" — означает, что в конце программы необходимо реализовать бесконечный цикл, с указанием в `RA1` адреса регистра, хранящего результат (см. пункт 8 параграфа "[Написание программы под процессор CYBERcobra](#написание-программы-под-процессор-cybercobra)"). +В приведённых ниже заданиях под `a` будет подразумеваться некоторое число, заданное в программе (например, в программе прописано `a=10`), под `sw_i` — вход с внешних устройств. "Вывести в `out_o`" — означает, что в конце программы необходимо реализовать бесконечный цикл, с указанием в `RA1` адреса регистра, хранящего результат (см. пункт 8 параграфа "[Написание программы под процессор CYBERcobra](#Написание-программы-под-процессор-cybercobra)"). В случае, если задание используется для написания программы на ассемблере, `sw_i` будет обозначать ещё одно число, заданное в программе (как и `a`), а под "Вывести в `out_o`" — запись результата в регистр `x10` (в назначение этого регистра входит возврат результата функции) в конце выполнения программы. diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index 5ee6520..e8334ee 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -16,10 +16,10 @@ 1. Изучить микроархитектуру реализуемого процессорного ядра. 1. Разобраться с логикой формирования управляющих сигналов для всех типов инструкций. -2. Изучить [описание сигналов декодера инструкций](#описание-сигналов-декодера-инструкций). -3. Изучить [набор поддерживаемых инструкций **RISC-V** и способы их кодирования](#набор-поддерживаемых-инструкций-risc-v-и-способы-их-кодирования) -4. Изучить конструкции **SystemVerilog**, с помощью которых будет описан декодер ([#инструменты](#инструменты)) -5. Реализовать на языке **SystemVerilog** декодер инструкций ([#задание](#задание)) +2. Изучить [описание сигналов декодера инструкций](#Описание-сигналов-декодера-инструкций). +3. Изучить [набор поддерживаемых инструкций **RISC-V** и способы их кодирования](#Набор-поддерживаемых-инструкций-risc-v-и-способы-их-кодирования) +4. Изучить конструкции **SystemVerilog**, с помощью которых будет описан декодер ([#инструменты](#Инструменты)) +5. Реализовать на языке **SystemVerilog** декодер инструкций ([#задание](#Задание)) 6. Проверить с помощью верификационного окружения корректность его работы. ## Предлагаемая микроархитектура процессора RISC-V diff --git a/Labs/06. Main memory/README.md b/Labs/06. Main memory/README.md index b3491d3..fa2a91d 100644 --- a/Labs/06. Main memory/README.md +++ b/Labs/06. Main memory/README.md @@ -67,7 +67,7 @@ import memory_pkg::DATA_MEM_SIZE_WORDS; ); ``` -Как и память инструкций, память данных будет состоять из 32-битных ячеек, количество которых определяется параметром. Как и в памяти инструкций, необходимо использовать только младшие биты адреса в количестве, равном логарифму по основанию 2 от количества ячеек памяти, начиная со второго бита (см. код памяти инструкций из [ЛР№3](../03.%20Register%20file%20and%20memory/#1-память-инструкций)). +Как и память инструкций, память данных будет состоять из 32-битных ячеек, количество которых определяется параметром. Как и в памяти инструкций, необходимо использовать только младшие биты адреса в количестве, равном логарифму по основанию 2 от количества ячеек памяти, начиная со второго бита (см. код памяти инструкций из [ЛР№3](../03.%20Register%20file%20and%20memory/#1-Память-инструкций)). Отличие от памяти инструкций будет заключаться в: diff --git a/Labs/07. Datapath/README.md b/Labs/07. Datapath/README.md index 54ac339..5ef7e56 100644 --- a/Labs/07. Datapath/README.md +++ b/Labs/07. Datapath/README.md @@ -9,7 +9,7 @@ ## Ход работы 1. Изучить микроархитектурную реализацию однотактного процессора RISC-V (без поддержки команд загрузки/сохранения байт/полуслов) -2. Реализовать тракт данных с подключенным к нему устройством управления([#задание](#задание)) +2. Реализовать тракт данных с подключенным к нему устройством управления([#задание](#Задание)) 3. Подготовить программу по индивидуальному заданию и загрузить ее в память инструкций 4. Сравнить результат работы процессора на модели в **Vivado** и в симуляторе программы ассемблера diff --git a/Labs/07. Datapath/board files/README.md b/Labs/07. Datapath/board files/README.md index 7516aad..2541c57 100644 --- a/Labs/07. Datapath/board files/README.md +++ b/Labs/07. Datapath/board files/README.md @@ -27,7 +27,7 @@ _Рисунок 1. Структурная схема модуля `nexys_process Семисегментные индикаторы разбиты на 2 блока (см. _рис. 1_): - `PC` — отображают в виде шестнадцатеричного числа младшие 16 бит программного счетчика, которые вычисляются на основе выхода `instr_addr_o` модуля процессорного ядра. - - `operation` — отображают [операцию](#операции-отображаемые-прототипом), исполняемую процессором на текущем такте. + - `operation` — отображают [операцию](#Операции-отображаемые-прототипом), исполняемую процессором на текущем такте. ## Операции, отображаемые прототипом @@ -43,4 +43,4 @@ _Рисунок 2. Соответствие операции ее отображ ## Демонстрационная программа -В качестве демонстрационной программы, предлагается использовать [program.mem](../program.mem). Описание ее работы можно прочитать в разделе [#задание](../README.md#задание). +В качестве демонстрационной программы, предлагается использовать [program.mem](../program.mem). Описание ее работы можно прочитать в разделе [#задание](../#Задание). diff --git a/Labs/11. Interrupt integration/README.md b/Labs/11. Interrupt integration/README.md index 242bef8..4fc470c 100644 --- a/Labs/11. Interrupt integration/README.md +++ b/Labs/11. Interrupt integration/README.md @@ -54,5 +54,5 @@ module processor_core ( 2. Обратите внимание на то, что появилась константа `imm_Z` — это единственная константа ядра, которая расширяется нулями, а не знаковым битом. 3. Проверьте модуль с помощью верификационного окружения, представленного в файле [lab_11.tb_processor_system.sv](lab_11.tb_processor_system.sv). 1. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня в `Simulation Sources`. - 2. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вам необходимо самостоятельно, такт за тактом, проверить, что процессор правильно выполняет [описанные](../10.%20Interrupt%20subsystem#пример-обработки-перехвата) в _Листинге 1_ ЛР№10 инструкции (см. порядок выполнения задания ЛР№4). Для этого необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это. + 2. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вам необходимо самостоятельно, такт за тактом, проверить, что процессор правильно выполняет [описанные](../10.%20Interrupt%20subsystem#Пример-обработки-перехвата) в _Листинге 1_ ЛР№10 инструкции (см. порядок выполнения задания ЛР№4). Для этого необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это. 4. Данная лабораторная работа не предполагает проверки в ПЛИС. diff --git a/Labs/13. Peripheral units/README.md b/Labs/13. Peripheral units/README.md index 8c3f399..16801ea 100644 --- a/Labs/13. Peripheral units/README.md +++ b/Labs/13. Peripheral units/README.md @@ -152,9 +152,9 @@ _Таблица 1. Карта памяти периферийных устрой 1. Ознакомьтесь с [примером описания модуля контроллера](../../Basic%20Verilog%20structures/Controllers.md). 2. Ознакомьтесь со спецификацией контроллеров периферии своего варианта. В случае возникновения вопросов, проконсультируйтесь с преподавателем. 3. Добавьте в проект пакет [`peripheral_pkg`](peripheral_pkg.sv). Данный пакет содержит старшие части адресов периферии в виде параметров, а также вспомогательные вызовы, используемые верификационным окружением. -4. Реализуйте модули контроллеров периферии. Имена модулей и их порты будут указаны в [описании контроллеров](#описание-контроллеров-периферийных-устройств). Пример разработки контроллера приведен в [примере описания модуля контроллера](../../Basic%20Verilog%20structures/Controllers.md). +4. Реализуйте модули контроллеров периферии. Имена модулей и их порты будут указаны в [описании контроллеров](#Описание-контроллеров-периферийных-устройств). Пример разработки контроллера приведен в [примере описания модуля контроллера](../../Basic%20Verilog%20structures/Controllers.md). 1. Готовые модули периферии, управление которыми должны осуществлять модули-контроллеры хранятся в папке `peripheral modules`. -5. Обновите модуль `processor_system` в соответствии с параграфом ["Дополнительные правки модуля processor_system"](#дополнительные-правки-модуля-processor_system). +5. Обновите модуль `processor_system` в соответствии с параграфом ["Дополнительные правки модуля processor_system"](#Дополнительные-правки-модуля-processor_system). 1. Подключите в проект файл `sys_clk_rst_gen.sv`. 2. Добавьте в модуль `processor_system` входы и выходы периферии, а также замените вход `rst_i` входом `resetn_i`. **Необходимо добавить порты даже тех периферийных устройств, которые вы не будете реализовывать**. 3. Создайте в начале описания модуля `processor_system` экземпляр модуля `sys_clk_rst_gen`, скопировав фрагмент кода, приведённый в _листинге 1_. diff --git a/Labs/14. Programming/README.md b/Labs/14. Programming/README.md index afe2a0d..86b1cec 100644 --- a/Labs/14. Programming/README.md +++ b/Labs/14. Programming/README.md @@ -9,16 +9,16 @@ ## Ход работы 1. Изучить теорию: - 1. [Соглашение о вызовах](#соглашение-о-вызовах) - 2. [Скрипт для компоновки](#скрипт-для-компоновки-linker_scriptld) - 3. [Файл первичных команд](#файл-первичных-команд-при-загрузке-startups) -2. [Подготовить набор инструментов для кросс-компиляции](#практика) + 1. [Соглашение о вызовах](#Соглашение-о-вызовах) + 2. [Скрипт для компоновки](#Скрипт-для-компоновки-linker_scriptld) + 3. [Файл первичных команд](#Файл-первичных-команд-при-загрузке-startups) +2. [Подготовить набор инструментов для кросс-компиляции](#Практика) 3. Изучить порядок компиляции и команды, её осуществляющую: - 1. [Компиляция объектных файлов](#компиляция-объектных-файлов) - 2. [Компоновка объектных файлов в исполняемый](#компоновка-объектных-файлов-в-исполняемый) - 3. [Экспорт секций для инициализации памяти](#экспорт-секций-для-инициализации-памяти) - 4. [Дизассемблирование](#дизассемблирование) -4. [Написать и скомпилировать собственную программу](#задание) + 1. [Компиляция объектных файлов](#Компиляция-объектных-файлов) + 2. [Компоновка объектных файлов в исполняемый](#Компоновка-объектных-файлов-в-исполняемый) + 3. [Экспорт секций для инициализации памяти](#Экспорт-секций-для-инициализации-памяти) + 4. [Дизассемблирование](#Дизассемблирование) +4. [Написать и скомпилировать собственную программу](#Задание) 5. Проверить исполнение программы вашим процессором в ПЛИС ## Теория @@ -31,7 +31,7 @@ > — Но разве в процессе компиляции исходного кода на языке Си мы не получаем программу, написанную на языке ассемблера? Получится ведь тот же код, что мы могли написать и сами. -Штука в том, что ассемблерный код, который писали ранее вы отличается от ассемблерного кода, генерируемого компилятором. Код, написанный вами, обладал, скажем так... более тонким микро-контролем хода программы. Когда вы писали программу, вы знали какой у вас размер памяти, где в памяти расположены инструкции, а где данные (ну, при написании программ вы почти не пользовались памятью данных, а когда пользовались — просто использовали случайные адреса и всё получалось). Вы пользовались всеми регистрами регистрового файла по своему усмотрению, без ограничений. Однако, представьте на секунду, что вы пишете проект на ассемблере вместе с коллегой: вы пишите одни функции, а он другие. Как в таком случае вы будете пользоваться регистрами регистрового файла? Ведь если вы будете пользоваться одними и теми же регистрами, вызов одной функции может испортить данные в другой. Поделите его напополам и будете пользоваться каждый своей половиной? Но что будет, если к проекту присоединится ещё один коллега — придётся делить регистровый файл уже на три части? Так от него уже ничего не останется. Для разрешения таких ситуаций было разработано [соглашение о вызовах](#соглашение-о-вызовах) (calling convention). +Штука в том, что ассемблерный код, который писали ранее вы отличается от ассемблерного кода, генерируемого компилятором. Код, написанный вами, обладал, скажем так... более тонким микро-контролем хода программы. Когда вы писали программу, вы знали какой у вас размер памяти, где в памяти расположены инструкции, а где данные (ну, при написании программ вы почти не пользовались памятью данных, а когда пользовались — просто использовали случайные адреса и всё получалось). Вы пользовались всеми регистрами регистрового файла по своему усмотрению, без ограничений. Однако, представьте на секунду, что вы пишете проект на ассемблере вместе с коллегой: вы пишите одни функции, а он другие. Как в таком случае вы будете пользоваться регистрами регистрового файла? Ведь если вы будете пользоваться одними и теми же регистрами, вызов одной функции может испортить данные в другой. Поделите его напополам и будете пользоваться каждый своей половиной? Но что будет, если к проекту присоединится ещё один коллега — придётся делить регистровый файл уже на три части? Так от него уже ничего не останется. Для разрешения таких ситуаций было разработано [соглашение о вызовах](#Соглашение-о-вызовах) (calling convention). Таким образом, генерируя ассемблерный код, компилятор не может так же, как это делали вы, использовать все ресурсы без каких-либо ограничений — он должен следовать ограничениям, накладываемым на него соглашением о вызовах, а также ограничениям, связанным с тем, что он ничего не знает о памяти устройства, в котором будет исполняться программа — а потому он не может работать с памятью абы как. Работая с памятью, компилятор следует некоторым правилам, благодаря которым после компиляции компоновщик сможет собрать программу под ваше устройство с помощью специального скрипта. @@ -556,7 +556,7 @@ FF5FF06F 04400293 FFF00313 30529073 Обратите внимание что байты не просто склеились в четверки, изменился так же и порядок следования байт. Это важно, т.к. в память данные должны лечь именно в таком (обновленном) порядке байт (см. первую строчку скрипта компоновщика). Когда-то `objcopy` содержал [баг](https://sourceware.org/bugzilla/show_bug.cgi?id=25202), из-за которого порядок следования байт не менялся. В каких-то версиях тулчейна (отличных от представленного в данной лабораторной работе) вы всё ещё можете столкнуться с подобным поведением. -Вернемся к первой строке: `@00000000`. Как уже говорилось, число, начинающееся с символа `@` говорит САПР, что с этого момента инициализация идет начиная с ячейки памяти, номер которой совпадает с этим числом. Когда вы будете экспортировать секции данных, первой строкой будет: `@20000000`. Так произойдет, поскольку в скрипте компоновщика сказано инициализировать память данных с `0x80000000` адреса (значение которого было поделено на 4, чтобы получить номер 32-битной ячейки памяти; когда-то в objcopy был ещё один [баг](https://sourceware.org/bugzilla/show_bug.cgi?id=27214), в результате которого деление на 4 не производилось). Это было сделано, чтобы не произошло наложения адресов памяти инструкций и памяти данных (см параграф [скрипт для компоновки](#скрипт-для-компоновки-linker_scriptld)). **Чтобы система работала корректно, эту строчку необходимо удалить.** +Вернемся к первой строке: `@00000000`. Как уже говорилось, число, начинающееся с символа `@` говорит САПР, что с этого момента инициализация идет начиная с ячейки памяти, номер которой совпадает с этим числом. Когда вы будете экспортировать секции данных, первой строкой будет: `@20000000`. Так произойдет, поскольку в скрипте компоновщика сказано инициализировать память данных с `0x80000000` адреса (значение которого было поделено на 4, чтобы получить номер 32-битной ячейки памяти; когда-то в objcopy был ещё один [баг](https://sourceware.org/bugzilla/show_bug.cgi?id=27214), в результате которого деление на 4 не производилось). Это было сделано, чтобы не произошло наложения адресов памяти инструкций и памяти данных (см параграф [скрипт для компоновки](#Скрипт-для-компоновки-linker_scriptld)). **Чтобы система работала корректно, эту строчку необходимо удалить.** ### Дизассемблирование @@ -619,7 +619,7 @@ _Листинг 3. Пример дизасемблированного файл Следующая за адресом строка, записанная в шестнадцатеричном виде — это та инструкция (или данные), которая размещена по этому адресу. С помощью этого столбца вы можете проверить, что считанная инструкция на временной диаграмме (сигнал `instr`) корректна. -В правом столбце находится ассемблерный (человекочитаемый) аналог инструкции из предыдущего столбца. Например, инструкция `00001197` — это операция `auipc gp,0x1`, где `gp` — это синоним (ABI name) регистра `x3` (см. параграф [Соглашение о вызовах](#соглашение-о-вызовах)). +В правом столбце находится ассемблерный (человекочитаемый) аналог инструкции из предыдущего столбца. Например, инструкция `00001197` — это операция `auipc gp,0x1`, где `gp` — это синоним (ABI name) регистра `x3` (см. параграф [Соглашение о вызовах](#Соглашение-о-вызовах)). Обратите внимание на последнюю часть листинга: дизасм секции `.data`. В этой секции адреса могут увеличиваться на любое число, шестнадцатеричные данные могут быть любого размера, а на ассемблерные инструкции в правом столбце и вовсе не надо обращать внимание. @@ -645,7 +645,7 @@ _Листинг 3. Пример дизасемблированного файл ## Задание -Написать программу для вашего [индивидуального задания](../04.%20Primitive%20programmable%20device/Индивидуальное%20задание#индивидуальные-задания) к 4-ой лабораторной работе на языке C или C++ (в зависимости от выбранного языка необходимо использовать соответствующий компилятор: gcc для C, g++ для C++). +Написать программу для вашего [индивидуального задания](../04.%20Primitive%20programmable%20device/Индивидуальное%20задание#Индивидуальные-задания) к 4-ой лабораторной работе на языке C или C++ (в зависимости от выбранного языка необходимо использовать соответствующий компилятор: gcc для C, g++ для C++). Для того чтобы ваша программа собралась, необходимо описать две функции: `main` и `int_handler`. Аргументы и возвращаемые значения могут быть любыми, но использоваться они не смогут. Функция `main` будет вызвана в начале работы программы (после исполнения .boot-секции startup-файла), функция `int_handler` будет вызываться автоматически каждый раз, когда ваш контроллер устройства ввода будет генерировать запрос прерывания (если процессор закончил обрабатывать предыдущий запрос). @@ -658,7 +658,7 @@ _Листинг 3. Пример дизасемблированного файл Функция main может быть как пустой, содержать один лишь оператор return или бесконечный цикл — ход работы в любом случае не сломается, т.к. в стартап-файле прописан бесконечный цикл после выполнения main. Тем не менее, вы можете разместить здесь и какую-то логику, получающую данные от обработчика прерываний через глобальные переменные. -Доступ к регистрам контроллеров периферии осуществляется через обращение в память. В простейшем случае такой доступ осуществляется через [разыменование указателей](https://ru.wikipedia.org/wiki/Указатель_(тип_данных)#Действия_над_указателями), проинициализированных адресами регистров из [карты памяти](../13.%20Peripheral%20units#задание) 13-ой лабораторной работы. +Доступ к регистрам контроллеров периферии осуществляется через обращение в память. В простейшем случае такой доступ осуществляется через [разыменование указателей](https://ru.wikipedia.org/wiki/Указатель_(тип_данных)#Действия_над_указателями), проинициализированных адресами регистров из [карты памяти](../13.%20Peripheral%20units#Задание) 13-ой лабораторной работы. При написании программы помните, что в C++ сильно ограничена арифметика указателей, поэтому при присваивании указателю целочисленного значения адреса, необходимо использовать оператор `reinterpret_cast`. @@ -755,7 +755,7 @@ void _putchar(char character); 3. В функции `int_handler` вам необходимо считать поступившие от устройства ввода входные данные. 4. Вам необходимо самостоятельно решить, как вы хотите построить ход работы вашей программы: будет ли ваше индивидуальное задание вычисляться всего лишь 1 раз в функции `main`, данные в которую поступят от функции `int_handler` через глобальные переменные, или же оно будет постоянно пересчитываться при каждом вызове `int_handler`. 5. Доступ к регистрам контроля и статуса необходимо осуществлять посредством указателей на структуры, объявленные в файле [platform.h](./platform.h). В случае VGA-контроллера, доступ к областям памяти осуществляется через экземпляр структуры (а не указатель на нее), содержащий имена массивов `char_map`, `color_map` и `tiff_map`. -5. [Скомпилируйте](#практика) программу и [стартап-файл](startup.S) в объектные файлы. +5. [Скомпилируйте](#Практика) программу и [стартап-файл](startup.S) в объектные файлы. 6. Скомпонуйте объектные файлы в исполняемый файл, передав компоновщику соответствующий [скрипт](linker_script.ld). 7. Экспортируйте из объектного файла секции `.text` и `.data` в текстовые файлы `init_instr.mem`, `init_data.mem`. Если вы не создавали инициализированных статических массивов или глобальных переменных, то файл `init_data.mem` может быть оказаться пустым. 1. Если файл `init_data.mem` не пустой, необходимо проинициализировать память в модуле `data_mem` c помощью системной функции `$readmemh` как это было сделано для памяти инструкций. diff --git a/Labs/15. Programming device/README.md b/Labs/15. Programming device/README.md index 3a35f6d..cc63e12 100644 --- a/Labs/15. Programming device/README.md +++ b/Labs/15. Programming device/README.md @@ -8,12 +8,12 @@ ## Ход работы -1. Познакомиться с информацией о программаторах и загрузчиках ([#теория](#теория)) -2. Изучить информацию о конечных автоматах и способах их реализации ([#практика](#практика)) -3. Описать перезаписываемую память инструкций ([#память инструкций](#перезаписываемая-память-инструкций)) -4. Описать и проверить модуль программатора ([#программатор](#программатор)) -5. Интегрировать программатор в процессорную систему и проверить её ([#интеграция](#интеграция-программатора-в-processor_system)) -6. Проверить работу системы в ПЛИС с помощью предоставленного скрипта, инициализирующего память системы ([#проверка](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B)) +1. Познакомиться с информацией о программаторах и загрузчиках ([#теория](#Теория)) +2. Изучить информацию о конечных автоматах и способах их реализации ([#практика](#Практика)) +3. Описать перезаписываемую память инструкций ([#память инструкций](#Перезаписываемая-память-инструкций)) +4. Описать и проверить модуль программатора ([#программатор](#Программатор)) +5. Интегрировать программатор в процессорную систему и проверить её ([#интеграция](#Интеграция-программатора-в-processor_system)) +6. Проверить работу системы в ПЛИС с помощью предоставленного скрипта, инициализирующего память системы ([#проверка](#Пример-загрузки-программы)) ## Теория @@ -568,10 +568,10 @@ _Листинг 6. Пример использования скрипта для 2. Добавьте пакет [`bluster_pkg`](bluster_pkg.sv), содержащий объявления параметров и вспомогательных вызовов, используемых модулем и тестбенчем. 3. Опишите модуль `bluster`, используя код, представленный в _листинге 5_. Завершите описание этого модуля. 1. Опишите конечный автомат используя сигналы `state`, `next_state`, `send_fin`, `size_fin`, `flash_fin`, `next_round`. - 2. [Реализуйте](#реализация-конечного-автомата) логику счетчиков `size_counter`, `flash_counter`, `msg_counter`. - 3. [Реализуйте](#реализация-сигналов-подключаемых-к-uart_tx) логику сигналов `tx_valid`, `tx_data`. - 4. [Реализуйте](#реализация-интерфейсов-памяти-инструкций-и-данных) интерфейсы памяти инструкций и данных. - 5. [Реализуйте](#реализация-оставшейся-части-логики) логику оставшихся сигналов. + 2. [Реализуйте](#Реализация-конечного-автомата) логику счетчиков `size_counter`, `flash_counter`, `msg_counter`. + 3. [Реализуйте](#Реализация-сигналов-подключаемых-к-uart_tx) логику сигналов `tx_valid`, `tx_data`. + 4. [Реализуйте](#Реализация-интерфейсов-памяти-инструкций-и-данных) интерфейсы памяти инструкций и данных. + 5. [Реализуйте](#Реализация-оставшейся-части-логики) логику оставшихся сигналов. 4. Проверьте модуль с помощью верификационного окружения, представленного в файле [`lab_15.tb_bluster.sv`](lab_15.tb_bluster.sv). В случае, если в TCL-консоли появились сообщения об ошибках, вам необходимо [найти](../../Vivado%20Basics/05.%20Bug%20hunting.md) и исправить их. 1. Перед запуском моделирования убедитесь, что у вас выбран корректный модуль верхнего уровня в `Simulation Sources`. 2. Для работы тестбенча потребуется пакет [`peripheral_pkg`](../13.%20Peripheral%20units/peripheral_pkg.sv) из ЛР№13, а также файлы [`lab_15_char.mem`](lab_15_char.mem), [`lab_15_data.mem`](lab_15_data.mem), [`lab_15_instr.mem`](lab_15_instr.mem) из папки [mem_files](mem_files). @@ -591,7 +591,7 @@ _Листинг 6. Пример использования скрипта для 8. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](../13.%20Peripheral%20units/nexys_a7_100t.xdc)), если тот ещё не был подключён, либо замените его содержимое данными из файла, представленного в ЛР№13. 9. Проверьте работу вашей процессорной системы на отладочном стенде с ПЛИС. 1. Для инициализации памяти процессорной системы используется скрипт [flash.py](flash.py). - 2. Перед инициализацией необходимо подключить отладочный стенд к последовательному порту компьютера и узнать номер этого порта (см. [пример загрузки программы](#пример-загрузки-программы)). + 2. Перед инициализацией необходимо подключить отладочный стенд к последовательному порту компьютера и узнать номер этого порта (см. [пример загрузки программы](#Пример-загрузки-программы)). 3. Формат файлов для инициализации памяти с помощью скрипта аналогичен формату, использовавшемуся в [тестбенче](lab_15_tb_bluster.sv). Это значит что первой строчкой всех файлов должна быть строка, содержащая адрес ячейки памяти, с которой должна начаться инициализация (см. п. 6.2). 10. В текущем исполнении инициализировать память системы можно только 1 раз с момента сброса, что может оказаться не очень удобным при отладке программ. Подумайте, как можно модифицировать конечный автомат программатора таким образом, чтобы получить возможность в неограниченном количестве инициализаций памяти без повторного сброса всей системы. diff --git a/Labs/16. Coremark/README.md b/Labs/16. Coremark/README.md index 2dff1d1..8a348d5 100644 --- a/Labs/16. Coremark/README.md +++ b/Labs/16. Coremark/README.md @@ -295,7 +295,7 @@ _Листинг 6. Лог вывода результатов coremark. Знач ## Порядок выполнения задания -1. [Опишите](#таймер) таймер в виде модуля `timer_sb_ctrl`. +1. [Опишите](#Таймер) таймер в виде модуля `timer_sb_ctrl`. 2. Проверьте модуль с помощью верификационного окружения, описанного в файле [lab_16.tb_timer.sv](lab_16.tb_timer.sv). 3. Интегрируйте модуль `timer_sb_ctrl` в процессорную систему. 1. Ко входу `rst_i` модуля подключите сигнал `core_reset_o` программатора. Таким образом, системный счётчик начнет работать только когда память системы будет проинициализирована. @@ -304,14 +304,14 @@ _Листинг 6. Лог вывода результатов coremark. Знач 5. Получите исходный код программы coremark. Для этого можно либо склонировать [репозиторий](https://github.com/eembc/coremark/tree/d5fad6bd094899101a4e5fd53af7298160ced6ab), либо скачать его в виде архива. 6. Добавьте реализацию платформозависимых функций программы coremark. Для этого в папке `barebones` необходимо: 1. в файле `core_portme.c`: - 1. [реализовать](#1-реализация-функции-измеряющей-время) функцию `barebones_clock`, возвращающую текущее значение системного счётчика; + 1. [реализовать](#1-Реализация-функции-измеряющей-время) функцию `barebones_clock`, возвращающую текущее значение системного счётчика; 2. объявить макрос `CLOCKS_PER_SEC`, характеризующий тактовую частоту процессора; - 3. [реализовать](#3-реализация-функции-первичной-настройки) функцию `portable_init`, выполняющую первичную инициализацию периферийных устройств до начала теста; - 2. в файле `ee_printf.c` [реализовать](#2-реализация-вывода-очередного-символа-сообщения) функцию `uart_send_char`, отвечающую за отправку очередного символа сообщения о результате. + 3. [реализовать](#3-Реализация-функции-первичной-настройки) функцию `portable_init`, выполняющую первичную инициализацию периферийных устройств до начала теста; + 2. в файле `ee_printf.c` [реализовать](#2-Реализация-вывода-очередного-символа-сообщения) функцию `uart_send_char`, отвечающую за отправку очередного символа сообщения о результате. 7. Добавьте с заменой в корень программы файлы [Makefile](Makefile), [linker_script.ld](linker_script.ld) и [startup.S](../14.%20Programming/startup.S). 8. Скомпилируйте программу вызовом `make`. 1. Если кросскомпилятор расположен не в директории `C:/riscv_cc`, перед вызовом `make` вам необходимо соответствующим образом отредактировать первую строчку в `Makefile`. - 2. В случае отсутствия на компьютере утилиты `make`, вы можете самостоятельно скомпилировать программу вызовом команд, представленных в параграфе ["Компиляция"](#компиляция). + 2. В случае отсутствия на компьютере утилиты `make`, вы можете самостоятельно скомпилировать программу вызовом команд, представленных в параграфе ["Компиляция"](#Компиляция). 9. Временно измените размер памяти инструкций до 64 KiB, а памяти данных до 16 KiB, изменив значение параметров `INSTR_MEM_SIZE_BYTES` и `DATA_MEM_SIZE_BYTES` в пакете `memory_pkg` на `32'h10_000` и `32'h4_000` соответственно. 10. Проинициализируйте память инструкций и память данных файлами `coremark_instr.mem` и `coremark_data.mem`, полученными в ходе компиляции программы. 1. Память можно проинициализировать двумя путями: с помощью вызова системной функции `$readmemh`, либо же с помощью программатора. Однако имейте в виду, что инициализация памятей с помощью программатора будет достаточно долго моделироваться в виду большого объема программы. diff --git a/Labs/README.md b/Labs/README.md index 2ae69e2..0ed4ece 100644 --- a/Labs/README.md +++ b/Labs/README.md @@ -2,30 +2,30 @@ ## Содержание -- [Курс лабораторных работ](#курс-лабораторных-работ) - - [Содержание](#содержание) - - [Полезное](#полезное) - - [Порядок выполнения лабораторных работ для групп](#порядок-выполнения-лабораторных-работ-для-групп) - - [ИБ, ИКТ, КТ, РТ, ПИН-31Д, ИВТ-31В](#иб-икт-кт-рт-пин-31д-ивт-31в) - - [ПИН, ПМ](#пин-пм) - - [ИВТ](#ивт) - - [Обзор лабораторных работ](#обзор-лабораторных-работ) - - [1. Сумматор. SystemVerilog](#1-сумматор-systemverilog) - - [2. Арифметико-логическое устройство](#2-арифметико-логическое-устройство) - - [3. Регистровый файл и внешняя память](#3-регистровый-файл-и-внешняя-память) - - [4. Простейшее программируемое устройство](#4-простейшее-программируемое-устройство) - - [5. Декодер инструкций](#5-декодер-инструкций) - - [6. Основная память](#6-основная-память) - - [7. Тракт данных](#7-тракт-данных) - - [8. Блок загрузки и сохранения данных](#8-блок-загрузки-и-сохранения-данных) - - [9 Интеграция блока загрузки и сохранения](#9-интеграция-блока-загрузки-и-сохранения) - - [10. Подсистема прерывания](#10-подсистема-прерывания) - - [11. Интеграция подсистемы прерывания](#11-интеграция-подсистемы-прерывания) - - [12. Блок приоритетных прерываний](#12-блок-приоритетных-прерываний) - - [13. Периферийные устройства](#13-периферийные-устройства) - - [14. Программирование на языке высокого уровня](#14-программирование-на-языке-высокого-уровня) - - [15. Программатор](#15-программатор) - - [16. Оценка производительности](#16-оценка-производительности) +- [Курс лабораторных работ](#Курс-лабораторных-работ) + - [Содержание](#Содержание) + - [Полезное](#Полезное) + - [Порядок выполнения лабораторных работ для групп](#Порядок-выполнения-лабораторных-работ-для-групп) + - [ИБ, ИКТ, КТ, РТ, ПИН-31Д, ИВТ-31В](#ИБ-ИКТ-КТ-РТ-ПИН-31Д-ИВТ-31В) + - [ПИН, ПМ](#ПИН-ПМ) + - [ИВТ](#ИВТ) + - [Обзор лабораторных работ](#Обзор-лабораторных-работ) + - [1. Сумматор. SystemVerilog](#1-Сумматор-systemverilog) + - [2. Арифметико-логическое устройство](#2-Арифметико-логическое-устройство) + - [3. Регистровый файл и внешняя память](#3-Регистровый-файл-и-внешняя-память) + - [4. Простейшее программируемое устройство](#4-Простейшее-программируемое-устройство) + - [5. Декодер инструкций](#5-Декодер-инструкций) + - [6. Основная память](#6-Основная-память) + - [7. Тракт данных](#7-Тракт-данных) + - [8. Блок загрузки и сохранения данных](#8-Блок-загрузки-и-сохранения-данных) + - [9 Интеграция блока загрузки и сохранения](#9-Интеграция-блока-загрузки-и-сохранения) + - [10. Подсистема прерывания](#10-Подсистема-прерывания) + - [11. Интеграция подсистемы прерывания](#11-Интеграция-подсистемы-прерывания) + - [12. Блок приоритетных прерываний](#12-Блок-приоритетных-прерываний) + - [13. Периферийные устройства](#13-Периферийные-устройства) + - [14. Программирование на языке высокого уровня](#14-Программирование-на-языке-высокого-уровня) + - [15. Программатор](#15-Программатор) + - [16. Оценка производительности](#16-Оценка-производительности) ## Полезное diff --git a/Lectures/12. Productivity techniques.md b/Lectures/12. Productivity techniques.md index 0d80dd6..d1411cf 100644 --- a/Lectures/12. Productivity techniques.md +++ b/Lectures/12. Productivity techniques.md @@ -2,20 +2,20 @@ ## Содержание -- [Лекция 12. Методы повышения производительности](#лекция-12-методы-повышения-производительности) - - [Содержание](#содержание) - - [Суперскалярный процессор](#суперскалярный-процессор) - - [Внеочередное выполнение команд](#внеочередное-выполнение-команд) - - [Переименование регистров](#переименование-регистров) - - [Переупорядочивание команд](#переупорядочивание-команд) - - [Централизованное окно команд](#централизованное-окно-команд) - - [Распределенное окно команд (алгоритм Томасуло)](#распределенное-окно-команд-алгоритм-томасуло) - - [Восстановление последовательности](#восстановление-последовательности) - - [Параллелизм](#параллелизм) - - [Многопоточность](#многопоточность) - - [Пакованная арифметика](#пакованная-арифметика) - - [Классификация Флинна](#классификация-флинна) - - [Основные материалы лекции](#основные-материалы-лекции) +- [Лекция 12. Методы повышения производительности](#Лекция-12-Методы-повышения-производительности) + - [Содержание](#Содержание) + - [Суперскалярный процессор](#Суперскалярный-процессор) + - [Внеочередное выполнение команд](#Внеочередное-выполнение-команд) + - [Переименование регистров](#Переименование-регистров) + - [Переупорядочивание команд](#Переупорядочивание-команд) + - [Централизованное окно команд](#Централизованное-окно-команд) + - [Распределенное окно команд (алгоритм Томасуло)](#Распределенное-окно-команд-алгоритм-Томасуло) + - [Восстановление последовательности](#Восстановление-последовательности) + - [Параллелизм](#Параллелизм) + - [Многопоточность](#Многопоточность) + - [Пакованная арифметика](#Пакованная-арифметика) + - [Классификация Флинна](#Классификация-Флинна) + - [Основные материалы лекции](#Основные-материалы-лекции) В последних лекциях разрабатывалось три микроархитектуры: diff --git a/Lectures/13. Processor architecture classification.md b/Lectures/13. Processor architecture classification.md index b89a5c1..6fa7f8a 100644 --- a/Lectures/13. Processor architecture classification.md +++ b/Lectures/13. Processor architecture classification.md @@ -2,18 +2,18 @@ ## Содержание -- [Лекция 13. Виды и классификация архитектур](#лекция-13-виды-и-классификация-архитектур) - - [Содержание](#содержание) - - [Архитектура](#архитектура) - - [Классификация архитектур](#классификация-архитектур) - - [Классификация архитектур по способу хранения операндов](#классификация-архитектур-по-способу-хранения-операндов) - - [Классификация архитектур по составу и сложности команд](#классификация-архитектур-по-составу-и-сложности-команд) - - [Классификация архитектур по способу реализации условных переходов](#классификация-архитектур-по-способу-реализации-условных-переходов) - - [Классификация инструкций](#классификация-инструкций) - - [Классификация инструкций по функциональному назначению](#классификация-инструкций-по-функциональному-назначению) - - [Классификация инструкций по способу адресации операндов](#классификация-инструкций-по-способу-адресации-операндов) - - [Классификация инструкций по количеству операндов в инструкции](#классификация-инструкций-по-количеству-операндов-в-инструкции) - - [Основные материалы лекции](#основные-материалы-лекции) +- [Лекция 13. Виды и классификация архитектур](#Лекция-13-Виды-и-классификация-архитектур) + - [Содержание](#Содержание) + - [Архитектура](#Архитектура) + - [Классификация архитектур](#Классификация-архитектур) + - [Классификация архитектур по способу хранения операндов](#Классификация-архитектур-по-способу-хранения-операндов) + - [Классификация архитектур по составу и сложности команд](#Классификация-архитектур-по-составу-и-сложности-команд) + - [Классификация архитектур по способу реализации условных переходов](#Классификация-архитектур-по-способу-реализации-условных-переходов) + - [Классификация инструкций](#Классификация-инструкций) + - [Классификация инструкций по функциональному назначению](#Классификация-инструкций-по-функциональному-назначению) + - [Классификация инструкций по способу адресации операндов](#Классификация-инструкций-по-способу-адресации-операндов) + - [Классификация инструкций по количеству операндов в инструкции](#Классификация-инструкций-по-количеству-операндов-в-инструкции) + - [Основные материалы лекции](#Основные-материалы-лекции) ## Архитектура diff --git a/Lectures/14. Interrupt subsystem.md b/Lectures/14. Interrupt subsystem.md index b64421f..9989fcf 100644 --- a/Lectures/14. Interrupt subsystem.md +++ b/Lectures/14. Interrupt subsystem.md @@ -2,29 +2,29 @@ ## Содержание -- [Лекция 14. Подсистема прерывания](#лекция-14-подсистема-прерывания) - - [Содержание](#содержание) - - [Определение](#определение) - - [Сканирование-входов](#сканирование-входов) - - [Передача управления при прерывании](#передача-управления-при-прерывании) - - [Классификация событий прерывания](#классификация-событий-прерывания) - - [Основные характеристики прерываний](#основные-характеристики-прерываний) - - [Допустимые моменты прерывания программы](#допустимые-моменты-прерывания-программы) - - [Маски́рование прерывания](#маски́рование-прерывания) - - [Способы выявления прерывания](#способы-выявления-прерывания) - - [Схемы реализации контроллера прерываний](#схемы-реализации-контроллера-прерываний) - - [Контроллер прерывания](#контроллер-прерывания) +- [Лекция 14. Подсистема прерывания](#Лекция-14-подсистема-прерывания) + - [Содержание](#Содержание) + - [Определение](#Определение) + - [Сканирование-входов](#Сканирование-входов) + - [Передача управления при прерывании](#Передача-управления-при-прерывании) + - [Классификация событий прерывания](#Классификация-событий-прерывания) + - [Основные характеристики прерываний](#Основные-характеристики-прерываний) + - [Допустимые моменты прерывания программы](#Допустимые-моменты-прерывания-программы) + - [Маски́рование прерывания](#Маскирование-прерывания) + - [Способы выявления прерывания](#Способы-выявления-прерывания) + - [Схемы реализации контроллера прерываний](#Схемы-реализации-контроллера-прерываний) + - [Контроллер прерывания](#Контроллер-прерывания) - [Control and Status Register RISC-V](#control-and-status-register-risc-v) - - [Подсистема прерываний для RISC-V](#подсистема-прерываний-для-risc-v) - - [Программа, реализующая прерывания на ассемблере](#программа-реализующая-прерывания-на-ассемблере) - - [Основные материалы лекции](#основные-материалы-лекции) - - [Дополнительные материалы к лекции для саморазвития](#дополнительные-материалы-к-лекции-для-саморазвития) + - [Подсистема прерываний для RISC-V](#Подсистема-прерываний-для-risc-v) + - [Программа, реализующая прерывания на ассемблере](#Программа-реализующая-прерывания-на-ассемблере) + - [Основные материалы лекции](#Основные-материалы-лекции) + - [Дополнительные материалы к лекции для саморазвития](#Дополнительные-материалы-к-лекции-для-саморазвития) ## Определение **Прерывание** — событие, на которое реагирует процессор. -_Пример_: Перемещение мыши. Если бы не было прерываний, то процессор был бы вынужден постоянно обращаться к мыши с целью узнать: изменилось ли её положение или нет, стоит ли перерисовать курсор. А это очень ресурсоёмко. Такой подход называется [сканирование входов](#сканирование-входов). +_Пример_: Перемещение мыши. Если бы не было прерываний, то процессор был бы вынужден постоянно обращаться к мыши с целью узнать: изменилось ли её положение или нет, стоит ли перерисовать курсор. А это очень ресурсоёмко. Такой подход называется [сканирование входов](#Сканирование-входов). ### Сканирование-входов @@ -90,7 +90,7 @@ _Пример_: Перемещение мыши. Если бы не было п Этот метод позволяет реагировать на прерывание на любом такте. -### Маски́рование прерывания +### Маскирование прерывания **Маска прерывания** — это регистр, отвечающий за разрешение на прерывание (см. рис. 4). Эта маска побитово перемножается с запросами на прерывание других устройств/модулей. Если в результате перемножения получилась хотя бы одна 1, то формируется сигнал `interrupt`, который подаётся на блок управления процессора. @@ -110,7 +110,7 @@ _Пример_: Перемещение мыши. Если бы не было п ## Схемы реализации контроллера прерываний -[**Контроллер прерывания**](#контроллер-прерывания) — устройство, которое отвечает за передачу сигнала прерывания процессору и формирование кода причины прерывания. +[**Контроллер прерывания**](#Контроллер-прерывания) — устройство, которое отвечает за передачу сигнала прерывания процессору и формирование кода причины прерывания. - **Цепочечная схема** @@ -191,7 +191,7 @@ _Пример_: Перемещение мыши. Если бы не было п *Рис. 12. Верхняя часть схемы CSR.* Она нужна для реализации инструкций для работы с CSR. В зависимости от нужной инструкции у выхода `WD` будет своё значение. На нулевой вход мультиплексора поступают нули, если не требуется запись в регистры. -Отдельно стоит отметить, что значение регистра причины прерывания `mcause` берётся из контроллера прерывания. А значение регистра маски прерывании `mie`, которое мы устанавливаем в блоке CSR, отправляется в контроллер прерывания. Давайте рассмотрим устройство контроллера прерывания. У него будет [схема с циклическим опросом](#схемы-реализации-контроллера-прерываний) (см. рис. 13): +Отдельно стоит отметить, что значение регистра причины прерывания `mcause` берётся из контроллера прерывания. А значение регистра маски прерывании `mie`, которое мы устанавливаем в блоке CSR, отправляется в контроллер прерывания. Давайте рассмотрим устройство контроллера прерывания. У него будет [схема с циклическим опросом](#Схемы-реализации-контроллера-прерываний) (см. рис. 13): ![../.pic/Lectures/14.%20Interrupt%20subsystem/fig_13.jpg](../.pic/Lectures/14.%20Interrupt%20subsystem/fig_13.jpg) diff --git a/Lectures/15. Memory.md b/Lectures/15. Memory.md index 59227ae..9c4c5cf 100644 --- a/Lectures/15. Memory.md +++ b/Lectures/15. Memory.md @@ -2,24 +2,24 @@ ## Содержание -- [Лекция 15. Память](#лекция-15-память) - - [Содержание](#содержание) - - [Определение](#определение) - - [Характеристики](#характеристики) - - [Метод доступа к данным](#метод-доступа-к-данным) - - [Иерархия памяти](#иерархия-памяти) - - [Локальность по обращению](#локальность-по-обращению) - - [Статическая и динамическая память](#статическая-и-динамическая-память) - - [Регенерация DRAM](#регенерация-dram) - - [Сравнение SRAM и DRAM](#сравнение-sram-и-dram) - - [Структура микросхемы памяти](#структура-микросхемы-памяти) - - [Блочная память](#блочная-память) - - [Расслоение памяти](#расслоение-памяти) - - [Способы доставки данных](#способы-доставки-данных) - - [Энергонезависимая память](#энергонезависимая-память) +- [Лекция 15. Память](#Лекция-15-Память) + - [Содержание](#Содержание) + - [Определение](#Определение) + - [Характеристики](#Характеристики) + - [Метод доступа к данным](#Метод-доступа-к-данным) + - [Иерархия памяти](#Иерархия-памяти) + - [Локальность по обращению](#Локальность-по-обращению) + - [Статическая и динамическая память](#Статическая-и-динамическая-память) + - [Регенерация DRAM](#Регенерация-dram) + - [Сравнение SRAM и DRAM](#Сравнение-sram-и-dram) + - [Структура микросхемы памяти](#Структура-микросхемы-памяти) + - [Блочная память](#Блочная-память) + - [Расслоение памяти](#Расслоение-памяти) + - [Способы доставки данных](#Способы-доставки-данных) + - [Энергонезависимая память](#Энергонезависимая-память) - [Flash-память](#flash-память) - - [Защита памяти](#защита-памяти) - - [Основные материалы лекции](#основные-материалы-лекции) + - [Защита памяти](#Защита-памяти) + - [Основные материалы лекции](#Основные-материалы-лекции) ## Определение @@ -128,7 +128,7 @@ P.S. Стоит отметить, что не существует памяти, ### Расслоение памяти -У схемы блочной памяти, рассмотренной в прошлом примере, есть недостаток: если обращения идут к соседним ячейкам памяти, что происходит довольно часто из-за [пространственной локальности](#локальность-по-обращению), то обработка этих обращений будет осуществляться тоже последовательно. Эта проблема решается использованием **расслоения памяти** (см. рис. 8), т.е. соседние адреса будут находиться в разных банках памяти, вследствие чего запросы к соседним ячейкам памяти будут обрабатываться параллельно. +У схемы блочной памяти, рассмотренной в прошлом примере, есть недостаток: если обращения идут к соседним ячейкам памяти, что происходит довольно часто из-за [пространственной локальности](#Локальность-по-обращению), то обработка этих обращений будет осуществляться тоже последовательно. Эта проблема решается использованием **расслоения памяти** (см. рис. 8), т.е. соседние адреса будут находиться в разных банках памяти, вследствие чего запросы к соседним ячейкам памяти будут обрабатываться параллельно. ![../.pic/Lectures/15.%20Memory/fig_08.jpg](../.pic/Lectures/15.%20Memory/fig_08.jpg) diff --git a/Lectures/16. Cache memory.md b/Lectures/16. Cache memory.md index 3f5bebf..6831516 100644 --- a/Lectures/16. Cache memory.md +++ b/Lectures/16. Cache memory.md @@ -2,24 +2,24 @@ ## Содержание -- [Лекция 16. Кэш-память](#лекция-16-кэш-память) - - [Содержание](#содержание) - - [Кэш-память](#кэш-память) - - [Иерархия памяти](#иерархия-памяти) - - [Локальность данных](#локальность-данных) - - [Характеристики кэш-памяти](#характеристики-кэш-памяти) - - [Существует 3 вида кэш-памяти](#существует-3-вида-кэш-памяти) - - [Анализ производительности](#анализ-производительности) - - [Кэш прямого отображения](#кэш-прямого-отображения) - - [Идентификация строки](#идентификация-строки) - - [Множественно-ассоциативный кэш](#множественно-ассоциативный-кэш) - - [Полностью ассоциативный кэш](#полностью-ассоциативный-кэш) - - [Длина строки (блока)](#длина-строки-блока) - - [Алгоритмы замещения данных](#алгоритмы-замещения-данных) - - [Стратегии чтения и записи в кэш](#стратегии-чтения-и-записи-в-кэш) - - [Основные оптимизации кэш-памяти](#основные-оптимизации-кэш-памяти) - - [Основные материалы лекции](#основные-материалы-лекции) - - [Дополнительные материалы к лекции для саморазвития](#дополнительные-материалы-к-лекции-для-саморазвития) +- [Лекция 16. Кэш-память](#Лекция-16-Кэш-память) + - [Содержание](#Содержание) + - [Кэш-память](#Кэш-память) + - [Иерархия памяти](#Иерархия-памяти) + - [Локальность данных](#Локальность-данных) + - [Характеристики кэш-памяти](#Характеристики-кэш-памяти) + - [Существует 3 вида кэш-памяти](#Существует-3-вида-кэш-памяти) + - [Анализ производительности](#Анализ-производительности) + - [Кэш прямого отображения](#Кэш-прямого-отображения) + - [Идентификация строки](#Идентификация-строки) + - [Множественно-ассоциативный кэш](#Множественно-ассоциативный-кэш) + - [Полностью ассоциативный кэш](#Полностью-ассоциативный-кэш) + - [Длина строки (блока)](#Длина-строки-блока) + - [Алгоритмы замещения данных](#Алгоритмы-замещения-данных) + - [Стратегии чтения и записи в кэш](#Стратегии-чтения-и-записи-в-кэш) + - [Основные оптимизации кэш-памяти](#Основные-оптимизации-кэш-памяти) + - [Основные материалы лекции](#Основные-материалы-лекции) + - [Дополнительные материалы к лекции для саморазвития](#Дополнительные-материалы-к-лекции-для-саморазвития) ## Кэш-память @@ -30,7 +30,7 @@ *Рис. 1. Изменение в производительности процессоров и памяти с 80-х годов.* **Что такое кэш-память?** -**Кэш-память** — это небольшой сегмент высокоскоростной памяти, обычно на базе **SRAM** ([**Static Random-Access Memory**](./15.%20Memory.md#статическая-и-динамическая-память)), расположенный непосредственно на процессоре или рядом с ним. Её главная функция — временное хранение тех данных, к которым процессор часто обращается. Основная цель такой памяти — уменьшить задержку доступа к данным, служа мостом между процессором и основной оперативной памятью. +**Кэш-память** — это небольшой сегмент высокоскоростной памяти, обычно на базе **SRAM** ([**Static Random-Access Memory**](./15.%20Memory.md#Статическая-и-динамическая-память)), расположенный непосредственно на процессоре или рядом с ним. Её главная функция — временное хранение тех данных, к которым процессор часто обращается. Основная цель такой памяти — уменьшить задержку доступа к данным, служа мостом между процессором и основной оперативной памятью. **Для чего нужна кэш-память?** Основное **предназначение кэш-памяти** — ускорение доступа процессора к часто используемым данным и командам, минимизируя зависимость от более медленной основной памяти. Благодаря этому, время реакции системы сокращается, делая её более отзывчивой и эффективной. @@ -65,10 +65,10 @@ **Перед созданием Кэш-памяти нам нужно задаться 4-мя вопросами**: -- Где могут быть размещены данные в кэш-памяти? ([**Размещение строки в разных видах кэшах-памяти**](#существует-3-вида-кэш-памяти)) -- Как найти данные в кэш-памяти? ([**Идентификация строки**](#идентификация-строки)) -- Какие данные нужно заместить при заполненной кэш-памяти? ([**Алгоритмы замещение строки**](#алгоритмы-замещения-данных)) -- Что происходит при записи в кэш-память? ([**Стратегия записи**](#стратегии-чтения-и-записи-в-кэш)) +- Где могут быть размещены данные в кэш-памяти? ([**Размещение строки в разных видах кэшах-памяти**](#Существует-3-вида-кэш-памяти)) +- Как найти данные в кэш-памяти? ([**Идентификация строки**](#Идентификация-строки)) +- Какие данные нужно заместить при заполненной кэш-памяти? ([**Алгоритмы замещение строки**](#Алгоритмы-замещения-данных)) +- Что происходит при записи в кэш-память? ([**Стратегия записи**](#Стратегии-чтения-и-записи-в-кэш)) ## Характеристики кэш-памяти @@ -90,9 +90,9 @@ ### Существует 3 вида кэш-памяти -- [Кэш прямого отображения](#кэш-прямого-отображения) – Набор S содержит только одну строку – ***S = B*** -- [Множественно-ассоциативный кэш](#множественно-ассоциативный-кэш) – Каждый набор S состоит из N строк – ***S = B/N*** -- [Полностью ассоциативный кэш](#полностью-ассоциативный-кэш) – Имеет только один набор ***S = 1*** +- [Кэш прямого отображения](#Кэш-прямого-отображения) – Набор S содержит только одну строку – ***S = B*** +- [Множественно-ассоциативный кэш](#Множественно-ассоциативный-кэш) – Каждый набор S состоит из N строк – ***S = B/N*** +- [Полностью ассоциативный кэш](#Полностью-ассоциативный-кэш) – Имеет только один набор ***S = 1*** #### Анализ производительности diff --git a/Lectures/17. Virtual memory. Operating systems.md b/Lectures/17. Virtual memory. Operating systems.md index 35afce6..c9c7f70 100644 --- a/Lectures/17. Virtual memory. Operating systems.md +++ b/Lectures/17. Virtual memory. Operating systems.md @@ -2,36 +2,36 @@ ## Содержание -- [Лекция 17. Виртуальная память. Операционные системы](#лекция-17-виртуальная-память-операционные-системы) - - [Содержание](#содержание) - - [Виртуальная память](#виртуальная-память) - - [Виды адресов](#виды-адресов) - - [Преобразование адреса](#преобразование-адреса) - - [Реализация виртуальной памяти в процессоре](#реализация-виртуальной-памяти-в-процессоре) - - [Физические и виртуальные страницы](#физические-и-виртуальные-страницы) - - [Сравнение кэш и виртуальной памяти](#сравнение-кэш-и-виртуальной-памяти) - - [Особенности виртуальной памяти](#особенности-виртуальной-памяти) - - [Защита и приватность](#защита-и-приватность) - - [Основная память используется как кэш для внешней памяти](#основная-память-используется-как-кэш-для-внешней-памяти) - - [Буфер ассоциативной трансляции (TLB)](#буфер-ассоциативной-трансляции-tlb) - - [Использование TLB](#использование-tlb) - - [Метод ключей защиты](#метод-ключей-защиты) - - [Использование кэш и виртуальной памяти](#использование-кэш-и-виртуальной-памяти) - - [Стратегии замещения страниц](#стратегии-замещения-страниц) - - [Стратегия обратной записи (write-back)](#стратегия-обратной-записи-write-back) - - [Стратегия вытеснения редко используемых страниц (LRU)](#стратегия-вытеснения-редко-используемых-страниц-lru) - - [Многоуровневые таблицы страниц](#многоуровневые-таблицы-страниц) - - [Метод граничных регистров](#метод-граничных-регистров) - - [Операционная система](#операционная-система) - - [Процесс vs. программа](#процесс-vs-программа) - - [Цели операционной системы](#цели-операционной-системы) - - [Управление процессами и ресурсами в ядре операционной системы](#управление-процессами-и-ресурсами-в-ядре-операционной-системы) - - [Виртуальные машины](#виртуальные-машины) - - [Прерывания и исключения](#прерывания-и-исключения) - - [Системные вызовы](#системные-вызовы) - - [Системные вызовы RISC-V](#системные-вызовы-risc-v) - - [Жизненный цикл процесса](#жизненный-цикл-процесса) - - [Основные материалы лекции](#основные-материалы-лекции) +- [Лекция 17. Виртуальная память. Операционные системы](#Лекция-17-Виртуальная-память-Операционные-системы) + - [Содержание](#Содержание) + - [Виртуальная память](#Виртуальная-память) + - [Виды адресов](#Виды-адресов) + - [Преобразование адреса](#Преобразование-адреса) + - [Реализация виртуальной памяти в процессоре](#Реализация-виртуальной-памяти-в-процессоре) + - [Физические и виртуальные страницы](#Физические-и-виртуальные-страницы) + - [Сравнение кэш и виртуальной памяти](#Сравнение-кэш-и-виртуальной-памяти) + - [Особенности виртуальной памяти](#Особенности-виртуальной-памяти) + - [Защита и приватность](#Защита-и-приватность) + - [Основная память используется как кэш для внешней памяти](#Основная-память-используется-как-кэш-для-внешней-памяти) + - [Буфер ассоциативной трансляции (TLB)](#Буфер-ассоциативной-трансляции-tlb) + - [Использование TLB](#Использование-tlb) + - [Метод ключей защиты](#Метод-ключей-защиты) + - [Использование кэш и виртуальной памяти](#Использование-кэш-и-виртуальной-памяти) + - [Стратегии замещения страниц](#Стратегии-замещения-страниц) + - [Стратегия обратной записи (write-back)](#Стратегия-обратной-записи-write-back) + - [Стратегия вытеснения редко используемых страниц (LRU)](#Стратегия-вытеснения-редко-используемых-страниц-lru) + - [Многоуровневые таблицы страниц](#Многоуровневые-таблицы-страниц) + - [Метод граничных регистров](#Метод-граничных-регистров) + - [Операционная система](#Операционная-система) + - [Процесс vs. программа](#Процесс-vs-программа) + - [Цели операционной системы](#Цели-операционной-системы) + - [Управление процессами и ресурсами в ядре операционной системы](#Управление-процессами-и-ресурсами-в-ядре-операционной-системы) + - [Виртуальные машины](#Виртуальные-машины) + - [Прерывания и исключения](#Прерывания-и-исключения) + - [Системные вызовы](#Системные-вызовы) + - [Системные вызовы RISC-V](#Системные-вызовы-risc-v) + - [Жизненный цикл процесса](#Жизненный-цикл-процесса) + - [Основные материалы лекции](#Основные-материалы-лекции) ## Виртуальная память diff --git a/Lectures/18. Synchronization. Cache coherence.md b/Lectures/18. Synchronization. Cache coherence.md index 8e559a6..b168b84 100644 --- a/Lectures/18. Synchronization. Cache coherence.md +++ b/Lectures/18. Synchronization. Cache coherence.md @@ -2,41 +2,41 @@ ## Содержание -- [Лекция 18. Синхронизация. Когерентность кеш](#лекция-18-синхронизация-когерентность-кеш) - - [Содержание](#содержание) - - [Параллелизм уровня потоков](#параллелизм-уровня-потоков) - - [Коммуникационные модели](#коммуникационные-модели) - - [Синхронизация (необходима при процессах, которые выполняются параллельно)](#синхронизация-необходима-при-процессах-которые-выполняются-параллельно) - - [Потокобезопасное программирование](#потокобезопасное-программирование) - - [Синхронная связь](#синхронная-связь) - - [Буфер FIFO(First input, first output)](#буфер-fifofirst-input-first-output) - - [Буфер FIFO с общей памятью](#буфер-fifo-с-общей-памятью) - - [Семафоры](#семафоры) - - [Семафоры для приоритета](#семафоры-для-приоритета) - - [Семафоры для распределения ресурсов](#семафоры-для-распределения-ресурсов) - - [Буфер FIFO с семафорами](#буфер-fifo-с-семафорами) - - [Одновременные транзакции](#одновременные-транзакции) - - [Семафоры для взаимных исключений](#семафоры-для-взаимных-исключений) - - [Проблемы атомарности](#проблемы-атомарности) - - [Мощность семафора](#мощность-семафора) - - [Реализация семафоров](#реализация-семафоров) - - [Синхронизация : обратная сторона](#синхронизация--обратная-сторона) - - [Обедающие философы](#обедающие-философы) - - [Решение](#решение) - - [Исправленный метод передачи на основе вышеописанного алгоритма с избежанием тупика](#исправленный-метод-передачи-на-основе-вышеописанного-алгоритма-с-избежанием-тупика) - - [Многоядерность](#многоядерность) - - [Когерентность кэш](#когерентность-кэш) - - [Поддержание когерентности](#поддержание-когерентности) - - [Реализация когерентности](#реализация-когерентности) +- [Лекция 18. Синхронизация. Когерентность кеш](#Лекция-18-Синхронизация-Когерентность-кеш) + - [Содержание](#Содержание) + - [Параллелизм уровня потоков](#Параллелизм-уровня-потоков) + - [Коммуникационные модели](#Коммуникационные-модели) + - [Синхронизация (необходима при процессах, которые выполняются параллельно)](#Синхронизация-необходима-при-процессах-которые-выполняются-параллельно) + - [Потокобезопасное программирование](#Потокобезопасное-программирование) + - [Синхронная связь](#Синхронная-связь) + - [Буфер FIFO(First input, first output)](#Буфер-fifofirst-input-first-output) + - [Буфер FIFO с общей памятью](#Буфер-fifo-с-общей-памятью) + - [Семафоры](#Семафоры) + - [Семафоры для приоритета](#Семафоры-для-приоритета) + - [Семафоры для распределения ресурсов](#Семафоры-для-распределения-ресурсов) + - [Буфер FIFO с семафорами](#Буфер-fifo-с-семафорами) + - [Одновременные транзакции](#Одновременные-транзакции) + - [Семафоры для взаимных исключений](#Семафоры-для-взаимных-исключений) + - [Проблемы атомарности](#Проблемы-атомарности) + - [Мощность семафора](#Мощность-семафора) + - [Реализация семафоров](#Реализация-семафоров) + - [Синхронизация : обратная сторона](#Синхронизация--обратная-сторона) + - [Обедающие философы](#Обедающие-философы) + - [Решение](#Решение) + - [Исправленный метод передачи на основе вышеописанного алгоритма с избежанием тупика](#Исправленный-метод-передачи-на-основе-вышеописанного-алгоритма-с-избежанием-тупика) + - [Многоядерность](#Многоядерность) + - [Когерентность кэш](#Когерентность-кэш) + - [Поддержание когерентности](#Поддержание-когерентности) + - [Реализация когерентности](#Реализация-когерентности) - [Snooping-Based Coherence](#snooping-based-coherence) - - [Протокол Valid/Invalid (**VI**)](#протокол-validinvalid-vi) + - [Протокол Valid/Invalid (**VI**)](#Протокол-validinvalid-vi) - [Modified/Shared/Invalid (MSI) протокол](#modifiedsharedinvalid-msi-протокол) - [MSI протокол FSM](#msi-протокол-fsm) - - [Оптимизация MSI: состояние E](#оптимизация-msi-состояние-e) + - [Оптимизация MSI: состояние E](#Оптимизация-msi-состояние-e) - [MESI: усовершенствованный](#mesi-усовершенствованный) - - [Когерентность кэш и ложное совместное использование](#когерентность-кэш-и-ложное-совместное-использование) - - [Основные материалы лекции](#основные-материалы-лекции) - - [Дополнительные материалы к лекции для саморазвития](#дополнительные-материалы-к-лекции-для-саморазвития) + - [Когерентность кэш и ложное совместное использование](#Когерентность-кэш-и-ложное-совместное-использование) + - [Основные материалы лекции](#Основные-материалы-лекции) + - [Дополнительные материалы к лекции для саморазвития](#Дополнительные-материалы-к-лекции-для-саморазвития) ## Параллелизм уровня потоков diff --git a/Lectures/19. Bus.md b/Lectures/19. Bus.md index d362249..6699b5d 100644 --- a/Lectures/19. Bus.md +++ b/Lectures/19. Bus.md @@ -1,23 +1,23 @@ # Лекция 19. Шины. -- [Лекция 19. Шины.](#лекция-19-шины) - - [Системы соединений](#системы-соединений) - - [Интерфейс](#интерфейс) - - [Шина](#шина) - - [Терминология](#терминология) - - [Обмен информации](#обмен-информации) - - [Типы шин](#типы-шин) - - [Иерархия шин](#иерархия-шин) - - [Арбитраж шин](#арбитраж-шин) - - [Алгоритмы арбитража](#алгоритмы-арбитража) - - [Схемы арбитража](#схемы-арбитража) - - [Протоколы шин](#протоколы-шин) - - [Повышение эффективности шин](#повышение-эффективности-шин) - - [Увеличение полосы пропускания](#увеличение-полосы-пропускания) - - [Стандартизация шин](#стандартизация-шин) - - [Последовательный синхронный обмен](#последовательный-синхронный-обмен) - - [Последовательный асинхронный обмен](#последовательный-асинхронный-обмен) - - [Основные материалы лекции](#основные-материалы-лекции) +- [Лекция 19. Шины.](#Лекция-19-Шины) + - [Системы соединений](#Системы-соединений) + - [Интерфейс](#Интерфейс) + - [Шина](#Шина) + - [Терминология](#Терминология) + - [Обмен информации](#Обмен-информации) + - [Типы шин](#Типы-шин) + - [Иерархия шин](#Иерархия-шин) + - [Арбитраж шин](#Арбитраж-шин) + - [Алгоритмы арбитража](#Алгоритмы-арбитража) + - [Схемы арбитража](#Схемы-арбитража) + - [Протоколы шин](#Протоколы-шин) + - [Повышение эффективности шин](#Повышение-эффективности-шин) + - [Увеличение полосы пропускания](#Увеличение-полосы-пропускания) + - [Стандартизация шин](#Стандартизация-шин) + - [Последовательный синхронный обмен](#Последовательный-синхронный-обмен) + - [Последовательный асинхронный обмен](#Последовательный-асинхронный-обмен) + - [Основные материалы лекции](#Основные-материалы-лекции) ## Системы соединений diff --git a/Lectures/20. Input-Output System.md b/Lectures/20. Input-Output System.md index daee9a8..0796f52 100644 --- a/Lectures/20. Input-Output System.md +++ b/Lectures/20. Input-Output System.md @@ -2,26 +2,26 @@ ## Содержание -- [Лекция 20. Ввод\\Вывод](#лекция-20-вводвывод) - - [Содержание](#содержание) - - [Системы ввода-вывода](#системы-ввода-вывода) - - [Система ввода-вывода подключена к центральному процессору с помощью отдельной шины](#система-ввода-вывода-подключена-к-центральному-процессору-с-помощью-отдельной-шины) - - [Система ввода-вывода имеет отдельную от памяти шину управления, но совместную шину адреса и данных](#система-ввода-вывода-имеет-отдельную-от-памяти-шину-управления-но-совместную-шину-адреса-и-данных) - - [Система ввода-вывода имеет единую шину с основной памятью](#система-ввода-вывода-имеет-единую-шину-с-основной-памятью) - - [Адресное пространство](#адресное-пространство) - - [Системы с выделенным адресным пространством](#системы-с-выделенным-адресным-пространством) - - [Системы с совмещенным (совместным) адресным пространством](#системы-с-совмещенным-совместным-адресным-пространством) - - [Структура периферийного устройства](#структура-периферийного-устройства) - - [Модули ввода-вывода](#модули-ввода-вывода) - - [Ввод-вывод с опросом](#ввод-вывод-с-опросом) - - [Ввод-вывод с прерываниями](#ввод-вывод-с-прерываниями) - - [Прямой доступ к памяти (ПДП или Direct Memory Access — DMA)](#прямой-доступ-к-памяти-пдп-или-direct-memory-access--dma) - - [Конфигурации ПДП(DMA)](#конфигурации-пдпdma) - - [Канальная система ввода-вывода](#канальная-система-ввода-вывода) +- [Лекция 20. Ввод\\Вывод](#Лекция-20-ВводВывод) + - [Содержание](#Содержание) + - [Системы ввода-вывода](#Системы-ввода-вывода) + - [Система ввода-вывода подключена к центральному процессору с помощью отдельной шины](#Система-ввода-вывода-подключена-к-центральному-процессору-с-помощью-отдельной-шины) + - [Система ввода-вывода имеет отдельную от памяти шину управления, но совместную шину адреса и данных](#Система-ввода-вывода-имеет-отдельную-от-памяти-шину-управления-но-совместную-шину-адреса-и-данных) + - [Система ввода-вывода имеет единую шину с основной памятью](#Система-ввода-вывода-имеет-единую-шину-с-основной-памятью) + - [Адресное пространство](#Адресное-пространство) + - [Системы с выделенным адресным пространством](#Системы-с-выделенным-адресным-пространством) + - [Системы с совмещенным (совместным) адресным пространством](#Системы-с-совмещенным-совместным-адресным-пространством) + - [Структура периферийного устройства](#Структура-периферийного-устройства) + - [Модули ввода-вывода](#Модули-ввода-вывода) + - [Ввод-вывод с опросом](#Ввод-вывод-с-опросом) + - [Ввод-вывод с прерываниями](#Ввод-вывод-с-прерываниями) + - [Прямой доступ к памяти (ПДП или Direct Memory Access — DMA)](#Прямой-доступ-к-памяти-ПДП-или-direct-memory-access--dma) + - [Конфигурации ПДП(DMA)](#Конфигурации-ПДПdma) + - [Канальная система ввода-вывода](#Канальная-система-ввода-вывода) - [RAID](#raid) - [JTAG (Join Test Action Group)](#jtag-join-test-action-group) - - [Основные материалы лекции](#основные-материалы-лекции) - - [Дополнительные материалы к лекции](#дополнительные-материалы-к-лекции) + - [Основные материалы лекции](#Основные-материалы-лекции) + - [Дополнительные материалы к лекции](#Дополнительные-материалы-к-лекции) ## Системы ввода-вывода diff --git a/Lectures/21. Microcontrollers.md b/Lectures/21. Microcontrollers.md index ba04d9b..cb2bb75 100644 --- a/Lectures/21. Microcontrollers.md +++ b/Lectures/21. Microcontrollers.md @@ -2,14 +2,14 @@ ## Содержание -- [Лекция 21. Микроконтроллеры](#лекция-21-микроконтроллеры) - - [Содержание](#содержание) - - [Микроконтроллеры на примере PIC](#микроконтроллеры-на-примере-pic) +- [Лекция 21. Микроконтроллеры](#Лекция-21-Микроконтроллеры) + - [Содержание](#Содержание) + - [Микроконтроллеры на примере PIC](#Микроконтроллеры-на-примере-pic) - [PIC16F18313](#pic16f18313) - - [Микроконтроллеры на примере ARM](#микроконтроллеры-на-примере-arm) - - [Программа для микроконтроллера stm32f10x на языке C](#программа-для-микроконтроллера-stm32f10x-на-языке-c) - - [Основные материалы лекции](#основные-материалы-лекции) - - [Дополнительные материалы к лекции](#дополнительные-материалы-к-лекции) + - [Микроконтроллеры на примере ARM](#Микроконтроллеры-на-примере-arm) + - [Программа для микроконтроллера stm32f10x на языке C](#Программа-для-микроконтроллера-stm32f10x-на-языке-c) + - [Основные материалы лекции](#Основные-материалы-лекции) + - [Дополнительные материалы к лекции](#Дополнительные-материалы-к-лекции) > *Микроконтроллер* — это устройство, которое объединяет в себе процессор и ряд периферийных устройств и занимается управлением. diff --git a/Lectures/22. General purpose systems.md b/Lectures/22. General purpose systems.md index 4a6b674..13bbf46 100644 --- a/Lectures/22. General purpose systems.md +++ b/Lectures/22. General purpose systems.md @@ -2,18 +2,18 @@ ## Содержание -- [Лекция 22. Системы общего назначения](#лекция-22-системы-общего-назначения) - - [Содержание](#содержание) - - [Микропроцессоры](#микропроцессоры) - - [История x86](#история-x86) - - [Тик-так](#тик-так) +- [Лекция 22. Системы общего назначения](#Лекция-22-Системы-общего-назначения) + - [Содержание](#Содержание) + - [Микропроцессоры](#Микропроцессоры) + - [История x86](#История-x86) + - [Тик-так](#Тик-так) - [Coffee lake](#coffee-lake) - [Front-end](#front-end) - [Execution Engine](#execution-engine) - [Gen9.5](#gen95) - [AMD Zen](#amd-zen) - - [Из чего состоит компьютер?](#из-чего-состоит-компьютер) - - [Основные материалы лекции](#основные-материалы-лекции) + - [Из чего состоит компьютер?](#Из-чего-состоит-компьютер) + - [Основные материалы лекции](#Основные-материалы-лекции) ## Микропроцессоры diff --git a/Lectures/23. Parallel computing systems.md b/Lectures/23. Parallel computing systems.md index d79e4be..b242b04 100644 --- a/Lectures/23. Parallel computing systems.md +++ b/Lectures/23. Parallel computing systems.md @@ -2,22 +2,22 @@ ## Содержание -- [Лекция 23. Параллельные вычислительные системы](#лекция-23-параллельные-вычислительные-системы) - - [Содержание](#содержание) - - [Классификация](#классификация) - - [По области применения](#по-области-применения) - - [По особенностям назначения](#по-особенностям-назначения) - - [Классификация Флинна](#классификация-флинна) - - [Альтернативная классификация](#альтернативная-классификация) - - [Классификация по памяти](#классификация-по-памяти) - - [Обобщенная структура параллельно вычислительной системы](#обобщенная-структура-параллельно-вычислительной-системы) - - [Матричные вычислительные системы](#матричные-вычислительные-системы) - - [Кластерные вычислительные системы (ВС)](#кластерные-вычислительные-системы-вс) - - [Топология малых кластеров](#топология-малых-кластеров) - - [Реконфигурируемые вычислительные системы](#реконфигурируемые-вычислительные-системы) - - [Систолические вычислительные системы](#систолические-вычислительные-системы) - - [Системы, управляемые потоками данных](#системы-управляемые-потоками-данных) - - [Основные материалы лекции](#основные-материалы-лекции) +- [Лекция 23. Параллельные вычислительные системы](#Лекция-23-Параллельные-вычислительные-системы) + - [Содержание](#Содержание) + - [Классификация](#Классификация) + - [По области применения](#По-области-применения) + - [По особенностям назначения](#По-особенностям-назначения) + - [Классификация Флинна](#Классификация-Флинна) + - [Альтернативная классификация](#Альтернативная-классификация) + - [Классификация по памяти](#Классификация-по-памяти) + - [Обобщенная структура параллельно вычислительной системы](#Обобщенная-структура-параллельно-вычислительной-системы) + - [Матричные вычислительные системы](#Матричные-вычислительные-системы) + - [Кластерные вычислительные системы (ВС)](#Кластерные-вычислительные-системы-ВС) + - [Топология малых кластеров](#Топология-малых-кластеров) + - [Реконфигурируемые вычислительные системы](#Реконфигурируемые-вычислительные-системы) + - [Систолические вычислительные системы](#Систолические-вычислительные-системы) + - [Системы, управляемые потоками данных](#Системы-управляемые-потоками-данных) + - [Основные материалы лекции](#Основные-материалы-лекции) **Параллельные вычислительные системы (ПВС)** нужны для повышения производительности, чтобы выполнять вычисления как можно быстрее за счёт того, что каждое ядро решает свои задачи. Однако параллелизм бывает разный, об этом и рассказывается в рамках этой лекции. diff --git a/Other/Educators.md b/Other/Educators.md index 8ad51ab..9fe35e1 100644 --- a/Other/Educators.md +++ b/Other/Educators.md @@ -4,21 +4,21 @@ | Группа | Расписание лаб | Лектор | Преподаватель | |------------|-------------------------------|---------------------------------------------|---------------------------------------------| -| **ИБ-31** |Пн. 14:00–16:50 — Числитель-I |[Силантьев](#силантьев-александр-михайлович) |[Силантьев](#силантьев-александр-михайлович) | -| **ИВТ-31** |Вт. 14:00-16:50 — Знаменатель |[Орлов](#орлов-александр-николаевич) |[Солодовников](#солодовников-андрей-павлович)| -| **ИВТ-32** | |[Орлов](#орлов-александр-николаевич) | | -| **ИВТ-33** |Чт. 12:30-15:20 — Числитель |[Орлов](#орлов-александр-николаевич) |[Орлов](#орлов-александр-николаевич)| -| **ИКТ-31** |Чт. 15:30-18:20 — Знаменатель-I|[Силантьев](#силантьев-александр-михайлович) |[Примаков](#примаков-евгений-владимирович) | -| **ИКТ-32** |Вт. 15:30-18:20 — Знаменатель-I|[Силантьев](#силантьев-александр-михайлович) |[Примаков](#примаков-евгений-владимирович) | -| **ИКТ-33** | |[Силантьев](#силантьев-александр-михайлович) | | -| **КТ-31** |Пн. 09:00–11:50 — Знаменатель |[Силантьев](#силантьев-александр-михайлович) |[Солодовников](#солодовников-андрей-павлович)| -| **ПИН-35** |Пн. 14:30-17:40 — Знаменатель |[Орлов](#орлов-александр-николаевич) |[Солодовников](#солодовников-андрей-павлович)| -| **ПИН-36** |Пн. 14:30-17:40 — Знаменатель |[Орлов](#орлов-александр-николаевич) |[Солодовников](#солодовников-андрей-павлович)| -| **ПМ-31** |Пн. 15:30–18:20 — Знаменатель |[Орлов](#орлов-александр-николаевич) |[Силантьев](#силантьев-александр-михайлович) | -| **ПМ-32** |Пн. 12:00–15:20 — Числитель-II |[Орлов](#орлов-александр-николаевич) |[Силантьев](#силантьев-александр-михайлович) | -| **ПМ-32** |Пт. 15:30–18:20 — Знаменатель-I|[Орлов](#орлов-александр-николаевич) |[Силантьев](#силантьев-александр-михайлович) | -| **РТ-31** |Ср.12:00–15:20 — Знаменатель |[Силантьев](#силантьев-александр-михайлович) |[Чусов](#чусов-сергей-андреевич) | -| **РТ-32** |Вт. 14:00–16:50 — Числитель |[Силантьев](#силантьев-александр-михайлович) |[Чусов](#чусов-сергей-андреевич) | +| **ИБ-31** |Пн. 14:00–16:50 — Числитель-I |[Силантьев](#Силантьев-Александр-Михайлович) |[Силантьев](#Силантьев-Александр-Михайлович) | +| **ИВТ-31** |Вт. 14:00-16:50 — Знаменатель |[Орлов](#Орлов-Александр-Николаевич) |[Солодовников](#Солодовников-Андрей-Павлович)| +| **ИВТ-32** | |[Орлов](#Орлов-Александр-Николаевич) | | +| **ИВТ-33** |Чт. 12:30-15:20 — Числитель |[Орлов](#Орлов-Александр-Николаевич) |[Орлов](#Орлов-Александр-Николаевич)| +| **ИКТ-31** |Чт. 15:30-18:20 — Знаменатель-I|[Силантьев](#Силантьев-Александр-Михайлович) |[Примаков](#Примаков-Евгений-Владимирович) | +| **ИКТ-32** |Вт. 15:30-18:20 — Знаменатель-I|[Силантьев](#Силантьев-Александр-Михайлович) |[Примаков](#Примаков-Евгений-Владимирович) | +| **ИКТ-33** | |[Силантьев](#Силантьев-Александр-Михайлович) | | +| **КТ-31** |Пн. 09:00–11:50 — Знаменатель |[Силантьев](#Силантьев-Александр-Михайлович) |[Солодовников](#Солодовников-Андрей-Павлович)| +| **ПИН-35** |Пн. 14:30-17:40 — Знаменатель |[Орлов](#Орлов-Александр-Николаевич) |[Солодовников](#Солодовников-Андрей-Павлович)| +| **ПИН-36** |Пн. 14:30-17:40 — Знаменатель |[Орлов](#Орлов-Александр-Николаевич) |[Солодовников](#Солодовников-Андрей-Павлович)| +| **ПМ-31** |Пн. 15:30–18:20 — Знаменатель |[Орлов](#Орлов-Александр-Николаевич) |[Силантьев](#Силантьев-Александр-Михайлович) | +| **ПМ-32** |Пн. 12:00–15:20 — Числитель-II |[Орлов](#Орлов-Александр-Николаевич) |[Силантьев](#Силантьев-Александр-Михайлович) | +| **ПМ-32** |Пт. 15:30–18:20 — Знаменатель-I|[Орлов](#Орлов-Александр-Николаевич) |[Силантьев](#Силантьев-Александр-Михайлович) | +| **РТ-31** |Ср.12:00–15:20 — Знаменатель |[Силантьев](#Силантьев-Александр-Михайлович) |[Чусов](#Чусов-Сергей-Андреевич) | +| **РТ-32** |Вт. 14:00–16:50 — Числитель |[Силантьев](#Силантьев-Александр-Михайлович) |[Чусов](#Чусов-Сергей-Андреевич) | ## Преподаватели @@ -150,4 +150,4 @@ ***telegram***: [`@barkove`](http://t.me/barkove) ---- --> \ No newline at end of file +--- --> diff --git a/Other/FAQ.md b/Other/FAQ.md index 3295ad1..c9208a6 100644 --- a/Other/FAQ.md +++ b/Other/FAQ.md @@ -2,15 +2,15 @@ ## Содержание -- [Список типичных ошибок при работе с Vivado и SystemVerilog](#список-типичных-ошибок-при-работе-с-vivado-и-systemverilog) - - [Содержание](#содержание) - - [Ошибки связанные с САПР Vivado](#ошибки-связанные-с-сапр-vivado) - - [Не запускается симуляция FATAL\_ERROR PrivateChannel Error creating client socket](#не-запускается-симуляция-fatal_error-privatechannel-error-creating-client-socket) - - [Не запускается симуляция boost filesystem remove Процесс не может получить доступ к файлу](#не-запускается-симуляция-boost-filesystem-remove-процесс-не-может-получить-доступ-к-файлу) - - [Вылетает Vivado при попытке открыть схему](#вылетает-vivado-при-попытке-открыть-схему) - - [Не устанавливается Vivado Unable to open archive](#не-устанавливается-vivado-unable-to-open-archive) - - [Ошибки синтаксиса языка SystemVerilog](#ошибки-синтаксиса-языка-systemverilog) - - [имя сигнала is not a type](#имя-сигнала-is-not-a-type) +- [Список типичных ошибок при работе с Vivado и SystemVerilog](#Список-типичных-ошибок-при-работе-с-vivado-и-systemverilog) + - [Содержание](#Содержание) + - [Ошибки связанные с САПР Vivado](#Ошибки-связанные-с-сапр-vivado) + - [Не запускается симуляция FATAL\_ERROR PrivateChannel Error creating client socket](#Не-запускается-симуляция-fatal_error-privatechannel-error-creating-client-socket) + - [Не запускается симуляция boost filesystem remove Процесс не может получить доступ к файлу](#Не-запускается-симуляция-boost-filesystem-remove-процесс-не-может-получить-доступ-к-файлу) + - [Вылетает Vivado при попытке открыть схему](#Вылетает-vivado-при-попытке-открыть-схему) + - [Не устанавливается Vivado Unable to open archive](#Не-устанавливается-vivado-unable-to-open-archive) + - [Ошибки синтаксиса языка SystemVerilog](#Ошибки-синтаксиса-языка-systemverilog) + - [имя сигнала is not a type](#Имя-сигнала-is-not-a-type) - [cannot find port on this module](#cannot-find-port-on-this-module) diff --git a/Other/Further readings.md b/Other/Further readings.md index bb4b2fb..d8c021c 100644 --- a/Other/Further readings.md +++ b/Other/Further readings.md @@ -2,18 +2,18 @@ В приведенном ниже списке будут даны описания книг, а также способы их получения: покупка/чтение в электронной библиотеке/получение экземпляра книги в университетской библиотеке. . -- [Список дополнительной литературы](#список-дополнительной-литературы) - - [Митио Сибуя и Такаси Тонаги: Центральный процессор. Образовательная манга](#митио-сибуя-и-такаси-тонаги-центральный-процессор-образовательная-манга) - - [Чарльз Петцольд: Код. Тайный язык информатики](#чарльз-петцольд-код-тайный-язык-информатики) - - [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера: RISC-V](#дэвид-м-харрис-и-сара-л-харрис-цифровая-схемотехника-и-архитектура-компьютера-risc-v) - - [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM\*](#дэвид-м-харрис-и-сара-л-харрис-цифровая-схемотехника-и-архитектура-компьютера-дополнение-по-архитектуре-arm) - - [под редакцией Романова А.Ю. и Панчула Ю.В.: Цифровой синтез: практический курс](#под-редакцией-романова-аю-и-панчула-юв-цифровой-синтез-практический-курс) - - [Д. Паттерсон и Дж. Хеннесси: Архитектура компьютера и проектирование компьютерных систем](#д-паттерсон-и-дж-хеннесси-архитектура-компьютера-и-проектирование-компьютерных-систем) - - [Д. Паттерсон и Дж. Хеннесси Архитектура компьютера. Количественный подход](#д-паттерсон-и-дж-хеннесси-архитектура-компьютера-количественный-подход) - - [С.А. Орлов и Б.Я. Цилькер: Организация ЭВМ и систем](#са-орлов-и-бя-цилькер-организация-эвм-и-систем) - - [Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И.Кононова: Микропроцессорные средства и системы. Курс лекций](#дн-беклемишев-ан-орлов-ал-переверзев-мг-попов-ав-горячев-аикононова-микропроцессорные-средства-и-системы-курс-лекций) - - [Э. Таненбаум и Т. Остин: Архитектура компьютера](#э-таненбаум-и-т-остин-архитектура-компьютера) - - [Дональд Томас: Логическое проектирование и верификация систем на SystemVerilog](#дональд-томас-логическое-проектирование-и-верификация-систем-на-systemverilog) +- [Список дополнительной литературы](#Список-дополнительной-литературы) + - [Митио Сибуя и Такаси Тонаги: Центральный процессор. Образовательная манга](#Митио-Сибуя-и-Такаси-Тонаги-Центральный-процессор-Образовательная-манга) + - [Чарльз Петцольд: Код. Тайный язык информатики](#Чарльз-Петцольд-Код-Тайный-язык-информатики) + - [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера: RISC-V](#Дэвид-М-Харрис-и-Сара-Л-Харрис-Цифровая-схемотехника-и-архитектура-компьютера-risc-v) + - [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM\*](#Дэвид-М-Харрис-и-Сара-Л-Харрис-Цифровая-схемотехника-и-архитектура-компьютера-Дополнение-по-архитектуре-arm) + - [под редакцией Романова А.Ю. и Панчула Ю.В.: Цифровой синтез: практический курс](#под-редакцией-Романова-АЮ-и-Панчула-ЮВ-Цифровой-синтез-практический-курс) + - [Д. Паттерсон и Дж. Хеннесси: Архитектура компьютера и проектирование компьютерных систем](#Д-Паттерсон-и-Дж-Хеннесси-Архитектура-компьютера-и-проектирование-компьютерных-систем) + - [Д. Паттерсон и Дж. Хеннесси Архитектура компьютера. Количественный подход](#Д-Паттерсон-и-Дж-Хеннесси-Архитектура-компьютера-Количественный-подход) + - [С.А. Орлов и Б.Я. Цилькер: Организация ЭВМ и систем](#СА-Орлов-и-БЯ-Цилькер-Организация-ЭВМ-и-систем) + - [Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И. Кононова: Микропроцессорные средства и системы. Курс лекций](#ДН-Беклемишев-АН-Орлов-АЛ-Переверзев-МГ-Попов-АВ-Горячев-АИ-Кононова-Микропроцессорные-средства-и-системы-Курс-лекций) + - [Э. Таненбаум и Т. Остин: Архитектура компьютера](#Э-Таненбаум-и-Т-Остин-Архитектура-компьютера) + - [Дональд Томас: Логическое проектирование и верификация систем на SystemVerilog](#Дональд-Томас-Логическое-проектирование-и-верификация-систем-на-systemverilog) ## Митио Сибуя и Такаси Тонаги: Центральный процессор. Образовательная манга @@ -63,7 +63,7 @@ ![../.pic/Other/Further%20readings/orlov.jpg](../.pic/Other/Further%20readings/orlov.jpg) -## Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И.Кононова: Микропроцессорные средства и системы. Курс лекций +## Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И. Кононова: Микропроцессорные средства и системы. Курс лекций Курс лекций, читавшийся несколько лет назад. На данный момент книга является актуальной, но дисциплина организована несколько иначе. Из достоинств можно выделить хорошую организацию написанного материала, представленного в виде одинаковых порций разбитых на тематические лекции. Книга доступна в облаке и в университетской библиотеке. Отдельно стоит отметить, что часть читаемого на лекциях материала представлена только в этом издании. diff --git a/Other/Students server.md b/Other/Students server.md index be6a0ca..dcf0f6a 100644 --- a/Other/Students server.md +++ b/Other/Students server.md @@ -1,6 +1,6 @@ # Учебный сервер для студентов -Данный сервер поднят для выполнения студентами их [индивидуального задания](../Labs/04.%20Primitive%20programmable%20device#индивидуальные-задания), а также для тех студентов, кому не хватило места в учебной аудитории. На сервере установлены: `Vivado`, `VSCode`, `gcc`, `git`. Поскольку сервер имеет ограниченные ресурсы, а студенты не имеют привычки закрывать за собой программы при завершении сессии, тут не установлен браузер. Имейте в виду, что если вы закрыли сессию, не закрыв Vivado и там остались несохраненные файлы, то вы рискуете потерять свои изменения. +Данный сервер поднят для выполнения студентами их [индивидуального задания](../Labs/04.%20Primitive%20programmable%20device/Индивидуальное%20задание/), а также для тех студентов, кому не хватило места в учебной аудитории. На сервере установлены: `Vivado`, `VSCode`, `gcc`, `git`. Поскольку сервер имеет ограниченные ресурсы, а студенты не имеют привычки закрывать за собой программы при завершении сессии, тут не установлен браузер. Имейте в виду, что если вы закрыли сессию, не закрыв Vivado и там остались несохраненные файлы, то вы рискуете потерять свои изменения. ## Правила работы на сервере Есть некоторые правила, которых необходимо придерживаться: diff --git a/Other/VSCode Verilog Simulation.md b/Other/VSCode Verilog Simulation.md index f78cc39..77d1bdb 100644 --- a/Other/VSCode Verilog Simulation.md +++ b/Other/VSCode Verilog Simulation.md @@ -69,7 +69,7 @@ end ### Что делать, если мне нужно отобразить больше, чем 8 сигналов? -В этом случае, необходимо воспользоваться внешней программой по отображению временных диаграмм: `GTK Wave`. Она должна была быть установлена вами на этапе установке `Icarus Verilog` (см. [Установка ПО](#установка-по)). +В этом случае, необходимо воспользоваться внешней программой по отображению временных диаграмм: `GTK Wave`. Она должна была быть установлена вами на этапе установке `Icarus Verilog` (см. [Установка ПО](#Установка-ПО)). В теории, после завершения симуляции, расширение `Verilog Testbench Runner` должно предлагать запустить GTK Wave. Если этого не происходит, выполните команду в терминале VSCode: @@ -78,5 +78,5 @@ end gtkwave build/tb.vcd ``` -где `tb.vcd` имя временной диаграммы, которое вы указали в блоке `initial` (см. [Изменение Verilog-файлов](#изменение-verilog-файлов)). +где `tb.vcd` имя временной диаграммы, которое вы указали в блоке `initial` (см. [Изменение Verilog-файлов](#Изменение-verilog-файлов)). Откроется окно GTK Wave. Внутри этого окна, слева, есть вкладка `SST`, где будет расположен модуль вашего тестбенча. Нажав на кнопку `+` слева от имени модуля вы увидите объект `DUT` (имя сущности тестируемого модуля). Если нажать по этому объекту `ПКМ -> Recurse Import -> Append`, вы добавите все внутренние сигналы этого модуля в область просмотра временной диаграммы. diff --git a/Other/rv32i.md b/Other/rv32i.md index 81351cf..9a14702 100644 --- a/Other/rv32i.md +++ b/Other/rv32i.md @@ -2,10 +2,10 @@ Разделы статьи: -- [Краткая справка по RISC-V и RV32I](#краткая-справка-по-risc-v-и-rv32i) +- [Краткая справка по RISC-V и RV32I](#Краткая-справка-по-risc-v-и-rv32i) - [RV32I](#rv32i) -- [Псевдоинструкции](#псевдоинструкции) -- [Основные типы команд](#основные-типы-команд) +- [Псевдоинструкции](#Псевдоинструкции) +- [Основные типы команд](#Основные-типы-команд) > Большая часть данного документа в той или иной степени является переводом спецификации RISC-V[[1]](https://github.com/riscv/riscv-isa-manual/releases/download/20240411/unpriv-isa-asciidoc.pdf), распространяемой по лицензии [CC-BY-4.0 ](https://creativecommons.org/licenses/by/4.0/). diff --git a/README.md b/README.md index b659090..06102c8 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ ![.pic/README/gus_gr.svg](.pic/README/gus_gr.svg) -- [Путеводитель АПС](#путеводитель-апс) - - [Как работать с репозиторием](#как-работать-с-репозиторием) - - [Мотивация](#мотивация) - - [Место АПС в Computer Science](#место-апс-в-computer-science) - - [Как пользоваться репозиторием](#как-пользоваться-репозиторием) - - [История курса и разработчики](#история-курса-и-разработчики) +- [Путеводитель АПС](#Путеводитель-АПС) + - [Как работать с репозиторием](#Как-работать-с-репозиторием) + - [Мотивация](#Мотивация) + - [Место АПС в Computer Science](#Место-АПС-в-computer-science) + - [Как пользоваться репозиторием](#Как-пользоваться-репозиторием) + - [История курса и разработчики](#История-курса-и-разработчики) - [![Печатный экземпляр](https://img.shields.io/badge/📘-Печатный_экземпляр-blue)](https://ozon.ru/t/63aAzUd) Привет, студент! diff --git a/Vivado Basics/05. Bug hunting.md b/Vivado Basics/05. Bug hunting.md index 74241dc..9e94bae 100644 --- a/Vivado Basics/05. Bug hunting.md +++ b/Vivado Basics/05. Bug hunting.md @@ -13,19 +13,19 @@ > [!IMPORTANT] > Обратите внимание на то, как ставится ударение в словосочетании "временна́я диаграмма" (не "вре́менная"). В обиходе это словосочетание заменяется словом "времянка". -- [Руководство по поиску функциональных ошибок](#руководство-по-поиску-функциональных-ошибок) - - [Цель](#цель) - - [Алгоритм поиска ошибок](#алгоритм-поиска-ошибок) - - [Работа с логом при появлении ошибок](#работа-с-логом-при-появлении-ошибок) - - [Поиск ошибки на временной диаграмме](#поиск-ошибки-на-временной-диаграмме) - - [Открытие файла исходного кода проблемного сигнала](#открытие-файла-исходного-кода-проблемного-сигнала) - - [Добавление сигналов объектов на временную диаграмму](#добавление-сигналов-объектов-на-временную-диаграмму) - - [Сброс симуляции и ее повтор, установка времени моделирования](#сброс-симуляции-и-ее-повтор-установка-времени-моделирования) - - [Исправление сигналов с Z-состоянием](#исправление-сигналов-с-z-состоянием) - - [Поиск ошибки в сигналах, формирующих проблемный сигнал](#поиск-ошибки-в-сигналах-формирующих-проблемный-сигнал) - - [Исправление логики проблемного сигнала](#исправление-логики-проблемного-сигнала) - - [Проблема необъявленных сигналов](#проблема-необъявленных-сигналов) - - [Самостоятельная работа](#самостоятельная-работа) +- [Руководство по поиску функциональных ошибок](#Руководство-по-поиску-функциональных-ошибок) + - [Цель](#Цель) + - [Алгоритм поиска ошибок](#Алгоритм-поиска-ошибок) + - [Работа с логом при появлении ошибок](#Работа-с-логом-при-появлении-ошибок) + - [Поиск ошибки на временной диаграмме](#Поиск-ошибки-на-временной-диаграмме) + - [Открытие файла исходного кода проблемного сигнала](#Открытие-файла-исходного-кода-проблемного-сигнала) + - [Добавление сигналов объектов на временную диаграмму](#Добавление-сигналов-объектов-на-временную-диаграмму) + - [Сброс симуляции и ее повтор, установка времени моделирования](#Сброс-симуляции-и-ее-повтор-установка-времени-моделирования) + - [Исправление сигналов с Z-состоянием](#Исправление-сигналов-с-z-состоянием) + - [Поиск ошибки в сигналах, формирующих проблемный сигнал](#Поиск-ошибки-в-сигналах-формирующих-проблемный-сигнал) + - [Исправление логики проблемного сигнала](#Исправление-логики-проблемного-сигнала) + - [Проблема необъявленных сигналов](#Проблема-необъявленных-сигналов) + - [Самостоятельная работа](#Самостоятельная-работа) ## Алгоритм поиска ошибок