Specman -Как ждать, чтобы событие произошло несколько раз
Я должен к событиям:
event clk_e is rise (smp.port_uart_clk$) @sim;
event async_16_clk_e is rise (smp.port_br_clk_16$) @sim;
* UART CLK быстрее, чем br_clk_16
update_int()@clk_e is {
while TRUE
{
if ((uart_env.uart_regs.uartis.rxmi | uart_env.uart_regs.uartis.txmi | uart_env.uart_regs.uartis.rtmi | uart_env.uart_regs.uartis.femi | uart_env.uart_regs.uartis.blmi | uart_env.uart_regs.uartis.rxoemi | uart_env.uart_regs.uartis.txoemi) == 1)
{
first of
{
{
wait true(smp.port_uart_int$ == 0);
message(LOW, "INTRP MON : Intrpt has occured");
};
{
message(LOW, "EXPECT INTERRUPT");
if (uart_env.uart_regs.uartis.rxmi == 1)
{
wait[10] @async_16_clk_e; --I want to wait 10 clocks of br_clk_16
}
else if (uart_env.uart_regs.uartis.txmi == 1)
{
wait[2] @tx_clk_e;
};
dut_error ("Interrupt should be asserted, but it's not");
--message(LOW, "INTRP MON : Intrpt has occured");
};
}; -- all of
};
wait;
};
};
Я почему-то жду больше 10 часов. Как я могу ждать 10 часов br_clk_16?
2 ответа
Вы ожидаете async_16_clk_e в событии выборки по умолчанию TCM. Попробуй вместо wait [10] * cycle@async_16_clk_e;
Я предлагаю запустить его с "трассировкой событий". Могут быть проблемы, такие как несколько тиков в одно и то же время моделирования и т. Д., Которые приводят к нелогичному поведению. Кроме того, попытайтесь преобразовать "true(smp.port_uart_int$ == 0)" в отдельное событие, так как оно также может иметь глюки выборки с помощью clk_e, события выборки tcm.