Beispiel #1
0
  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);
      }
    }
  }