Скачиваний:
7
Добавлен:
29.12.2023
Размер:
168.71 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПБГУТ)

_________________________________________________________________________

Кафедра Радиосвязи и Вещания (РСиВ)

Лабораторная работа №4

По дисциплине «Основы разработки систем на кристалле»

РАЗРАБОТКА МНОГОФАЙЛОВОГО ПРОЕКТА НА ЯЗЫКЕ ПОВЕДЕНЧЕСКОГО ОПИСАНИЯ

Выполнили

студенты группы РТ-XX

Проверил:

Фёдоров Андрей Сергеевич __________

Санкт-Петербург

2023

Цель работы

Разработка модуля верхнего уровня с использованием возможности межсоединения модулей внутри проекта. Изучение возможности соединения нескольких модулей в проекте. Проверка готового модуля на плате.

1. Принцип соединения модулей на Verilog. Назначение файлов sw_led_wrapper.v и top.v.

Соединение модулей происходит в верхнем модуле через указание соответствующих входов и выходов через экземпляры подмодулей. Файл sw_led_wrapper.v нужен для создания внешнего модуля (обёртки). Он служит отдельным блоком с входами и выходами, который взаимодействует с периферией.

2. Блочная схема проекта.

3. Листинг модулей из индивидуального задания с поясняющими комментариями каждой строки.

module top ( // верхний модуль

input [7:0] sw, // обозначение входов и выходов

output [2:0] led

);

wire [4:0] temp; // инициализация промежуточных переменных

user_and and_0 ( // установка экземпляра пользовательского

.a (sw[7]), // модуля логического И

.b (sw[6]),

.c (temp[0])

);

user_not not_0 ( // установка экземпляра пользовательского

.a (sw[5]), // логического НЕ

.c (temp[1])

);

user_or or_0 ( // установка экземпляра пользовательского

.a (sw[3]), // логического ИЛИ

.b (sw[2]),

.c (temp[2])

);

user_or or_1 (

.a (temp[0]),

.b (temp[1]),

.c (led[2])

);

user_and and_1 (

.a (sw[4]),

.b (temp[2]),

.c (temp[3])

);

user_not not_1 (

.a (temp[3]),

.c (led[1])

);

user_and and_2 (

.a (sw[1]),

.b (sw[0]),

.c (temp[4])

);

user_not not_2 (

.a (temp[4]),

.c (led[0])

);

endmodule

module sw_led_wrapper( // модуль обёртки

input [7:0] sw,

output [4:0] led

);

top sw_led( // экземпляр основного модуля

.sw (sw),

.led (led)

);

endmodule

module user_and( // модуль пользовательского логического И

input a, b,

output c

);

assign c = a & b;

endmodule

module user_not( // модуль пользовательского логического НЕ

input a,

output c

);

assign c = ~ a;

endmodule

module user_or( // модуль пользовательского логического ИЛИ

input a, b,

output c

);

assign c = a | b;

endmodule

4. Указание отличий данной работы от предыдущей.

Отличие предыдущей работы заключается в наличии процессорного модуля. Всё взаимодействие с периферией происходило через процессор. В этой работе мы не используем процессор, а напрямую конфигурируем модуль на ПЛИС.

5. Текст тестового модуля для индивидуального задания с комментариями каждой строки.

module top_tb( ); // тестбенч для проверки

reg [7:0] in_tb; // входные регистры модуля

wire [2:0] out_tb; // выход модуля

integer i; // объявление целочисленной переменной для шкалы

// времени

top DUT( // экземпляр основного модуля

.sw (in_tb),

.led (out_tb)

);

initial begin

for(i = 0; i < 256; i = i + 1) begin

in_tb = i;

#10;

end

endmodule

6. Зарисованные временные диаграммы.

7. Таблица из 5 наборов значений входных и выходных сигналов.

in[7]

in[6]

in[5]

in[4]

in[3]

in[2]

in[1]

in[0]

out[2]

out[1]

out[0]

0

0

0

0

0

1

1

1

1

1

0

0

0

0

0

1

0

0

0

1

1

1

0

0

0

0

1

0

0

1

1

1

1

0

0

0

1

1

1

1

0

1

0

0

0

0

1

0

0

0

0

0

0

1

1

8. Выводы о правильности работы.

Данные с проверки на оборудовании совпадают с данными, полученными после модуляции, и с расчётными данными.

Программа работает корректно, ошибок не обнаружено.

Соседние файлы в папке ЛР