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

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

5 мин

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

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

ваша схемаboolflow()одна чистая функцияmain()печатает таблицу истинности

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

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

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

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

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

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

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