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

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

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

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

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

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

Для получения информации о действительных Строениях машины см. Строения косимуляции.

Примечание

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

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

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

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

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

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

Хотя и не требуется, при присвоении имени HDL-модулю рассмотрите выбор имени, которое также может использоваться в качестве имени функции MATLAB. (Обычно правила именования для VHDL® или Verilog® и MATLAB совместимы.) По умолчанию программное обеспечение HDL Verifier предполагает, что HDL-модуль и его функция симуляции имеют то же имя. См. Bind Test Bench Function Calls With 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 для следующих компонентов:

  • Имена портов и сигналов, используемые в косимуляции

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

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

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

  • reg

  • целое число

  • провод

Примечание

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

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

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

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

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

Дополнительные примеры см. в руководствах 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 кодирования

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

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

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

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

  3. Выберите имя для функции MATLAB. Смотрите Bind HDL Module Component, чтобы MATLAB Испытательного стенда Function.

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

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

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

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

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

Для получения дополнительной информации смотрите Испытательный Стенд и Component Function Writing.

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

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

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

Для получения объяснений по каждому из аргументов функции см. Функцию MATLAB Определений синтаксиса функции и аргумента функции.

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

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

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

Этот пример использует сущность VHDL и функциональный код MATLAB Builder™ EX, полученный из фрагмента декодера примера Приемник Манчестерского Кода. Полный список 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 Функция MATLAB Builder EX:

  1. Укажите имя функции MATLAB и необходимые параметры.

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

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

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

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

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

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

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

      tnext = [];
      iport = struct();
      

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

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

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

  2. Обратите внимание на типы данных портов, определенных для моделируемой сущности.

    Программа HDL Verifier преобразует типы данных HDL в сопоставимые типы данных MATLAB Builder EX и наоборот. Когда вы разрабатываете функцию MATLAB Builder EX, вы должны знать типы данных, которые она получает от Симулятора 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. Настройте все необходимые параметры синхронизации.

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

    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 преобразовать двоичные данные, которые функция MATLAB Builder EX получает от выходных портов сущности, adj, dvalid, и odata к беззнаковым десятичным значениям, которые может вычислить MATLAB Builder EX. Функция преобразует 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 преобразуйте десятичные значения, вычисленные MATLAB Builder EX, в двоичные данные, которые функция MATLAB Builder EX может отложить во входные порты сущности, 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



Похожие темы