Как стать автором
Обновить

Упрощение прототипирования и верификации RTL с помощью Python

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров1.1K

Всем привет!

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

Если у кого-то уже есть опыт с этой библиотекой — буду рад обсудить в комментариях!

Теги:
Хабы:
+11
Комментарии6

Публикации

Ближайшие события