socAXIMaster

Считайте и запишите ячейки памяти на аппаратной плате из MATLAB

Описание

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

Создание

Описание

пример

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

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

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

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

развернуть все

Фирменный знак FPGA в виде 'Intel' или 'Xilinx'. Основной IP AXI варьируется в зависимости от типа FPGA, который вы имеете.

Объект Hardware в виде socHardwareBoard объект, который представляет связь с аппаратной платой SoC.

Свойства

развернуть все

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

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

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

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

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

    • Никакие кабели Digilent – поиски объектов кабеля FTDI (см. шаг 2).

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

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

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

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

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

Когда это свойство установлено в 'FTDI', поиски объектов кабелей FTDI. Если объект находит:

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

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

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

Для примера смотрите Выбор из Нескольких Кабелей JTAG.

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

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

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

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

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

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

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

Примеры

свернуть все

Для примера того, как сконфигурировать и использовать основной IP AXI в вашем проекте, смотрите Произвольный доступ Внешней памяти. А именно, рассмотрите soc_image_rotation_axi_master.m скрипт, который инициализирует память на устройстве, запускает логику FPGA и считывает назад модифицированные данные. Этот пример показывает только шаг инициализации памяти.

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

Создайте объект шаблона AXI MATLAB. Объект соединяется с аппаратной платой и подтверждает, что 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 соединяются с вашим хостом - компьютером, объект приоритизирует кабели Digilent по кабелям 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.

Чтобы связаться с этой платой Арти, задайте соответствие имя кабеля JTAG.

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

Введенный в R2019a