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;