Skip to content
Snippets Groups Projects
Commit 976159ee authored by Daniela Genius's avatar Daniela Genius
Browse files

adding documentation and cleaning up SystemC-AMS generation

parent 1fa6d374
No related branches found
No related tags found
1 merge request!247New lip6
The files can be compiled by using the generated Makefile
in standalone mode, without SoCLib cross-compilation, if no GPIO2VCI
component or code running on the SoCLib digital platform is required
A SystemC-AMS proof-of-concept(2.1) is provided in
https://www.coseda-tech.com/systemc-ams-proof-of-concept
In the Virtual Machine, the authors kindly accepted that we
provide the PoC
TTool, an open-source UML toolkit for modeling embedded systems and procotols.
TTool is developed at Telecom ParisTech, http://ttool.telecom-paristech.fr/
-------------------------------------------------------------------------------
The SysCAMSGenerationCode and ELNGenerationCode directories are intended to store the SystemC-AMS (TDF and DE) and SystemC-AMS (ELN) files generated from TTool. The former can be uses in standalone mode with SystemC-AMS 2.1 available from
COSEDA https://www.coseda-tech.com/systemc-ams-proof-of-concept
\ No newline at end of file
File added
File added
...@@ -40,9 +40,6 @@ ...@@ -40,9 +40,6 @@
/* this class produces the lines containing essentially the initial #includes; we include all potential components event if they are not used in the deployment diagram*/ /* this class produces the lines containing essentially the initial #includes; we include all potential components event if they are not used in the deployment diagram*/
/* authors: v1.0 Raja GATGOUT 2014
v2.0 Daniela GENIUS, Julien HENON 2015 */
package syscamstranslator.toSysCAMS; package syscamstranslator.toSysCAMS;
import java.util.LinkedList; import java.util.LinkedList;
...@@ -54,7 +51,9 @@ import syscamstranslator.*; ...@@ -54,7 +51,9 @@ import syscamstranslator.*;
* Principal code of a cluster component * Principal code of a cluster component
* Creation: 14/05/2018 * Creation: 14/05/2018
* @version 1.0 14/05/2018 * @version 1.0 14/05/2018
* @author Irina Kit Yan LEE * @author Irina Kit Yan LEE,
* @version 1.1 30/09/2019
* @modified Daniela GENIUS
*/ */
public class ClusterCode { public class ClusterCode {
...@@ -75,10 +74,9 @@ public class ClusterCode { ...@@ -75,10 +74,9 @@ public class ClusterCode {
LinkedList<SysCAMSTBlockDE> de = cluster.getBlockDE(); LinkedList<SysCAMSTBlockDE> de = cluster.getBlockDE();
LinkedList<SysCAMSTClock> clock = cluster.getClock(); LinkedList<SysCAMSTClock> clock = cluster.getClock();
//DG 19.09.
//corpsCluster = "template <typename vci_param>" + CR + //corpsCluster = "template <typename vci_param>" + CR +
// "class " +cluster.getClusterName()+ " : public sc_core::sc_module { "+ CR; // "class " +cluster.getClusterName()+ " : public sc_core::sc_module { "+ CR;
//fin DG 19.09.
corpsCluster = "// Simulation entry point." + CR + "int sc_main(int argc, char *argv[]) {" + CR2 corpsCluster = "// Simulation entry point." + CR + "int sc_main(int argc, char *argv[]) {" + CR2
+ "\tusing namespace sc_core;" + CR + "\tusing namespace sca_util;" + CR2; + "\tusing namespace sc_core;" + CR + "\tusing namespace sca_util;" + CR2;
...@@ -88,59 +86,51 @@ public class ClusterCode { ...@@ -88,59 +86,51 @@ public class ClusterCode {
for (SysCAMSTConnector c : connectors) { for (SysCAMSTConnector c : connectors) {
if ((c.get_p1().getComponent() instanceof SysCAMSTPortTDF && c.get_p2().getComponent() instanceof SysCAMSTPortTDF) if ((c.get_p1().getComponent() instanceof SysCAMSTPortTDF && c.get_p2().getComponent() instanceof SysCAMSTPortTDF)
|| (c.get_p1().getComponent() instanceof SysCAMSTPortTDF && c.get_p2().getComponent() instanceof SysCAMSTPortTDF)) { || (c.get_p1().getComponent() instanceof SysCAMSTPortTDF && c.get_p2().getComponent() instanceof SysCAMSTPortTDF)) {
if (c.getName().equals("")) {//corpsCluster +="6"+CR; if (c.getName().equals("")) {
corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortTDF) c.get_p1().getComponent()).getTDFType() + " > " corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortTDF) c.get_p1().getComponent()).getTDFType() + " > "
+ "sig_" + nb_con + ";" + CR; + "sig_" + nb_con + ";" + CR;
names.add("sig_" + nb_con); names.add("sig_" + nb_con);
nb_con++; nb_con++;
} else {//corpsCluster +="5"+CR; } else {
corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortTDF) c.get_p1().getComponent()).getTDFType() + "> " corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortTDF) c.get_p1().getComponent()).getTDFType() + "> "
+ c.getName() + ";" + CR; + c.getName() + ";" + CR;
names.add(c.getName()); names.add(c.getName());
} }
} else if ((c.get_p1().getComponent() instanceof SysCAMSTPortConverter && c.get_p2().getComponent() instanceof SysCAMSTPortDE)) { } else if ((c.get_p1().getComponent() instanceof SysCAMSTPortConverter && c.get_p2().getComponent() instanceof SysCAMSTPortDE)) {
if (c.getName().equals("")) {// corpsCluster +="4"+CR; if (c.getName().equals("")) {
// corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType() + "> " + "sig_" + nb_con + ";" + CR;//DG 19.09 sca-> sc corpsCluster = corpsCluster + "\tsc_core::sc_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType() + "> " + "sig_" + nb_con + ";" + CR;
corpsCluster = corpsCluster + "\tsc_core::sc_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType() + "> " + "sig_" + nb_con + ";" + CR;//DG 19.09 sca-> sc
names.add("sig_" + nb_con); names.add("sig_" + nb_con);
nb_con++; nb_con++;
} else{ } else{
if(((SysCAMSTPortConverter) c.get_p1().getComponent()).getNbits()==0) if(((SysCAMSTPortConverter) c.get_p1().getComponent()).getNbits()==0)
{ //corpsCluster +="3"+CR; {
// corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType() + "> " + c.getName() + ";" + CR;//DG 19.09 sca-> sc corpsCluster = corpsCluster + "\tsc_core::sc_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType() + "> " + c.getName() + ";" + CR;
corpsCluster = corpsCluster + "\tsc_core::sc_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType() + "> " + c.getName() + ";" + CR;//DG 19.09 sca-> sc
names.add(c.getName()); names.add(c.getName());
} }
else{//sc_uint else{
// corpsCluster +="@@@2"+CR;
corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType()+ "<"+ ((SysCAMSTPortConverter) c.get_p1().getComponent()).getNbits()+"> " + "> " corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p1().getComponent()).getConvType()+ "<"+ ((SysCAMSTPortConverter) c.get_p1().getComponent()).getNbits()+"> " + "> "
+ c.getName() + ";" + CR; + c.getName() + ";" + CR;
names.add(c.getName()); names.add(c.getName());
} }
} }
} else if ((c.get_p2().getComponent() instanceof SysCAMSTPortConverter && c.get_p1().getComponent() instanceof SysCAMSTPortDE)) { } else if ((c.get_p2().getComponent() instanceof SysCAMSTPortConverter && c.get_p1().getComponent() instanceof SysCAMSTPortDE)) {
if (c.getName().equals("")) { corpsCluster +="@@@0"+CR; if (c.getName().equals("")) {
// corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType() + " > " + "sig_" + nb_con + ";" + CR;
corpsCluster = corpsCluster + "\tsc_core::sc_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType() + "> " + "sig_" + nb_con + ";" + CR;//DG 30.09 sca-> sc corpsCluster = corpsCluster + "\tsc_core::sc_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType() + "> " + "sig_" + nb_con + ";" + CR;
names.add("sig_" + nb_con); names.add("sig_" + nb_con);
nb_con++; nb_con++;
} else { } else {
if( ((SysCAMSTPortConverter) c.get_p2().getComponent()).getNbits()==0 ) if( ((SysCAMSTPortConverter) c.get_p2().getComponent()).getNbits()==0 )
{ //corpsCluster +="@@@1"+CR; {
corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType() + "> " corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType() + "> "
+ c.getName() + ";" + CR; + c.getName() + ";" + CR;
names.add(c.getName()); names.add(c.getName());
} }
else{//sc_uint else{
//corpsCluster +="@@@4"+CR;
corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType()+ "<"+((SysCAMSTPortConverter) c.get_p2().getComponent()).getNbits() + "> > " corpsCluster = corpsCluster + "\tsca_tdf::sca_signal<" + ((SysCAMSTPortConverter) c.get_p2().getComponent()).getConvType()+ "<"+((SysCAMSTPortConverter) c.get_p2().getComponent()).getNbits() + "> > "
+ c.getName() + ";" + CR; + c.getName() + ";" + CR;
names.add(c.getName()); names.add(c.getName());
...@@ -179,115 +169,12 @@ public class ClusterCode { ...@@ -179,115 +169,12 @@ public class ClusterCode {
corpsCluster = corpsCluster + "\t sc_clock " + t.getName() + " (\"" + t.getName() + "\"," + t.getFrequency()+","+ t.getUnit()+","+ t.getDutyCycle()+","+ t.getStartTime()+","+ t.getUnitStartTime()+","+ t.getPosFirst()+");" + CR; corpsCluster = corpsCluster + "\t sc_clock " + t.getName() + " (\"" + t.getName() + "\"," + t.getFrequency()+","+ t.getUnit()+","+ t.getDutyCycle()+","+ t.getStartTime()+","+ t.getUnitStartTime()+","+ t.getPosFirst()+");" + CR;
} }
/* DG 19.09. nb_block=0;
corpsCluster = corpsCluster + CR + "\t// Instantiate headers files as well as bind their ports to the signal." + CR; corpsCluster = corpsCluster + CR + "\t// Instantiate cluster's modules." + CR;
for (SysCAMSTBlockTDF t : tdf) {
corpsCluster = corpsCluster + "\t" + t.getName() + " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR;
LinkedList<SysCAMSTPortTDF> portTDF = t.getPortTDF();
LinkedList<SysCAMSTPortConverter> portConv = t.getPortConverter();
for (SysCAMSTPortTDF p : portTDF) {
for (int i = 0; i < connectors.size(); i++) {
if (connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortTDF && connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortTDF) {
if (((SysCAMSTPortTDF) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortTDF) connectors.get(i).get_p1().getComponent()).getBlockTDF().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
} else if (((SysCAMSTPortTDF) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortTDF) connectors.get(i).get_p2().getComponent()).getBlockTDF().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
}
}
}
}
for (SysCAMSTPortConverter p : portConv) {
for (int i = 0; i < connectors.size(); i++) {
if (connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortConverter && connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortDE) {
if (((SysCAMSTPortConverter) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortConverter) connectors.get(i).get_p1().getComponent()).getBlockTDF().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
} else if (((SysCAMSTPortDE) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortDE) connectors.get(i).get_p2().getComponent()).getBlockDE().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
}
} else if (connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortConverter && connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortDE) {
if (((SysCAMSTPortConverter) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortConverter) connectors.get(i).get_p2().getComponent()).getBlockTDF().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
} else if (((SysCAMSTPortDE) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortDE) connectors.get(i).get_p1().getComponent()).getBlockDE().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
}
}
}
}
corpsCluster = corpsCluster + CR;
nb_block++;
}
for (SysCAMSTBlockDE t : de) {
corpsCluster = corpsCluster + "\t" + t.getName() + " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR;
LinkedList<SysCAMSTPortDE> portDE = t.getPortDE();
for (SysCAMSTPortDE p : portDE) {
for (int i = 0; i < connectors.size(); i++) {
if (connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortDE && connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortDE) {
if (((SysCAMSTPortDE) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortDE) connectors.get(i).get_p1().getComponent()).getBlockDE().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
} else if (((SysCAMSTPortDE) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortDE) connectors.get(i).get_p2().getComponent()).getBlockDE().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
}
} else if (connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortConverter && connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortDE) {
if (((SysCAMSTPortConverter) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortConverter) connectors.get(i).get_p1().getComponent()).getBlockTDF().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
} else if (((SysCAMSTPortDE) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortDE) connectors.get(i).get_p2().getComponent()).getBlockDE().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
}
} else if (connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortConverter && connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortDE) {
if (((SysCAMSTPortConverter) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortConverter) connectors.get(i).get_p2().getComponent()).getBlockTDF().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
} else if (((SysCAMSTPortDE) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortDE) connectors.get(i).get_p1().getComponent()).getBlockDE().getName().equals(t.getName())) {
corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR;
}
}
}
}
corpsCluster = corpsCluster + CR;
nb_block++;
}
*/
//fin DG 19.09.
//DG 19.09. replaced by new code from Rodrigo's version
nb_block=0;//DG 19.09. corrected reset to 0
corpsCluster = corpsCluster + CR + "\t// Instantiate cluster's modules." + CR;
// DG 19.09. enleve
/* for (SysCAMSTBlockTDF t : tdf) {
corpsCluster = corpsCluster + "\t" + t.getName();
if (!t.getListTypedef().isEmpty()) {
corpsCluster += "<"+t.getValueTemplate()+">";
}
corpsCluster += " " + t.getName() + "_" + nb_block + ";" + CR;
nb_block++;
}
for (SysCAMSTBlockDE t : de) {
corpsCluster = corpsCluster + "\t" + t.getName();
if (!t.getListTypedef().isEmpty()) {
corpsCluster += "<"+t.getValueTemplate()+">";
}
corpsCluster += " " + t.getName() + "_" + nb_block + ";" + CR;
nb_block++;
}*/
// DG 19.09. enleve
//corpsCluster = corpsCluster + "public:" + CR;
// corpsCluster = corpsCluster + "\tsc_in< typename vci_param::data_t > in_ams;" + CR;
//corpsCluster = corpsCluster + "\tsc_out< typename vci_param::data_t > out_ams;" + CR2;
nb_block = 0; nb_block = 0;
//corpsCluster = corpsCluster + "\tSC_CTOR(" +cluster.getClusterName()+ ") :" + CR;
for (SysCAMSTBlockTDF t : tdf) { for (SysCAMSTBlockTDF t : tdf) {
corpsCluster = corpsCluster + "\t" + t.getName()+ " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR; corpsCluster = corpsCluster + "\t" + t.getName()+ " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR;
nb_block++; nb_block++;
...@@ -296,10 +183,7 @@ public class ClusterCode { ...@@ -296,10 +183,7 @@ public class ClusterCode {
corpsCluster = corpsCluster + "\t" + t.getName()+ " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR; corpsCluster = corpsCluster + "\t" + t.getName()+ " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR;
nb_block++; nb_block++;
} }
//DG 19.09. enleve
// corpsCluster = corpsCluster + "\tin_ams(\"in_ams\")," + CR;
//corpsCluster = corpsCluster + "\tout_ams(\"out_ams\") {" + CR;
nb_block = 0; nb_block = 0;
for (SysCAMSTBlockTDF t : tdf) { for (SysCAMSTBlockTDF t : tdf) {
//corpsCluster = corpsCluster + "\t" + t.getName() + " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR; //corpsCluster = corpsCluster + "\t" + t.getName() + " " + t.getName() + "_" + nb_block + "(\"" + t.getName() + "_" + nb_block + "\");" + CR;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment