package synthesijer.hdl.verilog; import java.io.PrintWriter; import synthesijer.hdl.HDLExpr; import synthesijer.hdl.HDLInstance; import synthesijer.hdl.HDLInstanceRef; import synthesijer.hdl.HDLLiteral; import synthesijer.hdl.HDLModule; import synthesijer.hdl.HDLParameter; import synthesijer.hdl.HDLPort; import synthesijer.hdl.HDLPrimitiveType; import synthesijer.hdl.HDLSequencer; import synthesijer.hdl.HDLSignal; import synthesijer.hdl.HDLTreeVisitor; import synthesijer.hdl.HDLUserDefinedType; import synthesijer.hdl.HDLUtils; public class GenerateVerilogDefVisitor implements HDLTreeVisitor{ private final PrintWriter dest; private final int offset; public GenerateVerilogDefVisitor(PrintWriter dest, int offset){ this.dest = dest; this.offset = offset; } @Override public void visitHDLExpr(HDLExpr o) { } @Override public void visitHDLInstance(HDLInstance o) { } @Override public void visitHDLLitral(HDLLiteral o) { // TODO Auto-generated method stub } @Override public void visitHDLModule(HDLModule o) { for(HDLPort p: o.getPorts()){ if(p.isSet(HDLPort.OPTION.NO_SIG)) continue; // nothing to do if(p.getSignal() == null) continue; // nothing to do p.getSignal().accept(new GenerateVerilogDefVisitor(dest, offset)); } HDLUtils.nl(dest); for(HDLSignal s: o.getSignals()){ s.accept(new GenerateVerilogDefVisitor(dest, offset)); } HDLUtils.nl(dest); for(HDLSequencer m: o.getSequencers()){ m.accept(new GenerateVerilogDefVisitor(dest, offset)); } HDLUtils.nl(dest); } @Override public void visitHDLPort(HDLPort o) { HDLUtils.print(dest, offset, String.format("%s %s %s", o.getDir().getVerilogHDL(), o.getType().getVerilogHDL(), o.getName())); } @Override public void visitHDLParameter(HDLParameter o) { HDLUtils.print(dest, offset, String.format("parameter %s = %s", o.getName(), o.getDefaultValue().getVerilogHDL())); } @Override public void visitHDLSequencer(HDLSequencer o) { } @Override public void visitHDLSignal(HDLSignal o) { if(o.getType() instanceof HDLUserDefinedType){ ((HDLUserDefinedType) o.getType()).accept(this); } String s = ""; if(o.isDebugFlag()){ s += "(* mark_debug=\"TRUE\", keep=\"TRUE\", S=\"TRUE\" *) "; } if(o.getResetValue() != null && o.isRegister()){ s += String.format("%s %s %s = %s;", o.getKind().toString(), o.getType().getVerilogHDL(), o.getName(), o.getResetValue().getVerilogHDL()); }else{ s += String.format("%s %s %s;", o.getKind().toString(), o.getType().getVerilogHDL(), o.getName()); } HDLUtils.println(dest, offset, s); } @Override public void visitHDLType(HDLPrimitiveType o) { // TODO Auto-generated method stub } @Override public void visitHDLUserDefinedType(HDLUserDefinedType o) { for(int i = 0; i < o.getItems().length; i++){ // HDLUtils.println(dest, offset, String.format("parameter %s = 32'd%d;", o.getItems()[i].getVerilogHDL(), i)); HDLUtils.println(dest, offset, String.format("localparam %s = 32'd%d;", o.getItems()[i].getVerilogHDL(), i)); } } @Override public void visitHDLInstanceRef(HDLInstanceRef o){ } }