package synthesijer.hdl; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.EnumSet; import synthesijer.SynthesijerUtils; import synthesijer.hdl.HDLPort.OPTION; import synthesijer.hdl.expr.HDLValue; import synthesijer.hdl.tools.HDLSequencerToDot; import synthesijer.hdl.tools.ResourceUsageTable; public class HDLUtils { public static void println(PrintWriter dest, int offset, String str){ dest.println(pad(offset) + str); } public static void print(PrintWriter dest, int offset, String str){ dest.print(pad(offset) + str); } public static void nl(PrintWriter dest){ dest.println(); } private static String pad(int offset){ String s = ""; for(int i = 0; i < offset; i++){ s += " "; } return s; } public enum Format{ VHDL, Verilog }; public static final Format VHDL = Format.VHDL; public static final Format Verilog = Format.Verilog; public static void generate(HDLModule m, Format f){ String ext = f == Format.VHDL ? ".vhd" : ".v"; try(PrintWriter dest = new PrintWriter(new FileOutputStream(new File(m.getName() + ext)), true)){ if(f == Format.VHDL){ m.genVHDL(dest); }else{ m.genVerilogHDL(dest); } }catch(IOException e){ SynthesijerUtils.error(e.toString()); } } public static void genHDLSequencerDump(HDLModule m){ try(PrintWriter dest = new PrintWriter(new FileOutputStream(new File(m.getName() + "_statemachine_hdl.dot")), true)){ HDLSequencerToDot obj = new HDLSequencerToDot(m); obj.generate(dest); }catch(IOException e){ SynthesijerUtils.error(e.toString()); } } public static void genResourceUsageTable(HDLModule m){ try(PrintWriter dest = new PrintWriter(new FileOutputStream(new File(m.getName() + "_resourcetable.html")), true)){ ResourceUsageTable obj = new ResourceUsageTable(m); obj.generate(dest); }catch(IOException e){ SynthesijerUtils.error(e.toString()); } } public static HDLPort genOutputPort(HDLModule m, String name){ return m.newPort(name, HDLPort.DIR.OUT, HDLPrimitiveType.genBitType()); } public static HDLPort genOutputPort(HDLModule m, String name, EnumSet<OPTION> opt){ return m.newPort(name, HDLPort.DIR.OUT, HDLPrimitiveType.genBitType(), opt); } public static HDLPort genOutputPort(HDLModule m, String name, int width){ return m.newPort(name, HDLPort.DIR.OUT, HDLPrimitiveType.genVectorType(width)); } public static HDLPort genOutputPort(HDLModule m, String name, int width, EnumSet<OPTION> opt){ return m.newPort(name, HDLPort.DIR.OUT, HDLPrimitiveType.genVectorType(width), opt); } public static HDLPort genInputPort(HDLModule m, String name){ return m.newPort(name, HDLPort.DIR.IN, HDLPrimitiveType.genBitType()); } public static HDLPort genInputPort(HDLModule m, String name, EnumSet<OPTION> opt){ return m.newPort(name, HDLPort.DIR.IN, HDLPrimitiveType.genBitType(), opt); } public static HDLPort genInputPort(HDLModule m, String name, int width){ return m.newPort(name, HDLPort.DIR.IN, HDLPrimitiveType.genVectorType(width)); } public static HDLPort genInputPort(HDLModule m, String name, int width, EnumSet<OPTION> opt){ return m.newPort(name, HDLPort.DIR.IN, HDLPrimitiveType.genVectorType(width), opt); } public static HDLValue value(int value, int width){ return new HDLValue(String.valueOf(value), HDLPrimitiveType.genSignedType(width)); } public static HDLValue newValue(int v, int w){ return new HDLValue(String.valueOf(v), HDLPrimitiveType.genSignedType(w)); } }