Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР / Основы разработки систем на кристалле (метода)

.pdf
Скачиваний:
456
Добавлен:
29.12.2023
Размер:
2.76 Mб
Скачать

Таблица 6

Соответствие входных и выходных сигналов

SW[4]

SW[5]

LED[3]

0

0

 

0

1

 

1

0

 

1

1

 

Рис. 33. Логический элемент 1

Рис. 35. Логический элемент 3

Таблица 7

Соответствие входных и выходных сигналов

SW[6]

SW[7]

LED[4]

0

0

 

0

1

 

1

0

 

1

1

 

Рис. 34. Логический элемент 2

Рис. 36. Логический элемент 4

6.6. Введите программу согласно листингу:

#include <stdio.h> #include "xil_printf.h" #include "xparameters.h" #include "xgpiops.h" #include "xstatus.h" #include "math.h"

#define PIN_OFFSET 54 #define width_emio 16 #define led_low_adr 8

u8 SWS[8] = {};

u8 LED[5] = {};

int main()

{

static XGpioPs psGpioInstancePtr; XGpioPs_Config *GpioConfigPtr; int xStatus;

GpioConfigPtr = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID);

30

xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr, GpioConfigPtr, GpioConfigPtr- >BaseAddr);

if(XST_SUCCESS != xStatus)

print(" PS GPIO INIT FAILED \n\r");

for (int i = 0; i < width_emio; i++){ if(i<=led_low_adr-1){

XGpioPs_SetDirectionPin(&psGpioInstancePtr, PIN_OFFSET + i, 0); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, PIN_OFFSET + i, 0);

}

else {

XGpioPs_SetDirectionPin(&psGpioInstancePtr, PIN_OFFSET + i, 1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, PIN_OFFSET + i, 1);

}

}

while (1){

for(int i = 0; i<8; i++){

SWS[i] = XGpioPs_ReadPin(&psGpioInstancePtr, PIN_OFFSET+i);

}

LED[0]= SWS[0];

LED[1]= !(SWS[1]&&SWS[2]); LED[2]= ! SWS[3];

LED[3]= SWS[4]||SWS[5];

LED[4]= SWS[6]^ SWS[7];;

for(int i = 0; i<5; i++){

XGpioPs_WritePin(&psGpioInstancePtr, PIN_OFFSET+8+i, LED[i]);

}

}

return 0;

}

6.7. Опишите ожидаемый результат работы программы в протоколе.

Примечание. Обратите внимание, что начальное значение битов EMIO начинается с фиксированным смещением – со значения 54. А бит MIO, подключенный к процессорной подсистеме напрямую, имеет значение 7, что отражено маркировкой на отладочной плате MIO7 (LD9).

Функция XGpioPs_SetDirectionPin устанавливает направление передачи информации. Если последний параметр равен 1 – линия настроена на вывод, а если равна 0 – на ввод.

Функция XGpioPs_WritePin устанавливает соответствующее значение сигнала в линию.

31

7. Проверка приложения на плате.

7.1.Убедитесь, что jtag-отладчик и UART от платы подключены

ккомпьютеру, включите питание платы.

7.2.Нажмите правой кнопкой мыши на названии приложения и далее

ввыпадающих списках Run As Run Configuration.

7.3.В открывшемся окне нажмите Xilinx C/C++ Application (GDB).

7.4.Настройте отладчик по примеру лабораторной работы 2.

7.5.Нажмите Save, а затем Run. Дождитесь компиляции проекта и прошивки платы.

7.6.Запрограммируйте FPGA по аналогии с лабораторной работой 2.

7.7.Сверьте ожидаемый результат работы переключателей и светодиодов с работой платы.

7.8.Измените программу согласно индивидуальному заданию.

Содержание отчета

1.Задача и цели лабораторной работы.

2.Чертеж блок-схемы проекта с отметками о назначении блоков.

3.Блок-схема алгоритма работы программы индивидуального задания.

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

5.Заметки из протокола.

Задание к лабораторной работе

Для выполнения самостоятельной работы создайте отдельное приложение внутри проекта: File New Application Project. Впишите имя приложения и установите переключатель в положение Use existing, указав на созданный ранее BSP.

1.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла по нажатию BTN9.

2.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при SW[7] = 1.

3.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при SW[5] = 0.

4.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла по нажатию BTN8.

32

5.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла по нажатию BTN9.

6.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при LD[4] = 1.

7.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при SW[6] = 0.

8.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при LD[3] = 1.

9.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при SW[2] = 1.

10.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при LD[7] = 1.

11.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при LD[2] = 1 .

12.Получите индивидуальную схему на логических элементах у преподавателя. Разработайте программу согласно полученному варианту. Реализуйте выход из цикла при SW[3] = 0.

33

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

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

Цель работы

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

Основные вопросы, изучаемые перед выполнением работы

1.Написание многофайловых модулей в проекте.

2.Соединение скользящих переключателей и светодиодов с частью PL

на плате ZedBoard.

