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 соединяются с вашим хостом - компьютером, объект приоритизирует Digilentcables по кабелям 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

Для просмотра документации необходимо авторизоваться на сайте