From 80b2284a15cd0e0595d02e49d1ceb9c608e62ad9 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Sat, 29 Aug 2009 19:07:11 -0700 Subject: [PATCH] performance improvements in Verilog.java --- src/edu/berkeley/fleet/fpga/verilog/Verilog.java | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/edu/berkeley/fleet/fpga/verilog/Verilog.java b/src/edu/berkeley/fleet/fpga/verilog/Verilog.java index 2913416..de2bfba 100644 --- a/src/edu/berkeley/fleet/fpga/verilog/Verilog.java +++ b/src/edu/berkeley/fleet/fpga/verilog/Verilog.java @@ -329,7 +329,7 @@ public class Verilog { 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; @@ -338,7 +338,7 @@ public class Verilog { public Port getPort(String name) { return ports.get(name); } // order matters here - public LinkedList instantiatedModules = new LinkedList(); + public LinkedHashMap instantiatedModules = new LinkedHashMap(); // order matters here public LinkedList percolatedPorts = new LinkedList(); @@ -605,22 +605,17 @@ public class Verilog { public final Module thisModule; public final int id; public final HashMap ports = new HashMap(); - 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); } @@ -661,7 +656,7 @@ public class Verilog { 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); @@ -697,7 +692,7 @@ public class Verilog { 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"); @@ -725,7 +720,7 @@ public class Verilog { 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()); -- 1.7.10.4