Считайте и запишите ячейки памяти на аппаратной плате из MATLAB
Объект socAXIMaster
связывается с ведущим IP MATLAB® AXI, работающим на аппаратной плате. Объект использует связь JTAG, чтобы передать чтение и команды записи к IP и ведомым ячейкам памяти доступа на аппаратной плате. Передайте объект socAXIMaster
в качестве аргумента, когда вы создаете объект socIPCore
, так, чтобы объект мог получить доступ к ячейкам памяти в ядре IP на плате.
создает объект, который соединяется с основным IP AXI для заданного axiMasterObj
= socAXIMaster(vendor
)vendor
.This, связь позволяет ячейкам памяти доступа в проекте SoC из MATLAB.
создает объект, который соединяется с основным IP AXI на заданной аппаратной плате. axiMasterObj
= socAXIMaster(hw
)
создает объект с дополнительными свойствами, заданными одним или несколькими аргументами пары axiMasterObj
= socAXIMaster(___,Name,Value)Name,Value
. Заключите каждое имя свойства в кавычки. Задайте свойства в дополнение к входным параметрам в предыдущих синтаксисах.
vendor
— Фирменный знак FPGA'Intel'
| 'Xilinx'
Фирменный знак FPGA, заданный как 'Intel'
или 'Xilinx'
. Основной IP AXI отличается в зависимости от типа FPGA, который вы имеете.
hw
— HardwaresocHardwareBoard
Объект Hardware, заданный как объект socHardwareBoard
, который представляет связь с аппаратной платой SoC.
JTAGCableType
— Тип кабеля JTAG, используемого для связи с платой FPGA (только платы Xilinx®)'auto'
(значение по умолчанию) | 'FTDI'
Тип кабеля JTAG, используемого для связи с платой FPGA (только платы Xilinx), заданный как 'auto'
или 'FTDI'
. Это свойство является самым полезным, когда больше чем один кабель соединяется с хостом - компьютером.
Когда это свойство установлено в 'auto'
(значение по умолчанию), объект автоматически обнаруживает тип кабеля JTAG. Объект приоритизирует поиск кабелей Digilent® и использует этот процесс, чтобы автоматически обнаружить тип кабеля.
Поиски объектов socAXIMaster
кабеля Digilent. Если объект находит:
Точно один кабель Digilent – объект использует тот кабель для связи с платой FPGA.
Больше чем один кабель Digilent – объект возвращает ошибку. Чтобы разрешить эту ошибку, задайте желаемый кабель с помощью свойства JTAGCableName
.
Никакие кабели Digilent – поиски объектов кабеля FTDI (см. шаг 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.
JTAGCableName
— Имя кабеля JTAG используется для связи с платой FPGA'auto'
(значение по умолчанию) | вектор символовИмя пользователя проводного устройства JTAG для связи с платой FPGA, заданной как 'auto'
или вектор символов. Задайте это свойство, если больше чем один кабель JTAG того же типа соединяется с хостом - компьютером. Если хост - компьютер имеет больше чем один кабель JTAG, и вы не задаете это свойство, объект возвращает ошибку. Сообщение об ошибке содержит имена доступных кабелей JTAG. Для примера смотрите Выбор из Нескольких Кабелей JTAG.
TckFrequency
— JTAG синхронизируют частоту15
(значение по умолчанию) | положительное целое числоJTAG синхронизируют частоту, в МГц, заданном как положительное целое число. Для Intel® FPGAs частота часов JTAG должна составить 12 МГц или 24 МГц. Для Xilinx FPGAs частота часов JTAG должна составить 33 МГц или 66 МГц. Частота часов JTAG зависит от типа кабеля и максимальной частоты часов, поддержанной платой FPGA.
JTAGChainPosition
— Положение FPGA в цепочке JTAG (только платы Xilinx)1
(значение по умолчанию) | положительное целое числоПоложение FPGA в цепочке JTAG (только платы Xilinx), заданный как положительное целое число. Задайте это значение свойства, если больше чем одно устройство FPGA или Zynq® находится на цепочке JTAG.
IRLengthBefore
— Сумма длины регистра команд для всех устройств перед целевым FPGA (только платы Xilinx)0
(значение по умолчанию) | неотрицательное целое числоСумма длины регистра команд для всех устройств перед целевым FPGA (только платы Xilinx), заданный как неотрицательное целое число. Задайте это значение свойства, если больше чем одно устройство FPGA или Zynq находится на цепочке JTAG.
IRLengthAfter
— Сумма длины регистра команд для всех устройств после целевого FPGA (только платы Xilinx)0
(значение по умолчанию) | неотрицательное целое числоСумма длины регистра команд для всех устройств после целевого 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')
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.