PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(prefix+"/"+name+".v")));
dump(pw, true);
pw.flush();
- for(InstantiatedModule m : instantiatedModules)
+ for(InstantiatedModule m : instantiatedModules.values())
m.module.dump(prefix);
}
public int id = 0;
public Port getPort(String name) { return ports.get(name); }
// order matters here
- public LinkedList<InstantiatedModule> instantiatedModules = new LinkedList<InstantiatedModule>();
+ public LinkedHashMap<String,InstantiatedModule> instantiatedModules = new LinkedHashMap<String,InstantiatedModule>();
// order matters here
public LinkedList<PercolatedPort> percolatedPorts = new LinkedList<PercolatedPort>();
public final Module thisModule;
public final int id;
public final HashMap<String,Port> ports = new HashMap<String,Port>();
- public String getName() { return module.getName()+"_"+id; }
+ private final String name;
+ public String getName() { return name; }
public InstantiatedModule(Module thisModule, Module module) {
this.thisModule = thisModule;
this.module = module;
// CRUDE
int id = 0;
- OUTER: while(true) {
- for (InstantiatedModule im : thisModule.instantiatedModules)
- if (im.getName().equals(module.getName()+"_"+id)) {
- id++;
- continue OUTER;
- }
- break;
- }
+ while(thisModule.instantiatedModules.get(module.getName()+"_"+id)!=null) id++;
this.id = id;
- thisModule.instantiatedModules.add(this);
+ this.name = module.getName()+"_"+id;
+ thisModule.instantiatedModules.put(this.name, this);
for(String s : module.portorder)
getPort(s);
}
pw.print("module "+name);
pw.println(isRoot ? "(clk_pin, rst_pin " : "(clk, rst ");
for(String name : portorder) pw.println(" , " + ports.get(name).getInterface());
- for (InstantiatedModule im : this.instantiatedModules)
+ for (InstantiatedModule im : this.instantiatedModules.values())
for(PercolatedPort pp : im.module.percolatedPorts)
if (!isRoot || (!pp.name.startsWith("root_in_") && !pp.name.startsWith("rst_")))
pw.println(" , "+pp.name);
pw.println(" input rst;");
}
- for (InstantiatedModule im : this.instantiatedModules)
+ for (InstantiatedModule im : this.instantiatedModules.values())
for(PercolatedPort pp : im.module.percolatedPorts) {
if (isRoot && (pp.name.startsWith("root_in_") || pp.name.startsWith("rst_")))
pw.print("wire");
for(WireValue wv : wires.values()) wv.dump(pw);
for(String name : ports.keySet()) pw.println(" " + ports.get(name).getAssignments());
for(WireValue wv : wires.values()) pw.println(" " + wv.getAssignments());
- for(InstantiatedModule m : instantiatedModules) m.dump(pw);
+ for(InstantiatedModule m : instantiatedModules.values()) m.dump(pw);
pw.println("always @(posedge clk) begin");
pw.println(" if (rst) begin");
for(Latch l : latches.values()) pw.println(l.getResetCode());