Монитор шины для 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
Что касается канала связи, то сейчас есть канал Гиттера:
и список рассылки, созданный LibreCores: