Создайте испытательный стенд MATLAB

Программное обеспечение HDL Verifier™ обеспечивает средние значения для проверки модулей HDL в среде MATLAB®. Вы делаете так путем кодирования модели HDL и функции MATLAB, которая может осуществлять обмен данными с моделью HDL. В этой главе рассматриваются программирование, взаимодействие через интерфейс и планирование соглашений для функций испытательного стенда MATLAB, которые связываются с симулятором HDL.

Функции MATLAB test bench позволяют вам проверить эффективность модели HDL, или компонентов в модели. Функция испытательного стенда управляет значениями на сигналы, соединенные с входными портами проекта HDL под тестом, и получает значения сигналов от выходных портов модуля.

Следующий рисунок показывает, как функция MATLAB повторяется и связывается с симулятором HDL во время сеанса симуляции испытательного стенда.

Когда соединено с MATLAB, симулятор HDL функционирует как клиент с MATLAB как сервер. Следующий рисунок показывает несколько-клиентских-сценариев, связывающие с сервером в порте сокета TCP/IP 4449.

Сервер MATLAB может обслужить несколько одновременных сеансов симулятора HDL и модулей HDL. Однако необходимо следовать рекомендуемым инструкциям, чтобы помочь серверу отследить ввод-вывод, сопоставленный с каждым модулем и сеансом. Сервер MATLAB, который вы начинаете с предоставленной функции hdldaemon, ожидает запросов связи от экземпляров симулятора HDL, работающего на тех же или различных компьютерах. Когда сервер получает запрос, он выполняет заданную функцию MATLAB, которую вы закодировали, чтобы выполнить задачи от имени модуля в вашем проекте HDL. Параметры, которые вы задаете, когда вы запускаете сервер, указывают, устанавливает ли сервер общую память, или TCP/IP снабжают линии связи сокетом.

Обратитесь к Настройкам Cosimulation для допустимых настроек машины.

Примечание

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

Выполните эти шаги рабочего процесса, чтобы создать сеанс испытательного стенда MATLAB для cosimulation с симулятором HDL.

Запишите модули HDL для испытательного стенда MATLAB

Кодирование модулей HDL для верификации с MATLAB

Наиболее базовый элемент коммуникации в интерфейсе HDL Verifier является модулем HDL. Интерфейс передает все данные между симулятором HDL и MATLAB как данные порта. Программное обеспечение HDL Verifier работает с любым существующим модулем HDL. Однако, когда вы кодируете модуль HDL, который предназначен для верификации MATLAB, необходимо полагать, что ее имя, типы данных совместно используются этими двумя средами и режимами направления.

Выберите HDL Module Name for Use with MATLAB Test Bench

Несмотря на то, что не требуемый, при именовании модуля HDL, рассматривают выбор имени, которое также может использоваться в качестве имени функции MATLAB. (Обычно называющие правила для VHDL® или Verilog® и MATLAB совместимы.) По умолчанию программное обеспечение HDL Verifier принимает, что модуль HDL и его функция симуляции совместно используют то же имя. Смотрите Связывают Вызовы функции Испытательного стенда С matlabtb.

Для получения дополнительной информации на рекомендациях по именованию функции MATLAB, см., “что MATLAB Программирует Советы” на файлах и именах файлов в документации MATLAB.

Задайте режимы направления портов в модуле HDL для использования с испытательным стендом

В вашем операторе модуля необходимо задать каждый порт с режимом направления (вход, вывести, или двунаправленный). Следующая таблица задает эти три режима.

Используйте режим VHDL...Используйте режим Verilog...Для портов это...
INinputПредставляйте сигналы, которые могут управляться функцией MATLAB
OUToutputПредставляйте значения сигналов, которые передаются функции MATLAB
INOUTinoutПредставляйте двуполярные сигналы, которыми можно управлять или значения передачи к функции MATLAB

Задайте типы данных порта в модулях HDL для использования с испытательным стендом

