From 817e96628b71bf5936bcd541994614a1b9844853 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Tue, 9 Jun 2009 20:42:38 +0000 Subject: [PATCH] test script updates --- testCode/cfg | 7 +- .../com/sun/vlsi/chips/marina/test/Marina.java | 153 ++++++++++++-------- .../com/sun/vlsi/chips/marina/test/MarinaTest.java | 127 +++++++++------- testCode/{marina-gen.bsh => marina-netlist1.bsh} | 7 +- testCode/marina-netlist2.bsh | 31 ++++ testCode/marina-xml1.bsh | 22 +++ testCode/{marina.bsh => marina-xml2.bsh} | 30 ++-- 7 files changed, 239 insertions(+), 138 deletions(-) rename testCode/{marina-gen.bsh => marina-netlist1.bsh} (79%) create mode 100644 testCode/marina-netlist2.bsh create mode 100644 testCode/marina-xml1.bsh rename testCode/{marina.bsh => marina-xml2.bsh} (73%) diff --git a/testCode/cfg b/testCode/cfg index 302522c..b24df40 100644 --- a/testCode/cfg +++ b/testCode/cfg @@ -1,7 +1,6 @@ set_sim_tres 10ps -set_sim_eou sim=6 model=6 net=6 set_elem_acc *XhalfBit* *xcontRx* *xclockedrx* *xclk_regen* *xsimpleRx* *xrxc_offs* *xdutyrestore* -print_node_v * +print_node_v * except=*:* free_ckt_db 99999999 search_ckt_analog el=*xtx2rxcap* set_fcap_param report=1 @@ -9,3 +8,7 @@ set_analogfcap_param 0.01f 0.1f set_analogrelfcap_param 0.0000001 0.000001 set_tv_window start=5ns set_mesg_opt limit_per_mesg=100 + +#set_sim_eou sim=6 model=6 net=6 +set_sim_eou sim=2 model=2 net=2 +#set_powernet_default mode=5 level=0 acc_dc=0 diff --git a/testCode/com/sun/vlsi/chips/marina/test/Marina.java b/testCode/com/sun/vlsi/chips/marina/test/Marina.java index 353a88f..8c9cced 100644 --- a/testCode/com/sun/vlsi/chips/marina/test/Marina.java +++ b/testCode/com/sun/vlsi/chips/marina/test/Marina.java @@ -22,27 +22,31 @@ public class Marina { public static final String CONTROL_CHAIN = "marina.marina_control"; public static final String REPORT_CHAIN = "marina.marina_report"; + private static String prefix = "marinaGu@0.outDockW@3.marinaOu@1."; + private static final String OLC_PATH_EVEN = - "outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.scanEx3h@1"; // bits 2,4,6 + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.scanEx3h@1"; // bits 2,4,6 private static final String OLC_PATH_ODD = - "outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.scanEx3h@2"; // bits 1,3,5 + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.scanEx3h@2"; // bits 1,3,5 + private static final String OLC_PATH_KESSEL = + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.counte@0.adamScan@1.scanEx6h@"; private static final String ILC_PATH_ODD = - "outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.scanEx4h@0"; // bits 1,3,5,7 + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.scanEx4h@0"; // bits 1,3,5,7 private static final String ILC_PATH_EVEN = - "outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.scanEx4h@1"; // bits 2,4,6,8 + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.scanEx4h@1"; // bits 2,4,6,8 private static final String FLAGS_PATH = - "outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.scanEx3h@0"; + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.scanEx3h@0"; private static final String INSTR_RING_CONTROL_PATH = - "southFif@1.tapPropS@1.tapStage@2"; + prefix+"southFif@1.tapPropS@1.tapStage@2"; private static final String TOK_FIFO_PATH = - "tokenFIF@1"; + prefix+"tokenFIF@1"; private static final String INSTRUCTION_COUNTER_PATH = - "southFif@1.tapPropS@1.instruct@0"; + prefix+"southFif@1.tapPropS@1.instruct@0"; private static final String DATA_COUNTER_PATH = - "northFif@1.fillDrai@1.instruct@0"; + prefix+"northFif@1.fillDrai@1.instruct@0"; private static final String TOK_PRED_PATH = - "outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.scanEx2h@0.scanCell@10"; + prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.scanEx2h@0.scanCell@10"; private static final int COUNTER_LENGTH = 34; private static final int INSTRUCTION_SEND_NDX = 1; @@ -119,13 +123,13 @@ public class Marina { this.model = model; this.indenter = indenter; data = new ProperStopper("north fifo", - "northFif@1.fillDrai@1.properSt@1", + prefix+"northFif@1.fillDrai@1.properSt@1", CONTROL_CHAIN, DATA_CHAIN, REPORT_CHAIN, cc, model, clockHack, indenter); instrIn = new InstructionStopper("south fifo", - "southFif@1.tapPropS@1.properSt@1", + prefix+"southFif@1.tapPropS@1.properSt@1", CONTROL_CHAIN, DATA_CHAIN, REPORT_CHAIN, @@ -145,36 +149,36 @@ public class Marina { // value. In verilog we need to prevent the X'es from // propagating, so we force the flags to a known value // - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__set_", 0); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__clr_", 1); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__set_", 0); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__clr_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__set_", 0); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__clr_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__set_", 0); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__clr_", 1); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__set_", 1); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__clr_", 0); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__set_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__clr_", 0); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@0.net_50", 0); // A - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@1.net_50", 0); // B - vm.setNodeState("outputDo@0.outM1Pre@0.litDandP@0.latch2in@0.hi2inLat@0.latchKee@0.out_B_", 0); // C + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@0.net_50", 0); // A + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@1.net_50", 0); // B + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.litDandP@0.latch2in@0.hi2inLat@0.latchKee@0.out_B_", 0); // C // possible C-flag inputs - vm.setNodeState("northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ONE+1)+"]", 0); - vm.setNodeState("northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ZERO+1)+"]", 0); + vm.setNodeState(prefix+"northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ONE+1)+"]", 0); + vm.setNodeState(prefix+"northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ZERO+1)+"]", 0); // force the OLC to zero if (!kesselsCounter) for(int i=1; i<=6; i++) - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.inLO["+i+"]", (i==1)?0:1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.inLO["+i+"]", (i==1)?0:1); // set the ILC input to 1 for(int i=1; i<=8; i++) { if (i!=7) - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.\\inLO["+i+"]", (i==1)?0:1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.\\inLO["+i+"]", (i==1)?0:1); } - vm.setNodeState("northFif@1.upDown8w@2.weakStag@22.addr1in2@0.fire", 1); + vm.setNodeState(prefix+"northFif@1.upDown8w@2.weakStag@22.addr1in2@0.fire", 1); model.waitNS(1000); - vm.setNodeState("northFif@1.upDown8w@2.weakStag@22.addr1in2@0.fire", 0); + vm.setNodeState(prefix+"northFif@1.upDown8w@2.weakStag@22.addr1in2@0.fire", 0); model.waitNS(1000); vm.setNodeState("sid[9]", 1); @@ -187,48 +191,48 @@ public class Marina { model.waitNS(1000); // pulse ilc[load] and olc[load] - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_load_", 1); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_decLO_", 1); - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_torpLO_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_load_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_decLO_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_torpLO_", 1); if (!kesselsCounter) - vm.setNodeState("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.olc_load_", 1); + vm.setNodeState(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.olc_load_", 1); model.waitNS(100); model.waitNS(1); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_load_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_decLO_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_torpLO_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_load_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_decLO_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.ilc_torpLO_"); if (!kesselsCounter) - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.olc_load_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.olc_load_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__set_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__clr_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__set_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__clr_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__set_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_A__clr_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__set_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_B__clr_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__set_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__clr_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__set_"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flag_D__clr_"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@0.net_50"); - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@1.net_50"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@0.net_50"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.flags@0.aFlag@1.net_50"); // Every move instruction, even those with Ti=0,Di=0, // loads the C-flag. It will get loaded with an "X", // which will then leak into the flags and from there the // predicate. - vm.releaseNode("outputDo@0.outM1Pre@0.litDandP@0.latch2in@0.hi2inLat@0.latchKee@0.out_B_"); - vm.releaseNode("northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ONE+1)+"]"); - vm.releaseNode("northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ZERO+1)+"]"); - vm.releaseNode("northFif@1.upDown8w@2.weakStag@22.addr1in2@0.fire"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.litDandP@0.latch2in@0.hi2inLat@0.latchKee@0.out_B_"); + vm.releaseNode(prefix+"northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ONE+1)+"]"); + vm.releaseNode(prefix+"northFif@1.upDown8w@2.weakStag@22.ain["+(INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ZERO+1)+"]"); + vm.releaseNode(prefix+"northFif@1.upDown8w@2.weakStag@22.addr1in2@0.fire"); for(int i=1; i<=8; i++) { if (i!=7) - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.\\inLO["+i+"] "); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.ilcMoveO@0.ilc@0.\\inLO["+i+"] "); } model.waitNS(1000); if (!kesselsCounter) for(int i=1; i<=6; i++) - vm.releaseNode("outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.inLO["+i+"]"); + vm.releaseNode(prefix+"outputDo@0.outM1Pre@0.outDockP@0.outDockC@0.olcWcont@0.olc@0.inLO["+i+"]"); // the proper stopper states come up in an undefined ("X") // state, so under Verilog we need to force them to a @@ -239,13 +243,19 @@ public class Marina { } else { NanosimModel nModel = (NanosimModel) model; - nModel.setNodeVoltage("sid[9]",1.0); - nModel.setNodeVoltage("sic[9]",1.0); - nModel.setNodeVoltage("sir[9]",1.0); + /* + nModel.setNodeVoltage(prefix+"sid[9]",1.0); + nModel.setNodeVoltage(prefix+"sic[9]",1.0); + nModel.setNodeVoltage(prefix+"sir[9]",1.0); + nModel.waitNS(WIDTH); + nModel.setNodeVoltage(prefix+"sid[9]",0.0); + nModel.setNodeVoltage(prefix+"sic[9]",0.0); + nModel.setNodeVoltage(prefix+"sir[9]",0.0); + nModel.waitNS(1); + */ + nModel.setNodeVoltage("mc",1.0); nModel.waitNS(WIDTH); - nModel.setNodeVoltage("sid[9]",0.0); - nModel.setNodeVoltage("sic[9]",0.0); - nModel.setNodeVoltage("sir[9]",0.0); + nModel.setNodeVoltage("mc",0.0); nModel.waitNS(1); } resetAfterMasterClear(); @@ -275,16 +285,31 @@ public class Marina { /** Get the 6 bit outer loop counter. */ public int getOLC() { shiftReport(true, false); - BitVector odd = cc.getOutBits(REPORT_CHAIN+"."+OLC_PATH_ODD).bitReverse(); - BitVector even = cc.getOutBits(REPORT_CHAIN+"."+OLC_PATH_EVEN).bitReverse(); - odd = odd.not(); - even = even.not(); - BitVector bv = new BitVector(6, "olc"); - for(int i=0; i<3; i++) { - bv.set(i*2, odd.get(i)); - bv.set(i*2+1, even.get(i)); + if (kesselsCounter) { + BitVector bits = null; + for(int i=0; i<4; i++) { + BitVector x = cc.getOutBits(REPORT_CHAIN+"."+OLC_PATH_KESSEL+i); + //System.out.println("bits are: " + x); + bits = bits==null ? x : bits.cat(x); + } + //System.out.println("kesselsCounter = " + bits); + int first = 0; + int second = 0; + for(int i=0; i<6; i++) first |= bits.get(4+i*3) ? (1<=0; i--) { model.waitNS(128 * CYCLE_TIME_NS); prln("OLC should be: "+i); - int olc = marina.getOLC(); - fatal(olc!=i, "bad OLC: "+olc+" expected: "+i); + expectOlc(i); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement)); } @@ -1381,8 +1415,7 @@ public class MarinaTest { model.waitNS(CYCLE_TIME_NS * 64); - int olc = marina.getOLC(); - fatal(olc != (1<