Module.Latch repcount = box.new Latch("repcount", WIDTH_COUNTER_LITERAL+1);
Module.Latch repcount2 = box.new Latch("repcount2", WIDTH_COUNTER_LITERAL+1);
Module.Latch repeat_counter = box.new Latch("repeat_counter", WIDTH_COUNTER_LITERAL+1);
- Module.Latch killcount = box.new Latch("killcount", WIDTH_COUNTER_LITERAL);
Module.Latch loop_counter = box.new Latch("loop_counter", WIDTH_COUNTER_LITERAL);
Module.StateWire ondeckFull = box.new StateWire("ondeck_full");
Module.StateWire newMayProceed = box.new StateWire("newmayproceed", true);
Module.StateWire doRepeat = box.new StateWire("dorepeat", false);
- Module.StateWire doRepeatKill = box.new StateWire("dorepeatkill", false);
- Module.StateWire doKill = box.new StateWire("dokill", false);
Module.StateWire isClogged = box.new StateWire("clogged", false);
Module.StateWire isMassacreing = box.new StateWire("massacreing", false);
ondeckFull.doDrain(),
new AssignAction(repeat_counter, "1"),
new AssignAction(repcount2, "1"),
- new ConditionalAction("`instruction_kill_count(instr)!=0", new AssignAction(repcount, "`instruction_kill_count(instr)")),
- new ConditionalAction("`instruction_kill_count(instr)!=0", doRepeatKill.doFill()),
- new ConditionalAction("`instruction_kill_count(instr)!=0", newMayProceed.doDrain()),
- new ConditionalAction("`instruction_kill_count(instr)==0", newMayProceed.doFill())
+ newMayProceed.doFill()
});
- // Kill
- box.new Event(
- new Object[] { doKill.isFull() },
- new Action[] { doKill.doDrain(),
- new ConditionalAction("killcount!=0", new AssignAction(repcount, "killcount-1")),
- new ConditionalAction("killcount!=0", doRepeatKill.doFill()),
- new ConditionalAction("killcount==0", newMayProceed.doFill())
- });
-
- // RepKill
- box.new Event(
- new Object[] { doRepeatKill.isFull(), ififo_out },
- new Action[] { doRepeatKill.doDrain(), ififo_out, doKill.doFill(),
- new AssignAction(killcount, repcount) }
- );
// Enqueue
box.new Event(
ondeckFull.doFill(),
newMayProceed.doDrain(),
new AssignAction(ondeck, ififo_out),
- new ConditionalAction("`instruction_is_normal("+ififo_out.getName()+") && !`is_standing("+ififo_out.getName()+")",
+ new ConditionalAction("`instruction_is_normal("+ififo_out.getName()+")",
new AssignAction(repcount2, "(repeat_counter==0?1:repeat_counter)")),
new ConditionalAction("`instruction_is_normal("+ififo_out.getName()+")",
new AssignAction(repeat_counter, "1")),
new ConditionalAction("`should_requeue(ondeck) && `done_executing(ondeck)", ififo_in),
new ConditionalAction("`should_requeue(ondeck) && `done_executing(ondeck)", new AssignAction(ififo_in, ondeck)),
new ConditionalAction("repcount2>1 || repcount2==`magic_standing_value", doRepeat.doFill()),
- new ConditionalAction("`is_standing(ondeck)", doRepeat.doFill()),
- new ConditionalAction("!`is_standing(ondeck) && repcount2!=`magic_standing_value",
+ new ConditionalAction("repcount2!=`magic_standing_value",
new AssignAction(repcount, "repcount2-1")),
- new ConditionalAction("!`is_standing(ondeck) && repcount2==`magic_standing_value",
+ new ConditionalAction("repcount2==`magic_standing_value",
new AssignAction(repcount, "`magic_standing_value")),
new ConditionalAction("`instruction_is_literal(ondeck)",
new AssignAction(data_latch, "`instruction_literal(ondeck)")),
pw.println("`define instruction_is_literal_hi(i) "+LITERAL_HI.verilog("i"));
pw.println("`define instruction_is_literal_lo(i) "+LITERAL_LO.verilog("i"));
pw.println("`define instruction_is_literal(i) "+LITERAL.verilog("i"));
- pw.println("`define instruction_kill_count(i) "+KILL.verilogVal("i"));
pw.println("`define instruction_is_kill(i) "+KILL.verilog("i"));
pw.println("`define instruction_is_unclog(i) "+UNCLOG.verilog("i"));
pw.println("`define instruction_is_clog(i) "+CLOG.verilog("i"));
pw.println("`define instruction_bit_latch(i) (`instruction_is_normal(i) && "+DC.verilog("i")+")");
pw.println("`define instruction_bit_datain(i) (`instruction_is_normal(i) && "+DI.verilog("i")+")");
pw.println("`define instruction_bit_tokenin(i) (`instruction_is_normal(i) && "+TI.verilog("i")+")");
- //pw.println("`define is_standing(i) (`instruction_is_normal(i) && "+STAND.verilog("i")+")");
pw.println("`define should_requeue(i) (loop_counter > 0)");
- pw.println("`define done_executing(i) (!`is_standing(i) && (repcount2==0 || repcount2==1))");
+ pw.println("`define done_executing(i) (repcount2==0 || repcount2==1)");
pw.println("`define magic_standing_value (1<<"+WIDTH_COUNTER_LITERAL+")");