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

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

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

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

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

(СПБГУТ)

_________________________________________________________________________

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

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

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

ПОСТРОЕНИЕ BRAM-ПАМЯТИ С АДРЕСНЫМ ДОСТУПОМ ИЗ ПРОЦЕССОРНОЙ ЧАСТИ СИСТЕМЫ НА КРИСТАЛЛЕ

Выполнили

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

Проверил:

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

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

2023

1. Цель работы.

Разработка проекта блочной двухпортовой памяти, размещенной на ресурсах ПЛИС.Разработка приложения для записи и чтения данных процессорной системой из областипрограммируемой логики. Проверка проекта на отладочной плате ZedBoad.

2. Блок-схема проекта.

3 . Адресация памяти.

4. Описание работы Bram Controller.

AXI Bram Controller (Bram – Block RAM) - это компонент системы на кристалле (SoC), который обеспечивает связь между шиной AXI и внешней памятью типа Block RAM (BRAM).

AXI Bram Controller предоставляет интерфейс для чтения и записи данных во внешнюю память типа BRAM. Он поддерживает различные режимы доступа, такие как чтение, запись и чтение-запись.

Внешняя память типа BRAM является блочным устройством памяти, которое может обеспечивать быстрый доступ к данным. BRAM обычно используется для хранения данных, которые требуют быстрого доступа, таких как буферы, кэши и промежуточные данные.

Когда происходит операция чтения или записи, AXI Bram Controller получает запрос от шины AXI. Затем он выполняет необходимые операции для чтения или записи данных во внешнюю память BRAM. После завершения операции он возвращает результат шине AXI.

5. Описание работы Block Memory Generator.

Block Memory Generator — это IP ядро для создания компактных, высокопроизводительных запоминающих устройств, работающих на частоте до 450 МГц, автоматизирует создание оптимизированных по ресурсам и энергопотреблению блоков памяти. Ядро позволяет пользователям создавать функции блочной памяти в соответствии с различными требованиями.

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

#include <stdio.h>

#include "xil_io.h"

#include "xparameters.h"

int main(void)

{

// запись 16 байтной строки ABCDEFGHIJKLMNOP по одному байту.

for (int i = 0; i < 16; ++i)

Xil_Out8(XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR+i, 'A'+i);

// чтение 16 байтной строки ABCDEFGHIJKLMNOP по два байта и запись в массив.

short read1[8];

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

read1[i] = Xil_In16(XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR+i*2);

// вывод в консоль

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

printf("%x ", read[i]);

printf("\n");

// запись 8 байтной строки ZYXWVUTS по одному байту.

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

Xil_Out8(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR+i, 'Z'-i);

// чтение 8 байтной строки ZYXWVUTS по одному байту и запись в массив.

char read2[8];

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

read2[i] = Xil_In8(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR+i);

// вывод в консоль

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

printf("%x ", read[i]);

printf("\n");

// Запись 8 байтного слова по 4 байта за раз.

Xil_Out32(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR, 0x11223344);

Xil_Out32(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR+4, 0x55667788);

// Чтение 8 байтного слова по 4 байта за раз.

int read3[2];

read3[0] = Xil_In32(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR);

read3[1] = Xil_In32(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR+4);

// вывод в консоль

printf("%x %x\n", read[0], read[1]);

// Запись в RAM 2 байтного слова по 1 байту за раз.

Xil_Out8(0xE000A244, 0xAA);

Xil_Out8(0xE000A244+1, 0xBB);

// Чтение из RAM 2 байтного слова по 1 байту за раз.

char read4[2];

read4[0] = Xil_In8(0xE000A244);

read4[1] = Xil_In8(0xE000A244+1);

// вывод в консоль

printf("%x %x\n", read4[0], read4[1]);

return 0;

}

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