diff --git a/Labs/01. Adder/README.md b/Labs/01. Adder/README.md index ab2ed664..638cc135 100644 --- a/Labs/01. Adder/README.md +++ b/Labs/01. Adder/README.md @@ -4,17 +4,18 @@ Познакомиться с САПР Vivado и научиться реализовывать в нём простейшие схемотехнические модули с помощью конструкций языка SystemVerilog. -## Допуск к лабораторной работе +## Материал для подготовки к лабораторной работе -Изучить [описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md). +[Описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md). ## Ход работы -1. [Тренинг по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md); -2. Изучение, реализация и проверка полного 1-битного сумматора; -3. Изучение реализации полного 4-битного сумматора; -4. Реализация полного 4-битного сумматора; -5. Реализация 32-битного сумматора. +1. Изучение 1-битного сумматора; +2. Воспроизведение примера по реализации и проверке полусумматора. +3. Реализация и проверка полного 1-битного сумматора +4. Изучение 4-битного сумматора; +5. Реализация и проверка полного 4-битного сумматора; +6. Реализация и проверка полного 32-битного сумматора. ## Теория @@ -38,11 +39,11 @@ ![../../.pic/Labs/lab_01_adder/column_add_bin.drawio.svg](../../.pic/Labs/lab_01_adder/column_add_bin.drawio.svg) -Поскольку в двоичной системе всего две цифры: 0 и 1, один разряд не может превысить 1. Складывая числа 1 и 1, вы получаете 2, что не умещается в один разряд, поэтому мы пишем 0 и держим 1 "в уме". Это снова перенос разряда. Поскольку в двоичной арифметике разряд называют битом, перенос разряда называют переносом бита, а сам разряд, который перенесли — битом переноса. +Поскольку в двоичной системе всего две цифры: 0 и 1, один разряд не может превысить 1. Складывая числа 1 и 1, вы получаете 2, что не умещается в один разряд, поэтому мы пишем 0 и держим 1 "в уме". Это снова перенос разряда. Поскольку в двоичной арифметике разряд называют битом, перенос разряда можно назвать переносом бита, а сам разряд, который перенесли — битом переноса. ### Полный 1-битный сумматор -Полный 1-битный сумматор — это цифровое устройство, которое выполняет сложение двух 1-битных чисел и учитывает входной бит переноса. Это устройство имеет три входа: два слагаемых и входной бит переноса, и два выхода: 1-битный результат суммы и выходной бит переноса. +Полный 1-битный сумматор — это цифровое устройство, которое выполняет сложение двух 1-битных чисел и учитывает входной бит переноса. Это устройство имеет три входа: два слагаемых и входной бит переноса, а также два выхода: 1-битный результат суммы и выходной бит переноса. Что такое входной бит переноса? Давайте вспомним второй этап сложения чисел 42 и 79: @@ -56,7 +57,7 @@ ### Реализация одноразрядного сложения -Можно ли как-то описать сложение двух одноразрядных двоичных чисел с помощью логических операций? Давайте посмотрим на таблицу истинности подобной операции и: +Можно ли как-то описать сложение двух одноразрядных двоичных чисел с помощью логических операций? Давайте посмотрим на таблицу истинности подобной операции: ![../../.pic/Labs/lab_01_adder/tt1.png](../../.pic/Labs/lab_01_adder/tt1.png) @@ -112,7 +113,7 @@ _Рисунок 2. Цифровая схема полного 1-битного
- Прочти меня перед использованием кода из примера. + **Прочти меня перед использованием кода из примера.** ### Во все примеры кода намеренно вставлены неподдерживаемые символы. Не копируй, одумайся! @@ -164,13 +165,13 @@ _Рисунок 3. Цифровая схема модуля half_adder, сген Для этого необходимо провести моделирование этой схемы. Во время моделирования на входы подаются тестовые воздействия. Каждое изменение входных сигналов приводит к каскадному изменению состояний внутренних цепей, что в свою очередь приводит к изменению значений на выходных сигналах схемы. -Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (или тестбенч) — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подает входные воздействия на проверяемый модуль. +Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (в дальнейшем будет использован термин "**тестбенч**") — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подает входные воздействия на проверяемый модуль. Внутри тестбенча можно использовать конструкции из несинтезируемого подмножества языка SystemVerilog, в частности программный блок `initial`, в котором команды выполняются последовательно, что делает этот блок чем-то отдаленно похожим на проверяющую программу. Поскольку изменение внутренних цепей происходит с некоторой задержкой относительно изменений входных сигналов, при моделировании есть возможность делать паузы между командами. Это делается с помощью специального символа #, за которым указывается количество времени симуляции, которое нужно пропустить перед следующей командой. -Перед тем как писать верификационное окружение, необходимо составить план того, как будет проводиться проверка устройства (составить верификационный план). +Перед тем как писать верификационное окружение, необходимо составить план того, как будет проводиться проверка устройства (составить верификационный план). Ввиду предельной простоты устройства, план будет состоять из одного предложения: -Поскольку устройство настолько простое, что число всех его возможных входных наборов воздействий равно четырем, и не имеет памяти (т.е. каждый раз, когда модулю подаются на вход одни и те же значения, оно вернет тот же результат), мы можем проверить его работу, перебрав все возможные комбинации его входных сигналов. +> Поскольку устройство не имеет внутреннего состояния, которое могло бы повлиять на результат, а число всех его возможных входных наборов воздействий равно четырем, мы можем проверить его работу, перебрав все возможные комбинации его входных сигналов. ```SystemVerilog module testbench(); // <- Не имеет ни входов, ни выходов! @@ -223,7 +224,7 @@ _Рисунок 5. Схема 4-битного сумматора._ _Рисунок 6. Схема 4-битного сумматора, сгенерированная САПР Vivado._ -Схема может показаться запутанной, но (если присмотреться) вы увидите, как от шин A, B и S отходят линии к каждому из сумматоров, а бит переноса передается от предыдущего сумматора к следующему. +Несмотря на запутанность схемы, если присмотреться, вы увидите, как от шин A, B и S отходят линии к каждому из сумматоров, а бит переноса передается от предыдущего сумматора к следующему. ## Задание