Verification Engineerの戯言
my_atm_cell_scenarioクラスとmy_cpu_scenarioクラスは、次のようになっています。
class my_atm_cell_scenario extends atm_cell_scenario; local bit [7:0] id; function new(bit [7:0] id); super.new(); this.id = id; this.define_scenario("MY CELL SCENARIO", 1); endfunction function void post_randomize(); foreach (this.items[i]) items[i].gfc = this.id; endfunction endclass: my_atm_cell_scenario class my_cpu_scenario extends cpu_scenario; function new(); super.new(); this.define_scenario("MY CPU SCENARIO", 1); endfunction constraint op_direct { foreach(items[i]) { items[i].addr_mode == cpu::OP_IMMEDIATE | items[i].addr_mode == cpu::OP_DIRECT; } } endclass: my_cpu_scenario
my_atm_cell_scenarioクラスは、atm_cell_scenarioクラスを継承します。
atm_cell_scenarioクラスは、atm_cellクラスから`vmm_scenario_gen( atm_cell, "ATM Cell" ) で
生成します。
atm_cell_scenarioクラスは、atm_cellクラスから`vmm_scenario_gen( atm_cell, "ATM Cell" ) で
生成します。
class atm_cell extends vmm_data; rand bit [ 3:0] gfc; rand bit [ 7:0] vpi; rand bit [15:0] vci; rand bit [ 2:0] pt; rand bit clp; rand bit [ 7:0] hec; rand bit [ 7:0] payload[48]; constraint hec_valid { hec == 8'h00; // mask field for HEC, 1s indicate bad position } constraint test; `vmm_data_member_begin(atm_cell) `vmm_data_member_scalar(gfc, DO_ALL) `vmm_data_member_scalar(vpi, DO_ALL) `vmm_data_member_scalar(vci, DO_ALL) `vmm_data_member_scalar(pt, DO_ALL) `vmm_data_member_scalar(clp, DO_ALL) `vmm_data_member_scalar(hec, DO_ALL) `vmm_data_member_scalar_array(payload, DO_ALL) `vmm_data_member_end(atm_cell) endclass // atm_cell `vmm_channel(atm_cell) `vmm_scenario_gen(atm_cell, "ATM Cell")
また、my_cpu_scenarioクラスは、cpu_scenarioクラスを継承します。
cpu_scenarioクラスは、、cpuクラスから`vmm_scenario_gen( cpu, "CPU INSN" ) で
生成します。
cpu_scenarioクラスは、、cpuクラスから`vmm_scenario_gen( cpu, "CPU INSN" ) で
生成します。
class cpu extends vmm_data; typedef enum {OP_DIRECT, OP_IMMEDIATE, JMP_RELATIVE, JMP_ABSOLUTE, JMP_INDIRECT, IMPLICIT, OTHER} addr_mode_t; rand addr_mode_t addr_mode; `vmm_data_member_begin(cpu) `vmm_data_member_enum(addr_mode, vmm_data::DO_ALL); `vmm_data_member_end(cpu) endclass `vmm_channel(cpu) `vmm_scenario_gen(cpu, "CPU INSN")
my_atm_cell_scenarioクラスでアクセスしているitems[i]は、atm_cellクラスのインスタンスで、
my_cpu_scenarioクラスでアクセスしているitems[i]は、cpuクラスのインスタンスです。
my_cpu_scenarioクラスでアクセスしているitems[i]は、cpuクラスのインスタンスです。
検証、Verification、SystemVerilog、VMM、Verification Methodology Manual