package synthesijer.hdl.expr; import synthesijer.hdl.HDLExpr; import synthesijer.hdl.HDLLiteral; import synthesijer.hdl.HDLSignal; import synthesijer.hdl.HDLTreeVisitor; import synthesijer.hdl.HDLPrimitiveType; public enum HDLPreDefinedConstant implements HDLLiteral{ VECTOR_ZERO("(others => '0')", "0"), INTEGER_ZERO("0", "0"), INTEGER_ONE("1", "1"), BOOLEAN_TRUE("true", "1'b1"), BOOLEAN_FALSE("false", "1'b0"), LOW("'0'", "1'b0"), HIGH("'1'", "1'b1"); private final String vhdl, verilog; private HDLPreDefinedConstant(String vhdl, String verilog){ this.vhdl = vhdl; this.verilog = verilog; } public String getVHDL(){ return vhdl; } public String getVerilogHDL(){ return verilog; } @Override public void accept(HDLTreeVisitor v) { v.visitHDLLitral(this); } public HDLExpr getResultExpr(){ return this; } public HDLPrimitiveType getType(){ switch(this){ case BOOLEAN_FALSE: case BOOLEAN_TRUE: return HDLPrimitiveType.genBitType(); case HIGH: case LOW: return HDLPrimitiveType.genBitType(); case INTEGER_ZERO: case INTEGER_ONE: return HDLPrimitiveType.genSignedType(-1); case VECTOR_ZERO: return HDLPrimitiveType.genVectorType(-1); default: return HDLPrimitiveType.genUnknowType(); } } @Override public HDLSignal[] getSrcSignals() { return null; } }