Specman - 如何等待事件多次发生

时间:2018-04-11 07:03:18

标签: wait verification 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 个答案:

答案 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的采样事件的采样故障。