Всем привет!
Хочу поделиться своим опытом использования Python на этапах прототипирования RTL-модулей и последующей верификации. Как RTL-инженер, я часто создаю модели на Python для быстрой проверки логики и алгоритмов будущего RTL. Это подход уменьшает вероятность последующих правок в логике RTL в случае если алгоритм не подходит. Однако при переходе к тестированию на SystemVerilog всегда возникала проблема с переиспользованием написанной Python модели устройства: нужно было писать обвязку на C и использовать DPI-C интерфейсы, чтобы интегрировать Python-код модели в верификационную среду. Это занимало время и было неудобно.
Недавно я открыл для себя библиотеку PyStim (Bind Python & SystemVerilog), которая кардинально упростила процесс. PyStim позволяет напрямую вызывать Python-методы и работать с Python-объектами из среды SystemVerilog без необходимости писать обвязку на C или использовать DPI-C. Это значительно снизило трудозатраты и ускорило адаптацию уже готового Python-кода в тестбенче.
Простой пример использования PyStim
Предположим, у нас есть простой счётчик на Python:
#counter.py class Counter: def __init__(self, initial=0): self.value = initial def increment(self): self.value += 1 return self.value
Теперь посмотрим, как мы можем использовать этот класс в SystemVerilog с помощью PyStim:
import pystim_pkg::*; module simple_calc(); typedef pystim_pkg::pystim py; initial begin // Инициализация Python-среды pystim_pkg::initialize_interpreter(); begin py_object result; begin // import Counter from counter automatic py_object Counter = py_module::import_("counter").attr("Counter"); // Создание Python-объекта, cnt = Counter(0) automatic py_object cnt = Counter.call(py::int_(0)); // Вызов метода increment из Python без обвязки на C repeat(5)begin result = cnt.attr("increment").call(); $display("Cnt: %0d", result.cast_int().get_value()); end end end // Завершение работы с PyStim pystim_pkg::finalize_interpreter(); end endmodule
Результат в консоли:
# Cnt: 1 # Cnt: 2 # Cnt: 3 # Cnt: 4 # Cnt: 5
Заключение
PyStim отлично показал себя в реальных проектах, где нужно быстро перейти от Python-прототипа к полноценной верификации RTL-дизайна. Он позволяет:
-
Использовать существующий Python-код без переделки
-
Избавиться от написания DPI-C обвязки
-
Быстро интегрировать и тестировать RTL
Если вы работаете с Python-моделями и верификацией RTL, рекомендую попробовать PyStim — сэкономите кучу времени и нервов.
Если у кого-то уже есть опыт с этой библиотекой — буду рад обсудить в комментариях!
ссылка на оригинал статьи https://habr.com/ru/articles/911674/
Добавить комментарий