Лабораторные работы. Неелова / Архитектура. Отчет №1
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет «Информационных технологий и программной инженерии»
Кафедра «Программной инженерии и вычислительной техники»
Направление подготовки: |
09.03.04 – Программная инженерия |
Направленность (профиль): |
Разработка программного обеспечения и приложений искусственного интеллекта в киберфизических системах |
ЛАБОРАТОРНАЯ РАБОТА № 1
по дисциплине:
Архитектура распределённых вычислительных систем |
на тему:
ПРОЕКТИРОВАНИЕ ДВУХМОДУЛЬНОГО КЦУ В CYCLONE V |
|
|
Выполнили студенты группы |
ИКПИ-32 |
|
|
|
Блинов И.С., Кларк А.Е., Яковлев М.А. |
||
|
|
Фамилия И. О. |
||
|
|
Принял |
|
|
оценка |
|
|
уч. степень, уч. звание |
|
|
|
Неелова О.Л. |
||
дата, подпись |
|
Фамилия И. О. |
||
Цель работы: Изучение методов проектирования линейных схем в ПЛИС с использованием пакетов Modelsim и Quartus15.
Постановка задачи:
Необходимо спроектировать устройство, преобразующее 4-разрядные данные, подаваемые с тумблеров макета DE1-SoC в код для семисегментного индикатора, с возможностью вывода числа на один из четырех индикаторов макета, выбираемого по вводимому с тумблеров адресу (рисунок 1).
Рисунок 1 - Схема проектируемого устройства
Ход работы
Модуль coder выполняет преобразование 4-битного входного двоичного числа (data) в код для семисегментного индикатора (seg). Ниже представлен код файла coder.v:
module coder
(input wire [3:0] data,
output wire [6:0] seg);
reg [6:0]code;
assign seg=code;
always @*
case(data)
4'b0000: code = 7'b1000000;
4'b0001: code = 7'b1111001;
4'b0010: code = 7'b0100100;
4'b0011: code = 7'b0110000;
4'b0100: code = 7'b0011001;
4'b0101: code = 7'b0010010;
4'b0110: code = 7'b0000010;
4'b0111: code = 7'b1111000;
4'b1000: code = 7'b0000000;
4'b1001: code = 7'b0010000;
4'b1010: code = 7'b0001000;
4'b1011: code = 7'b0000011;
4'b1100: code = 7'b1000110;
4'b1101: code = 7'b0100001;
4'b1110: code = 7'b0000110;
4'b1111: code = 7'b0001110;
endcase
endmodule
Модуль dms реализует декодер мультиплексора для 4-х индикаторов. На вход подается готовый код для семисегментного индикатора (line) и 2-битный адрес (adr). В зависимости от значения adr, сигнал line отправляется на один из выходов (data0–data3), остальные индикаторы гасятся (1111111). Таким образом выбирается, на каком из четырех индикаторов отображать символ.
Далее представлен код файла dms.v:
module dms
(input wire [6:0] line,
input wire [1:0] adr,
output wire [6:0] data0,
output wire [6:0] data1,
output wire [6:0] data2,
output wire [6:0] data3);
assign data0 = (adr== 2'h0)? line : 7'd127;
assign data1 = (adr== 2'h1)? line : 7'd127;
assign data2 = (adr== 2'h2)? line : 7'd127;
assign data3 = (adr== 2'h3)? line : 7'd127;
endmodule
Модуль board объединяет предыдущие два блока. На вход подаются данные (data) и адрес (adr). Coder формирует 7-сегментный код из входных данных. Dms передает этот код на один из четырех индикаторов (data0–data3) в зависимости от адреса.
Содержание файла board.v приведено ниже:
module board (
input wire [3:0] data,
input wire [1:0] adr,
output wire [6:0] data0,
output wire [6:0] data1,
output wire [6:0] data2,
output wire [6:0] data3);
wire [6:0] seg_line;
coder _coder (
.data(data),
.seg(seg_line)
);
dms _dms (
.line(seg_line),
.adr(adr),
.data0(data0),
.data1(data1),
.data2(data2),
.data3(data3)
);
endmodule
Модуль board_tb — это тестбенч для проверки работы схемы. Подает различные значения на data и adr. Наблюдает, как код отобразится на разных индикаторах. Содержит временные задержки #200 для визуализации изменений.
Ниже приведено содержание файла board_testbench.v:
`timescale 1ns/100ps
module board_tb;
reg [3:0] d;
reg [1:0] addr;
wire [6:0] hex0;
wire [6:0] hex1;
wire [6:0] hex2;
wire [6:0] hex3;
board uut (
.data(d),
.adr(addr),
.data0(hex0),
.data1(hex1),
.data2(hex2),
.data3(hex3)
);
initial
begin
d=4'b0000; addr=2'b00;
#200;
d=4'b0001; addr=2'b01;
#200;
d=4'b0010; addr=2'b10;
#200;
d=4'b0011; addr=2'b11;
#200;
d=4'b0100; addr=2'b00;
#200;
d=4'b0101; addr=2'b01;
#200;
d=4'b0110; addr=2'b10;
#200;
d=4'b0111; addr=2'b11;
#200;
d=4'b1000; addr=2'b00;
#200;
d=4'b1001; addr=2'b01;
#200;
d=4'b1010; addr=2'b10;
#200;
d=4'b1011; addr=2'b11;
#200;
d=4'b1100; addr=2'b00;
#200;
d=4'b1101; addr=2'b01;
#200;
d=4'b1110; addr=2'b10;
#200;
d=4'b1111; addr=2'b11;
#200;
$stop;
end
endmodule
В среде ModelSim была проведена функциональная симуляция разработанных модулей. На рисунке 2 представлена диаграмма с результатом, содержащая:
входные данные d;
адрес выбора индикатора addr;
выходные сигналы на индикаторы hex0 – hex3.
Рисунок 2 - Результат симуляции
Вывод: в ходе выполнения лабораторной работы было разработано двухмодульное устройство, состоящее из модулей кодера, демультиплексора и объединяющего их модуля.
Для проверки работоспособности устройства были написаны тестбенч-файлы и проведена функциональная симуляция в среде ModelSim, подтвердившая правильность работы разработанных модулей. Проект был перенесён в среду Quartus 15, где далее выполнено программирование ПЛИС DE1-SoC.
В результате устройство успешно функционирует на аппаратном уровне: введённые с тумблеров двоичные данные корректно преобразуются и отображаются на выбранном по адресу семисегментном индикаторе.
Санкт-Петербург 2025
