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

Быстрое прототипирование ядро IP HDL путем взаимодействия через интерфейс с требуемой платой по Ethernet или JTAG. Используйте соединение Ethernet для плат, которые имеют процессор ARM. Используйте связь JTAG для плат, которые не имеют процессора ARM.

Необходимые условия

Основанный на Ethernet интерфейс

Чтобы использовать основанную на Ethernet связь с вашими платами целевого компьютера, которые имеют встроенный процессор ARM, можно или сгенерировать скрипт программного интерфейса или создать скрипт заказного программного обеспечения. Перед подготовкой основанного на Ethernet интерфейса, настроенного SD-карта платы с изображением встроенного программного обеспечения MathWorks®. Настраивать микропрограммное изображение для вашей требуемой платы:

Скрипт программного интерфейса

Когда вы запускаете задачу 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 объект для целевого устройства и хранилища в hFPGA.

      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, чтобы сопоставить порты 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™ для платы FPGA Intel или Xilinx.

      % 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)
      
    6. Для примера при создании пользовательского интерфейсного скрипта и прототипировании вашего проекта на целевой плате FPGA по соединению Ethernet, см. Прототипный Проект FPGA на Оборудовании с Живыми Данными при помощи Команд MATLAB.

    JTAG основанный интерфейс

    Для автономных плат FPGA, которые не имеют встроенного процессора ARM, можно ввести MATLAB JTAG как Ведущий IP AXI в исходный проект. Создайте скрипт, который использует aximaster возразите что подключения к IP по физическому кабелю JTAG. Этот скрипт позволяет чтению и командам записи назнатить ячейки памяти ведомым устройством из командной строки MATLAB.

    Использовать MATLAB в качестве Ведущего устройства AXI:

    • Установите пакеты аппаратной поддержки HDL Verifier.

    • Не предназначайтесь для автономных плат, которые не имеют hRD.AXI4SlaveInterface функциональность или платы, которые основаны на Xilinx ISE.

    Введите MATLAB JTAG как ведущее устройство AXI

    Когда вы запускаете рабочий процесс Генерации Ядра IP, в Set Target> задача Set Target Reference Design, выбираете Default system for Reference Design и устанавливаете Insert JTAG MATLAB as AXI Master на на.

    Чтобы сгенерировать Ядро IP и создать проект с Основным IP AXI, щелкните правой кнопкой по задаче Create Project и выберите Run to Selected Task.

    Управляйте ядром IP HDL Coder в командной строке MATLAB

    Можно теперь взаимодействовать с целевой платой FPGA при помощи MATLAB JTAG как Ведущая функция AXI. Создайте объект при помощи aximaster объект. Используйте созданный объект в качестве драйвера для addAXI4SlaveInterface функция.

    % 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");
    
    

    Для примера о том, как взаимодействовать через интерфейс с требуемой платой по JTAG, смотрите Используя MATLAB JTAG, когда Ведущее устройство AXI, чтобы управлять HDL Coder сгенерировало Ядро IP.

    Похожие темы