Всем привет!
Хочу поделиться своим опытом использования 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 — сэкономите кучу времени и нервов.
Если у кого-то уже есть опыт с этой библиотекой — буду рад обсудить в комментариях!