Создайте скрипт программного интерфейса, чтобы управлять и ядро IP HDL быстрого прототипирования

Когда вы запускаете 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 и выходные данные, чтобы читать из портов.

Разработайте скрипт программного интерфейса

Можно настроить скрипт сгенерированного программного обеспечения или создать собственный скрипт программного интерфейса с нуля. Эта страница документации описывает, как разработать ваш собственный скрипт.

Шаг 1: создайте 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]
    

Шаг 2: сконфигурируйте интерфейсы AXI

Сконфигурируйте интерфейсы 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");

Шаг 3: сконфигурируйте информацию об отображении порта

Можно указать информацию о портах 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"

Шаг 4: Запись данных и чтение Выход

Чтобы протестировать базовую функциональность IP HDL, используйте readPort и writePort функции, чтобы записать данные к или считать данные из этих портов.

writePort(hFPGA, "h_in1", 5);

writePort(hFPGA, "x_in", sin(linspace(0, 2*pi, 1024)));
data = readPort(hFPGA, "y_out");

Шаг 5: выпустите аппаратные ресурсы

После того, как вы протестировали ядро IP HDL, можно выпустить аппаратный ресурс, сопоставленный с fpga объект при помощи release функция.

release(hFPGA)

Смотрите также

Объекты

Похожие темы