Я пытаюсь проверить довольно простое рукопожатие между двумя модулями. Один модуль находится на медленных часах и поднимает «req», более быстрый модуль должен поднимать «ack» на следующих быстрых часах и удерживать его до следующего позирования медленных часов. Конечный результат выглядит так:
Вот как я написал ожидание:
expect expect_ack_when_req_go is
(@req_rise_e) => @ack_rise_e
else dut_error("ERROR: ack expected to be asserted when req rises!");
*оба @req_rise_e и @ack_rise_e сэмплируются на медленных тактовых частотах.
Запуск симулятора приводит к ошибке, поскольку первое выражение кажется успешным, а второе - нет. И это несмотря на то, что при отслеживании событий в волне я вижу, что оба события происходят вместе (как видно в волне: event_req, event_ack).
expect ... (@req_rise_e => @ack_rise_e)@slow_clk;
- person Thorsten   schedule 26.09.2017event req_rise_e is rise (smp.port_req$) @slow_clk_e;
event ack_rise_e is rise (smp.port_ack$) @slow_clk_e;
- person Shay Golan   schedule 26.09.2017ack
меняется дважды в течениеslow_clk
периода, возможно, это проблема, решаемая с помощью порта событий. Не могли бы вы изменитьsmp.port_ack
на порт событий, который срабатывает при повышении? - person Thorsten   schedule 26.09.2017