socAXIMaster

Считывайте и записывайте места памяти на аппаратной плате из MATLAB

Описание

The socAXIMaster объект взаимодействует с MATLAB® Главный IP AXI, работающий на оборудовании плате. Объект использует соединение JTAG для пересылки команд чтения и записи на IP и доступа к расположениям ведомой памяти на аппаратной плате. Передайте socAXIMaster объект как аргумент при создании socIPCore объект, так что объект может получить доступ к местам памяти внутри ядра IP на плате.

Создание

Описание

пример

axiMasterObj = socAXIMaster(vendor) создает объект, который соединяется с основным IP-адресом AXI для заданного vendor.This connection позволяет вам получить доступ к местам памяти в проект от MATLAB.

axiMasterObj = socAXIMaster(hw) создает объект, который соединяется с основным IP-адресом AXI на указанной аппаратной плате.

axiMasterObj = socAXIMaster(___,Name,Value) создает объект с дополнительными свойствами, заданными одним или несколькими Name,Value аргументы в виде пар. Заключайте каждое имя свойства в кавычки. Задайте свойства в дополнение к входным параметрам в предыдущих синтаксисах.

Входные параметры

расширить все

Имя бренда FPGA, обозначаемое как 'Intel' или 'Xilinx'. Основной IP AXI изменяется в зависимости от типа FPGA.

Аппаратный объект, заданный как socHardwareBoard объект, представляющий соединение с аппаратной платой СнК.

Свойства

расширить все

Тип кабеля JTAG, используемого для связи с платой FPGA (только для плат Xilinx), указывается как 'auto' или 'FTDI'. Это свойство наиболее полезно, когда к хосту-компьютеру подключено более одного кабеля.

Когда для этого свойства задано значение 'auto' (по умолчанию), объект автоматически определяет тип кабеля JTAG. Объект расставляет приоритеты в поиске Digilent® Кабели и используют этот процесс для автоматического определения типа кабеля.

  1. The socAXIMaster объект выполняет поиск кабеля Digilent. Если объект находит:

    • Только один кабель Digilent - объект использует этот кабель для связи с платой FPGA.

    • Более одного кабеля Digilent - объект возвращает ошибку. Чтобы устранить эту ошибку, укажите требуемый кабель с помощью JTAGCableName свойство.

    • Нет кабелей Digilent - объект ищет кабель FTDI (см. Шаг 2).

  2. Если кабель Digilent не найден, socAXIMaster объект выполняет поиск кабеля FTDI. Если объект находит:

    • Только один кабель FTDI - объект использует этот кабель для связи с платой FPGA.

    • Более одного кабеля FTDI -- Объект возвращает ошибку. Чтобы устранить эту ошибку, укажите требуемый кабель с помощью JTAGCableName свойство.

    • Нет кабелей FTDI -- Объект возвращает ошибку. Чтобы устранить эту ошибку, подключите кабель Digilent или FTDI.

Поиск кабеля в 'auto' режим определяет приоритеты подключения с помощью цифрового кабеля. Если к хосту-компьютеру подключены один кабель Digilent и один кабель FTDI, и для этого свойства задано значение 'auto'объект выбирает кабель Digilent для связи с платой FPGA.

Когда для этого свойства задано значение 'FTDI'объект ищет кабели FTDI. Если объект находит:

  • Только один кабель FTDI - объект использует этот кабель для связи с платой FPGA.

  • Более одного кабеля FTDI -- Объект возвращает ошибку. Чтобы устранить эту ошибку, укажите требуемый кабель с помощью JTAGCableName свойство.

  • Нет кабелей FTDI -- Объект возвращает ошибку. Чтобы устранить эту ошибку, подключите кабель Digilent или FTDI.

Для получения примера см. раздел «Выбор из нескольких кабелей JTAG».

Имя пользователя кабеля JTAG для связи с платой FPGA, указанное как 'auto' или вектор символов. Задайте это свойство, если к хосту-компьютеру подключено более одного кабеля JTAG того же типа. Если у хост-компьютер больше одного кабеля JTAG, и вы не задаете это свойство, объект возвращает ошибку. Сообщение об ошибке содержит имена доступных кабелей JTAG. Для получения примера см. раздел «Выбор из нескольких кабелей JTAG».

Тактовая частота JTAG, в МГц, задается как положительное целое число. Для Intel® FPGA тактовая частота JTAG должна быть 12 МГц или 24 МГц. Для плат Xilinx FPGA тактовая частота JTAG должна быть 33 МГц или 66 МГц. Тактовая частота JTAG зависит от типа кабеля и максимальной тактовой частоты, поддерживаемой платой FPGA.

Положение FPGA в цепи JTAG (только для плат Xilinx) в виде положительного целого числа. Задайте это значение свойства, если более одного FPGA или Zynq® устройство находится в цепи JTAG.

Сумма длины регистра команд для всех устройств перед целевым FPGA (только для плат Xilinx), заданная в виде неотрицательного целого числа. Задайте это значение свойства, если в цепи JTAG находится более одного устройства FPGA или Zynq.

Сумма длины регистра команд для всех устройств после целевых плат FPGA (только для плат Xilinx), заданная в виде неотрицательного целого числа. Задайте это значение свойства, если в цепи JTAG находится более одного устройства FPGA или Zynq.

Функции объекта

