Всем привет!
Хочу поделиться своим опытом использования 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 — сэкономите кучу времени и нервов.
Если у кого-то уже есть опыт с этой библиотекой — буду рад обсудить в комментариях!
Комментарии (6)
aax
22.05.2025 04:21Автор не пояснил, в чем по его мнению, преимущества предложенной им методики, чем просто симуляция HDL кода написанного на Verilog/SystemVerilog посредством связки Icarus Verilog + GTKWave(то и другое свободное ПО).
В Школе синтеза цифровых схем, например, таким способом тестировали достаточно сложные проекты написанные на SystemVerilog.
r6l-025
22.05.2025 04:21Вот вы пишете на sv свое ядро для FFT (к примеру, или фильтр, или демодулятор...). Для его проверки надо создать сигнал, надо создать референсную модель для сверки. Можно, конечно, все это сделать руками на sv, поискать готовые ядра которые использовать как референс и т.п. Но в то же время можно все это сгенерить на py в несколько строк, а выхлоп вашего ядра загнать обратно в py скрипт и там все сравнить с рисованием красивых картинок, отчета в CI и т.п.
HepoH
22.05.2025 04:21На бумаге звучит любопытно, но для полноты примера ещё стоило бы описать процесс сборки и запуска моделирования.
triller599
22.05.2025 04:21А есть ли преимущества по сравнению с тем же CocoTB? Было бы неплохо сравнить)
anky783 Автор
22.05.2025 04:21Это библиотека противоположность cocotb.
В PyStim, System verilog управляет моделированием, в cocotb симуляция контролируется через python. Pystim встраивает интерпретатор Python непосредственно в SystemVerilog. Эта интеграция поддерживает стандартный подход моделирования SystemVerilog, обеспечивая взаимодействие с кодом Python, как если python классы были классами SystemVerilog.
KeisN13
По примеру предыдущей статьи в хабе FPGA зашел в песочницу и нашел там это. Выдал автору инвайт.
Когда уже хабр пересмотрит этот идиотский подход или хотя бы начнет оповещать о публикациях в песочнице по подписанному хабу, штобы пользователи знали што кто-то ожидает приглашения или хотя бы сделает поиск поп песочнице?