Импорт HDL-кода для функции MATLAB

Тип косимуляции - функция MATLAB

Если вы еще не сделали этого, активируйте Cosimulation Wizard.

cosimWizard

  1. На панели Cosimulation Type выберите MATLAB в поле HDL cosimulation with чтобы создать MATLAB® шаблон функции (испытательный стенд или компонент).

  2. Выберите ModelSim или Incisive для HDL Simulator.

  3. Выберите Use HDL simulator executables on the system path, где находятся файлы. По умолчанию Cosimulation Wizard принимает, что они находятся в системном пути.

    Если Симулятора HDL исполняемых файлов нет в системном пути, выберите Use the following HDL simulator executables at the following location и укажите расположение папки в текстовом поле ниже.

    При нажатии кнопки Next, а Cosimulation Wizard не находит исполняемые файлы, происходит следующее:

    • Вы вернетесь в это диалоговое окно, и в Cosimulation Wizard отобразится ошибка на панели состояния.

    • Этот Cosimulation Wizard переключает опцию на Use the following HDL simulator executables at the following location.

    • Этот Cosimulation Wizard делает поле пути симуляции HDL редактируемым.

    Перед продолжением необходимо ввести допустимый путь к Симулятору HDL исполняемым файлам.

  4. Нажмите Next.

HDL- Файлов - функция MATLAB

На панели HDL Files укажите файлы, которые будут использоваться при создании функции или блока.

  • Cosimulation Wizard пытается определить тип файлов каждого файла и отобразить тип в File List рядом с именем файла. Если Cosimulation Wizard не может определить тип или отображает неправильный тип, можно изменить тип непосредственно в File Type столбце.

  • По возможности Cosimulation Wizard автоматически определит порядок компиляции с помощью Симулятора HDL функциональности. Это означает, что вы можете добавить файлы в любом порядке.

  • Если вы используете ModelSim®, вы увидите скрипты компиляции, перечисленные как файлы .do (макро-файл ModelSim). Если вы используете Incisive®, вы увидите скрипты компиляции, перечисленные как системные скрипты.

  1. Щелкните Add, чтобы выбрать одно или несколько имен файлов.

  2. Удалите файлы, сначала выделив имя файла в File List, а затем нажав Remove Selected File.

  3. Нажмите Next.

Компиляция HDL - функция MATLAB

На панели HDL Compilation можно просмотреть сгенерированные команды компиляции. При необходимости можно переопределить и/или настроить эти команды. Если вы включили скрипты компиляции вместо HDL- файлов, на этой панели будет показана команда запуска этих скриптов.

  1. Все изменения команд вводятся в поле Compilation Commands.

    Примечание

    Не включать команды системного интерпретатора; для примера:

    set file = a.vhd vcom $file

    Когда управление возвращается в Cosimulation Wizard от выполнения команды, переменная больше не содержит заданное значение. Если вы пытаетесь включить этот тип команды, вы увидите ошибку на панели Status.

  2. Щелкните Restore default commands, чтобы вернуться к сгенерированным командам компиляции. Вы должны подтвердить, что хотите отменить любые изменения.

  3. Для продолжения нажмите кнопку Next.

HDL-модули - функция MATLAB

На панели HDL Module укажите имя HDL-модуля, который будет использоваться в косимуляции.

  1. Введите имя модуля в Name of HDL module to cosimulate with.

  2. Задайте дополнительные опции симуляции в Simulation options. Для примера на предыдущем изображении показаны следующие опции:

    • Разрешение симулятора HDL

    • Отключите оптимизацию, которая удаляет сигналы из вида симуляции

    Нажмите кнопку Restore Defaults, чтобы изменить опции на значения по умолчанию.

  3. Для Connection method выберите Shared Memory если политика межсетевого экрана не разрешает обмен данными между сокетами TCP/IP.

  4. Нажмите кнопку Next, чтобы перейти к следующему шагу. В это время в процессе приложение выполняет следующие действия в командном окне:

    • Запускает симулятор HDL.

    • Загрузка модуля HDL в симулятор HDL.

    • Запускает HDL-сервер и ожидает получения уведомления о запуске сервера.

    • Соединяется с HDL-сервером для получения информации о порте.

    • Отключение и отключение HDL-сервера.

