mirror of
https://github.com/MPSU/APS.git
synced 2025-11-20 06:50:41 +00:00
Изменение регистра в ссылках на заголовки (#151)
По умолчанию, якоря на параграфы страницы генерируются в VSCode в нижнем регистре. Гиперссылки работают нормально при просмотре страниц непосредственно в репозитории github, но при просмотре в электронной книге mdbook, эти гиперссылки не открываются. Для того чтобы они работали, необходимо чтобы регистр якорей ссылки совпадал с регистром параграфов страницы. --------- Co-authored-by: Andrei Solodovnikov <voultboy@yandex.ru>
This commit is contained in:
@@ -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`).
|
||||
|
||||
##
|
||||
##
|
||||
|
||||
@@ -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/#Светодиоды)"):
|
||||
|
||||
## Спецификация контроллера
|
||||
|
||||
|
||||
@@ -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` необходимо использовать оператор блокирующего присваивания (`=`).
|
||||
|
||||
@@ -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`.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -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 году.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -190,13 +190,13 @@ _Рисунок 5. Схема 4-битного сумматора._
|
||||
|
||||
Как же реализовать модуль, состоящий из цепочки других модулей? Половину этой задачи мы уже сделали, когда писали тестбенч к 1-битному полусумматору в _Листинге 2_ — мы создавали модуль внутри другого модуля и подключали к нему провода. Теперь надо сделать то же самое, только с чуть большим числом модулей.
|
||||
|
||||
Описание 4-битного сумматора, сводится к описанию межсоединения четырёх экземпляров 1-битного сумматора. Подробней о том, как описывать создание экземпляров модулей рассказано в главе [Описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md#иерархия-модулей), который вы изучали перед лабораторной работой.
|
||||
Описание 4-битного сумматора, сводится к описанию межсоединения четырёх экземпляров 1-битного сумматора. Подробней о том, как описывать создание экземпляров модулей рассказано в главе [Описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md#Иерархия-модулей), который вы изучали перед лабораторной работой.
|
||||
|
||||

|
||||
|
||||
_Рисунок 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) причину этого поведения, и устранить её.
|
||||
|
||||
@@ -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) работоспособность вашей цифровой схемы в ПЛИС.
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
## Ход работы
|
||||
|
||||
1. Изучить способы организации памяти (раздел [#теория про память](#теория-про-память)).
|
||||
2. Изучить конструкции SystemVerilog для реализации запоминающих элементов (раздел [#инструменты](#инструменты-для-реализации-памяти)).
|
||||
1. Изучить способы организации памяти (раздел [#теория про память](#Теория-про-память)).
|
||||
2. Изучить конструкции SystemVerilog для реализации запоминающих элементов (раздел [#инструменты](#Инструменты-для-реализации-памяти)).
|
||||
3. Реализовать модули памяти инструкции и регистрового файла.
|
||||
4. Проверить с помощью верификационного окружения корректность их работы.
|
||||
5. Проверить работу регистрового файла в ПЛИС.
|
||||
|
||||
@@ -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`.
|
||||
|
||||
|
||||
@@ -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). Описание ее работы можно прочитать в разделе [#финальный обзор](../#Финальный-обзор).
|
||||
|
||||
@@ -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` (в назначение этого регистра входит возврат результата функции) в конце выполнения программы.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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-Память-инструкций)).
|
||||
|
||||
Отличие от памяти инструкций будет заключаться в:
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
## Ход работы
|
||||
|
||||
1. Изучить микроархитектурную реализацию однотактного процессора RISC-V (без поддержки команд загрузки/сохранения байт/полуслов)
|
||||
2. Реализовать тракт данных с подключенным к нему устройством управления([#задание](#задание))
|
||||
2. Реализовать тракт данных с подключенным к нему устройством управления([#задание](#Задание))
|
||||
3. Подготовить программу по индивидуальному заданию и загрузить ее в память инструкций
|
||||
4. Сравнить результат работы процессора на модели в **Vivado** и в симуляторе программы ассемблера
|
||||
|
||||
|
||||
@@ -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). Описание ее работы можно прочитать в разделе [#задание](../#Задание).
|
||||
|
||||
@@ -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. Данная лабораторная работа не предполагает проверки в ПЛИС.
|
||||
|
||||
@@ -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_.
|
||||
|
||||
@@ -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` как это было сделано для памяти инструкций.
|
||||
|
||||
@@ -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 раз с момента сброса, что может оказаться не очень удобным при отладке программ. Подумайте, как можно модифицировать конечный автомат программатора таким образом, чтобы получить возможность в неограниченном количестве инициализаций памяти без повторного сброса всей системы.
|
||||
|
||||
|
||||
@@ -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`, либо же с помощью программатора. Однако имейте в виду, что инициализация памятей с помощью программатора будет достаточно долго моделироваться в виду большого объема программы.
|
||||
|
||||
@@ -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-Оценка-производительности)
|
||||
|
||||
## Полезное
|
||||
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Лекция 12. Методы повышения производительности](#лекция-12-методы-повышения-производительности)
|
||||
- [Содержание](#содержание)
|
||||
- [Суперскалярный процессор](#суперскалярный-процессор)
|
||||
- [Внеочередное выполнение команд](#внеочередное-выполнение-команд)
|
||||
- [Переименование регистров](#переименование-регистров)
|
||||
- [Переупорядочивание команд](#переупорядочивание-команд)
|
||||
- [Централизованное окно команд](#централизованное-окно-команд)
|
||||
- [Распределенное окно команд (алгоритм Томасуло)](#распределенное-окно-команд-алгоритм-томасуло)
|
||||
- [Восстановление последовательности](#восстановление-последовательности)
|
||||
- [Параллелизм](#параллелизм)
|
||||
- [Многопоточность](#многопоточность)
|
||||
- [Пакованная арифметика](#пакованная-арифметика)
|
||||
- [Классификация Флинна](#классификация-флинна)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Лекция 12. Методы повышения производительности](#Лекция-12-Методы-повышения-производительности)
|
||||
- [Содержание](#Содержание)
|
||||
- [Суперскалярный процессор](#Суперскалярный-процессор)
|
||||
- [Внеочередное выполнение команд](#Внеочередное-выполнение-команд)
|
||||
- [Переименование регистров](#Переименование-регистров)
|
||||
- [Переупорядочивание команд](#Переупорядочивание-команд)
|
||||
- [Централизованное окно команд](#Централизованное-окно-команд)
|
||||
- [Распределенное окно команд (алгоритм Томасуло)](#Распределенное-окно-команд-алгоритм-Томасуло)
|
||||
- [Восстановление последовательности](#Восстановление-последовательности)
|
||||
- [Параллелизм](#Параллелизм)
|
||||
- [Многопоточность](#Многопоточность)
|
||||
- [Пакованная арифметика](#Пакованная-арифметика)
|
||||
- [Классификация Флинна](#Классификация-Флинна)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
|
||||
В последних лекциях разрабатывалось три микроархитектуры:
|
||||
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Лекция 13. Виды и классификация архитектур](#лекция-13-виды-и-классификация-архитектур)
|
||||
- [Содержание](#содержание)
|
||||
- [Архитектура](#архитектура)
|
||||
- [Классификация архитектур](#классификация-архитектур)
|
||||
- [Классификация архитектур по способу хранения операндов](#классификация-архитектур-по-способу-хранения-операндов)
|
||||
- [Классификация архитектур по составу и сложности команд](#классификация-архитектур-по-составу-и-сложности-команд)
|
||||
- [Классификация архитектур по способу реализации условных переходов](#классификация-архитектур-по-способу-реализации-условных-переходов)
|
||||
- [Классификация инструкций](#классификация-инструкций)
|
||||
- [Классификация инструкций по функциональному назначению](#классификация-инструкций-по-функциональному-назначению)
|
||||
- [Классификация инструкций по способу адресации операндов](#классификация-инструкций-по-способу-адресации-операндов)
|
||||
- [Классификация инструкций по количеству операндов в инструкции](#классификация-инструкций-по-количеству-операндов-в-инструкции)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Лекция 13. Виды и классификация архитектур](#Лекция-13-Виды-и-классификация-архитектур)
|
||||
- [Содержание](#Содержание)
|
||||
- [Архитектура](#Архитектура)
|
||||
- [Классификация архитектур](#Классификация-архитектур)
|
||||
- [Классификация архитектур по способу хранения операндов](#Классификация-архитектур-по-способу-хранения-операндов)
|
||||
- [Классификация архитектур по составу и сложности команд](#Классификация-архитектур-по-составу-и-сложности-команд)
|
||||
- [Классификация архитектур по способу реализации условных переходов](#Классификация-архитектур-по-способу-реализации-условных-переходов)
|
||||
- [Классификация инструкций](#Классификация-инструкций)
|
||||
- [Классификация инструкций по функциональному назначению](#Классификация-инструкций-по-функциональному-назначению)
|
||||
- [Классификация инструкций по способу адресации операндов](#Классификация-инструкций-по-способу-адресации-операндов)
|
||||
- [Классификация инструкций по количеству операндов в инструкции](#Классификация-инструкций-по-количеству-операндов-в-инструкции)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
|
||||
## Архитектура
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -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), т.е. соседние адреса будут находиться в разных банках памяти, вследствие чего запросы к соседним ячейкам памяти будут обрабатываться параллельно.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -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***
|
||||
|
||||
#### Анализ производительности
|
||||
|
||||
|
||||
@@ -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)
|
||||
- [Жизненный цикл процесса](#Жизненный-цикл-процесса)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
|
||||
## Виртуальная память
|
||||
|
||||
|
||||
@@ -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-усовершенствованный)
|
||||
- [Когерентность кэш и ложное совместное использование](#когерентность-кэш-и-ложное-совместное-использование)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Дополнительные материалы к лекции для саморазвития](#дополнительные-материалы-к-лекции-для-саморазвития)
|
||||
- [Когерентность кэш и ложное совместное использование](#Когерентность-кэш-и-ложное-совместное-использование)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
- [Дополнительные материалы к лекции для саморазвития](#Дополнительные-материалы-к-лекции-для-саморазвития)
|
||||
|
||||
## Параллелизм уровня потоков
|
||||
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
# Лекция 19. Шины.
|
||||
|
||||
- [Лекция 19. Шины.](#лекция-19-шины)
|
||||
- [Системы соединений](#системы-соединений)
|
||||
- [Интерфейс](#интерфейс)
|
||||
- [Шина](#шина)
|
||||
- [Терминология](#терминология)
|
||||
- [Обмен информации](#обмен-информации)
|
||||
- [Типы шин](#типы-шин)
|
||||
- [Иерархия шин](#иерархия-шин)
|
||||
- [Арбитраж шин](#арбитраж-шин)
|
||||
- [Алгоритмы арбитража](#алгоритмы-арбитража)
|
||||
- [Схемы арбитража](#схемы-арбитража)
|
||||
- [Протоколы шин](#протоколы-шин)
|
||||
- [Повышение эффективности шин](#повышение-эффективности-шин)
|
||||
- [Увеличение полосы пропускания](#увеличение-полосы-пропускания)
|
||||
- [Стандартизация шин](#стандартизация-шин)
|
||||
- [Последовательный синхронный обмен](#последовательный-синхронный-обмен)
|
||||
- [Последовательный асинхронный обмен](#последовательный-асинхронный-обмен)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Лекция 19. Шины.](#Лекция-19-Шины)
|
||||
- [Системы соединений](#Системы-соединений)
|
||||
- [Интерфейс](#Интерфейс)
|
||||
- [Шина](#Шина)
|
||||
- [Терминология](#Терминология)
|
||||
- [Обмен информации](#Обмен-информации)
|
||||
- [Типы шин](#Типы-шин)
|
||||
- [Иерархия шин](#Иерархия-шин)
|
||||
- [Арбитраж шин](#Арбитраж-шин)
|
||||
- [Алгоритмы арбитража](#Алгоритмы-арбитража)
|
||||
- [Схемы арбитража](#Схемы-арбитража)
|
||||
- [Протоколы шин](#Протоколы-шин)
|
||||
- [Повышение эффективности шин](#Повышение-эффективности-шин)
|
||||
- [Увеличение полосы пропускания](#Увеличение-полосы-пропускания)
|
||||
- [Стандартизация шин](#Стандартизация-шин)
|
||||
- [Последовательный синхронный обмен](#Последовательный-синхронный-обмен)
|
||||
- [Последовательный асинхронный обмен](#Последовательный-асинхронный-обмен)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
|
||||
## Системы соединений
|
||||
|
||||
|
||||
@@ -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)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Дополнительные материалы к лекции](#дополнительные-материалы-к-лекции)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
- [Дополнительные материалы к лекции](#Дополнительные-материалы-к-лекции)
|
||||
|
||||
## Системы ввода-вывода
|
||||
|
||||
|
||||
@@ -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)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
- [Дополнительные материалы к лекции](#Дополнительные-материалы-к-лекции)
|
||||
|
||||
> *Микроконтроллер* — это устройство, которое объединяет в себе процессор и ряд периферийных устройств и занимается управлением.
|
||||
|
||||
|
||||
@@ -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)
|
||||
- [Из чего состоит компьютер?](#из-чего-состоит-компьютер)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Из чего состоит компьютер?](#Из-чего-состоит-компьютер)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
|
||||
## Микропроцессоры
|
||||
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Лекция 23. Параллельные вычислительные системы](#лекция-23-параллельные-вычислительные-системы)
|
||||
- [Содержание](#содержание)
|
||||
- [Классификация](#классификация)
|
||||
- [По области применения](#по-области-применения)
|
||||
- [По особенностям назначения](#по-особенностям-назначения)
|
||||
- [Классификация Флинна](#классификация-флинна)
|
||||
- [Альтернативная классификация](#альтернативная-классификация)
|
||||
- [Классификация по памяти](#классификация-по-памяти)
|
||||
- [Обобщенная структура параллельно вычислительной системы](#обобщенная-структура-параллельно-вычислительной-системы)
|
||||
- [Матричные вычислительные системы](#матричные-вычислительные-системы)
|
||||
- [Кластерные вычислительные системы (ВС)](#кластерные-вычислительные-системы-вс)
|
||||
- [Топология малых кластеров](#топология-малых-кластеров)
|
||||
- [Реконфигурируемые вычислительные системы](#реконфигурируемые-вычислительные-системы)
|
||||
- [Систолические вычислительные системы](#систолические-вычислительные-системы)
|
||||
- [Системы, управляемые потоками данных](#системы-управляемые-потоками-данных)
|
||||
- [Основные материалы лекции](#основные-материалы-лекции)
|
||||
- [Лекция 23. Параллельные вычислительные системы](#Лекция-23-Параллельные-вычислительные-системы)
|
||||
- [Содержание](#Содержание)
|
||||
- [Классификация](#Классификация)
|
||||
- [По области применения](#По-области-применения)
|
||||
- [По особенностям назначения](#По-особенностям-назначения)
|
||||
- [Классификация Флинна](#Классификация-Флинна)
|
||||
- [Альтернативная классификация](#Альтернативная-классификация)
|
||||
- [Классификация по памяти](#Классификация-по-памяти)
|
||||
- [Обобщенная структура параллельно вычислительной системы](#Обобщенная-структура-параллельно-вычислительной-системы)
|
||||
- [Матричные вычислительные системы](#Матричные-вычислительные-системы)
|
||||
- [Кластерные вычислительные системы (ВС)](#Кластерные-вычислительные-системы-ВС)
|
||||
- [Топология малых кластеров](#Топология-малых-кластеров)
|
||||
- [Реконфигурируемые вычислительные системы](#Реконфигурируемые-вычислительные-системы)
|
||||
- [Систолические вычислительные системы](#Систолические-вычислительные-системы)
|
||||
- [Системы, управляемые потоками данных](#Системы-управляемые-потоками-данных)
|
||||
- [Основные материалы лекции](#Основные-материалы-лекции)
|
||||
|
||||
|
||||
**Параллельные вычислительные системы (ПВС)** нужны для повышения производительности, чтобы выполнять вычисления как можно быстрее за счёт того, что каждое ядро решает свои задачи. Однако параллелизм бывает разный, об этом и рассказывается в рамках этой лекции.
|
||||
|
||||
@@ -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)
|
||||
|
||||
--- -->
|
||||
--- -->
|
||||
|
||||
18
Other/FAQ.md
18
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)
|
||||
|
||||
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
|
||||
В приведенном ниже списке будут даны описания книг, а также способы их получения: покупка/чтение в электронной библиотеке/получение экземпляра книги в университетской библиотеке. <!--Руководство по работе с электронной библиотекой вы можете найти [здесь](<placeholder>)-->.
|
||||
|
||||
- [Список дополнительной литературы](#список-дополнительной-литературы)
|
||||
- [Митио Сибуя и Такаси Тонаги: Центральный процессор. Образовательная манга](#митио-сибуя-и-такаси-тонаги-центральный-процессор-образовательная-манга)
|
||||
- [Чарльз Петцольд: Код. Тайный язык информатики](#чарльз-петцольд-код-тайный-язык-информатики)
|
||||
- [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера: RISC-V](#дэвид-м-харрис-и-сара-л-харрис-цифровая-схемотехника-и-архитектура-компьютера-risc-v)
|
||||
- [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM\*](#дэвид-м-харрис-и-сара-л-харрис-цифровая-схемотехника-и-архитектура-компьютера-дополнение-по-архитектуре-arm)
|
||||
- [под редакцией Романова А.Ю. и Панчула Ю.В.: Цифровой синтез: практический курс](#под-редакцией-романова-аю-и-панчула-юв-цифровой-синтез-практический-курс)
|
||||
- [Д. Паттерсон и Дж. Хеннесси: Архитектура компьютера и проектирование компьютерных систем](#д-паттерсон-и-дж-хеннесси-архитектура-компьютера-и-проектирование-компьютерных-систем)
|
||||
- [Д. Паттерсон и Дж. Хеннесси Архитектура компьютера. Количественный подход](#д-паттерсон-и-дж-хеннесси-архитектура-компьютера-количественный-подход)
|
||||
- [С.А. Орлов и Б.Я. Цилькер: Организация ЭВМ и систем](#са-орлов-и-бя-цилькер-организация-эвм-и-систем)
|
||||
- [Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И.Кононова: Микропроцессорные средства и системы. Курс лекций](#дн-беклемишев-ан-орлов-ал-переверзев-мг-попов-ав-горячев-аикононова-микропроцессорные-средства-и-системы-курс-лекций)
|
||||
- [Э. Таненбаум и Т. Остин: Архитектура компьютера](#э-таненбаум-и-т-остин-архитектура-компьютера)
|
||||
- [Дональд Томас: Логическое проектирование и верификация систем на SystemVerilog](#дональд-томас-логическое-проектирование-и-верификация-систем-на-systemverilog)
|
||||
- [Список дополнительной литературы](#Список-дополнительной-литературы)
|
||||
- [Митио Сибуя и Такаси Тонаги: Центральный процессор. Образовательная манга](#Митио-Сибуя-и-Такаси-Тонаги-Центральный-процессор-Образовательная-манга)
|
||||
- [Чарльз Петцольд: Код. Тайный язык информатики](#Чарльз-Петцольд-Код-Тайный-язык-информатики)
|
||||
- [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера: RISC-V](#Дэвид-М-Харрис-и-Сара-Л-Харрис-Цифровая-схемотехника-и-архитектура-компьютера-risc-v)
|
||||
- [Дэвид М. Харрис и Сара Л. Харрис: Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM\*](#Дэвид-М-Харрис-и-Сара-Л-Харрис-Цифровая-схемотехника-и-архитектура-компьютера-Дополнение-по-архитектуре-arm)
|
||||
- [под редакцией Романова А.Ю. и Панчула Ю.В.: Цифровой синтез: практический курс](#под-редакцией-Романова-АЮ-и-Панчула-ЮВ-Цифровой-синтез-практический-курс)
|
||||
- [Д. Паттерсон и Дж. Хеннесси: Архитектура компьютера и проектирование компьютерных систем](#Д-Паттерсон-и-Дж-Хеннесси-Архитектура-компьютера-и-проектирование-компьютерных-систем)
|
||||
- [Д. Паттерсон и Дж. Хеннесси Архитектура компьютера. Количественный подход](#Д-Паттерсон-и-Дж-Хеннесси-Архитектура-компьютера-Количественный-подход)
|
||||
- [С.А. Орлов и Б.Я. Цилькер: Организация ЭВМ и систем](#СА-Орлов-и-БЯ-Цилькер-Организация-ЭВМ-и-систем)
|
||||
- [Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И. Кононова: Микропроцессорные средства и системы. Курс лекций](#ДН-Беклемишев-АН-Орлов-АЛ-Переверзев-МГ-Попов-АВ-Горячев-АИ-Кононова-Микропроцессорные-средства-и-системы-Курс-лекций)
|
||||
- [Э. Таненбаум и Т. Остин: Архитектура компьютера](#Э-Таненбаум-и-Т-Остин-Архитектура-компьютера)
|
||||
- [Дональд Томас: Логическое проектирование и верификация систем на SystemVerilog](#Дональд-Томас-Логическое-проектирование-и-верификация-систем-на-systemverilog)
|
||||
|
||||
## Митио Сибуя и Такаси Тонаги: Центральный процессор. Образовательная манга
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||

|
||||
|
||||
## Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И.Кононова: Микропроцессорные средства и системы. Курс лекций
|
||||
## Д.Н. Беклемишев, А.Н. Орлов, А.Л. Переверзев, М.Г. Попов, А.В. Горячев, А.И. Кононова: Микропроцессорные средства и системы. Курс лекций
|
||||
|
||||
Курс лекций, читавшийся несколько лет назад. На данный момент книга является актуальной, но дисциплина организована несколько иначе. Из достоинств можно выделить хорошую организацию написанного материала, представленного в виде одинаковых порций разбитых на тематические лекции. Книга доступна в облаке и в университетской библиотеке. Отдельно стоит отметить, что часть читаемого на лекциях материала представлена только в этом издании.
|
||||
|
||||
|
||||
@@ -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 и там остались несохраненные файлы, то вы рискуете потерять свои изменения.
|
||||
|
||||
## Правила работы на сервере
|
||||
Есть некоторые правила, которых необходимо придерживаться:
|
||||
|
||||
@@ -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`, вы добавите все внутренние сигналы этого модуля в область просмотра временной диаграммы.
|
||||
|
||||
@@ -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/).
|
||||
|
||||
|
||||
12
README.md
12
README.md
@@ -2,12 +2,12 @@
|
||||
|
||||

