add pump-local literals and convert Alu1 test case
[fleet.git] / src / edu / berkeley / fleet / fpga / Generator.java
index ba0bc7e..eca0197 100644 (file)
@@ -630,11 +630,26 @@ public class Generator {
 
         Assignable data_latch = new SimpleAssignable(inbox ? data_out.getName() : "`packet_data("+data_out.getName()+")");
         String data_latch_input = inbox ? "`packet_data("+data_in.getName()+")" : data_in.getName();
+
+        // Literal
+        box.new Event(
+                      new Object[] {
+                          ondeckFull.isFull(),
+                          "`instruction_is_literal(ondeck)"
+                      },
+                      new Action[] {
+                          new SimpleAction("ondeck_full<=0;"),
+                          new AssignAction(data_latch, "`instruction_literal(ondeck)"),
+                          newMayProceed.doFill()
+                      }
+                      );
+
         box.new Event(
                       new Object[] { ondeckFull.isFull(),
                                      data_out,
                                      token_out,
                                      ififo_in,
+                                     "!`instruction_is_literal(ondeck)",
                                      new ConditionalTrigger("`instruction_bit_datain(ondeck)", data_in),
                                      new ConditionalTrigger("`instruction_bit_tokenin(ondeck)", token_in)
                               },
@@ -683,6 +698,8 @@ public class Generator {
         pw.println("`define instruction_bit_dest(instruction)     instruction["+(OFFSET_DEST+WIDTH_DEST_ADDR-1)+":"+OFFSET_DEST+"]");
         pw.println("`define instruction_count(instruction)        instruction["+(OFFSET_COUNT+WIDTH_COUNT-1)+":"+OFFSET_COUNT+"]");
         pw.println("`define instruction_is_kill(i)                (`instruction_bit_latch(i) && (!(`instruction_bit_datain(i))))");
+        pw.println("`define instruction_is_literal(i)             (`instruction_bit_tokenout(i) && `instruction_bit_tokenin(i) && !`instruction_bit_dataout(i))");
+        pw.println("`define instruction_literal(i)                i["+(OFFSET_LITERAL+WIDTH_LITERAL-1)+":"+OFFSET_LITERAL+"]");
         pw.println("`define instruction_bit_kill_only_standing(i) (`instruction_bit_tokenin(i))");
         pw.println("`define instruction_is_clog(instruction)      (`instruction_count(instruction)==0 && !`instruction_bit_tokenin(instruction) && !`instruction_bit_datain(instruction) && !`instruction_bit_tokenout(instruction) && !`instruction_bit_dataout(instruction))");
         pw.println("`define instruction_is_unclog(instruction)    (`instruction_bit_kill_only_standing(instruction) && `instruction_is_kill(instruction))");