Экспорт в C++: одна функция, а не класс
← Все статьи

Экспорт в C++: одна функция, а не класс

5 мин

Функция, а не симулятор

Там, где экспортёры HDL выдают описание аппаратуры, предназначенное для инструмента синтеза, экспортёр C++ выдаёт нечто, предназначенное для непосредственного запуска: одну чистую функцию — bool boolflow(bool in_0, bool in_1, ...), или функцию, возвращающую небольшую структуру Outputs, если выходов больше одного, — вычисляемую топологической сортировкой комбинационного графа схемы так, что каждый вентиль вычисляется после всего, что в него входит. Вставьте эту функцию прямо в другую программу на C++ — и она будет вести себя точно так же, как исходная схема.

Автономный запуск через сгенерированный main()

Boolflow может также сгенерировать полноценный, запускаемый main() вокруг этой же функции — такой, который исчерпывающе перебирает все комбинации входов и печатает получившуюся таблицу истинности, — что полезно для проверки, что экспортированный код совпадает со схемой, ещё до того, как вы куда-либо его встроите, без необходимости во втором инструменте.

Блоки PLM тоже переводятся

В отличие от экспортёров HDL, экспортёр C++ также понимает блоки PLM: любая булева формула, которую вы ввели в настройках PLM, переводится напрямую в эквивалентное выражение C++ внутри сгенерированной функции, а не пропускается как неподдерживаемая.

Честное ограничение: ни такта, ни состояния

Экспортёр C++ разделяет то же самое ограничение «только комбинационная логика», что и экспортёры HDL, — нет ни класса, ни полей-членов, ни метода step() или tick(), ничего, что помнило бы предыдущий такт. Схема, собранная из триггеров, REG4, SHIFT4 или любого счётчика, экспортируется с пропуском этих элементов, точно так же, как в Verilog и VHDL; настоящее отличие этого экспорта — быть простой, встраиваемой функцией для комбинационной логики, а не полноценной программной моделью последовательностной схемы.

Экспортировать схему в C++ →