mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
Стилистические правки
This commit is contained in:
@@ -127,7 +127,7 @@ endmodule
|
||||
|
||||
_Листинг 1. SystemVerilog-код модуля half_adder._
|
||||
|
||||
По данному коду, САПР может реализовать следующую схему:
|
||||
По данному коду, САПР может реализовать схему, представленную на рисунке 3.
|
||||
|
||||

|
||||
|
||||
@@ -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).
|
||||
|
||||
|
Reference in New Issue
Block a user