// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: ios_injerr.vr
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// ========== Copyright Header End ============================================
#include <vera_defines.vrh>
#include <VeraListProgram.vrh>
#include <ListMacros.vrh>
#include "ios_ras.if.vrh"
#include "ios_ras_ports_binds.vrh"
#include "std_display_class.vrh"
#include "ios_err_packet.vrh"
#include "verilog_tasks_InjErr.vri"
ExternVeraList(ios_err_packet);
// added this code for removing NIU
// sii_l2_inj_port siil2;
l2_sio_inj_port l2sio[8];
// niu_ncu_inj_port niuncu;
// ncu_dmu_inj_port ncudmu;
local bit [39:0] niu_tagtopa[];
local bit [39:0] dmu_tagtopa[];
local bit [15:0] dmu_credittotag[16];
VeraList_ios_err_packet niusii_err_list, sioniu_err_list, dmusii_err_list, siodmu_err_list, l2sio_err_list[8],
siincu_err_list, dmuncu_wrack_err_list, ncudmu_mondo_err_list, siidmu_err_list;
VeraList_ios_err_packet injected_err_list;
l2_sio_inj_port l2sio0, l2_sio_inj_port l2sio1, l2_sio_inj_port l2sio2, l2_sio_inj_port l2sio3,
l2_sio_inj_port l2sio4, l2_sio_inj_port l2sio5, l2_sio_inj_port l2sio6, l2_sio_inj_port l2sio7,
sii_ncu_inj_port siincu, StandardDisplay dbg);
task l2_sio_err_inj(integer bank);
task vinjector(SocErr_Type type);
task vl2injector(SocErr_Type type, integer bank);
function integer inj_err_packet(ios_err_packet err_pkt);
function integer inj_rand_err(SocErr_Type err_type, integer num_errs, integer weight );
l2_sio_inj_port l2sio0, l2_sio_inj_port l2sio1, l2_sio_inj_port l2sio2, l2_sio_inj_port l2sio3,
l2_sio_inj_port l2sio4, l2_sio_inj_port l2sio5, l2_sio_inj_port l2sio6, l2_sio_inj_port l2sio7,
sii_ncu_inj_port siincu, StandardDisplay dbg)
this.myname = "IOS_errinj";
l2sio_err_list[i] = new();
dmuncu_wrack_err_list = new();
ncudmu_mondo_err_list = new();
injected_err_list = new();
fork { niu_sii_err_inj(); } join none
fork { sio_niu_err_inj(); } join none
fork { dmu_sii_err_inj(); } join none
fork { sio_dmu_err_inj(); } join none
fork { sii_ncu_err_inj(); } join none
fork { l2_sio_err_inj(0); } join none
fork { l2_sio_err_inj(1); } join none
fork { l2_sio_err_inj(2); } join none
fork { l2_sio_err_inj(3); } join none
fork { l2_sio_err_inj(4); } join none
fork { l2_sio_err_inj(5); } join none
fork { l2_sio_err_inj(6); } join none
fork { l2_sio_err_inj(7); } join none
fork { dmu_ncu_err_inj(); } join none
fork { ncu_dmu_err_inj(); } join none
fork { sii_dmu_err_inj(); } join none
function integer ios_ras_inj::inj_err_packet(ios_err_packet err_pkt)
ios_err_packet tmp_pkt = err_pkt;
NIUSII_CUE: niusii_err_list.push_back(tmp_pkt);
NIUSII_CCE: niusii_err_list.push_back(tmp_pkt);
NIUSII_AP: niusii_err_list.push_back(tmp_pkt);
NIUSII_DP: niusii_err_list.push_back(tmp_pkt);
NIUSII_CMDP: niusii_err_list.push_back(tmp_pkt);
NIUSII_IOAE: niusii_err_list.push_back(tmp_pkt);
NIUSII_IOUE: niusii_err_list.push_back(tmp_pkt);
SIONIU_DP: sioniu_err_list.push_back(tmp_pkt);
SIONIU_CUE: sioniu_err_list.push_back(tmp_pkt);
SIONIU_CCE: sioniu_err_list.push_back(tmp_pkt);
DMUSII_CUE: dmusii_err_list.push_back(tmp_pkt);
DMUSII_CCE: dmusii_err_list.push_back(tmp_pkt);
DMUSII_AP: dmusii_err_list.push_back(tmp_pkt);
DMUSII_DP: dmusii_err_list.push_back(tmp_pkt);
DMUSII_BEP: dmusii_err_list.push_back(tmp_pkt);
DMUSII_CMDP: dmusii_err_list.push_back(tmp_pkt);
DMUSII_TOUT: dmusii_err_list.push_back(tmp_pkt);
DMUSII_IOAE: dmusii_err_list.push_back(tmp_pkt);
DMUSII_IOUE: dmusii_err_list.push_back(tmp_pkt);
SIODMU_DP: siodmu_err_list.push_back(tmp_pkt);
SIODMU_CUE: siodmu_err_list.push_back(tmp_pkt);
SIODMU_CCE: siodmu_err_list.push_back(tmp_pkt);
L2SIO_DP: l2sio_err_list[tmp_pkt.pa[8:6]].push_back(tmp_pkt);
L2SIO_EBIT: l2sio_err_list[tmp_pkt.pa[8:6]].push_back(tmp_pkt);
L2SIO_CUE: l2sio_err_list[tmp_pkt.pa[8:6]].push_back(tmp_pkt);
L2SIO_CCE: l2sio_err_list[tmp_pkt.pa[8:6]].push_back(tmp_pkt);
SIINCU_DP: siincu_err_list.push_back(tmp_pkt);
SIINCU_CUE: siincu_err_list.push_back(tmp_pkt);
SIINCU_CCE: siincu_err_list.push_back(tmp_pkt);
DMUNCU_WRACK_P: dmuncu_wrack_err_list.push_back(tmp_pkt);
NCUDMU_MONDO_IDP: ncudmu_mondo_err_list.push_back(tmp_pkt);
SIIDMU_WRACK_P: siidmu_err_list.push_back(tmp_pkt);
function integer ios_ras_inj::inj_rand_err(SocErr_Type err_type, integer num_errs, integer weight)
NIUSII_CCE, NIUSII_CUE, NIUSII_AP, NIUSII_DP :
for (i=0; i<num_errs; i++)
tmp_pkt = new(err_type, 16'hFFFF, 40'h8000000000);
result = tmp_pkt.set_rand(weight);
niusii_err_list.push_back(tmp_pkt);
SIONIU_CCE: for (i=0; i<num_errs; i++)
tmp_pkt = new(SIONIU_CCE, 16'hFFFF, 40'h8000000000);
result = tmp_pkt.set_rand(weight);
sioniu_err_list.push_back(tmp_pkt);
DMUSII_CCE, DMUSII_CUE, DMUSII_AP, DMUSII_DP :
for (i=0; i<num_errs; i++)
tmp_pkt = new(err_type, 16'hFFFF, 40'h8000000000);
result = tmp_pkt.set_rand(weight);
dmusii_err_list.push_back(tmp_pkt);
SIODMU_CCE: for (i=0; i<num_errs; i++)
tmp_pkt = new(SIODMU_CCE, 16'hFFFF, 40'h8000000000);
result = tmp_pkt.set_rand(weight);
siodmu_err_list.push_back(tmp_pkt);
L2SIO_CCE: for (i=0; i<num_errs; i++)
tmp_pkt = new(L2SIO_CCE, 16'hFFFF, 40'h8000000000);
result = tmp_pkt.set_rand(weight);
l2sio_err_list[bank].push_back(tmp_pkt);
SIINCU_CCE: for (i=0; i<num_errs; i++)
tmp_pkt = new(SIINCU_CCE, 16'hFFFF, 40'h8000000000);
result = tmp_pkt.set_rand(weight);
siincu_err_list.push_back(tmp_pkt);
task ios_ras_inj::niu_sii_err_inj()
VeraListIterator_ios_err_packet list_ptr;
if (niusii.$req_vld === 1) niu_tagtopa[niusii.$data[79:64]] = niusii.$data[39:0];
if (niusii.$req_vld === 1 && !niusii_err_list.empty() && injector_on)
tpa = niusii.$data[39:0];
list_ptr = niusii_err_list.start();
ptr_pkt = list_ptr.data();
if (ptr_pkt!= null && ptr_pkt.rand_weight >= 0)
dice = urandom_range(10);
//printf ("IOS-RAS: try to inject random error packet dice=%d weight=%d\n", dice, ptr_pkt.rand_weight);
if (dice > (10 - ptr_pkt.rand_weight))
dbg.dispmon(myname, MON_NORMAL, psprintf("niu-sii: inject random error to pkt pa=%x", tpa));
injected_err_list.push_back(ptr_pkt);
list_ptr = niusii_err_list.erase(list_ptr);
while (!niusii_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: try to match error pkt pa=%x with curent pa=%x\n", ptr_pkt.pa, tpa);
//printf ("IOS-RAS: niu-sii inject error pkt pa=%x \n", tpa);
dbg.dispmon(myname, MON_NORMAL, psprintf("niu-sii: inject error to pkt pa=%x", tpa));
injected_err_list.push_back(ptr_pkt);
list_ptr = niusii_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::dmu_sii_err_inj()
VeraListIterator_ios_err_packet list_ptr;
if (dmusii.$req_vld === 1 && dmusii.$data[125:122] !== 4'b0110)
dmu_tagtopa[dmusii.$data[79:64]] = dmusii.$data[39:0];
dmu_credittotag[dmusii.$data[78:75]] = dmusii.$data[79:64];
if (dmusii.$req_vld === 1 && !dmusii_err_list.empty() && injector_on)
tpa = dmusii.$data[39:0];
tctag = dmusii.$data[79:64];
list_ptr = dmusii_err_list.start();
ptr_pkt = list_ptr.data();
if (ptr_pkt!= null && ptr_pkt.rand_weight >= 0)
dice = urandom_range(10);
//printf ("IOS-RAS: try to inject random error packet dice=%d weight=%d\n", dice, ptr_pkt.rand_weight);
if (dice > (10 - ptr_pkt.rand_weight))
dbg.dispmon(myname, MON_NORMAL, psprintf("dmu-sii: inject random error to pkt pa=%x", tpa));
injected_err_list.push_back(ptr_pkt);
list_ptr = dmusii_err_list.erase(list_ptr);
while (!dmusii_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list pa=%x\n", ptr_pkt.pa);
dbg.dispmon(myname, MON_NORMAL, psprintf("dmu-sii: inject error to pkt pa=%x", tpa));
injected_err_list.push_back(ptr_pkt);
list_ptr = dmusii_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::sio_niu_err_inj()
VeraListIterator_ios_err_packet list_ptr;
if (sioniu.$req_vld === 1 && !sioniu_err_list.empty() && injector_on)
tid = sioniu.$data[79:64];
list_ptr = sioniu_err_list.start();
ptr_pkt = list_ptr.data();
if (ptr_pkt!= null && ptr_pkt.rand_weight >= 0)
dice = urandom_range(10);
//printf ("IOS-RAS: try to inject random error packet dice=%d weight=%d\n", dice, ptr_pkt.rand_weight);
if (dice > (10 - ptr_pkt.rand_weight))
dbg.dispmon(myname, MON_NORMAL, psprintf("sio-niu: inject random error to pkt id=%x", tid));
injected_err_list.push_back(ptr_pkt);
list_ptr = sioniu_err_list.erase(list_ptr);
while (!sioniu_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list id=%x\n", ptr_pkt.ctag);
if (ptr_pkt.pa === niu_tagtopa[tid])
dbg.dispmon(myname, MON_NORMAL, psprintf("sio-niu: inject error to pkt ctag=%x pa=%x", tid, niu_tagtopa[tid]));
injected_err_list.push_back(ptr_pkt);
list_ptr = sioniu_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::sio_dmu_err_inj()
VeraListIterator_ios_err_packet list_ptr;
if (siodmu.$req_vld === 1 && !siodmu_err_list.empty() && injector_on)
tid = siodmu.$data[79:64];
list_ptr = siodmu_err_list.start();
ptr_pkt = list_ptr.data();
if (ptr_pkt!= null && ptr_pkt.rand_weight >= 0)
dice = urandom_range(10);
//printf ("IOS-RAS: try to inject random error packet dice=%d weight=%d\n", dice, ptr_pkt.rand_weight);
if (dice > (10 - ptr_pkt.rand_weight))
dbg.dispmon(myname, MON_NORMAL, psprintf("sio-dmu: inject random error to pkt id=%x", tid));
injected_err_list.push_back(ptr_pkt);
list_ptr = siodmu_err_list.erase(list_ptr);
while (!siodmu_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list pa=%x\n", ptr_pkt.pa);
if (ptr_pkt.pa === dmu_tagtopa[tid])
dbg.dispmon(myname, MON_NORMAL, psprintf("sio-dmu: inject error to pkt ctag=%x pa=%x", tid, dmu_tagtopa[tid]));
injected_err_list.push_back(ptr_pkt);
list_ptr = siodmu_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::l2_sio_err_inj(integer bank)
VeraListIterator_ios_err_packet list_ptr;
//printf ("%d IOS-RAS l2b%1d-sio: ready...\n",get_time(LO), bank);
@(negedge l2sio[bank].$clk);
if (l2sio[bank].$ctag_vld === 1 && !l2sio_err_list[bank].empty() && injector_on)
tid = l2sio[bank].$data[15:0];
//printf ("IOS-RAS random: match id=%x with err list...\n", tid);
list_ptr = l2sio_err_list[bank].start();
ptr_pkt = list_ptr.data();
if (ptr_pkt!= null && ptr_pkt.rand_weight >= 0)
dice = urandom_range(10);
//printf ("IOS-RAS: try to inject random error packet dice=%d weight=%d\n", dice, ptr_pkt.rand_weight);
if (dice > (10 - ptr_pkt.rand_weight))
dbg.dispmon(myname, MON_NORMAL, psprintf("l2-sio: inject random error to pkt id=%x", tid));
vl2injector(pkt_type, bank);
injected_err_list.push_back(ptr_pkt);
list_ptr = l2sio_err_list[bank].erase(list_ptr);
while (!l2sio_err_list[bank].empty() && ptr_pkt != null)
//printf ("IOS-RAS: match bus id %x with err list ctag=%x\n", tid, ptr_pkt.ctag);
if (ptr_pkt.ctag === tid)
dbg.dispmon(myname, MON_NORMAL, psprintf("l2b%1d-sio: inject error to pkt ctag=%x", bank, tid));
vl2injector(pkt_type, bank);
injected_err_list.push_back(ptr_pkt);
list_ptr = l2sio_err_list[bank].erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::dmu_ncu_err_inj()
VeraListIterator_ios_err_packet list_ptr;
@(negedge dmu_ncu_inj.clk);
if (dmu_ncu_inj.wrack_vld === 1 && injector_on)
ttag = dmu_ncu_inj.wrack_tag;
//printf ("IOS-RAS: match id=%x with err list...\n", tid);
if (!dmuncu_wrack_err_list.empty())
list_ptr = dmuncu_wrack_err_list.start();
ptr_pkt = list_ptr.data();
while (!dmuncu_wrack_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list id=%x\n", ptr_pkt.ctag);
if (ptr_pkt.ctag == ttag)
dbg.dispmon(myname, MON_NORMAL, psprintf("dmu-ncu wrack: inject error to pkt ctag=%x", ttag));
injected_err_list.push_back(ptr_pkt);
list_ptr = dmuncu_wrack_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::ncu_dmu_err_inj()
VeraListIterator_ios_err_packet list_ptr;
@(negedge dmu_ncu_inj.clk);
if (dmu_ncu_inj.mondo_ack === 1 || dmu_ncu_inj.mondo_nack === 1 && injector_on)
ttag = dmu_ncu_inj.mondo_id;
//printf ("IOS-RAS: match id=%x with err list...\n", tid);
if (!ncudmu_mondo_err_list.empty())
list_ptr = ncudmu_mondo_err_list.start();
ptr_pkt = list_ptr.data();
while (!ncudmu_mondo_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list id=%x\n", ptr_pkt.ctag);
if (ptr_pkt.ctag == ttag)
dbg.dispmon(myname, MON_NORMAL, psprintf("ncu-dmu mondo: inject error to pkt tag=%x", ttag));
injected_err_list.push_back(ptr_pkt);
list_ptr = ncudmu_mondo_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::sii_dmu_err_inj()
VeraListIterator_ios_err_packet list_ptr;
if (dmusii.$wrack_vld === 1 && injector_on)
ttag = dmusii.$wrack_tag;
//printf ("IOS-RAS: match id=%x with err list...\n", tid);
if (!siidmu_err_list.empty())
list_ptr = siidmu_err_list.start();
ptr_pkt = list_ptr.data();
while (!siidmu_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list id=%x\n", ptr_pkt.ctag);
if (ptr_pkt.pa == dmu_tagtopa[dmu_credittotag[ttag]])
dbg.dispmon(myname, MON_NORMAL, psprintf("sii-dmu wrack: inject error to pkt ctag=%x", ttag));
injected_err_list.push_back(ptr_pkt);
list_ptr = siidmu_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::sii_ncu_err_inj()
VeraListIterator_ios_err_packet list_ptr;
if (siincu.$gnt === 1 && injector_on)
tid = siincu.$data[15:0];
//printf ("IOS-RAS: match id=%x with err list...\n", tid);
if (!siincu_err_list.empty())
list_ptr = siincu_err_list.start();
ptr_pkt = list_ptr.data();
while (!siincu_err_list.empty() && ptr_pkt != null)
//printf ("IOS-RAS: match with err list id=%x\n", ptr_pkt.ctag);
if (ptr_pkt.ctag === tid)
dbg.dispmon(myname, MON_NORMAL, psprintf("sii-ncu: inject error to pkt ctag=%x", tid));
injected_err_list.push_back(ptr_pkt);
list_ptr = siincu_err_list.erase(list_ptr);
ptr_pkt = list_ptr.data();
task ios_ras_inj::vl2injector(SocErr_Type type, integer bank)
@(negedge l2sio[bank].$clk);
data = l2sio[bank].$parity[0];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to l2b%1d-sio data parity", ~data, bank));
SetL2SioDP0(~data, bank);
@(posedge l2sio[bank].$clk);
dbg.dispmon(myname, MON_NORMAL, psprintf("release l2b%1d-sio data parity", bank));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject 1 to l2b%1d-sio ebit", bank));
@(posedge l2sio[bank].$clk);
dbg.dispmon(myname, MON_NORMAL, psprintf("release l2b%1d-sio ebit", bank));
data = l2sio[bank].$data[25];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to l2b%1d-sio cecc", ~data, bank));
SetL2SioCECC0(~data, bank);
@(posedge l2sio[bank].$clk);
dbg.dispmon(myname, MON_NORMAL, psprintf("release l2b%1d-sio cecc", bank));
data = l2sio[bank].$data[25];
data2 = l2sio[bank].$data[26];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d %d to l2b%1d-sio cue", ~data, ~data2, bank));
SetL2SioCECC0(~data, bank);
SetL2SioCECC1(~data2, bank);
@(posedge l2sio[bank].$clk);
dbg.dispmon(myname, MON_NORMAL, psprintf("release l2b%1d-sio cue", bank));
task ios_ras_inj::vinjector(SocErr_Type type)
data = niusii.$parity[0];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to niu-sii data parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii data parity"));
data = dmusii.$parity[0];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-sii data parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii data parity"));
data = dmusii.$be_parity;
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-sii byte enable parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii byte enable parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to niu-sii addr parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii addr parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-sii addr parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii addr parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to niu-sii cmd parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii cmd parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-sii cmd parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii cmd parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject 1 to dmu-sii TOUT"));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii TOUT "));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject 1 to niu-sii IoAE"));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii IoAE "));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject 1 to dmu-sii IoAE"));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii IoAE "));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject 1 to niu-sii IoUE"));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii IoUE "));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject 1 to dmu-sii IoUE"));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii IoUE "));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to niu-sii cce", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii cce "));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-sii cce", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii cce "));
data2 = niusii.$data[57];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d %d to niu-sii cue", ~data, ~data2));
dbg.dispmon(myname, MON_NORMAL, psprintf("release niu-sii cue"));
data2 = dmusii.$data[57];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d %d to dmu-sii cue", ~data, ~data2));
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-sii cue"));
data = sioniu.$parity[0];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sio-niu data parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sio-niu data parity"));
data = siodmu.$parity[0];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sio-dmu data parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sio-dmu data parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sio-niu cce", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sio-niu cce"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sio-dmu cce", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sio-dmu cce"));
data2 = sioniu.$data[57];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d %d to sio-niu cue", ~data, ~data2));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sio-niu cue"));
data2 = siodmu.$data[57];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d %d to sio-dmu cue", ~data, ~data2));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sio-dmu cue"));
data = siincu.$parity[0];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sii-ncu data parity", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sii-ncu data parity"));
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sii-ncu cce", ~data));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sii-ncu cce parity"));
data2 = siincu.$data[17];
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d %d to sii-ncu cue", ~data, ~data2));
dbg.dispmon(myname, MON_NORMAL, psprintf("release sii-ncu cue"));
data = dmu_ncu_inj.wrack_par;
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-ncu wrack", ~data));
SetDmuNcuWRACKPAR(~data);
@(posedge dmu_ncu_inj.clk);
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-ncu wrack"));
data = dmu_ncu_inj.mondo_id_par;
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to dmu-ncu mondo id par", ~data));
SetNcuDmuMONDOPAR(~data);
@(posedge dmu_ncu_inj.clk);
dbg.dispmon(myname, MON_NORMAL, psprintf("release dmu-ncu mondo id par"));
data = dmusii.$wrack_par;
dbg.dispmon(myname, MON_NORMAL, psprintf("inject %d to sii-dmu wrack", ~data));
SetSiiDmuWRACKPAR(~data);
dbg.dispmon(myname, MON_NORMAL, psprintf("release sii-dmu wrack"));