如何编写两个枚举之间的过渡范围?

时间:2018-07-05 08:50:24

标签: system-verilog

enum {Idle, S1, S2} State;

covergroup cg_State @(posedge Clock);
  states      : coverpoint State;
  state_trans : coverpoint State {
    bins legal[] = ( Idle => S1, S2 ),
                   ( S1, S2 => Idle);
    bins idle[] = ( Idle [* 2:4] );
    bins illegal = default sequence; 
  }
endgroup

对于一个枚举,我知道过渡覆盖范围如上

就我而言,我有两个枚举,如下所示,

typedef enum {RST=0,START=1,PAUSE=2,RESUME=3} instr_t;
typedef enum {IDLE=0,RUNNING=1,PAUSED=2,EXPIRED=3} state_t;

我正在尝试为IDLE => RST, START => RUNNING等编写Coverpoint,但找不到解决方法,

任何人都可以告知是否有任何可能的方法,例如(IDLE=> RST, IDLE => START等)

1 个答案:

答案 0 :(得分:2)

由于它们都是两个独立的枚举,因此在它们之间查找过渡范围是没有意义的。 进行交叉覆盖更有意义。 当您的意思是(IDLE => RST,IDLE => START)时,您可能希望使用交叉覆盖来检查state_t处于IDLE状态,instr_t处于RST还是instr_t从RST-> START过渡 这可以通过交叉覆盖结构来实现