Стилистические правки

This commit is contained in:
Andrei Solodovnikov
2025-06-24 12:44:12 +03:00
parent 03fedfbf88
commit 1f1cb3e045
7 changed files with 29 additions and 25 deletions

View File

@@ -127,7 +127,7 @@ endmodule
_Листинг 1. SystemVerilog-код модуля half_adder._
По данному коду, САПР может реализовать следующую схему:
По данному коду, САПР может реализовать схему, представленную на рисунке 3.
![../../.pic/Labs/lab_01_adder/fig_03.png](../../.pic/Labs/lab_01_adder/fig_03.png)
@@ -137,7 +137,7 @@ _Рисунок 3. Цифровая схема модуля half_adder, сген
Для этого необходимо провести моделирование этой схемы. Во время моделирования на входы подаются тестовые воздействия. Каждое изменение входных сигналов приводит к каскадному изменению состояний внутренних цепей, что в свою очередь приводит к изменению значений на выходных сигналах схемы.
Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (в дальнейшем будет использован термин "**тестбенч**") — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подаёт входные воздействия на проверяемый модуль.
Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (в дальнейшем будет использован термин "**тестбенч**") — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Эти сигналы ему не нужны, потому что он сам является генератором всех своих внутренних сигналов, и данный модуль не передаёт ничего вовне — только проверяет тестируемый модуль внутри себя.
Внутри тестбенча можно использовать конструкции из несинтезируемого подмножества языка SystemVerilog, в частности программный блок `initial`, в котором команды выполняются последовательно, что делает этот блок чем-то отдалённо похожим на проверяющую программу. Поскольку изменение внутренних цепей происходит с некоторой задержкой относительно изменений входных сигналов, при моделировании есть возможность делать паузы между командами. Это делается с помощью специального символа #, за которым указывается количество времени симуляции, которое нужно пропустить перед следующей командой.
@@ -158,11 +158,11 @@ module testbench(); // <- Не имеет ни входов, ни
initial begin
a = 1'b0; b = 1'b0; // <- Подаём на входы модуля тестовые
#10; // воздействия
#10ns; // воздействия
a = 1'b0; b = 1'b1;
#10; // <- Делаем паузу в десять отсчётов
a = 1'b1; b = 1'b0; // времени симуляции перед очередным
#10; // изменением входных сигналов
#10ns; // <- Делаем паузу в десять наносекунд
a = 1'b1; b = 1'b0; // перед очередным изменением
#10ns; // входных сигналов
a = 1'b1; b = 1'b1;
end
endmodule
@@ -178,7 +178,7 @@ _Рисунок 4. Временная диаграмма, моделирующа
### Полный 4-битный сумматор
До этого мы реализовали только сложение одного столбца в столбик, теперь мы хотим реализовать всю операцию сложения в столбик. Как это сделать? Сделать ровно то, что делается при сложении в столбик: сначала сложить младший столбец, получить бит переноса для следующего столбца, сложить следующий и т.д.
До этого мы реализовали сложение в столбик только для одного разряда, теперь мы хотим реализовать всю операцию сложения в столбик. Как это сделать? Сделать ровно то, что делается при сложении в столбик: сначала сложить младший разряд, получить бит переноса для следующего разряда, сложить следующий и т.д.
Давайте посмотрим, как это будет выглядеть на схеме (для простоты, внутренняя логика 1-битного сумматора скрыта, но вы должны помнить, что каждый прямоугольник — это та же самая схема с рис. 2).