我必须参加活动:
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?
答案 0 :(得分:1)
您正在等待TCM的默认采样事件中的async_16_clk_e。
请改为wait [10] * cycle@async_16_clk_e;
答案 1 :(得分:0)
我建议使用'trace events'来运行它。在同一模拟时间可能存在多个滴答等问题,这会导致反直觉行为。另外,尝试将“true(smp.port_uart_int $ == 0)”转换为单独的事件,因为它也可能带有clk_e,tcm的采样事件的采样故障。