3.Структура лабораторного макета ZedBoard.

4.Логические операторы, построение комбинационных схем.

Содержание работы

1. Создать новую отдельную директорию для лабораторной работы по аналогии с лабораторной работой 1. Например, полный путь к директории для данной лабораторный работы:

D:/(Год)/(Фамилия) (группа)/soc-lab-4

2. Создание проекта в Vivado 2016.4.

2.1. Создайте проект с именем sw_led_variant_(номер варианта) по аналогии с лабораторной работой 1 (рис. 37).

Рис. 37. Окно с примером создания проекта

2.2.Нажмите кнопку Project Manager, затем – Add Sources. В открывшемся окне выберите Add or Create Design Sources (добавить или создать файл разрабатываемого устройства). Далее – Next.

2.3.Для создания нового файла нажмите Create File.

34

2.4.В появившемся окне введите имя файла user and и убедитесь, что языком разработки выбран Verilog.

2.5.Нажмите OK, а затем Finish. В открывшемся окне Define Modules нажмите OK.

2.6.После успешного создания файла найдите и кликните на файл

sw led.v в дереве проекта.

Примечание. Должна быть активна кнопка Project Manager.

На этом этапе создан файл устройства (Design Source).

2.7. Откройте файл устройства (Design Sources) с именем user_and.v из дерева проекта. Впишите следующие строки согласно листингу:

module user_and( input a,b, output c

);

assign c= a&b; endmodule

2.8. Создайте файл устройства (Design Sources) с именем user_or по аналогии c пп. 3.2–3.6. Впишите следующие строки согласно листингу:

module user_or( input a,b, output c

);

assign c= a|b; endmodule

2.9. Создайте файл устройства (Design Sources) с именем user_not по аналогии c пп. 3.2–3.6. Впишите следующие строки согласно листингу:

module user_not( input a, output c

);

assign c = ~ a; endmodule

2.10.На данном этапе построено три примитива – И, ИЛИ, НЕ, на основании которых средствами языка Verilog возможно описать любое устройство, избегая при этом множественного копирования.

2.11.Создайте файл устройства (Design Sources) с именем top по ана-

логии c пп. 3.2–3.6.

2.12.Проект данной работы можно структурно перерисовать в виде блоков (рис. 38), где модуль top будет нести в себе объединяющее значение.

35

Рис. 38. Структурная схема проекта

2.13.Зафиксируйте данную схему в протокол.

2.14.Заполните файл top.v согласно листингу:

module top( input [7:0] in, output [4:0] out

);

wire and_to_not;

user_and and_0 (

.a (in[7]),

.b (in[6]),

.c (out[4])

);

user_or or_0(

.a (in[5]),

.b (in[4]),

.c (out[3])

);

user_not not_0(

.a(in[3]),

.c (out[2])

);

user_and and_0(

.a (in[2]),

.b (in[1]),

.c (and_to_not)

);

user_not not_1(

36

.a (and_to_not),

.c(out[1])

);

assign out[0] = in [0]; endmodule

2.15. Сохраните файл и обратите внимание на структуру проекта в окне Sources (рис. 39): файл top стал модулем верхнего уровня.

Рис. 39. Структура модулей в проекте

2.16. Запустите RTL-анализ и откройте Schematic.

Примечание. Обратите внимание на реализацию проекта (рис. 40) в окне RTL-ана- лиза и названия модулей.

Рис. 40. Структура модулей в окне RLT-анализа

37

2.17. Разверните все модули, нажав на знак «+» и изучите реализацию проекта в виде вентилей (рис. 41). Зафиксируйте данную диаграмму в протокол. Подпишите назначение логических вентилей.

Рис. 41. Внутренняя структура модулей проекта

вокне RTL-анализа

2.18.Создайте Simulation-файл с именем top_tb для модуля top.

2.19.Заполните содержимое тестирующего файла согласно листингу:

`timescale 1ns / 1ps

module top_tb( ); reg [7:0] in_tb; wire [4:0] out_tb; integer i;

top DUT(

.in (in_tb),

.out(out_tb)

);

initial begin

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

#10;

38

end end

endmodule

2.20. Запустите симуляцию и проследите работу модуля на временной диаграмме (рис. 42).

Рис. 42. Временная диаграмма симуляции для модуля top

2.21. Запишите несколько наборов входных и выходных значений из окна симуляции в протокол.

3. Создание обертки для проекта и constrains-файла.

3.1. Разрабатываемые устройства на ПЛИС не являются самозамкнутыми: так как есть Input и Output, то должны быть и внешние устройства, которые соединяются с ними для обработки данных. Поэтому для модуля top целесообразно разработать внешний модуль, связанный с физическими устройствами: данными устройствами будут служить переключатели и светодиоды. Создайте файл устройства с именем sw_led_wrapper по аналогии c пп. 3.2–3.6. Впишите следующие строки согласно листингу:

module sw_led_wrapper( input [7:0] sw,

output [4:0] led

);

top sw_led(

.in (sw),

.out (led) ); endmodule

39

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