|
||||
|
||||
- [Путеводитель АПС](#путеводитель-апс)
|
||||
- [Как работать с репозиторием](#как-работать-с-репозиторием)
|
||||
- [Мотивация](#мотивация)
|
||||
- [Место АПС в Computer Science](#место-апс-в-computer-science)
|
||||
- [Как пользоваться репозиторием](#как-пользоваться-репозиторием)
|
||||
- [История курса и разработчики](#история-курса-и-разработчики)
|
||||
- [Путеводитель АПС](#Путеводитель-АПС)
|
||||
- [Как работать с репозиторием](#Как-работать-с-репозиторием)
|
||||
- [Мотивация](#Мотивация)
|
||||
- [Место АПС в Computer Science](#Место-АПС-в-computer-science)
|
||||
- [Как пользоваться репозиторием](#Как-пользоваться-репозиторием)
|
||||
- [История курса и разработчики](#История-курса-и-разработчики)
|
||||
- [](https://ozon.ru/t/63aAzUd)
|
||||
|
||||
Привет, студент!
|
||||
|
||||
@@ -13,19 +13,19 @@
|
||||
> [!IMPORTANT]
|
||||
> Обратите внимание на то, как ставится ударение в словосочетании "временна́я диаграмма" (не "вре́менная"). В обиходе это словосочетание заменяется словом "времянка".
|
||||
|
||||
- [Руководство по поиску функциональных ошибок](#руководство-по-поиску-функциональных-ошибок)
|
||||
- [Цель](#цель)
|
||||
- [Алгоритм поиска ошибок](#алгоритм-поиска-ошибок)
|
||||
- [Работа с логом при появлении ошибок](#работа-с-логом-при-появлении-ошибок)
|
||||
- [Поиск ошибки на временной диаграмме](#поиск-ошибки-на-временной-диаграмме)
|
||||
- [Открытие файла исходного кода проблемного сигнала](#открытие-файла-исходного-кода-проблемного-сигнала)
|
||||
- [Добавление сигналов объектов на временную диаграмму](#добавление-сигналов-объектов-на-временную-диаграмму)
|
||||
- [Сброс симуляции и ее повтор, установка времени моделирования](#сброс-симуляции-и-ее-повтор-установка-времени-моделирования)
|
||||
- [Исправление сигналов с Z-состоянием](#исправление-сигналов-с-z-состоянием)
|
||||
- [Поиск ошибки в сигналах, формирующих проблемный сигнал](#поиск-ошибки-в-сигналах-формирующих-проблемный-сигнал)
|
||||
- [Исправление логики проблемного сигнала](#исправление-логики-проблемного-сигнала)
|
||||
- [Проблема необъявленных сигналов](#проблема-необъявленных-сигналов)
|
||||
- [Самостоятельная работа](#самостоятельная-работа)
|
||||
- [Руководство по поиску функциональных ошибок](#Руководство-по-поиску-функциональных-ошибок)
|
||||
- [Цель](#Цель)
|
||||
- [Алгоритм поиска ошибок](#Алгоритм-поиска-ошибок)
|
||||
- [Работа с логом при появлении ошибок](#Работа-с-логом-при-появлении-ошибок)
|
||||
- [Поиск ошибки на временной диаграмме](#Поиск-ошибки-на-временной-диаграмме)
|
||||
- [Открытие файла исходного кода проблемного сигнала](#Открытие-файла-исходного-кода-проблемного-сигнала)
|
||||
- [Добавление сигналов объектов на временную диаграмму](#Добавление-сигналов-объектов-на-временную-диаграмму)
|
||||
- [Сброс симуляции и ее повтор, установка времени моделирования](#Сброс-симуляции-и-ее-повтор-установка-времени-моделирования)
|
||||
- [Исправление сигналов с Z-состоянием](#Исправление-сигналов-с-z-состоянием)
|
||||
- [Поиск ошибки в сигналах, формирующих проблемный сигнал](#Поиск-ошибки-в-сигналах-формирующих-проблемный-сигнал)
|
||||
- [Исправление логики проблемного сигнала](#Исправление-логики-проблемного-сигнала)
|
||||
- [Проблема необъявленных сигналов](#Проблема-необъявленных-сигналов)
|
||||
- [Самостоятельная работа](#Самостоятельная-работа)
|
||||
|
||||
## Алгоритм поиска ошибок
|
||||
|
||||
|
||||
Reference in New Issue
Block a user