import java.io.IOException; import synthesijer.hdl.*; import synthesijer.hdl.expr.*; public class led_top{ private static void addThreadPort(HDLModule m){ m.newPort("start_req", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); m.newPort("start_busy", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); m.newPort("join_req", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); m.newPort("join_busy", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); m.newPort("yield_req", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); m.newPort("yield_busy", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); } public static void main(String... args) throws IOException{ HDLModule led_top = new HDLModule("led_top", "clk", "reset"); HDLPort q0 = led_top.newPort("q0", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); HDLPort q1 = led_top.newPort("q1", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); HDLModule led = new HDLModule("led", "clk", "reset"); HDLPort led_run_req = led.newPort("run_req", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); led.newPort("run_busy", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); HDLPort led_out = led.newPort("flag_out", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); led.newPort("flag_in", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); led.newPort("flag_we", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); addThreadPort(led); HDLInstance inst_led = led_top.newModuleInstance(led, "U0"); inst_led.getSignalForPort("clk").setAssign(null, led_top.getSysClk().getSignal()); //inst_led.getSignalForPort("reset").setAssign(null, led_top.newExpr(HDLOp.NOT, led_top.getSysReset().getSignal())); inst_led.getSignalForPort("reset").setAssign(null, led_top.getSysReset().getSignal()); inst_led.getSignalForPort(led_run_req.getName()).setAssign(null, HDLPreDefinedConstant.HIGH); // always high to start immediately HDLModule firefly = new HDLModule("FireFly", "clk", "reset"); HDLPort ff_run_req = firefly.newPort("run_req", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); firefly.newPort("run_busy", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); HDLPort ff_out = firefly.newPort("flag_out", HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); firefly.newPort("flag_in", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); firefly.newPort("flag_we", HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); addThreadPort(firefly); HDLInstance inst_ff = led_top.newModuleInstance(firefly, "U1"); inst_ff.getSignalForPort("clk").setAssign(null, led_top.getSysClk().getSignal()); //inst_ff.getSignalForPort("reset").setAssign(null, led_top.newExpr(HDLOp.NOT, led_top.getSysReset().getSignal())); inst_ff.getSignalForPort("reset").setAssign(null, led_top.getSysReset().getSignal()); inst_ff.getSignalForPort(ff_run_req.getName()).setAssign(null, HDLPreDefinedConstant.HIGH); // always high to start immediately q0.getSignal().setAssign(null, inst_led.getSignalForPort(led_out.getName())); q1.getSignal().setAssign(null, inst_ff.getSignalForPort(ff_out.getName())); HDLUtils.generate(led_top, HDLUtils.VHDL); HDLUtils.generate(led_top, HDLUtils.Verilog); } }