Когда вы запускаете IP Core Generation
рабочий процесс для вашей модели Simulink®, можно сгенерировать скрипт программного интерфейса к быстрому прототипированию ядро IP HDL. Скрипт содержит команды, которые позволяют вам соединиться с целевым компьютером от MATLAB®, и записать в или читать из сгенерированного ядра IP.
Когда вы запускаете IP Core Generation
рабочий процесс к задаче Generate Software Interface и устанавливает флажок Generate MATLAB software interface script, два файла MATLAB сгенерированы:
gs_modelName_setup.m
скрипт настройки, который добавляет ведомое устройство AXI4 и AXI4-потоковые интерфейсы. Скрипт также содержит объекты порта DUT, которые имеют имя порта, направление, тип данных и информацию об отображении интерфейса. Это затем сопоставляет порты DUT с соответствующими интерфейсами.
gs_modelName_interface.m
создает целевой объект, инстанцирует скрипта настройки gs_modelName_setup.m
, и затем подключения к целевому компьютеру. Это затем отправляет чтение и команды записи к сгенерированному ядру IP HDL.
Смотрите генерируют программный интерфейс, чтобы зондировать и быстрое прототипирование ядро IP HDL.
Для быстрого прототипирования настройте скрипт программного интерфейса или создайте свой собственный скрипт на основе того, как вы изменяете свой первоначальный проект. Настройте скрипт, чтобы задать:
Целевой объект для различного поставщика FPGA.
Дополнительные интерфейсы или конфигурируют существующие интерфейсы на основе модификаций к вашему первоначальному проекту. HDL Coder™ использует эту информацию, чтобы автоматически создать драйверы IIO, чтобы получить доступ к ядру IP HDL.
Дополнительные объекты порта DUT или удаляют существующие объекты на основе того, как вы изменяете свой проект, и затем изменяете информацию об отображении соответственно.
Входные данные, чтобы записать в порты DUT и выходные данные, чтобы читать из портов.
Можно настроить скрипт сгенерированного программного обеспечения или создать собственный скрипт программного интерфейса с нуля. Эта страница документации описывает, как разработать ваш собственный скрипт.
fpga
Объект для целевого поставщика FPGAСоздайте fpga
объект для целевого устройства.
hFPGA = fpga("Xilinx")
hFPGA = fpga with properties: Vendor: "Xilinx" Interfaces: [0×0 fpgaio.interface.InterfaceBase]
Использовать цель Intel®:
hFPGA = fpga("Intel")
hFPGA = fpga with properties: Vendor: "Intel" Interfaces: [0×0 fpgaio.interface.InterfaceBase]
Сконфигурируйте интерфейсы AXI для отображения с портами DUT в сгенерированном ядре IP HDL. Можно добавить ведомое устройство AXI4 и AXI4-потоковые интерфейсы. Чтобы добавить ведомые интерфейсы AXI4, используйте addAXI4SlaveInterface
функция.
addAXI4SlaveInterface(hFPGA, ... ... % Interface properties "InterfaceID", "AXI4-Lite", ... "BaseAddress", 0xA0000000, ... "AddressRange", 0x10000, ... ... % Driver properties "WriteDeviceName", "mwipcore0:mmwr0", ... "ReadDeviceName", "mwipcore0:mmrd0");
Чтобы добавить AXI4-потоковые интерфейсы, используйте addAXI4StreamInterface
функция.
addAXI4StreamInterface(hFPGA, ... ... % Interface properties "InterfaceID", "AXI4-Stream", ... "WriteEnable", true, ... "ReadEnable", true, ... "WriteFrameLength", 1024, ... "ReadFrameLength", 1024, ... ... % Driver properties "WriteDeviceName", "mwipcore0:mm2s0", ... "ReadDeviceName", "mwipcore0:s2mm0");
Информация отображения интерфейса, которую вы указали, сохранена как свойство на fpga
объект, hFPGA
.
hFPGA
hFPGA = fpga with properties: Vendor: "Xilinx" Interfaces: [1×2 fpgaio.interface.InterfaceBase]
Для автономных плат FPGA, которые не имеют встроенного процессора ARM, можно создать объект и затем использовать aximaster
возразите и затем используйте этот объект в качестве драйвера для addAXI4SlaveInterface
функция. aximaster
объект требует пакета поддержки HDL Verifier™ для платы Xilinx® FPGA или Intel.
% Create an "aximaster" object hAXIMDriver = aximaster("Xilinx"); % Pass it into the addInterface command addAXI4SlaveInterface(hFPGA, ... ... % Interface properties "InterfaceID", "AXI4-Lite", ... "BaseAddress", 0xB0000000, ... "AddressRange", 0x10000, ... ... % Driver properties "WriteDriver", hAXIMDriver, ... "ReadDriver", hAXIMDriver, ... "DriverAddressMode", "Full");
Можно указать информацию о портах DUT в сгенерированном ядре IP HDL как массив объекта порта при помощи hdlcoder.DUTPort
объект. Объект представляет порты вашего DUT на целевом компьютере.
hPort_h_in1 = hdlcoder.DUTPort("h_in1", ... "Direction", "IN", ... "DataType", numerictype(1,16,10), ... "Dimension", [1 1], ... "IOInterface", "AXI4-Lite", ... "IOInterfaceMapping", "0x100")
hPort_h_in1 = DUTPort with properties: Name: "h_in1" Direction: IN DataType: [1×1 embedded.numerictype] Dimension: [1 1] IOInterface: "AXI4-Lite" IOInterfaceMapping: "0x100"
Чтобы записать в или читать из портов DUT в сгенерированном ядре IP HDL, сопоставьте порты с интерфейсом AXI при помощи mapPort
функция. После того, как вы сопоставите порты с интерфейсами, эта информация сохранена на fpga
возразите как Interfaces
свойство.
mapPort(hFPGA, hPort_h_in1); hFPGA.Interfaces
ans = AXI4Slave with properties: InterfaceID: "AXI4-Lite" BaseAddress: "0xA0000000" AddressRange: "0x10000" WriteDriver: [1×1 fpgaio.driver.AXIMemoryMappedIIOWrite] ReadDriver: [1×1 fpgaio.driver.AXIMemoryMappedIIORead] InputPorts: "h_in1" OutputPorts: [0×0 string]
Можно также указать эту информацию для портов, сопоставленных с AXI4-потоковыми интерфейсами.
hPort_x_in_data = hdlcoder.DUTPort("x_in_data", ... "Direction", "IN", ... "DataType", numerictype(1,16,10), ... "Dimension", [1 1], ... "IOInterface", "AXI4-Stream"); hPort_y_out_data = hdlcoder.DUTPort("y_out_data", ... "Direction", "OUT", ... "DataType", numerictype(1,32,20), ... "Dimension", [1 1], ... "IOInterface", "AXI4-Stream");
Чтобы записать в или читать из портов DUT в сгенерированном ядре IP HDL, сопоставьте порты с интерфейсом AXI при помощи mapPort
функция.
mapPort(hFPGA, [hPort_x_in_data, hPort_y_out_data]);
fpga
возразите как Interfaces
свойство.hFPGA
hFPGA = fpga with properties: Vendor: "Xilinx" Interfaces: [1×2 fpgaio.interface.InterfaceBase]
hFPGA.Interfaces
ans = AXI4Slave with properties: InterfaceID: "AXI4-Lite" BaseAddress: "0xA0000000" AddressRange: "0x10000" WriteDriver: [1×1 fpgaio.driver.AXIMemoryMappedIIOWrite] ReadDriver: [1×1 fpgaio.driver.AXIMemoryMappedIIORead] InputPorts: "h_in1" OutputPorts: [0×0 string] AXI4Stream with properties: InterfaceID: "AXI4-Stream" WriteEnable: 1 ReadEnable: 1 WriteFrameLength: 1024 ReadFrameLength: 1024 WriteDriver: [1×1 fpgaio.driver.AXIStreamIIOWrite] ReadDriver: [1×1 fpgaio.driver.AXIStreamIIORead] InputPorts: "x_in_data" OutputPorts: "y_out_data"
Чтобы протестировать базовую функциональность IP HDL, используйте readPort
и writePort
функции, чтобы записать данные к или считать данные из этих портов.
writePort(hFPGA, "h_in1", 5); writePort(hFPGA, "x_in", sin(linspace(0, 2*pi, 1024))); data = readPort(hFPGA, "y_out");
После того, как вы протестировали ядро IP HDL, можно выпустить аппаратный ресурс, сопоставленный с fpga
объект при помощи release
функция.
release(hFPGA)