Можете ли вы связать испытательный стенд Modelsim с внешними стимулами

10

Я работаю в команде, которая занимается разработкой драйверов и ПЛИС. Симуляция FPGA выполняется в Modelsim, а программное обеспечение драйвера написано на C. Чтобы минимизировать риск интеграции, я хотел бы иметь возможность смоделировать взаимодействие между двумя половинами нашего продукта, прежде чем устанавливать его на аппаратное обеспечение.

Я знаю, что Modelsim поддерживает тестовую среду, которая позволяет вам предоставлять стимул в виде текстового файла с указанием времени и значений для ввода. Мне интересно, есть ли в Modelsim режим, позволяющий подключить канал к внешнему приложению (например, к нашему драйверу) и запустить своего рода распределенное моделирование, при котором программное обеспечение может передавать значения в тестовую среду, а затем наблюдать за результатами позже. ,

Уловка, которую я не могу сделать с вводом текстового файла, состоит в том, чтобы две половины продукта взаимодействовали. Мне нужно, чтобы программа «записывала» значения в симулятор ПЛИС, считывала результаты и затем записывала новые значения в ПЛИС, которые зависят от результатов, которые она прочитала. Текстовые файлы требуют, чтобы входные данные были независимы от выходных данных.

Я выполнил поиск как в StackExchange, так и в Google, но мне не удалось найти набор ключевых слов, чтобы сузить свой поиск настолько, чтобы либо определить поведение, которое я ищу, либо определить, что его не существует.

Корт Аммон
источник

Ответы:

9

Внешний контроль симуляции ModelSim через именованные каналы Unix

Аннотация: В этом тезисе мы представляем метод управления моделированием ModelSim с помощью внешней программы. Связь между ModelSim и внешней программой осуществляется с помощью именованных каналов («FIFO»), которые отображаются в виде обычных файлов для каждого приложения. Основное различие между использованием FIFO и обычных файлов для межпроцессного взаимодействия (IPC) заключается в том, что приложение, пытающееся выполнить запись в FIFO, приостанавливается до тех пор, пока другое приложение не попытается выполнить чтение из FIFO и наоборот. Это повышает надежность МПК. Основные преимущества этого метода: 1) Поскольку используются только общие файловые операции, внешнее приложение может быть написано практически на любом языке программирования; 2) Это дает инженеру по верификации возможность повторно использовать пакеты программного обеспечения для проверки стандартов с минимальным переписыванием; 3) Наличие нескольких тестируемых устройств (DUT) обменивается данными друг с другом, что позволяет создать более точную симуляцию конечной системы; и 4) производительность всего моделирования можно легко повысить на кластере с одиночным образом системы (SSI) или на многопроцессорном компьютере, даже если механизм моделирования ModelSim не является многопоточным. Из-за реализации файлового ввода / вывода (I / O) для поведенческого VHDL, ModelSim не может читать или записывать эти FIFO напрямую. Обходной путь для этого ограничения демонстрируется с помощью интерфейса иностранных языков ModelSim (FLI). В этой статье также показан рабочий пример использования этого метода при проверке следующего поколения подпрограмм с плавающей запятой в VHDL. В частности, программный пакет с открытым исходным кодом IEEE Compliance Checker, написанный на C ++,

И проблема с FIFO, требующими интерфейса стороннего программирования, заключается в том, что ввод-вывод файла VHDL не может изящно справляться с блокировкой, пока данные не будут доступны.

К сожалению, тезис не доступен в Интернете.

Model Sim ® Интерфейс для иностранных языков Версия 5.6d , PDF 3.4 МБ.

Использование интерфейса иностранного языка ModelSim для c-VHDL Co-Simulation и для управления симулятором на платформе Linux x86 Andre Pool - fli@andrepool.com - версия 1.5 - создано в ноябре 2012 г., последнее обновление сентябрь 2013 г. , PDF, 320 КБ (и никогда не упоминает FIFO) ,

Использование интерфейса иностранного языка ModelSim для c-VHDL Co-Simulation и для Simulator Control на платформе Linux x86 (соответствующий репозиторий кода github).

Есть немного более открытый исходный код, используя вызовы внешних функций VHPI в ghdl: vhdl / src / sim / ghdlex_mein на master · texane / vhdl · GitHub .

И что похоже на обновление от Мартина Штрубеля в списке GHDL_discuss: http://www.section5.ch/downloads/ghdlex-0.051.tgz, показывающее дату для fifo.c от 14 апреля 2014 года.

FLI по определению привязал бы вас к Modelsim, не уверенному в состоянии их поддержки VHPI (которая является частью IEEE Std 1076-2008, VHDL LRM).

Использование сокета или файла FIFO позволяет программному и аппаратному процессу работать с различной скоростью, обеспечивая буферизацию скорости. Это не всегда необходимо, если ваша программная система работает на несколько порядков быстрее, чем аппаратная симуляция (и это обычно так).

Предпринимаются усилия по обеспечению функциональности UNIX (POSIX) для VHDL, см. Пакеты VHDL Public Domain , в которых содержится указатель на более раннюю статью SNUG San Jose 2002 1 Функции C / UNIX для тестовых стендов VHDL Функции C / UNIX для тестовых стендов VHDL вместе со слайдом набор с дополнительными примечаниями по трубам Unix & rsh . Это показывает, как сохранить именованные каналы открытыми. Весь код VHDL также можно скачать. Я считаю, что это приведет к самому легкому пути достижения вашей цели.

Так есть ли что-то родное для Modelsim, которое позволяет вам подключиться к трубе? Скорее всего нет, тем более под Windows. Это можно сделать? Да, но путь не для слабонервных. Вы можете заблокировать один конец или другой или, возможно, оба в ожидании доступности данных.

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

user8352
источник
Спасибо за чудесно проработанный ответ! «Иностранный языковой интерфейс» - это как раз та фраза, которая мне нужна, чтобы найти нужную мне справочную документацию, я бы никогда не догадался! Ранняя интеграция, вот и я!
Корт Аммон
5

Возможно, вы захотите посмотреть на Cocotb . Это библиотека совместного моделирования на основе Python, одна из целей которой заключалась в том, чтобы обеспечить описанную методологию, легко моделируя немодифицированное производственное программное обеспечение и RTL.

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

Для драйверов пользовательского пространства, утилит конфигурации и т. Д. У вас есть несколько вариантов запуска программного обеспечения без изменений :

  1. Если ваш доступ к устройству сводится к нескольким функциям (например, чтение и вызов записи), вы можете связать библиотеку симуляции, которая блокирует при выполнении доступа к симуляции. Это очень хорошо работает для конфигурации.

  2. Если ваше программное обеспечение использует IO с отображенной памятью и разыменовывает указатели для доступа к устройству, тогда все становится немного сложнее - вы должны создать общую область памяти с установленными битами защиты и доступом к прерываниям .

Если вы используете сеть, то можно использовать виртуальные интерфейсы, такие как TUN / TAP (см. Учебное пособие, упомянутое выше), я подозреваю, что могут быть аналогичные параметры для передачи через USB или другие общие интерфейсы хоста.

Cocotb работает с различными симуляторами и VHDL (через VHPI) или Verilog / SystemVerilog (через VPI). К сожалению, Modelsim не реализует VHPI, поэтому, как пользователь VHDL, вы застряли в FLI, который не так полезен в качестве интерфейса. Вы можете стонать в Mentor, пытаясь убедить их внедрить интерфейс промышленного стандарта, или вы можете оценить другой симулятор, который поддерживает VHPI.

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

Отказ от ответственности: я разработчик Cocotb.

Chiggs
источник