Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ИЗУЧЕНИЕ РАБОТЫ РЕГИСТРОВ
Отчет по лабораторной работе №5
по дисциплине «Электроника и схемотехника 2»
Вариант №12
Студент гр. 711-2
_______Е. П. Толстолес
30.05.2023
Руководитель
преподаватель каф. КИБЭВС
к.т.н., доцент
_______ А.С. Семенов
30.05.2023
1 Введение
Цель работы: изучить регистры, их принципы построения и работы.
Задачи:
1. Составить таблицы функционирования для схем из таблицы согласно варианту 12.
2. Собрать схемы заданных регистров согласно варианту 12.
3. Промоделировать работу всех схем в двух режимах. Провести анализ результатов моделирования разных режимов.
4. Сверить результаты моделирования с составленными таблицами функционирования и расчётами.
5. Создать схемы, которые с помощью регистров обеспечат «чистый» выходной сигнал для асинхронного и синхронного счётчиков своего варианта из дополнительной ЛР4.
6. Промоделировать работу схем в двух режимах. Для режима моделирования с учётом задержек (timing) сравните выходы со счётчика и с регистра и написать вывод, нужен ли для этого счётчика регистр на выходе или нет и почему.
7. Повторите п. 2-6, только для описания устройств вместо схем на холстах .bdf используйте заданный вариантом HDL.
8. Написать выводы о проделанной работе.
2 Ход работы
2.1 Построение схем и моделирование
Таблица 2.1 – Таблица истинности варианта 12.
Значение |
Входы |
Выходы |
|||||||||
Х4 |
Х3 |
Х2 |
Х1 |
Х0 |
У3 |
У2 |
У1 |
У0 |
FB |
||
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
|
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
|
2 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
|
3 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|
4 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
|
5 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
|
6 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
|
7 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
|
8 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
9 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
|
Возврат каретки |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
|
Перевод строки |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
|
Буквы латинские |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
|
Цифры |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
|
Пробел |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
|
Буквы русские |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
Таблица 2.2 - Таблица истинности логической операции
Код операции |
Входы |
|
Выходы |
||||||||
A2 |
A1 |
A0 |
B2 |
B1 |
B0 |
OP1.2 |
OP1.1 |
OP1.0 |
|
||
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
|
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
|
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
|
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
|
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
|
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
|
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
|
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
|
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
|
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
|
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
|
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
|
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
|
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
|
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
|
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
|
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
|
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
|
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
|
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
|
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
|
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
|
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
|
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
|
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
|
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
|
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
|
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
|
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
|
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
|
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
|
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
|
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
|
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
|
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
|
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
|
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
|
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Таблица 2.3 - Таблица истинности арифметической операции
Код операции |
Входы |
Выходы |
||||||||
A2 |
A1 |
A0 |
B2 |
B1 |
B0 |
OP1.2 |
OP1.1 |
OP1.0 |
||
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
Таблица 2.4 – Таблица истинности для моделирования функций по варианту.
На рис. 2.1 представлена обобщенная функциональная схема.
Рисунок 2.1 - Функциональная схема
Устройство получает на вход 6-разрядный код x, должно выполнять четыре операции и выводить результат одного из них по линии result в зависимости от кода операции S. При подаче активного уровня сигнала read вырабатываются сигналы C_out, количество которых зависит от длины result.
IN - хранение входных данных. S - хранение кода операции.
OPCNT - счётчик операций.
Y - кодирование двоичного числа. OP1 - логическая операция.
OP2 - арифметическая операция.
MUX - мультиплексирование выходных данных. COUT - выработка выходного синхросигнала.
На рисунке 2.2 представлена bdf схема устройства.
Рисунок 2.2 – bdf схема устройства.
На рисунках 2.3 – 2.4 представлено моделирование схемы в режимах Timing и Functional.
Рисунок 2.3 – Моделирование в режиме Timing.
Рисунок 2.4 – Моделирование в режиме Functional.
Результаты моделирования полностью соответствуют с составленной таблицей истинности, значит схема было составлена верно.
На рисунке 2.4 представлен код на языке SV для заданной схемы.
module SystemVerilog1 (
input logic RD, Reset, C_ext, C_int,
input logic [1:0] C,
input logic D,
output logic C_out,
output logic [4:0] outData );
logic CLN, RST, resetOut, start;
logic [1:0] code;
logic [7:0] data;
logic [4:0] count;
logic [4:0] F;
logic [2:0] OP1;
logic [3:0] OP2;
logic [4:0] result;
logic [2:0] AddrCode;
reg[1:0] state;
assign CLN = RST | resetOut;
assign OP1[2] = ~(data[5] + data[2]);
assign OP1[1] = ~(data[4] + data[1]);
assign OP1[0] = ~(data[3] + data[0]);
assign OP2 = data[5:3] + data[2:0];
always_ff@(posedge C_ext, posedge CLN)
begin
if (CLN)
begin
AddrCode <=
3'b000; RST <= 0;
end
else if (Reset) RST = 1'b1;
else
begin
AddrCode <= AddrCode + 1;
RST <= 0;
end
end
always_ff@(posedge C_ext, posedge
RST) if (RST) data = 8'b00000000;
else data[7:0] = {data[6:0], D};
always_ff@(posedge RD, posedge
RST) if (RST) count = 5'b00000;
else count = count + 1;
always_ff@(posedge C_int, posedge
CLN) if(CLN) start = 1'b0;
else if(RD) start = 1'b1;
always_ff@(posedge C_int, posedge
resetOut) if(resetOut)
begin
resetOut <= 1'b0;
state <= 0;
C_out <= 1'b0;
end
else
case(state)
0: begin
if (start) begin
C_out <=
1'b1; state <=
1; end
end
1: begin
C_out <=
1'b0; state <=
2; end
2: begin
resetOut <=
1'b1; state <= 3;
end
default: state <=
0; endcase
always_comb begin
case(AddrCode)
3'b000: code = data[7:6];
3'b001: code = {data[0], data[7]};
3'b010: code = data[1:0];
3'b011: code = data[2:1];
3'b100: code = data[3:2];
3'b101: code = data[4:3];
3'b110: code = data[5:4];
3'b111: code = data[6:5];
endcase;
end
always_comb begin
case(data[3:0]) 4'b0000:
F = 5'b01010; 4'b0001:
F = 5'b01011; 4'b0010:
F = 5'b10010; 4'b0011:
F = 5'b10011; 4'b0100:
F = 5'b01110; 4'b0101:
F = 5'b01111; 4'b0110:
F = 5'b10110; 4'b0111:
F = 5'b10111; 4'b1000:
F = 5'b01001; 4'b1001:
F = 5'b11001; 4'b1010:
F = 5'b11010; 4'b1011:
F = 5'b11011; 4'b1100:
F = 5'b01101; 4'b1101:
F = 5'b11101; 4'b1110:
F = 5'b11110; 4'b1111:
F = 5'b10101;
endcase;
end
always_ff@(negedge C_out, posedge RST)
begin if(RST) outData = 5'b00000;
else
begin
case(code)
2'b00: outData = count;
2'b01: outData = F;
2'b10: outData = {2'b0,
OP1[2:0]}; 2'b11: outData =
{1'b0, OP2[3:0]}; endcase;
end
end
endmodule
На рисунке 2.5 показана RTL диаграмма устройства.
Рисунок 2.5 – RTL диаграмма.