Лабораторные работы. Неелова / Архитектура. Отчет №2
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет «Информационных технологий и программной инженерии»
Кафедра «Программной инженерии и вычислительной техники»
Направление подготовки: |
09.03.04 – Программная инженерия |
Направленность (профиль): |
Разработка программного обеспечения и приложений искусственного интеллекта в киберфизических системах |
ЛАБОРАТОРНАЯ РАБОТА № 2
по дисциплине:
Архитектура распределённых вычислительных систем |
на тему:
ПРОЕКТИРОВАНИЕ ЭЛЕМЕНТА АЛУ В 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
Модуль sum реализует одноразрядный полный сумматор. Вычисляет сумму (s) и перенос (crp) для трех входных битов: двух слагаемых (a, b) и входного переноса (cr). Далее представлен код файла sum.v:
module sum
(input wire a,b,cr,
output wire s,crp);
assign s=(a^b)^cr;
assign crp=(a&b) | ((a^b)&cr);
endmodule
Модуль sum_4 реализует 4-разрядный сумматор с последовательным переносом. Объединяет четыре одноразрядных сумматора для сложения двух 4-битных чисел (a_in, b_in) с учетом входного переноса (cr_in), формируя 4-битную сумму (s_out) и выходной перенос (crp_out).
Содержание файла sum_4.v приведено ниже:
module sum_4
(input wire [3:0]a_in,b_in,
input wire cr_in,
output wire [3:0]s_out,
output wire crp_out);
wire [2:0]crp_n;
sum sum0(.a (a_in[0]),.b (b_in[0]),.cr(cr_in), .s(s_out[0]),.crp(crp_n[0]));
sum sum1(.a(a_in[1]),.b(b_in[1]),.cr(crp_n[0]), .s(s_out[1]),.crp(crp_n[1]));
sum sum2(.a (a_in[2]),.b (b_in[2]),.cr(crp_n[1]), .s(s_out[2]),.crp(crp_n[2]));
sum sum3(.a (a_in[3]),.b (b_in[3]),.cr(crp_n[2]), .s(s_out[3]),.crp(crp_out));
endmodule
Модуль latch_rgstr представляет собой параметри- зированный N-разрядный регистр с тактированием по положительному фронту. Сохраняет входные данные (d_in) по фронту тактового сигнала (clk) и выдает их на выход (d_out).
Ниже приведено содержание файла latch_rgstr.v:
module latch_rgstr
#(parameter N=5)
(input [N-1:0] d_in,
input clk,
output [N-1:0]d_out);
reg [N-1:0]q;
assign d_out=q;
always@ (posedge clk)
begin
q<=d_in;
end
endmodule
Модуль summ_4 является верхнеуровневым модулем, который объединяет все предыдущие блоки для создания завершенной системы 4-разрядного сумматора с регистром и семисегментным индикатором.
Содержание файла summ_4.v:
module summ_4
(input wire [3:0]op_a,op_b,
input wire op_c, sync,
output wire led,
output wire [6:0]hex);
wire [3:0]sm;
wire c_y;
wire [4:0]y;
assign led=y[4];
sum_4 block1(.a_in(op_a), .b_in(op_b), .cr_in(op_c), .s_out(sm), .crp_out(c_y));
latch_rgstr block2(.d_in({c_y,sm[3:0]}), .clk(sync), .d_out(y));
coder block3(.data(y[3:0]), .seg(hex));
endmodule
Модуль test_summ4 – это итоговый тестбенч для проверки работы схемы. Содержание файла test_summ4.v:
`timescale 1ns/1ns
module test_summ4;
reg [3:0] op_a, op_b;
reg op_c;
reg sync;
wire led;
wire [6:0] hex;
summ_4 dut (
.op_a(op_a),
.op_b(op_b),
.op_c(op_c),
.sync(sync),
.led(led),
.hex(hex)
);
initial begin
sync = 0;
forever #5 sync = ~sync;
end
initial begin
op_a = 4'b0000;
op_b = 4'b0000;
op_c = 1'b0;
@(negedge sync);
// 5 + 3
op_a = 4'b0101; // 5
op_b = 4'b0011; // 3
op_c = 1'b0;
@(negedge sync);
// 7 + 9 + 1
op_a = 4'b0111; // 7
op_b = 4'b1001; // 9
op_c = 1'b1;
@(negedge sync);
// 15 + 1
op_a = 4'b1111; // 15
op_b = 4'b0001; // 1
op_c = 1'b0;
@(negedge sync);
// 8 + 8
op_a = 4'b1000; // 8
op_b = 4'b1000; // 8
op_c = 1'b0;
@(negedge sync);
$stop;
end
endmodule
В среде ModelSim была проведена функциональная симуляция разработанных модулей. На рисунке 2 представлена диаграмма с результатом, содержащая:
op_a – первое 4-битное слагаемое;
op_b – второе 4-битное слагаемое;
op_c – входной перенос;
sync – тактовый сигнал для регистра;
led – выходной сигнал переноса;
hex – код для семисегментного индикатора.
Рисунок 2 - Результат симуляции
Вывод: В ходе выполнения лабораторной работы было разработано устройство, реализующее 4-разрядный сумматор с отображением результата на семисегментном индикаторе. Устройство состоит из модулей одноразрядного полного сумматора, 4-разрядного сумматора, N-разрядного регистра и декодера для 7-сегментного индикатора.
Для проверки работоспособности устройства были написаны тестбенч-файлы и проведена функциональная симуляция в среде ModelSim, подтвердившая правильность работы разработанных модулей. Проект был перенесён в среду Quartus 15, где далее выполнено программирование макета ПЛИС DE1-SoC.
Результаты симуляции подтвердили корректность работы всех модулей: устройство правильно выполняет сложение 4-битных чисел, учитывает входной перенос, отображает результат на семисегментном индикаторе и сигнализирует о переполнении.
Санкт-Петербург 2025
