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

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

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

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

Такое существует?


person Brandon Fosdick    schedule 17.12.2008    source источник
comment
Или если бы существовали модели PIC verilog / VHDL. У меня были те же проблемы, писать что-либо, кроме простого стимула, с помощью симулятора Microchip ужасно болезненно.   -  person Marty    schedule 18.12.2008


Ответы (6)


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

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

person Eli Bendersky    schedule 30.12.2008

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

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

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

person jbdavid    schedule 29.12.2008

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

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

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

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

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

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

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

person old_timer    schedule 16.01.2009

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

person Stephen Friederichs    schedule 08.01.2009

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

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

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

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

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

person Brian Carlton    schedule 16.01.2009

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

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

Однако вы можете взглянуть на SystemC. http://en.wikipedia.org/wiki/SystemC

person Nils Pipenbrinck    schedule 17.12.2008
comment
Это основная причина, по которой я не хочу моделировать весь микроконтроллер в Verilog. Симулятор выделенного процессора может работать намного быстрее и может предоставлять более полезные средства отладки. - person Brandon Fosdick; 19.12.2008
comment
SystemC тоже не совсем решает проблему; это был бы просто другой способ сделать симулятор HDL. И я не вижу способа установить точки останова или пошагово смоделировать процессор. - person Brandon Fosdick; 19.12.2008