Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 семестр / ЭиС лаба 5.docx
Скачиваний:
0
Добавлен:
01.12.2023
Размер:
336.18 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

ИЗУЧЕНИЕ РАБОТЫ РЕГИСТРОВ

Отчет по лабораторной работе №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 диаграмма.

Соседние файлы в папке 4 семестр