1 package com.sun.vlsi.chips.marina.test;
3 import java.util.ArrayList;
6 import com.sun.async.test.BitVector;
7 import com.sun.async.test.ChainControl;
8 import com.sun.async.test.ChipModel;
10 import edu.berkeley.fleet.api.Dock;
11 import edu.berkeley.fleet.api.Instruction;
12 import edu.berkeley.fleet.marina.MarinaFleet;
14 import static com.sun.vlsi.chips.marina.test.Marina.INSTRUCTION_LENGTH;
17 * InstructionStopper is a scaffold that lets us create a 36 bit propperStopper
18 * by using a 52 bit propperStopper and throwing away the unused bits.
20 public class InstructionStopper extends ProperStopper {
22 private String formatDecodedInstr(BitVector dta) {
23 BitVector instr = dta.get(0, INSTRUCTION_LENGTH).bitReverse();
24 StringBuffer sb = new StringBuffer();
25 String pred = instr.get(0, 6) .getState();
26 String rq = instr.get(6, 1).getState();
27 String unused2 = instr.get(7, 2).getState();
28 String op = instr.get(9, 6).getState();
29 String tail = instr.get(15, 1).getState();
30 String rest = instr.get(16, 20).getState();
32 return pred+" "+rq+" "+unused2+" "+op+" "+tail+" "+rest;
34 public InstructionStopper(String propInst,
35 String controlChain, String dataChain,
37 ChainControls cc, ChipModel model,
40 super(propInst, controlChain, dataChain, reportChain, cc, model, clockHack, indenter);
44 public void fill(BitVector instr) {
45 // allow user to pass in complete item: data + token + addr
46 if (instr.getNumBits()==(37+1+14)) {super.fill(instr); return;}
48 int n = instr.getNumBits();
49 fatal(n!=INSTRUCTION_LENGTH, "InstructionStopper.fill: wrong num bits: "+n+", expect: "+INSTRUCTION_LENGTH);
50 fatal(INSTRUCTION_LENGTH>37, "Instructions can't be more than 37 bits");
51 if (INSTRUCTION_LENGTH<37) {
52 BitVector pad = new BitVector(37-INSTRUCTION_LENGTH, "pad");
54 instr = instr.cat(pad);
56 BitVector t = new BitVector(1, "token"); t.setFromLong(1);
57 BitVector a = new BitVector(14, "addr"); a.setFromLong(0);
58 //super.fill(instr.cat(t).cat(a));
59 super.fill(t.cat(a).cat(instr));
62 public BitVector drainNoCheck() {
63 BitVector dta = super.drainNoCheck();
64 return dta.get(15, INSTRUCTION_LENGTH);
67 /** put one Instruction into InstructionStopper */
68 public void fill(Instruction instr) {
69 fill(MarinaUtils.berkToSun(MarinaTest.marinaFleet.encodeInstruction(MarinaTest.marinaFleet.getOnlyInputDock(), instr)));
72 /* put a torpedo into the InstructionStopper */
73 public void fillTorpedo() {
74 throw new RuntimeException("currently not implemented");