From 14dd1056f8df4875e61085f016e2cbb01a61593c Mon Sep 17 00:00:00 2001 From: apvrille <ludovic.apvrille@eurecom.fr> Date: Wed, 13 Mar 2019 15:48:17 +0100 Subject: [PATCH] Adding NoC --- src/main/java/tmltranslator/HwNoC.java | 194 ++++++++++++++++++ .../tmltranslator/tonetwork/TMAP2Network.java | 2 +- .../java/ui/tmlcompd/TMLCPrimitivePort.java | 27 ++- .../ui/window/JDialogTMLCompositePort.java | 42 +++- 4 files changed, 260 insertions(+), 5 deletions(-) create mode 100755 src/main/java/tmltranslator/HwNoC.java diff --git a/src/main/java/tmltranslator/HwNoC.java b/src/main/java/tmltranslator/HwNoC.java new file mode 100755 index 0000000000..e64bd92abd --- /dev/null +++ b/src/main/java/tmltranslator/HwNoC.java @@ -0,0 +1,194 @@ +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + + + + +package tmltranslator; + +import myutil.TraceManager; + +import java.awt.*; +import java.util.ArrayList; +import java.util.HashMap; + + +/** + * Class HwNoC + * Creation: 07/01/2019 + * @version 1.0 07/01/2019 + * @author Ludovic APVRILLE + */ +public class HwNoC extends HwCommunicationNode { + + public static final int DEFAULT_BUFFER_BYTE_DATA_SIZE = 4; + + public int latency = 0; + public int bufferByteSize = DEFAULT_BUFFER_BYTE_DATA_SIZE; // In bytes. Should more than 0 + public int size = 2; //2x2 by default + public HashMap<String, Point> placementMap; + + public HwNoC(String _name) { + super(_name); + } + + public String toXML() { + String s = "<ROUTER name=\"" + name + "\" clockRatio=\"" + clockRatio + "\" bufferByteSize=\"" + bufferByteSize + "\" />\n"; + return s; + } + + + public boolean makePlacement(String placement, int size) { + return (placementMap = makePlacementMap(placement, size)) != null; + } + + + // Find a free place for a node + public boolean map(String name) { + if (placementMap == null) { + return false; + } + + boolean [][] mapB = new boolean[size][size]; + for(int i=0; i<size; i++) { + for(int j=0; j<size; j++) { + mapB[i][j] = false; + } + } + + for(Point p: placementMap.values()) { + mapB[p.x][p.y] = true; + } + + for(int i=0; i<size; i++) { + for(int j=0; j<size; j++) { + if (mapB[i][j] == false) { + placementMap.put(name, new Point(i, j)); + return true; + } + } + } + + return false; + + } + + public String toString() { + String ret=""; + if (placementMap == null) { + return ret; + } + + String [][] mapS = new String[size][size]; + for(int i=0; i<size; i++) { + for(int j=0; j<size; j++) { + mapS[i][j] = " "; + } + } + + for(String s: placementMap.keySet()) { + Point p = placementMap.get(s); + mapS[p.x][p.y] = s; + } + + for(int i=0; i<size; i++) { + for(int j=0; j<size; j++) { + ret += mapS[i][j] + "\t"; + } + ret += "\n"; + } + return ret; + + } + + public static HashMap<String, Point> makePlacementMap(String placement, int size) { + if (placement == null) { + return null; + } + + HashMap<String, Point> map = new HashMap<>(); + placement = placement.trim(); + + if (placement.length() == 0) { + return map; + } + + String[] byElt = placement.split(";"); + for(String tmp: byElt) { + tmp = tmp.trim(); + String [] elt = tmp.split(" "); + if (elt.length != 3) { + return null; + } + try { + int x = Integer.decode(elt[1]); + int y = Integer.decode(elt[2]); + if ((x>size) || (y>size)) { + return null; + } + map.put(elt[0], new Point(x, y)); + + } catch (Exception e) { + TraceManager.addDev("Invalid number in " + tmp); + return null; + } + } + + // Must now verify that two nodes are not mapped at the same coordinate + boolean [][] mapB = new boolean[size][size]; + for(int i=0; i<size; i++) { + for(int j=0; j<size; j++) { + mapB[i][j] = false; + } + } + + for(Point p: map.values()) { + if (mapB[p.x][p.y] == true) { + return null; + } + mapB[p.x][p.y] = true; + } + + return map; + } + + + + + +} diff --git a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java index 30d6ef79d0..3a9ef39beb 100644 --- a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java +++ b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java @@ -203,7 +203,7 @@ public class TMAP2Network<E> { // A bridge is put with the same position as the router as to allow classical paths not to use the router - + return null; // all ok } diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java b/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java index 63f8c97269..898b64d2f5 100755 --- a/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java +++ b/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java @@ -159,6 +159,9 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent protected String dataFlowType = "VOID"; protected String associatedEvent = "VOID"; + // Network + protected int vc; + public int verification; public String oldName; @@ -600,7 +603,12 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent } } - JDialogTMLCompositePort jda = new JDialogTMLCompositePort(commName, typep, list[0], list[1], list[2], list[3], list[4], isOrigin, isFinite, isBlocking, ""+maxSamples, ""+widthSamples, isLossy, lossPercentage, maxNbOfLoss, frame, "Port properties", otherTypes, dataFlowType, associatedEvent, isPrex, isPostex, checkConf, checkAuth, reference, refs); + JDialogTMLCompositePort jda = new JDialogTMLCompositePort(commName, typep, list[0], list[1], list[2], list[3], + list[4], isOrigin, isFinite, isBlocking, + ""+maxSamples, ""+widthSamples, isLossy, lossPercentage, maxNbOfLoss, + frame, "Port properties", + otherTypes, dataFlowType, associatedEvent, isPrex, isPostex, checkConf, checkAuth, reference, refs, + vc); // jda.setSize(350, 700); GraphicLib.centerOnParent(jda, 350, 700 ); // jda.show(); // blocked until dialog has been closed @@ -688,6 +696,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent list[i].setType(jda.getStringType(i)); //TraceManager.addDev("Recorded type: " + list[i].getTypeOther()); } + vc = jda.getVC(); } catch (Exception e) { JOptionPane.showMessageDialog(frame, "Non valid value: " + e.getMessage(), "Error", JOptionPane.INFORMATION_MESSAGE); return false; @@ -785,6 +794,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent sb.append("\" checkAuth=\"" + checkAuth); sb.append("\" checkWeakAuthStatus=\"" + checkWeakAuthStatus); sb.append("\" checkStrongAuthStatus=\"" + checkStrongAuthStatus); + sb.append("\" vc=\"" + vc); sb.append("\" />\n"); for(int i=0; i<nbMaxAttribute; i++) { // @@ -897,6 +907,13 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent } catch (Exception e) {} + try { + vc = Integer.decode(elt.getAttribute("vc")); + + } catch (Exception e) { + vc = 0; + } + } makeValue(); @@ -969,6 +986,10 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent return TGComponentManager.CONNECTOR_PORT_TMLC; } + public int getVC() { + return vc; + } + public String getAttributes() { String attr = ""; @@ -1031,9 +1052,11 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent } if (conflict) { - attr += "Error in path=" + conflictMessage; + attr += "Error in path=" + conflictMessage + "\n"; } + attr += "vc=" + vc; + return attr; } diff --git a/src/main/java/ui/window/JDialogTMLCompositePort.java b/src/main/java/ui/window/JDialogTMLCompositePort.java index 1bb3ebeb4f..b84fceb0c3 100644 --- a/src/main/java/ui/window/JDialogTMLCompositePort.java +++ b/src/main/java/ui/window/JDialogTMLCompositePort.java @@ -75,11 +75,13 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen private int lossPercentage; private int maxNbOfLoss; //-1 means no max + private int vc; + public boolean data; public boolean checkConf; public boolean checkAuth; // Panel1 - private JTextField nameText, maxText, widthText, associatedEventJT; + private JTextField nameText, maxText, widthText, associatedEventJT, vcText; private JComboBox<String> typePort, typeList1, typeList2, typeList3, typeList4, typeList5; private JComboBox<String> origin, finite, blocking, dfType; private JComboBox<TGComponent> refReq; @@ -102,7 +104,8 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen String title, Vector<String> _types, String _dataFlowType, String _associatedEvent, boolean _isPrex, boolean _isPostex, boolean _checkConf, - boolean _checkAuth, TGComponent _reference, Vector<TGComponent> _refs) { + boolean _checkAuth, TGComponent _reference, Vector<TGComponent> _refs, + int _vc) { super(f, title, true); frame = f; @@ -134,6 +137,7 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen checkConf = _checkConf; checkAuth = _checkAuth; refs = _refs; + vc = _vc; reference = _reference; myInitComponents(); initComponents(); @@ -216,6 +220,8 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen GridBagConstraints c3 = new GridBagConstraints(); GridBagConstraints c4 = new GridBagConstraints(); GridBagLayout gridbag4 = new GridBagLayout(); + GridBagConstraints c5 = new GridBagConstraints(); + GridBagLayout gridbag5 = new GridBagLayout(); setFont(new Font("Helvetica", Font.PLAIN, 14)); c.setLayout(gridbag0); @@ -552,6 +558,29 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen maxNbOfLossText = new JTextField("" + maxNbOfLoss); panel3.add(maxNbOfLossText, c3); + JPanel panel5 = new JPanel(); + panel5.setLayout(gridbag5); + panel5.setBorder(new javax.swing.border.TitledBorder("Network")); + panel5.setPreferredSize(new Dimension(300, 300)); + c5.gridwidth = 1; + c5.gridheight = 1; + c5.weighty = 1.0; + c5.weightx = 1.0; + c5.gridwidth = GridBagConstraints.REMAINDER; //end row + c5.fill = GridBagConstraints.BOTH; + c5.gridheight = 5; + panel5.add(new JLabel(" "), c5); + + + + c5.gridwidth = 1; + lossPercentageLabel = new JLabel("VC:"); + panel5.add(lossPercentageLabel, c5); + c5.gridwidth = GridBagConstraints.REMAINDER; //end row + vcText = new JTextField("" + vc); + panel5.add(lossPercentageText, c5); + + // main panel; c0.gridwidth = 1; @@ -565,6 +594,7 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen c.add(panel2, c0); c.add(panel4, c0); c.add(panel3, c0); + c.add(panel5, c0); c0.gridheight = 1; @@ -808,4 +838,12 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen return -1; } } + + public int getVC() { + try { + return Integer.decode(vcText.getText().trim()); + } catch (Exception e) { + return -1; + } + } } -- GitLab