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

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

Сервер MATLAB может обслуживать несколько одновременных сеансов имитатора HDL и модулей HDL. Однако необходимо следовать рекомендуемым инструкциям, чтобы помочь серверу отслеживать операции ввода-вывода, связанные с каждым модулем и сеансом. сервер MATLAB, который начинается с указанной функции; hdldaemonожидает запросов на подключение от экземпляров имитатора HDL, работающего на одном или разных компьютерах. Когда сервер получает запрос, он выполняет указанную функцию MATLAB, закодированную для выполнения задач от имени модуля в конструкции HDL. Параметры, задаваемые при запуске сервера, указывают, устанавливает ли сервер общую память или каналы связи сокетов TCP/IP.
Допустимые конфигурации машины см. в разделе Конфигурации Cosimulation.
Примечание
Соглашения по программированию, интерфейсам и планированию для функций тестового стенда и функций компонентов практически идентичны. В большинстве случаев одни и те же процедуры применяются к обоим типам функций.
Выполните следующие действия для создания сеанса тестового стенда MATLAB для косимуляции с помощью имитатора ЛПВП.
Установите точки останова для интерактивной отладки HDL (необязательно).
Выбор имени модуля HDL для использования с испытательным стендом MATLAB
Определение режимов направления порта в модуле HDL для использования с испытательным стендом
Определение типов данных портов в модулях HDL для использования с испытательным стендом
Компиляция и разработка проекта ЛПВП для использования на испытательном стенде
Наиболее основным элементом связи в интерфейсе HDL Verifier является модуль HDL. Интерфейс передает все данные между имитатором HDL и MATLAB в качестве данных порта. Программное обеспечение HDL Verifier работает с любым существующим модулем HDL. Однако при кодировании модуля HDL, предназначенного для проверки MATLAB, следует учитывать его имя, типы данных, совместно используемых двумя средами, и режимы направления.
Хотя это и не требуется, при присвоении имени модулю HDL следует выбрать имя, которое также может использоваться в качестве имени функции MATLAB. (Как правило, правила именования для VHDL ® или Verilog ® и MATLAB совместимы.) По умолчанию программное обеспечение HDL Verifier предполагает, что модуль HDL и его функция моделирования имеют одно и то же имя. См. раздел Bind Test Stench Function Calls with 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 для следующих компонентов:
Имена портов и сигналов, используемые при косимуляции
Перечисляемые литералы при использовании в качестве индексов массива имен портов и сигналов, используемых при косимуляции
Однако программное обеспечение поддерживает базовые идентификаторы для VHDL.
Типы данных портов для модулей Verilog. В определении модуля необходимо определить каждый порт, который планируется протестировать с помощью MATLAB, с типом данных порта Verilog, поддерживаемым программным обеспечением HDL Verifier. Интерфейс может преобразовывать данные следующих типов портов Verilog в сопоставимые типы MATLAB:
reg
целое число
провод
Примечание
Программное обеспечение HDL Verifier не поддерживает идентификаторы выхода Verilog для имен портов и сигналов, используемых при косимуляции. Однако он поддерживает простые идентификаторы для 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 выполните следующие шаги:
Изучите синтаксис функции тестового стенда MATLAB HDL Verifier. См. раздел Синтаксис функции тестового стенда.
Узнайте, как программное обеспечение HDL Verifier преобразует данные из имитатора HDL для использования в среде MATLAB. См. раздел Поддерживаемые типы данных.
Выберите имя для функции MATLAB. См. раздел Привязка компонента модуля HDL к функции испытательного стенда MATLAB.
Определите ожидаемые параметры в строке определения функции. См. раздел Синтаксис функции MATLAB и определения аргументов функции.
Определите типы данных порта, передаваемых в функцию. См. раздел Синтаксис функции MATLAB и определения аргументов функции.
Извлеките и, если применимо к моделированию, примените информацию, полученную в portinfo структура. См. раздел Получение доступа к информации о портах и ее применение.
При необходимости преобразуйте данные для манипулирования в среде MATLAB. См. раздел Преобразование данных HDL для отправки в MATLAB.
Преобразуйте данные, которые необходимо вернуть в имитатор ЛПВП. См. раздел Преобразование данных для возврата в имитатор ЛПВП.
Дополнительные советы см. в разделе Запись функций тестового стенда и компонентов.
Синтаксис функции тестового стенда MATLAB:
function [iport, tnext] = MyFunctionName(oport, tnow, portinfo)
Описание каждого из аргументов функции см. в разделах Синтаксис функции MATLAB и Определения аргументов функции.
В этом разделе используется образец функции MATLAB для идентификации секций функции тестового стенда MATLAB, требуемой программным обеспечением HDL Verifier. Полный текст кода, используемого в этом примере, приведен в разделе Пример функции MATLAB Builder EX: manchester_decoder.m.
Для пользователей ModelSim
В этом примере используется объект VHDL и код функции MATLAB Builder™ EX, извлеченный из части декодера примера манчестерского приемника. Полный список кодов VHDL и функций см. в следующих файлах:
matlabroot\toolbox\edalink\extensions\modelsim\modelsimdemos\vhdl\manchester\decoder.vhdmatlabroot\toolbox\edalink\extensions\modelsim\modelsimdemos\manchester_decoder.mВ качестве первого шага к кодированию тестовой функции MATLAB Builder EX необходимо понять, как данные, смоделированные в объекте VHDL, сопоставляются с данными в среде MATLAB Builder EX. Объект 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:
Укажите имя функции MATLAB и требуемые параметры.
Следующий код является объявлением функции manchester_decoder Функция MATLAB Builder EX.
function [iport,tnext] = manchester_decoder(oport,tnow,portinfo)
См. раздел Синтаксис функции MATLAB и определения аргументов функции.
Объявление функции выполняет следующие действия:
Называет функцию. Это объявление называет функцию manchester_decoder, который отличается от имени объекта decoder. Поскольку имена различаются, имя функции должно быть явно указано позже, когда объект инициализирован для проверки с помощью matlabtb или matlabtbeval функция. См. раздел Привязка компонента модуля HDL к функции испытательного стенда MATLAB.
Определяет требуемый аргумент и возвращаемые параметры. Функция тестового стенда MATLAB Builder EX должна возвращать два параметра, iport и tnextи передайте три аргумента, oport, tnow, и portinfo, и должен отображаться в указанном порядке. См. раздел Синтаксис функции MATLAB и определения аргументов функции.
Выходные данные функции должны быть инициализированы до пустых значений, как в следующем примере кода:
tnext = []; iport = struct();
Необходимо инициализировать выходные данные функции в начале функции, чтобы следовать рекомендуемым рекомендациям.
На следующем рисунке показана взаимосвязь между портами объекта и функцией MATLAB Builder EX. iport и oport параметры.