В этом разделе описывается задать типы данных, совместимые с MATLAB для портов в ваших модулях HDL. Для получения дополнительной информации о том, как интерфейс HDL Verifier преобразует типы данных для среды MATLAB, смотрите Поддерживаемые Типы данных.

Примечание

Если вы используете неподдерживаемые типы, программное обеспечение HDL Verifier выдает предупреждение и игнорирует порт во время выполнения. Например, если вы задаете свой интерфейс с пятью портами, один из которых является портом доступа VHDL во время выполнения, затем интерфейс выводит предупреждение, и ваш код видит только четыре порта.

Типы Данных порта для Сущностей VHDL.  В вашем операторе сущности необходимо задать каждый порт, который вы планируете протестировать с MATLAB с типом данных VHDL, который поддерживается программным обеспечением HDL Verifier. Интерфейс может преобразовать скалярные и данные массива следующих типов VHDL к сопоставимым типам MATLAB:

  • STD_LOGIC, STD_ULOGIC, BIT, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, и BIT_VECTOR

  • INTEGER и NATURAL

  • REAL

  • TIME

  • Перечислимые типы, включая пользовательские перечислимые типы и CHARACTER

Интерфейс также поддерживает все подтипы и массивы предыдущих типов.

Примечание

Программное обеспечение HDL Verifier не поддерживает расширенные идентификаторы VHDL для следующих компонентов:

  • Порт и имена сигнала используются в cosimulation

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

Однако программное обеспечение действительно поддерживает основные идентификаторы для VHDL.

Типы Данных порта для Модулей Verilog.  В вашем определении модуля необходимо задать каждый порт, который вы планируете протестировать с MATLAB с типом данных порта Verilog, который поддерживается программным обеспечением HDL Verifier. Интерфейс может преобразовать данные следующих типов порта Verilog к сопоставимым типам MATLAB:

  • reg

  • целое число

  • провод

Примечание

Программное обеспечение HDL Verifier не поддерживает escaped-идентификаторы Verilog для порта и сигнализирует об именах, используемых в cosimulation. Однако это действительно поддерживает простые идентификаторы для Verilog.

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

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

 Компиляция для ModelSim

 Компиляция для острого

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

Демонстрационное определение сущности VHDL

Этот демонстрационный фрагмент VHDL кода задает сущность decoder. По умолчанию сущность сопоставлена с функцией испытательного стенда MATLAB decoder.

Ключевое слово PORT отмечает запуск пункта порта сущности, который задает два IN порты — isum и qsum— и три OUT порты — adj, dvalid, и odata. Выходные порты управляют сигналами к входным портам функции MATLAB для обработки. Входные порты получают сигналы от выходных портов функции MATLAB.

Оба входных порта заданы как векторы, состоящие из пяти стандартных логических значений. Выходной порт adj также задан как стандартный логический вектор, но состоит только из двух значений. Выходные порты dvalid и odata заданы как скалярные стандартные логические порты. Для получения информации о том, как интерфейс HDL Verifier преобразует данные стандартного логического скаляра и типов массива для использования в среде MATLAB, смотрите Поддерживаемые Типы данных.

ENTITY decoder IS
PORT (
  isum   : IN std_logic_vector(4 DOWNTO 0);
  qsum   : IN std_logic_vector(4 DOWNTO 0);
  adj    : OUT std_logic_vector(1 DOWNTO 0);
  dvalid : OUT std_logic;
  odata  : OUT std_logic);
END decoder ;

Запишите функцию испытательного стенда

Кодирование функций MATLAB Cosimulation

Кодирование функции MATLAB, чтобы проверить модуль HDL или компонент требует, чтобы вы следовали определенным соглашениям кодирования. Необходимо также изучить преобразования типа данных, которые происходят, и преобразования типа данных программы для работы на данных и возврата данных к симулятору HDL.

