bugfix in FpgaDock: treat ignore-olc instructions properly
authoradam <adam@megacz.com>
Thu, 28 Aug 2008 09:55:21 +0000 (10:55 +0100)
committeradam <adam@megacz.com>
Thu, 28 Aug 2008 09:55:21 +0000 (10:55 +0100)
src/edu/berkeley/fleet/fpga/FpgaDock.java

index 8a53829..5315f78 100644 (file)
@@ -176,38 +176,24 @@ public class FpgaDock extends FleetTwoDock implements FabricElement {
             new Event(new Object[] { instruction,
                                      PACKET_TOKEN.verilogVal("instruction"),
                                      ififo_out,
-                                     token_out,
-                                     I.verilog("ondeck"),
-                },
+                                     I.verilog("ondeck") },
                 new Action[] { instruction,
                                ififo_out,
                                new AssignAction(loop_counter, "0"),
                                new AssignAction(repeat_counter, "1"),
-                               isHatchOpen.doFill(),
-                });
+                               isHatchOpen.doFill() });
             // Non-Torpedo Arrival
-            new Event(new Object[] { instruction,
-                                     efifo_in,
-                                     "!("+PACKET_TOKEN.verilogVal("instruction")+")"
-                },
-                new Action[] {
-                    efifo_in,
-                });
+            new Event(new Object[] { instruction, efifo_in, "!("+PACKET_TOKEN.verilogVal("instruction")+")" },
+                      new Action[] { efifo_in });
             new Event(new Object[] { efifo_in.getName()+"_a" },
                       new Action[] { new SimpleAction(instruction.getName()+"_a <= 1;") });
 
             // Tail
-            new Event(new Object[] { efifo_out, TAIL.verilog(efifo_out.getName()) },
-                      new Action[] { efifo_out, isHatchOpen.doDrain() } );
+            new Event(new Object[] { efifo_out, ififo_in, isHatchOpen.isFull(), TAIL.verilog(efifo_out.getName()) },
+                      new Action[] { efifo_out,           isHatchOpen.doDrain() } );
             // Enqueue
-            new Event(new Object[] { efifo_out,
-                                     ififo_in,
-                                     "!("+TAIL.verilog(efifo_out.getName())+")",
-                                     isHatchOpen.isFull() },
-                new Action[] { efifo_out,
-                               ififo_in,
-                }
-                );
+            new Event(new Object[] { efifo_out, ififo_in, isHatchOpen.isFull(), "!("+TAIL.verilog(efifo_out.getName())+")" },
+                      new Action[] { efifo_out, ififo_in } );
 
             // Execute                                     
             new Event(new Object[] { ififo_out, ififo_in, proceed.isFull() },
@@ -322,7 +308,11 @@ public class FpgaDock extends FleetTwoDock implements FabricElement {
                        "("+
                        "!`instruction_is_normal(i) || repeat_counter!=0"+
                        ") && ("+
+                       "("+
+                       P_ALWAYS.verilog("i")+
+                       ") || ("+
                        P_OLC_ZERO.verilog("i")+"==(loop_counter==0)"+
+                       ")"+
                        ") && ("+
                        " " + P_A.verilog("i")+" ? flag_a"+
                        ":" + P_B.verilog("i")+" ? flag_b"+