15.07.2015

Запуск FX-RTOS на модели PIC32 в Delta Design HDL Simulator

Замысел

В ходе работ по созданию нашего симулятора в целях проверки его возможностей и сравнения с другими системами моделирования был реализован проект симуляции работы операционной системы FX-RTOS на модели микроконтроллера PIC32. Для тестирования предполагалось написать простейшую программу, которая должна мигать светодиодами. В случае модели светодиодами были просто выходы портов общего назначения. Переключение светодиодов осуществлялось по программному прерыванию и прерыванию от таймера. Данный тест позволял нам полностью охватить заявленную возможность совместного моделирования HDL-моделей и встраиваемых систем. В таком варианте применения собираемая из исходников на C прошивка играет роль "тестбенча", обеспечивая управление внешними воздействиями на модель железа. Она формирует память инструкций и данных, с которыми работает процессорное ядро и/или периферия. Кроме всего прочего, подобный тест полезен своим охватом функционала языка. Т.к. в начале, перед выполнением даже самой примитивной программы, осуществляется инициализация ОС. Также осуществляются определённые действия с памятью и теневым набором регистров при обработке прерываний. Все эти операции задействуют выполнение множества команд процессора, а следовательно различных арифметических и логических операций с объектами различных типов языка описания аппаратуры (в данном случае VHDL). И, если в ходе выполнения последовательности таких операций попадаем на баг симулятора, то симуляция, естественно, валится. Исправная же работа означает:

  • симулятор достаточно работоспособен для разработки цифровой аппаратуры
  • совместное моделирование "железа" и "прошивки" поддерживается 

Осуществление

Для реализации подобного проекта своими силами была написана модель микроконтроллера PIC32 вместе с процессорным ядром MIPS. Коллеги предоставили нам ОС FX-RTOS и мы приступили к осуществлению замысла. Встроенными в наш симулятор средствами (функция из поставляемой встроенной библиотеки load_elf)  для памяти инструкций и памяти данных было предоставлено содержимое собранного под PIC32 elf-файла программы прошивки. Разумеется, были заданы генераторы частот, организован начальный сброс и т.п.. Далее оставалось только запустить симуляцию. У нас это возможно нажатием всего одной кнопки. В итоге, после некоторого количества исправленных багов, мы получили долгожданную картинку в окне осциллографа - переключающиеся состояния портов общего назначения.

Подтверждение успеха

Но это был не конец и радоваться было ещё рано. Мы считали, что для полноценного результата необходимо увидеть аналогичную работу в других симуляторах и, что более важно - в железе. Вот тут возникла проблема. Дело в том, что в нашем распоряжении были Aldec Active-HDL, Mentor Graphics Modelsim, и Arria V Starter Kit. Ни Active-HDL, ни Modelsim, ни Quartus не позволяют подключать прошивки к модели железа. Соответственно, для того, чтобы двинуться дальше, проект пришлось переработать. Также была написана утилита, генерирующая модели памяти инструкций и данных, чтобы включить их в проект как самостоятельные исходники (с неизменяемым средой содержимым). Естественно, для проекта под ПЛИС модели генераторов частот были заменены на PLL. Для чистоты эксперимента этот же проект мы запустили и в Delta Design HDL Simulator. В итоге мы получили одинаковый результат моделирования, и, что особо важно, увидели мигающие светодиоды на отладочной плате.

Интересные итоги

Причём выяснилось, что на этом тесте мы обогнали Modelsim в 2,3 раза. Aldec догнать не удалось, но мы точнее отрабатываем по поддержанному на данный момент множеству стандарта. И, кстати, Modelsim мы в этом тоже превосходим. Что ещё интересного было обнаружено - это то, что для запуска проекта в Active-HDL и в Modelsim пришлось подправить совершенно разные конструкции: Aldec терялся при преобразовании типов в некоторых конструкциях, а Modelsim в некоторых случаях не мог вычислить границы массивов, подаваемых в объявленные неограниченными массивами параметры подпрограмм.

Полезные ссылки

На нашем канале youtube Eremex DD есть видео, посвящённое этому проекту