Чтобы закодировать функцию MATLAB, чтобы проверить модуль HDL или компонент, выполните следующие шаги:

  1. Изучите синтаксис для функции испытательного стенда HDL Verifier MATLAB. Смотрите Синтаксис Функции Испытательного стенда.

  2. Изучите, как программное обеспечение HDL Verifier преобразует данные из симулятора HDL для использования в среде MATLAB. Смотрите Поддерживаемые Типы данных.

  3. Выберите имя для функции MATLAB. Смотрите Связывают Компонент Модуля HDL с Функцией Испытательного стенда MATLAB.

  4. Задайте ожидаемые параметры в функциональной линии определения. См. Определения Синтаксиса и Аргумента функции функции MATLAB.

  5. Определите типы данных порта, передаваемых в функцию. См. Определения Синтаксиса и Аргумента функции функции MATLAB.

  6. Извлеките и, если применимо к симуляции, примените информацию, полученную в portinfo структура. Смотрите Получающий доступ к и Применение Информации порта.

  7. Преобразуйте данные для манипуляции в среде MATLAB, как применимые. Смотрите Данные о HDL Преобразования, чтобы Отправить в MATLAB.

  8. Преобразуйте данные, которые должны быть возвращены в симулятор HDL. См. Преобразование данных для Возврата к симулятору HDL.

Для большего количества советов смотрите Испытательный стенд и Функциональную Запись Компонента.

Синтаксис функции испытательного стенда

Синтаксис функции испытательного стенда MATLAB

function [iport, tnext] = MyFunctionName(oport, tnow, portinfo)

См. Определения Синтаксиса и Аргумента функции функции MATLAB для объяснения каждого из аргументов функции.

Демонстрационная функция испытательного стенда MATLAB

Этот раздел использует демонстрационную функцию MATLAB, чтобы идентифицировать разделы функции испытательного стенда MATLAB, требуемой программным обеспечением HDL Verifier. Вы видите полный текст кода, используемого в этой выборке в разделе MATLAB Builder EX Function Example: manchester_decoder.m.

Для пользователей ModelSim

Этот пример использует код функции EX сущности и MATLAB VHDL Builder™, чертивший от фрагмента декодера примера Приемника манчестерского кода. Для полного VHDL и функциональных листингов кода, смотрите следующие файлы:

matlabroot\toolbox\edalink\extensions\modelsim\modelsimdemos\vhdl\manchester\decoder.vhd
matlabroot\toolbox\edalink\extensions\modelsim\modelsimdemos\manchester_decoder.m

Как первый шаг к кодированию функции испытательного стенда EX MATLAB builder, необходимо изучить, как данные, смоделированные в сущности VHDL, сопоставляют с данными в среде EX MATLAB builder. Сущность VHDL decoder определяется следующим образом:

ENTITY decoder IS
PORT (
  isum   : IN std_logic_vector(4 DOWNTO 0);
  qsum   : IN std_logic_vector(4 DOWNTO 0); 
  adj    : OUT std_logic_vector(1 DOWNTO 0);
  dvalid : OUT std_logic;
  odata  : OUT std_logic
  );
END decoder ;

