Микроконтроллер + Verilog/VHDL симулятор?

На протяжении многих лет я работал над несколькими проектами на базе микроконтроллеров; в основном с микрочипами ПОС. Я использовал различные симуляторы микроконтроллеров, и, хотя они иногда могут быть очень полезными, я часто расстраиваюсь. В реальной жизни микроконтроллеры никогда не существуют в одиночку, и поведение прошивки зависит от среды. Однако ни один из симов, которые я использовал, не обеспечивает достойную поддержку чего-либо вне микроконтроллера.

Моя первая мысль заключалась в том, чтобы смоделировать всю доску в Verilog. Но я бы предпочел не создавать целую модель ЦП, и мне не очень повезло найти существующие модели для чипов, которые я использую. Независимо от того, мне действительно не нужно или хотите, чтобы симулировать proc на этом уровне детализации, и я хотел бы сохранить возможности отладки, предоставляемые обычным процессором sim.

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

Существует ли такая вещь?

Ответы

Ответ 1

Я использовал процессор Altera Nios II, встроенный в FPGA. Altera предоставляет инструментальную цепочку для имитации процессора (с его программным обеспечением) вместе с вашей пользовательской логикой в ​​симуляторе. Я полагаю, что подобную настройку можно достичь, загрузив ядро ​​VHDL/Verilog вашего процессора (вы попробовали opencores? У них там много материала).

Но имейте в виду, что это будет невероятно медленным, поэтому не ожидайте симулировать все сложные процессы таким образом. Лучшее, на что вы можете надеяться, это симуляция тонких программно-аппаратных точек взаимодействия для устранения проблем. Если вам нужна более глубокая симуляция, попробуйте запустить ее на FPGA со встроенным кодом мониторинга.

Ответ 2

Для подхода "имитировать всю доску", В Free Model Foundry имеется большое количество моделей, некоторые из которых принадлежат VHDL в Verilog, которые доступны сейчас. Но вам нужно будет заплатить за создание новых моделей. Они очень полезны в том, что плата правильно построена.

Но я думаю, что более общий подход при отладке вашего ПОС состоит в том, чтобы просто построить доску, а затем работать с прошивкой. В мире чипов (там, где прошивка работает на микропроцессоре в чипе, который еще не дошел до опыта), люди часто прибегают к очень дорогим системам (или арендуют на них время), которые позволяют составлять часть дизайна в эмулятор в то время как остальная часть дизайна работает в среде обычного симулятора. Без барьера дорогостоящей маски, установленной для чипа, стоимость просто не оправдана для печатной платы. Хотя я слышал о некоторых творческих приложениях Simulink (Mathworks) с FPGA, но я вспоминаю, что один из них запускал систему на компьютере или программировал устройство и запускал то же самое в реальном времени.

Я считаю, что и Cadence (спросите о Palladium), и Mentor Graphics имеют это интегрированное решение, если у вас есть деньги, чтобы потратить на него.

Ответ 3

В последнее время я создал интерфейс между средой моделирования и хост-системой. Различные симуляторы hdl имеют разные интерфейсы, и заставить симулятор НЕ думать в пакетном режиме, традиционная имитационная модель вместо этого работает навсегда, как реальный дизайн - это половина проблемы.

Затем из хоста, использующего C (или что-то еще), вы можете создавать абстракции, которые могут или могут не позволять вам писать ваше прикладное программное обеспечение для любой цели (в зависимости от того, какой язык и возможности компилятора у вас есть). Например, вы можете создать общую функцию poke и peek, а на конечной цели - те, которые действительно вызывают и запоминают память или ввод-вывод, но для моделирования через абстракцию вы говорите с тестовым узлом в симуляции, которая имитирует тот же цикл памяти.

