Merge lp:~danilovesky/workcraft/trunk-import-verilog into lp:workcraft

Proposed by Danil Sokolov
Status: Merged
Merged at revision: 627
Proposed branch: lp:~danilovesky/workcraft/trunk-import-verilog
Merge into: lp:workcraft
Diff against target: 81 lines (+25/-14)
1 file modified
CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java (+25/-14)
To merge this branch: bzr merge lp:~danilovesky/workcraft/trunk-import-verilog
Reviewer Review Type Date Requested Status
Danil Sokolov Pending
Review via email: mp+264059@code.launchpad.net
To post a comment you must log in.
627. By Danil Sokolov

Merge proposal approved.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java 2015-07-04 22:23:12 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java 2015-07-07 17:30:53 +0000
@@ -26,6 +26,7 @@
26import java.util.Collection;26import java.util.Collection;
27import java.util.HashMap;27import java.util.HashMap;
28import java.util.HashSet;28import java.util.HashSet;
29import java.util.List;
2930
30import org.workcraft.exceptions.DeserialisationException;31import org.workcraft.exceptions.DeserialisationException;
31import org.workcraft.exceptions.FormatException;32import org.workcraft.exceptions.FormatException;
@@ -35,6 +36,7 @@
35import org.workcraft.plugins.circuit.CircuitComponent;36import org.workcraft.plugins.circuit.CircuitComponent;
36import org.workcraft.plugins.circuit.CircuitModelDescriptor;37import org.workcraft.plugins.circuit.CircuitModelDescriptor;
37import org.workcraft.plugins.circuit.Contact.IOType;38import org.workcraft.plugins.circuit.Contact.IOType;
39import org.workcraft.plugins.circuit.FunctionComponent;
38import org.workcraft.plugins.circuit.FunctionContact;40import org.workcraft.plugins.circuit.FunctionContact;
39import org.workcraft.plugins.circuit.javacc.ParseException;41import org.workcraft.plugins.circuit.javacc.ParseException;
40import org.workcraft.plugins.circuit.javacc.VerilogParser;42import org.workcraft.plugins.circuit.javacc.VerilogParser;
@@ -61,12 +63,7 @@
61 public Circuit importCircuit(InputStream in) throws DeserialisationException {63 public Circuit importCircuit(InputStream in) throws DeserialisationException {
62 try {64 try {
63 VerilogParser parser = new VerilogParser(in);65 VerilogParser parser = new VerilogParser(in);
64 HashMap<String, Module> modules = new HashMap<>();66 HashMap<String, Module> modules = getModuleMap(parser.parseCircuit());
65 for (VerilogParser.Module module: parser.parseCircuit()) {
66 if ((module == null) || (module.name == null)) continue;
67 modules.put(module.name, module);
68 }
69// printDebugInfo(modules);
70 HashSet<VerilogParser.Module> topModules = getTopModule(modules);67 HashSet<VerilogParser.Module> topModules = getTopModule(modules);
71 if (topModules.size() == 0) {68 if (topModules.size() == 0) {
72 throw new RuntimeException("No top module found.");69 throw new RuntimeException("No top module found.");
@@ -138,20 +135,15 @@
138 circuit.add(contact);135 circuit.add(contact);
139 }136 }
140 for (VerilogParser.Instance verilogInstance: topModule.instances) {137 for (VerilogParser.Instance verilogInstance: topModule.instances) {
141 CircuitComponent component = new CircuitComponent();138 FunctionComponent component = new FunctionComponent();
142 component.setModule(verilogInstance.moduleName);139 component.setModule(verilogInstance.moduleName);
143 circuit.setName(component, verilogInstance.name);140 circuit.setName(component, verilogInstance.name);
144 circuit.add(component);141 circuit.add(component);
145 VerilogParser.Module module = modules.get(verilogInstance.moduleName);142 VerilogParser.Module module = modules.get(verilogInstance.moduleName);
146 HashMap<String, VerilogParser.Port> ports = new HashMap<>();143 HashMap<String, VerilogParser.Port> instancePorts = getModulePortMap(module);
147 if (module != null) {
148 for (VerilogParser.Port port: module.ports) {
149 ports.put(port.name, port);
150 }
151 }
152 for (VerilogParser.Connection verilogConnection: verilogInstance.connections) {144 for (VerilogParser.Connection verilogConnection: verilogInstance.connections) {
153 FunctionContact contact = new FunctionContact();145 FunctionContact contact = new FunctionContact();
154 VerilogParser.Port verilogPort = ports.get(verilogConnection.name);146 VerilogParser.Port verilogPort = instancePorts.get(verilogConnection.name);
155 Wire wire = wires.get(verilogConnection.netName);147 Wire wire = wires.get(verilogConnection.netName);
156 if (wire == null) {148 if (wire == null) {
157 wire = new Wire();149 wire = new Wire();
@@ -180,4 +172,23 @@
180 return circuit;172 return circuit;
181 }173 }
182174
175 private HashMap<String, VerilogParser.Module> getModuleMap(List<VerilogParser.Module> modules) throws ParseException {
176 HashMap<String, VerilogParser.Module> result = new HashMap<>();
177 for (VerilogParser.Module module: modules) {
178 if ((module == null) || (module.name == null)) continue;
179 result.put(module.name, module);
180 }
181 return result;
182 }
183
184 private HashMap<String, VerilogParser.Port> getModulePortMap(VerilogParser.Module module) {
185 HashMap<String, VerilogParser.Port> result = new HashMap<>();
186 if (module != null) {
187 for (VerilogParser.Port port: module.ports) {
188 result.put(port.name, port);
189 }
190 }
191 return result;
192 }
193
183}194}

Subscribers

People subscribed via source and target branches