Следующее обсуждение подсвечивает ключевые строки кода в определении manchester_decoder Функция EX MATLAB builder:

  1. Задайте имя функции MATLAB и обязательные параметры.

    Следующий код является объявлением функции manchester_decoder Функция EX MATLAB builder.

    function [iport,tnext] = manchester_decoder(oport,tnow,portinfo)
    

    См. определения синтаксиса и аргумента функции функции MATLAB.

    Объявление функции выполняет следующие действия:

    • Называет функцию. Это объявление называет функциональный manchester_decoder, который отличается от имени сущности decoder. Поскольку имена отличаются, имя функции должно быть задано явным образом позже, когда сущность инициализируется для верификации с matlabtb или matlabtbeval функция. Смотрите Связывают Компонент Модуля HDL с Функцией Испытательного стенда MATLAB.

    • Задает обязательный аргумент и возвращаемые параметры. Функция испытательного стенда EX MATLAB builder должна возвратить два параметра, iport и tnext, и передайте три аргумента, oport, tnow, и portinfo, и должен появиться в показанном порядке. См. Определения Синтаксиса и Аргумента функции функции MATLAB.

      Функциональные выходные параметры должны быть инициализированы к пустым значениям, как в следующем примере кода:

      tnext = [];
      iport = struct();
      

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

      Следующий рисунок показывает отношение между портами сущности и функция EX MATLAB builder iport и oport параметры.

      Для получения дополнительной информации о необходимых параметрах функции испытательного стенда EX MATLAB builder см. Определения Синтаксиса и Аргумента функции функции MATLAB.

  2. Сделайте примечание типов данных портов заданным для сущности симулируемый.

    Программное обеспечение HDL Verifier преобразует типы данных HDL в сопоставимые типы данных EX MATLAB builder и наоборот. Когда вы разрабатываете свою функцию EX MATLAB builder, необходимо знать типы данных, которые она получает от симулятора HDL и должна возвратить в симулятор HDL.

    Сущность VHDL, заданная для этого примера, состоит из следующих портов

    Определения порта VHDL в качестве примера

    Порт Направление Ввод...Преобразует в Преобразование в...
    isumINSTD_LOGIC_VECTOR(4 DOWNTO 0)5-битный столбец или вектор-строка из символов, где каждый битовые массивы к стандартному логическому символьному литералу.
    qsumINSTD_LOGIC_VECTOR(4 DOWNTO 0)5-битный столбец или вектор-строка из символов, где каждый битовые массивы к стандартному логическому символьному литералу.
    adjOUTSTD_LOGIC_VECTOR(1 DOWNTO 0)Вектор-столбец с 2 элементами символов. Каждый символ совпадает с соответствующим символьным литералом, который представляет логическое состояние и сопоставляет с одним битом.
    dvalidOUTSTD_LOGICСимвол, который совпадает с символьным литералом, представляющим логическое состояние.
    odataOUTSTD_LOGICСимвол, который совпадает с символьным литералом, представляющим логическое состояние.

    Для получения дополнительной информации об интерфейсных преобразованиях типа данных смотрите Поддерживаемые Типы данных.

  3. Настройте любого требуемые параметры синхронизации.

    tnext оператор присваивания настраивает параметр синхронизации tnext таким образом, что средство моделирования отзывает функцию EX MATLAB builder каждую наносекунду.

    tnext = tnow+1e-9;
  4. Преобразуйте данные о выходном порте в типы данных MATLAB для обработки.

    Следующая выборка кода иллюстрирует преобразование типа данных данных о выходном порте.

    %% Compute one row and plot
    isum = isum + 1;
    adj(isum) = mvl2dec(oport.adj');
    data(isum) = mvl2dec([oport.dvalid oport.odata]);
    .
    .
    .
    

    Два вызова mvl2dec преобразуйте двоичные данные, которые функция EX MATLAB builder получает от выходных портов сущности, adj, dvalid, и odata к десятичным значениям без знака, которые может вычислить EX MATLAB builder. Функция преобразует 2-битный транспонированный векторный oport.adj к десятичному значению в области значений от 0 до 4 и oport.dvalid и oport.odata к десятичному значению 0 или 1.

    Синтаксис функции MATLAB и Определения Аргумента функции предоставляют сводные данные типов преобразований данных, чтобы рассмотреть при кодировании функций MATLAB симуляции.

  5. Преобразуйте данные, которые будут возвращены в симулятор HDL.

    Следующая выборка кода иллюстрирует преобразование типа данных данных, которые будут возвращены в симулятор HDL.

     if isum == 17
       iport.isum = dec2mvl(isum,5);
       iport.qsum = dec2mvl(qsum,5);    
    else
       iport.isum = dec2mvl(isum,5);
    end
    

    Три вызова dec2mvl преобразуйте десятичные значения, вычисленные EX MATLAB builder к двоичным данным, которые функция EX MATLAB builder может внести к входным портам сущности, isum и qsum. В каждом случае функция преобразует десятичное значение в битовый вектор с 5 элементами с каждым битом, представляющим символ, который сопоставляет с символьным литералом, представляющим логическое состояние.

    Преобразование данных для Возврата к симулятору HDL предоставляет сводные данные типов преобразований данных, чтобы рассмотреть при возврате данных симулятору HDL.

Пример Функции EX MATLAB builder: manchester_decoder.m

function [iport,tnext] = manchester_decoder(oport,tnow,portinfo)
% MANCHESTER_DECODER  Test bench for VHDL 'decoder'
%  [IPORT,TNEXT]=MANCHESTER_DECODER(OPORT,TNOW,PORTINFO) -
%    Implements a test of the VHDL decoder entity which is part
%    of the Manchester receiver demo.  This test bench plots
%    the IQ mapping produced by the decoder.
%
%      iport              oport
%            +-----------+
% isum -(5)->|           |-(2)-> adj
% qsum -(5)->| decoder   |-(1)-> dvalid
%            |           |-(1)-> odata
%            +-----------+
%
%   isum - Inphase Convolution value
%   qsum - Quadrature Convolution value
%   adj  - Clock adjustment ('01','00','10')
%   dvalid - Data validity ('1' = data is valid)
%   odata - Recovered data stream
%
% Adjust = 0 (00b), generate full 16 cycle waveform

%   Copyright 2003-2009 The MathWorks, Inc.

persistent isum;
persistent qsum;
%persistent ga;
persistent x;
persistent y;
persistent adj;
persistent data;
global testisdone;
% This useful feature allows you to manually
% reset the plot by simply typing: >manchester_decoder
tnext = [];
iport = struct();

if nargin == 0,
    isum = [];
    return;
end

if exist('portinfo') == 1
    isum = [];
end

tnext = tnow+1e-9;
if isempty(isum),  %% First call
    scale = 9;
    isum = 0;
    qsum = 0;
    for k=1:2,
        ga(k) = subplot(2,1,k);
        axis([-1 17 -1 17]);
        ylabel('Quadrature');
        line([0 16],[8 8],'Color','r','LineStyle',':','LineWidth',1)
        line([8 8],[0 16],'Color','r','LineStyle',':','LineWidth',1)
    end
    xlabel('Inphase');
    subplot(2,1,1);
    title('Clock Adjustment (adj)');
    subplot(2,1,2);
    title('Data with Validity');
    iport.isum = '00000';
    iport.qsum = '00000';
    return;
end

% compute one row, then plot
isum = isum + 1;
adj(isum) = bin2dec(oport.adj');
data(isum) = bin2dec([oport.dvalid oport.odata]);

if isum == 17,
    subplot(2,1,1);
    for k=0:16,
        if adj(k+1) == 0,  % Bang on!
            line(k,qsum,'color','k','Marker','o');
        elseif adj(k+1) == 1,  %
            line(k,qsum,'color','r','Marker','<');
        else
            line(k,qsum,'color','b','Marker','>');
        end
    end
    subplot(2,1,2);
    for k=0:16,
        if data(k+1) < 2,  % Invalid
            line(k,qsum,'color','r','Marker','X');
        else
            if data(k+1) == 2,  %Valid and 0!
                line(k,qsum,'color','g','Marker','o');
            else
                line(k,qsum,'color','k','Marker','.');
            end
        end
    end

    isum = 0;
    qsum = qsum + 1;
    if qsum == 17,
        qsum = 0;
        disp('done');
        tnext = [];  % suspend callbacks
        testisdone = 1;
        return;
    end
    iport.isum = dec2bin(isum,5);
    iport.qsum = dec2bin(qsum,5);
else
    iport.isum = dec2bin(isum,5);
end



Похожие темы