public static FunctionComponent instantiateGate( final Gate gate, final String instanceName, final Circuit circuit) { final FunctionComponent component = new FunctionComponent(); component.setModule(gate.name); circuit.add(component); if (instanceName != null) { try { circuit.setName(component, instanceName); } catch (ArgumentException e) { LogUtils.logWarningLine( "Cannot set name '" + instanceName + "' for component '" + circuit.getName(component) + "'."); } } FunctionContact contact = new FunctionContact(IOType.OUTPUT); component.add(contact); circuit.setName(contact, gate.function.name); String setFunction = getSetFunction(gate); String resetFunction = getResetFunction(gate); if (CommonDebugSettings.getVerboseImport()) { LogUtils.logInfoLine( "Instantiating gate " + gate.name + " " + gate.function.name + "=" + gate.function.formula); LogUtils.logInfoLine(" Set function: " + setFunction); LogUtils.logInfoLine(" Reset function: " + resetFunction); } try { BooleanFormula setFormula = CircuitUtils.parseContactFuncton(circuit, component, setFunction); contact.setSetFunctionQuiet(setFormula); BooleanFormula resetFormula = CircuitUtils.parseContactFuncton(circuit, component, resetFunction); contact.setResetFunctionQuiet(resetFormula); } catch (org.workcraft.formula.jj.ParseException e) { throw new RuntimeException(e); } return component; }
private void handleSynthesisResult( ExternalProcessResult mpsatResult, boolean sequentialAssign, RenderType renderType) { final String log = new String(mpsatResult.getOutput()); if ((log != null) && !log.isEmpty()) { System.out.println(log); System.out.println(); } byte[] eqnOutput = mpsatResult.getFileData(MpsatSynthesisTask.EQN_FILE_NAME); if (eqnOutput != null) { LogUtils.logInfoLine("MPSat synthesis result in EQN format:"); System.out.println(new String(eqnOutput)); System.out.println(); } byte[] verilogOutput = mpsatResult.getFileData(MpsatSynthesisTask.VERILOG_FILE_NAME); if (verilogOutput != null) { LogUtils.logInfoLine("MPSat synthesis result in Verilog format:"); System.out.println(new String(verilogOutput)); System.out.println(); } if (MpsatSynthesisUtilitySettings.getOpenSynthesisResult() && (verilogOutput != null)) { try { ByteArrayInputStream in = new ByteArrayInputStream(verilogOutput); VerilogImporter verilogImporter = new VerilogImporter(sequentialAssign); final Circuit circuit = verilogImporter.importCircuit(in); final WorkspaceEntry we = task.getWorkspaceEntry(); Path<String> path = we.getWorkspacePath(); final Path<String> directory = path.getParent(); final String name = FileUtils.getFileNameWithoutExtension(new File(path.getNode())); final ModelEntry me = new ModelEntry(new CircuitDescriptor(), circuit); boolean openInEditor = me.isVisual() || CommonEditorSettings.getOpenNonvisual(); final Framework framework = Framework.getInstance(); final Workspace workspace = framework.getWorkspace(); WorkspaceEntry newWorkspaceEntry = workspace.add(directory, name, me, true, openInEditor); VisualModel visualModel = newWorkspaceEntry.getModelEntry().getVisualModel(); if (visualModel instanceof VisualCircuit) { VisualCircuit visualCircuit = (VisualCircuit) visualModel; for (VisualFunctionComponent component : visualCircuit.getVisualFunctionComponents()) { component.setRenderType(renderType); } String title = we.getModelEntry().getModel().getTitle(); visualCircuit.setTitle(title); if (!we.getFile().exists()) { JOptionPane.showMessageDialog( null, "Error: Unsaved STG cannot be set as the circuit environment.", TITLE, JOptionPane.ERROR_MESSAGE); } else { visualCircuit.setEnvironmentFile(we.getFile()); if (we.isChanged()) { JOptionPane.showMessageDialog( null, "Warning: The STG with unsaved changes is set as the circuit environment.", TITLE, JOptionPane.WARNING_MESSAGE); } } SwingUtilities.invokeLater( new Runnable() { @Override public void run() { framework.getMainWindow().getCurrentEditor().updatePropertyView(); } }); } } catch (DeserialisationException e) { throw new RuntimeException(e); } } }