Дополнительные сведения о необходимых параметрах тестовой функции MATLAB Builder EX см. в разделе Синтаксис функции MATLAB и определения аргументов функции.
Обратите внимание на типы данных портов, определенных для моделируемого объекта.
Программное обеспечение HDL Verifier преобразует типы данных HDL в сопоставимые типы данных MATLAB Builder EX и наоборот. При разработке функции MATLAB Builder EX необходимо знать типы данных, которые она получает от имитатора ЛПВП и должна вернуться к имитатору ЛПВП.
Объект 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) | Двухэлементный вектор-столбец из символов. Каждый символ соответствует соответствующему символьному литералу, который представляет логическое состояние и соответствует одному биту. |
dvalid | OUT | STD_LOGIC | Символ, соответствующий литералу символа, представляющему логическое состояние. |
odata | OUT | STD_LOGIC | Символ, соответствующий литералу символа, представляющему логическое состояние. |
Дополнительные сведения о преобразованиях типов данных интерфейса см. в разделе Поддерживаемые типы данных.
Установите все требуемые параметры синхронизации.
tnext оператор назначения устанавливает параметр синхронизации tnext так, что симулятор вызывает функцию MATLAB Builder EX каждую наносекунду.
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 преобразовать двоичные данные, которые функция MATLAB Builder EX получает от выходных портов объекта, adj, dvalid, и odata для неподписанных десятичных значений, которые может вычислить MATLAB Builder EX. Функция преобразует 2-битный транспонированный вектор oport.adj до десятичного значения в диапазоне от 0 до 4 и oport.dvalid и oport.odata к десятичному значению 0 или 1.
Определения синтаксиса и аргументов функции MATLAB предоставляют сводку типов преобразований данных, которые следует учитывать при кодировании имитационных функций MATLAB.
Преобразование данных, возвращаемых в имитатор ЛПВП.
Следующий фрагмент кода иллюстрирует преобразование типа данных, возвращаемых в имитатор ЛПВП.
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-элементный битовый вектор, причем каждый бит представляет символ, который отображается в символьный литерал, представляющий логическое состояние.
Функция «Преобразование данных для возврата в имитатор ЛПВП» предоставляет сводку типов преобразований данных, учитываемых при возврате данных в имитатор ЛПВП.
Пример функции MATLAB Builder EX: 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