Расписание коллбэка - функция MATLAB

  1. На панели Callback Schedule введите несколько компонентов или испытательный стенд коллбэков функции из Симулятора HDL. Введите следующую информацию для каждой функции обратного вызова:

    • Callback type: выбор matlabcp для создания функции компонента или matlabtb чтобы создать функцию испытательного стенда.

    • Callback function name (необязательно): Укажите имя компонента или испытательного стенда функции, если оно не совпадает с HDL-компонентом. Предположение по умолчанию состоит в том, что имя функции совпадает с именем HDL-компонента.

    • HDL component: Введите имя компонента вручную или найдите его, нажав Browse.

    • Trigger mode: Задайте одно из следующих значений для запуска функции обратного вызова:

      • Repeat

      • Rising Edge

      • Falling Edge

      • Sensitivity

    • Sample time (ns) or Trigger Signal:

      • Если выбран триггер Repeat, введите шаг расчета в наносекундах.

      • Если вы выбрали Rising Edge, Falling Edge, или Sensitivity, Sample time (ns) изменения в Trigger Signal. Введите имя сигнала, который будет использоваться для инициирования коллбэка.

      Просмотреть существующие сигналы в указанном HDL- компонента можно нажав Browse.

  2. Щелкните Add, чтобы добавить команду в список функций обратного вызова MATLAB.

    Если у вас есть больше функций обратного вызова, которые вы хотите запланировать, повторите вышеописанные шаги. Если необходимо удалить функции обратного вызова, выделите линию, которую вы хотите удалить, и нажмите Remove.

    Примечание

    Если вы пытаетесь добавить функцию обратного вызова для того же HDL-модуля, что и существующая функция обратного вызова в списке Функций обратного вызова MATLAB, новая функция обратного вызова перезаписает существующую (это правда, даже если вы измените тип коллбэка). Вы увидите предупреждение в Status окне:

    Warning: This HDL component already has a scheduled callback function, which is
    replaced by this new one.
  3. Нажмите Next.

Генерация скриптов - функция MATLAB

  1. Нажмите Back, чтобы просмотреть или изменить настройки.

  2. Щелкните Finish, чтобы сгенерировать скрипты.

Сгенерированные файлы - функция MATLAB

Этот Cosimulation Wizard создает следующие файлы и открывает каждый из них в отдельных РЕДАКТОРАХ MATLAB окнах.

  • launchHDLsimulator - скрипт запуска HDL-симулятора для косимуляции с MATLAB.

  • compileHDLDesign - скрипт компиляции, который можно повторно использовать для последующей компиляции именно этого компонента.

  • Файлы функции (*.m) - компоненты и тестовые шаблоны настроенных функций, по одному для каждого компонента, заданного в Cosimulation Wizard.

Выполните функцию Component или Испытательный Стенд

Шаблон, созданный мастером, содержит простые инструкции ввода-вывода и пустые стандартные программы добавления собственного кода, как показано на примере ниже. Полный пример создания и использования функции MATLAB смотрите в Проверьте проект Фильтр приподнятого косинуса с использованием MATLAB.

function osc_top_u_osc_filter1x(obj)
% Automatically generated MATLAB(R) callback function.

% Copyright 2010 The MathWorks, Inc.
% $Revision $

% Initialize state of callback function.
if (strcmp(obj.simstatus,'Init'))
    disp('Initializing states ...');

    % Store port information in userdata
    % The name strings of ports that sends data from HDL simulator to
    % MATLAB callback function
    obj.userdata.FromHdlPortNames = fields(obj.portinfo.out);
    obj.userdata.FromHdlPortNum   = length(fields(obj.portinfo.out));

    % The name strings of ports that sends data from MATLAB callback
    % function to HDL simulator
    obj.userdata.ToHdlPortNames   = fields(obj.portinfo.in);
    obj.userdata.ToHdlPortNum     = length(fields(obj.portinfo.in));

    % Initialize state
    obj.userdata.State = 0;
end

% Obj.tnow is the current HDL simulation time specified in seconds
disp(['Callback function is executed at time ' num2str(obj.tnow)]);

if(obj.userdata.FromHdlPortNum > 0)
    % The name of the first input port
    portName  = obj.userdata.FromHdlPortNames{1};
    disp(['Reading input port ' portName]);
    % Convert the multi-valued logic value of the first port to decimal
    portValueDec  = mvl2dec( ...
        obj.portvalues.(portName), ...      % Multi-valued logic of the first port
        obj.portinfo.out.(portName).size);  %#ok<NASGU> % Bit width
    % Then perform any necessary operations on this value passed by HDL simulator.
    % ...
    % Optionally, you can translate the port value into fixed point object,
    % e.g.
    % myfiobj = fi(portValueDec,1, 16, 4);
end

% Update your state(s). In the following example, we use this internal
% state to implement a one-bit counter
obj.userdata.State = ~obj.userdata.State;

if(obj.userdata.ToHdlPortNum > 0)
    % The name of the first output port in HDL
    portName = obj.userdata.ToHdlPortNames{1};
    disp(['Writing output port ' portName]);

    % Assign the first port value to internal state obj.userdata.State.
    % Before assignment, convert decimal value to multi-valued logic.
    % You can change obj.userdata.State to another other valid decimal values.
    obj.portvalues.(portName) = dec2mvl(...
        obj.userdata.State, ...
        obj.portinfo.in.(portName).size);

    % Operate on other out ports, if there are any.
    % ...
end