Можно ли скомпилировать функции System Verilog в C или C ++? - PullRequest
3 голосов
/ 11 мая 2011

Я работаю на симуляторе высокого уровня, написанном на C ++ для некоторого оборудования, написанного на System Verilog.

Код System Verilog включает в себя ряд функций, которые содержат только логику (то есть, не требующие много времени, никаких триггеров) Я хочу повторно использовать этот код в моем симуляторе C ++.

Есть ли способ повторно использовать эти функции в C ++ (или C, который легко связан с C ++) посредством:

  • Преобразование System Verilog в C / C ++ перед компиляцией?
  • Компиляция System Verilog для функций, вызываемых из C / C ++?
  • Есть другой способ?

Ответы [ 5 ]

3 голосов
/ 11 мая 2011

Как правило, этот вид интеграции выполняется в другом направлении, что означает вызов процедур C / C ++ из Verilog.Конечно, это имеет смысл только для компонентов проверки, очевидно, что их невозможно синтезировать.Наиболее вероятной средой для выполнения того, что вам нужно, является косимуляция SystemC / Verilog, но это подразумевает как использование симулятора Verilog (который вам явно не нужен), так и модель C с использованием SystemC.

Симуляторыв поисках высокой производительности часто генерируют C или нативный код.Я не знаю ни одного способа извлечь определенные функции из сгенерированного кода в VCS (симулятор, с которым я больше всего знаком), но это возможно сделать с помощью одного из симуляторов с открытым исходным кодом.Любой коммерческий (то есть лицензированный) симулятор вряд ли будет поддерживать генерацию кода, который вы можете запускать без лицензии.Я не уверен, что ваше желание использовать функции Verilog независимо от симулятора обусловлено лицензированием, накладными расходами времени выполнения, нагрузкой при установке инструмента или чем-то еще.

Я предполагаю, что вы не поддерживаетеПроцедуры SystemVerilog, поэтому может быть невозможно изменить способ их реализации.Однако, если это возможно, одна общая стратегия, когда требуется функциональность как в C, так и в Verilog, заключается в написании генераторов кода, которые могут преобразовать одно определение в реализации C и Verilog.

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

2 голосов
/ 11 мая 2011

Быстрый поиск принес Verilog2C ++ и Verilator . Я не использовал эти программы; Вы должны попробовать их сами.

1 голос
/ 11 мая 2011

Если у вас есть базовый симулятор SV / Verilog (например, бесплатные, такие как Icarus / CVC), тогда вы можете использовать DPI. В противном случае можно попробовать Verilator - я полагаю, что это больше Verilog / V2K, чем SV, может быть, вы можете сопоставить свой код SV с Verilog?

0 голосов
/ 27 декабря 2014

Что касается verilator и DPI, вы можете посмотреть, как я его оценил:

"... Чтобы попрактиковаться в средствах проверки cpp (c ++), используя систему verilog DPI, используя DUT verilog, я решил скачать verilator и выполнить некоторые упражнения для самостоятельного изучения.

Сначала я установил программное обеспечение. Это довольно просто на компьютере с Debian: apt-get установить verilator ... » http://bknpk.ddns.net/my_web/SystemC_MyFirst/verilator_my_first.html

0 голосов
/ 05 сентября 2014

Verilator - отличный инструмент для ваших целей. По сути, Verilator может скомпилировать ваш дизайн в класс C ++, который является представлением вашего модуля верхнего уровня. Затем вы можете смоделировать дизайн, управляя и стимулируя класс C ++ в своем собственном коде C ++.

Verilator также поддерживает интерфейсы DPI, что означает, что вы можете экспортировать функцию / задачу Verilog в функции C ++ и импортировать функцию C ++ для использования в коде Verilog.

...