readmemoryСчитайте данные из AXI4 ведомых устройств, сопоставленных с памятью
releaseОтпустите ресурс кабеля JTAG
writememoryЗапись данных в AXI4 подчиненные устройства, сопоставленные с памятью

Примеры

свернуть все

Для примера того, как сконфигурировать и использовать мастер-IP AXI в вашем проекте, смотрите Random Access of External Memory. В частности, проверьте soc_image_rotation_axi_master.m скрипт, который инициализирует память на устройстве, запускает логику FPGA и считывает измененные данные. В этом примере показан только шаг инициализации памяти.

Загрузка .mat файл, содержащий структуры, выведенные из параметров конфигурации платы. Этот файл был сгенерирован SoC Builder. Эти структуры также описывают IP-ядра и строение памяти проекта на плате. Настройте главное соединение JTAG AXI путем создания socHardwareBoard и передав его в socAXIMaster объект. The socAXIMaster объект соединяется с платой оборудования и подтверждает, что IP присутствует.

load('soc_image_rotation_zc706_aximaster.mat');
hwObj = socHardwareBoard('Xilinx Zynq ZC706 evaluation kit','Connect',false);
AXIMasterObj = socAXIMaster(hwObj);

Инициализируйте содержимое памяти на устройстве, загрузив данные рисунки и записав их в Region1. Логика FPGA предназначена для чтения этих данных, вращения их и записи в Region2. Очистить содержимое Region2.

load('soc_image_rotation_inputdata.mat');
inputFigure = smallImage;
[x, y] = size(inputFigure);
inputImage = uint32(reshape(inputFigure',1,x*y));
writememory(AXIMasterObj,memRegions.AXI4MasterMemRegion1,inputImage);
writememory(AXIMasterObj,memRegions.AXI4MasterMemRegion2,uint32(zeros(1,x*y)));

В данном примере необходимо иметь проект, выполняемый на аппаратной плате, подключенной к хост-машине MATLAB.

Создайте основной объект MATLAB AXI. Объект соединяется с платой оборудования и подтверждает, что IP присутствует. Можно создать объект с именем поставщика или socHardwareBoard объект.

mem = socAXIMaster('Xilinx');

Запись и чтение одного или нескольких адресов с помощью одной команды. По умолчанию функции автоматически увеличивают адрес для каждого слова данных. Например, напишите десять адресов, а затем считайте данные обратно из одного местоположения.

writememory(mem,140,[10:19])
rd_d = readmemory(mem,140,1)
rd_d =

  uint32

   10

Теперь ознакомьтесь с письменными данными из десяти локаций.

rd_d = readmemory(mem,140,10)
rd_d =

  1×10 uint32 row vector

   10   11   12   13   14   15   16   17   18   19

Установите BurstType свойство к 'Fixed' чтобы выключить автошаг и получить доступ к одному и тому же адресу несколько раз. Например, считывайте записанные данные десять раз с одного и того же адреса.

rd_d = readmemory(mem,140,10,'BurstType','Fixed')
rd_d =

  1×10 uint32 row vector

   10   10   10   10   10   10   10   10   10   10

Напишите инкрементные данные в десять раз по одному и тому же адресу. Окончательное значение, сохраненное в адресных 140 является 29.

writememory(mem,140,[20:29],'BurstType','Fixed')
rd_d = readmemory(mem,140,10)
rd_d =

  1×10 uint32 row vector

   29   11   12   13   14   15   16   17   18   19

Кроме того, укажите адрес как шестнадцатеричную строку. Чтобы привести считанные данные к типу данных, отличному от uint32, используйте OutputDataType свойство.

writememory(mem,'1c',[0:4:64])
rd_d = readmemory(mem,'1c',16,'OutputDataType',numerictype(0,6,4))
rd_d = 

  Columns 1 through 10
         0    0.2500    0.5000    0.7500    1.0000    1.2500    1.5000    1.7500    2.0000    2.2500
  Columns 11 through 16
    2.5000    2.7500    3.0000    3.2500    3.5000    3.7500

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 6
        FractionLength: 4

После завершения доступа к плате разблокируйте соединение JTAG.

release(mem)

При подключении нескольких кабелей JTAG к хосту-компьютеру объект отдает приоритет цифровым кабелям по сравнению с кабелями FTDI. Для использования кабеля FTDI задайте свойство типа кабеля JTAG.

h = socAXIMaster('Xilinx', 'JTAGCableType', 'FTDI')

Если к хосту-компьютеру подключены два кабеля одного типа, задайте JTAGCableName свойство для платы, на которой работает главный IP-адрес JTAG. Чтобы увидеть идентификаторы кабеля JTAG, попытайтесь создать socAXIMaster объект, который в этом случае ошибается и возвращает список текущих имен кабелей JTAG.

h = socAXIMaster('Xilinx')
Error using fpgadebug_mex
Found more than one JTAG cable:
0 (JtagSmt1): #tpt_0001#ptc_0002#210203991642
1 (Arty): #tpt_0001#ptc_0002#210319789795
Please disconnect the extra cable, or specify the cable name as an input argument.
See documentation of FPGA Data Capture or MATLAB as AXI master to learn how to set
the cable name.

Для связи с этой платой Arty задайте соответствующее имя кабеля JTAG.

h = socAXIMaster('Xilinx','JTAGCableName','#tpt_0001#ptc_0002#210319789795')

Введенный в R2019a