Микроконтроллер + Verilog / VHDL симулятор? - PullRequest
16 голосов
/ 17 декабря 2008

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

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

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

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

Ответы [ 6 ]

4 голосов
/ 30 декабря 2008

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

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

3 голосов
/ 29 декабря 2008

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

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

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

2 голосов
/ 17 января 2009

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

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

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

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

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

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

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

1 голос
/ 16 января 2009

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

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

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

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

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

1 голос
/ 08 января 2009

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

0 голосов
/ 17 декабря 2008

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

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

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

...