Программное обеспечение 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, который вы запускаете с предоставленной функции MATLAB hdldaemon
, ожидает запросов связи от экземпляров симулятора HDL, работающего на тех же или различных компьютерах. Когда сервер получает запрос, он выполняет заданную функцию MATLAB, которую вы закодировали, чтобы выполнить задачи от имени модуля в вашем проекте HDL. Параметры, которые вы задаете, когда вы запускаете сервер, указывают, устанавливает ли сервер общую память, или TCP/IP снабжают линии связи сокетом.
Обратитесь к Настройкам Cosimulation для допустимых настроек машины.
Программирование, взаимодействие через интерфейс и планирование соглашений для функций испытательного стенда и функций компонента фактически идентичны. По большей части те же процедуры применяются к обоим типам функций.
Выполните эти шаги рабочего процесса, чтобы создать сеанс испытательного стенда MATLAB для cosimulation с симулятором HDL.
Установите точки останова для интерактивной (дополнительной) отладки HDL.
Задайте режимы направления портов в модуле HDL для использования с испытательным стендом
Задайте типы данных порта в модулях HDL для использования с испытательным стендом
Скомпилируйте и разработайте проект HDL для использования с испытательным стендом
Наиболее базовый элемент коммуникации в интерфейсе HDL Verifier является модулем HDL. Интерфейс передает все данные между симулятором HDL и MATLAB как данные порта. Программное обеспечение HDL Verifier работает с любым существующим модулем HDL. Однако, когда вы кодируете модуль HDL, который предназначен для верификации MATLAB, необходимо полагать, что ее имя, типы данных совместно используются этими двумя средами и режимами направления.
Несмотря на то, что не требуемый, при именовании модуля HDL, рассматривают выбор имени, которое также может использоваться в качестве имени функции MATLAB. (Обычно называющие правила для VHDL® или Verilog® и MATLAB совместимы.) По умолчанию программное обеспечение HDL Verifier принимает, что модуль HDL и его функция симуляции совместно используют то же имя. Смотрите Связывают Вызовы функции Испытательного стенда С matlabtb.
Для получения дополнительной информации на рекомендациях по именованию функции MATLAB, см., “что MATLAB Программирует Советы” на файлах и именах файлов в документации MATLAB.
В вашем операторе модуля необходимо задать каждый порт с режимом направления (вход, вывести, или двунаправленный). Следующая таблица задает эти три режима.
Используйте режим VHDL... | Используйте режим Verilog... | Для портов это... |
---|---|---|
IN | input | Представляйте сигналы, которые могут управляться функцией MATLAB |
OUT | output | Представляйте значения сигналов, которые передаются функции MATLAB |
INOUT | inout | Представляйте двуполярные сигналы, которыми можно управлять или значения передачи к функции MATLAB |
В этом разделе описывается задать типы данных, совместимые с 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 Verifier и демонстрации. Для получения дополнительной информации при использовании компилятора HDL, см. документацию средства моделирования.
Этот демонстрационный фрагмент 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, чтобы проверить модуль HDL или компонент требует, чтобы вы следовали определенным соглашениям кодирования. Необходимо также изучить преобразования типа данных, которые происходят, и преобразования типа данных программы для работы на данных и возврата данных к симулятору HDL.
Чтобы закодировать функцию MATLAB, чтобы проверить модуль HDL или компонент, выполните следующие шаги:
Изучите синтаксис для функции испытательного стенда HDL Verifier MATLAB. Смотрите Синтаксис Функции Испытательного стенда.
Изучите, как программное обеспечение HDL Verifier преобразует данные из симулятора HDL для использования в среде MATLAB. Смотрите Поддерживаемые Типы данных.
Выберите имя для функции MATLAB. Смотрите Связывают Компонент Модуля HDL с Функцией Испытательного стенда MATLAB.
Задайте ожидаемые параметры в функциональной линии определения. См. Определения Синтаксиса и Аргумента функции функции MATLAB.
Определите типы данных порта, передаваемых в функцию. См. Определения Синтаксиса и Аргумента функции функции MATLAB.
Извлеките и, если применимо к симуляции, примените информацию, полученную в portinfo
структура. Смотрите Получающий доступ к и Применение Информации порта.
Преобразуйте данные для манипуляции в среде MATLAB, как применимые. Смотрите Данные о HDL Преобразования, чтобы Отправить в MATLAB.
Преобразуйте данные, которые должны быть возвращены в симулятор HDL. См. Преобразование данных для Возврата к симулятору HDL.
Для большего количества советов смотрите Испытательный стенд и Функциональную Запись Компонента.
Синтаксис функции испытательного стенда MATLAB
function [iport, tnext] = MyFunctionName(oport, tnow, portinfo)
См. Определения Синтаксиса и Аргумента функции функции MATLAB для объяснения каждого из аргументов функции.
Этот раздел использует демонстрационную функцию MATLAB, чтобы идентифицировать разделы функции испытательного стенда MATLAB, требуемой программным обеспечением HDL Verifier. Вы видите полный текст кода, используемого в этой выборке в разделе MATLAB Builder EX Function Example: manchester_decoder.m.
Этот пример использует код функции 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:
Задайте имя функции 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.
Сделайте примечание типов данных портов заданным для сущности симулируемый.
Программное обеспечение HDL Verifier преобразует типы данных HDL в сопоставимые типы данных EX MATLAB builder и наоборот. Когда вы разрабатываете свою функцию EX MATLAB builder, необходимо знать типы данных, которые она получает от симулятора HDL и должна возвратить в симулятор HDL.
Сущность VHDL, заданная для этого примера, состоит из следующих портов
Определения порта VHDL в качестве примера
Порт | Направление | Ввод... | Преобразует в Преобразование в... |
---|---|---|---|
isum | IN | STD_LOGIC_VECTOR(4 DOWNTO 0) | 5-битный столбец или вектор-строка из символов, где каждый битовые массивы к стандартному логическому символьному литералу. |
qsum | IN | STD_LOGIC_VECTOR(4 DOWNTO 0) | 5-битный столбец или вектор-строка из символов, где каждый битовые массивы к стандартному логическому символьному литералу. |
adj | OUT | STD_LOGIC_VECTOR(1 DOWNTO 0) | Вектор-столбец с 2 элементами символов. Каждый символ совпадает с соответствующим символьным литералом, который представляет логическое состояние и сопоставляет с одним битом. |
dvalid | OUT | STD_LOGIC | Символ, который совпадает с символьным литералом, представляющим логическое состояние. |
odata | OUT | STD_LOGIC | Символ, который совпадает с символьным литералом, представляющим логическое состояние. |
Для получения дополнительной информации об интерфейсных преобразованиях типа данных смотрите Поддерживаемые Типы данных.
Настройте любого требуемые параметры синхронизации.
tnext
оператор присваивания настраивает параметр синхронизации tnext
таким образом, что средство моделирования отзывает функцию EX MATLAB builder каждую наносекунду.
tnext = tnow+1e-9;
Преобразуйте данные о выходном порте в типы данных 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 симуляции.
Преобразуйте данные, которые будут возвращены в симулятор 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