System verilog 如何在两个枚举之间写入转换覆盖率?

System verilog 如何在两个枚举之间写入转换覆盖率?,system-verilog,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 =>

对于单个枚举,我知道转换覆盖率如上所示

在我的例子中,我有两个枚举,如下所示

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
我正在尝试为
IDLE=>RST、START=>RUNNING
等编写coverpoint,但找不到一种方法来实现这一点


谁能告诉我是否有任何可能的方法来实现这一点,例如(
IDLE=>RST,IDLE=>START
etc)

因为它们都是两个独立的枚举,所以在它们之间寻找转换覆盖率是没有意义的。 交叉覆盖更有意义。 当您的意思是(IDLE=>RST,IDLE=>START)时,您可能需要一个交叉覆盖,检查何时状态处于IDLE状态、instr\t处于RST或instr\t从RST->START转换 这可以通过交叉覆盖结构来实现

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