Я пошел еще дальше и использовал (Berkeley) сокеты между хостом и стендом для тестирования, чтобы симуляция продолжала работать, пока хост-приложения останавливаются и запускаются. В отличие от того, что у реального процессора с ОС вы запускаете приложения и запускаете их до завершения и запускаете другой. По крайней мере, для тестовых приложений, для доставки, вероятно, есть только одно приложение.

Создав эти уровни абстракции, я могу написать реальные приложения, которые будут использоваться на цели при ее создании. По пути вы можете использовать программное моделирование логики изначально, тогда, если вам нравится строить fpga с интерфейсом абстракции (отбросить логику), скажем, например, uart. Замените прокладку между слоем абстракции приложений и симулятором с интерфейсом uart или любым другим. Затем, когда вы вступаете в брак с процессором и логикой в ​​том же чипе или на той же плате, снова замените слой абстракции прямыми вызовами любых интерфейсов, с которыми они всегда разговаривали. Если что-то ломается, и вы сохранили уровень абстракции, вы можете вернуть приложение к моделированию и получить доступ ко всем своим логическим внутренним устройствам.

В частности, на этот раз я использую цикличность cdl языка hdl, которая находится на sourceforge, документация нуждается в некоторой помощи, но примеры могут заставить вас двигаться, и она создает синтезируемый верилог, поэтому вы получаете дополнительную победу там. Я выбросил все скриптовые файлы, кроме минимального минимума, необходимого для подключения и запуска модели симуляции C. Таким образом, мой тестовый стенд находится на C (хорошо С++ технически), там был сделан слой сокетов. Вывод может быть .vcd файлами, которые использует gtkwave. В основном вы можете сделать основную часть вашего HDL-дизайна с использованием программного обеспечения с открытым исходным кодом без каких-либо лицензий и т.д. Добавив одну или две строки кода в часть моделирования CDL, я смог запустить ее как бесконечный цикл, который я могу сказать, работает довольно хорошо, там, кажется, нет утечек памяти и т.д.

обе модели и каденция имеют стандартизированные способы подключения хост-программ C к миру моделирования, и оттуда вы можете использовать IPC для доступа к приложениям, говорящим на уровне абстракции api.

это, вероятно, способ перехитрить для pic, я отказался от pics некоторое время назад для более быстрых и дружественных подходов на основе микрофона в любом случае. Существует/был открытый основной рис, который вы могли бы просто включить в свое симуляцию, хотя это не то, что вы пытаетесь сделать здесь.

Ответ 4

Не то, что я видел. Лучше всего правильно определить интерфейсы и поведение между uC и FPGA, а затем определить серию тестовых сигналов, которые могут быть применены с использованием автоматизированного тестера. Вам нужно будет сделать автоматический тестер (или, возможно, логический анализатор может иметь некоторые такие функции) из FPGA или uC (применить форму волны, прерывания просмотра, точки останова и т.д.). Если вы действительно хотите, я знаю, что у Opencores.org есть PIC и AVR-подобные 8-битные ядра UC, определенные как VHDL, поэтому вы можете реализовать весь проект на FPGA, а затем просто отлаживать это.

Ответ 5

В общем случае нет необходимости моделировать CPU на уровне RTL. Поскольку вам все равно, что это происходит по частям; вы вообще заботитесь о том, что он делает, например. регистрировать значения, память и доступ к шине.

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

Следующий шаг - это функционально-точная модель. Те симулируют быстро. Они часто зашифровываются.

Last - полная RTL-модель. Обычно они доступны только в том случае, если вы тесно сотрудничаете с поставщиком ЦП. используя свое ядро ​​в вашей ASIC. Как правило, они зашифрованы, если вы не являетесь крупной компанией.

Модели памяти, как правило, являются точными (например, Micron).

Ответ 6

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

Имитация одного или двух миллисекунд может занять несколько часов, поэтому использование симулятора для чего угодно, кроме очень маленьких вещей, невозможно.

Возможно, вы захотите взглянуть на SystemC. http://en.wikipedia.org/wiki/SystemC