Монитор шины для cocotb

Я пытаюсь настроить Cocotb в качестве среды проверки. Я смотрел на примеры, которые полезны, но я не уверен, в каком направлении мне идти.

Мой блок можно увидеть как:
-4 шины на входе
-1 часы и 1 сброс в качестве входов
-2 шины на выходе

Выходные данные являются результатом комбинационной и последовательной обработки входных сигналов. Часть, которой мне не хватает, - это как правильно определить монитор для моих входных и выходных шин, которые (насколько я понимаю) не совместимы с AvalonST

Я посмотрел на примеры, предоставляемые с Cocotb, и что меня не вдохновляет, так это то, что:
- нет монитора (как сумматор)
использовать драйверы AvalonST (например, endianswapper)

На данный момент у меня есть следующие вопросы:
-при просмотре среднего примера я вижу, что человек определил свой собственный StreamBusMonitor, и я должен сделать то же самое в моем понимании (чтобы контролировать мои 4 входа для подачи в мою эталонную модель). Я прав?

-Я не понимаю, как имена сигналов соответствуют StreamBusMonitor. Я вижу следующую строку:
dut_out = StreamBusMonitor (dut, "o", dut.clk)
но я не понимаю цели "о", и где в StreamBusMonitor он используется. Может ли кто-нибудь помочь мне?

-Я не нашел ни одного официального форума Cocotb. Есть ли более официальное место, чтобы задать вопросы начинающим о Cocotb, чем Stackru?

Спасибо всем за вашу помощь.

1 ответ

StreamBusMonitor основан на BusMonitor класс, который определен в cocotb/monitors/__init__.py

Начало определения класса выглядит так:

class BusMonitor(Monitor):
    """
    Wrapper providing common functionality for monitoring busses
    """
    _signals = []
    _optional_signals = []

    def __init__(self, entity, name, clock, reset=None, reset_n=None,
                 callback=None, event=None):
        self.log = SimLog("cocotb.%s.%s" % (entity._name, name))
        self.entity = entity
        self.name = name
        self.clock = clock
        self.bus = Bus(self.entity, self.name, self._signals,
                       optional_signals=self._optional_signals)
        self._reset = reset
        self._reset_n = reset_n
        Monitor.__init__(self, callback=callback, event=event)

"o" в StreamBusMonitor Конструктор name аргумент. Это используется для определения полного названия сигналов при их передаче Bus конструктор.

Вы, вероятно, знаете, что довольно разумной и распространенной схемой именования шин являются имена сигналов протокола шины с добавлением или добавлением какого-то уникального идентификатора, например "i" для входа, "o" для выхода или "axi_m" для мастера AXI, и т.д., и это именно то, что предполагает cocotb.

Сигналы для StreamBusMonitor объявлены и отменяют BusMonitor"s _signals а также _optional_signals ценности. Итак, сигналы определены здесь:

class StreamBusMonitor(BusMonitor):
    """
    streaming bus monitor
    """
    _signals = ["valid", "data"]

по существу, имеют "o" прикреплен к имени _ объединение сигналов и имя шины является поведением по умолчанию в соответствии с cocotb/bus.py), чтобы определить имена сигналов шины в проекте, а указатель на правильный объект в иерархии проекта - это entity аргумент.

Что имеет смысл, так как заявленные сигналы являются приведенными выше, а сигналы в VHDL:

  i_valid  : in  std_logic;
  i_data   : in  t_data_array(0 to BUS_WIDTH-1);
  o_valid  : out std_logic;
  o_data   : out t_data

Что касается канала связи, то сейчас есть канал Гиттера:

https://gitter.im/cocotb

и список рассылки, созданный LibreCores:

https://lists.librecores.org/listinfo/cocotb

Другие вопросы по тегам