Skip to content
Snippets Groups Projects
NetList.java 23.9 KiB
Newer Older
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
 * Daniela Genius, Lip6, UMR 7606 
 * 
 * ludovic.apvrille AT enst.fr
 * daniela.genius@lip6.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.
 */
Daniela Genius's avatar
Daniela Genius committed
/* authors: v1.0 Raja GATGOUT 2014
            v2.0 Daniela GENIUS, Julien HENON 2015 */

package ddtranslatorSoclib.toTopCell;
Florian Lugou's avatar
Florian Lugou committed

import ddtranslatorSoclib.AvatarCPU;
import ddtranslatorSoclib.AvatarCoproMWMR;
import ddtranslatorSoclib.AvatarRAM;
import ddtranslatorSoclib.AvatarTTY;
Daniela Genius's avatar
Daniela Genius committed

public class NetList {
    public static final String NAME_CLK = "signal_clk";
    public static final String CR = "\n";
    public static final String CR2 = "\n\n";
    private static final String NAME_RST = "signal_resetn";
Daniela Genius's avatar
Daniela Genius committed
    private static boolean tracing;
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
    public static String getNetlist(String icn, boolean _tracing) {
Daniela Genius's avatar
Daniela Genius committed
	int nb_clusters=TopCellGenerator.avatardd.getAllCrossbar().size();
Daniela Genius's avatar
Daniela Genius committed
	tracing = _tracing;
Daniela Genius's avatar
Daniela Genius committed
	String netlist;
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
	netlist = CR2 + "//------------------------------Netlist---------------------------------" + CR2;
Daniela Genius's avatar
Daniela Genius committed
       
Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "// icu" + CR2;
	netlist = netlist + "  vcifdtrom.add_property(\"interrupt-parent\", vcifdtrom.get_device_phandle(\"vci_xicu\"));" + CR2;
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "  vcixicu.p_clk(signal_clk);" + CR;
	netlist = netlist + "  vcixicu.p_resetn(signal_resetn);" + CR2;		
	netlist = netlist + "  vcixicu.p_vci(signal_vci_xicu);" + CR2;	
Daniela Genius's avatar
Daniela Genius committed
       
Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "  vcifdtrom.begin_device_node(\"vci_rttimer\", \"soclib:vci_rttimer\");" + CR;

	netlist = netlist + "  vcifdtrom.add_property(\"interrupts\", 4);" + CR;
	netlist = netlist + "  vcifdtrom.add_property(\"frequency\", 1000000);" + CR;	
	netlist = netlist + "  vcifdtrom.end_node();" + CR2;

	netlist = netlist + "  vcifdtrom.begin_device_node(\"vci_xicu\", \"soclib:vci_xicu\");" + CR2;
	netlist = netlist + "  int irq_map[cpus.size() * 3];" + CR;
	netlist = netlist + "  for ( size_t i = 0; i < cpus.size(); ++i )" + CR;
	netlist = netlist + "    {" + CR;
	netlist = netlist + "      irq_map[i*3 + 0] = i;" + CR;
	netlist = netlist + "      irq_map[i*3 + 1] = vcifdtrom.get_cpu_phandle(i);" + CR;
	netlist = netlist + "      irq_map[i*3 + 2] = 0;" + CR;
	netlist = netlist + "    }" + CR2;
	netlist = netlist + "  vcifdtrom.add_property(\"interrupt-map\", irq_map, cpus.size() * 3);" + CR;
	netlist = netlist + "  vcifdtrom.add_property(\"frequency\", 1000000);" + CR2;

	netlist = netlist + "  vcifdtrom.add_property(\"param-int-pti-count\", 1);" + CR;
	netlist = netlist + "  vcifdtrom.add_property(\"param-int-hwi-count\", xicu_n_irq);" + CR;
	netlist = netlist + "  vcifdtrom.add_property(\"param-int-wti-count\", cpus.size());" + CR;
	netlist = netlist + "  vcifdtrom.add_property(\"param-int-irq-count\", cpus.size());" + CR;
	netlist = netlist + "  vcifdtrom.end_node();" + CR2;

	netlist = netlist + "  for ( size_t i = 0; i < xicu_n_irq; ++i )" + CR;
	netlist = netlist + "    vcixicu.p_hwi[i](signal_xicu_irq[i]);" + CR2;

	netlist = netlist + "///////////////// cpus" + CR2;

	netlist = netlist + "vcifdtrom.begin_cpus();" + CR2;
	netlist = netlist + "for ( size_t i = 0; i < cpus.size(); ++i ){" + CR;
	netlist = netlist + "   // configure het_rom" + CR;
	netlist = netlist + "  vcihetrom.add_srcid(*cpus[i]->text_ldr, IntTab(i));" + CR;

	netlist = netlist + "  // add cpu node to device tree" + CR;
	netlist = netlist + "  vcifdtrom.begin_cpu_node(std::string(\"cpu:\") + cpus[i]->type, i);" + CR;
	netlist = netlist + "  vcifdtrom.add_property(\"freq\", 1000000);" + CR;
	netlist = netlist + "  vcifdtrom.end_node();" + CR2;

	netlist = netlist + "// connect cpu" + CR;
	netlist = netlist + "  cpus[i]->connect(cpus[i], signal_clk, signal_resetn, signal_vci_m[i]);" + CR;	             
	if(icn=="vgmn")
	    {
		netlist = netlist + "vgmn.p_to_initiator[i](signal_vci_m[i]);" + CR;
	    }
	else{
	    netlist = netlist + "vgsb.p_to_initiator[i](signal_vci_m[i]);" + CR;
	}
	
	netlist = netlist + "vcixicu.p_irq[i](cpus[i]->irq_sig[0]);" + CR;
	netlist = netlist + " }" + CR;
	netlist = netlist + " vcifdtrom.end_node();" + CR2;

	netlist = netlist + "  vcihetrom.p_clk(signal_clk);" + CR;
	netlist = netlist + "  vcifdtrom.p_clk(signal_clk);" + CR;
	netlist = netlist + "  vcirom.p_clk(signal_clk);" + CR;
	netlist = netlist + "  vcisimhelper.p_clk(signal_clk);" + CR;
	netlist = netlist + "  vcirttimer.p_clk(signal_clk);" + CR;

	netlist = netlist + "  vcihetrom.p_resetn(signal_resetn);" + CR;	
	netlist = netlist + "  vcifdtrom.p_resetn(signal_resetn);" + CR;
	netlist = netlist + "  vcirom.p_resetn(signal_resetn);" + CR;
	netlist = netlist + "  vcisimhelper.p_resetn(signal_resetn);" + CR;
	netlist = netlist + "  vcirttimer.p_resetn(signal_resetn);" + CR;
	netlist = netlist + "  vcihetrom.p_vci(signal_vci_vcihetrom);" + CR;	
Daniela Genius's avatar
Daniela Genius committed
		
Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "  vcifdtrom.p_vci(signal_vci_vcifdtrom);" + CR;
	netlist = netlist + "  vcirom.p_vci(signal_vci_vcirom);" + CR;
	netlist = netlist + "  vcisimhelper.p_vci(signal_vci_vcisimhelper);" + CR;
	netlist = netlist + "  vcirttimer.p_vci(signal_vci_vcirttimer);" + CR;
	netlist = netlist + "  vcirttimer.p_irq[0](signal_xicu_irq[4]);" + CR2;

	if(icn=="vgmn"){
	    netlist = netlist + " vgmn.p_clk(signal_clk);" + CR;
	    netlist = netlist + "  vgmn.p_resetn(signal_resetn);" + CR;
	    netlist = netlist + "  vgmn.p_to_target[0](signal_vci_vcihetrom);" + CR;
	    netlist = netlist + "  vgmn.p_to_target[1](signal_vci_vcirom);" + CR;		       
	    netlist = netlist + "  vgmn.p_to_target[3](signal_vci_vcisimhelper);" + CR2;
	    netlist = netlist + "  vgmn.p_to_target[4](signal_vci_xicu);" + CR;
	    netlist = netlist + "  vgmn.p_to_target[5](signal_vci_vcirttimer);" + CR2;
	    netlist = netlist + "  vgmn.p_to_target[6](signal_vci_vcifdtrom);" + CR2;	
	    netlist = netlist + "  vgmn.p_to_initiator[cpus.size()](signal_vci_bdi);" + CR;
	    netlist = netlist + "  vgmn.p_to_initiator[cpus.size()+1](signal_vci_vcifdaccessi);" + CR;
	    netlist = netlist + "  vgmn.p_to_initiator[cpus.size()+2](signal_vci_etherneti);" + CR2;
	}
	else{	
	    netlist = netlist + " vgsb.p_clk(signal_clk);" + CR;
	    netlist = netlist + "  vgsb.p_resetn(signal_resetn);" + CR;
	    netlist = netlist + "  vgsb.p_to_target[0](signal_vci_vcihetrom);" + CR;
	    netlist = netlist + "  vgsb.p_to_target[1](signal_vci_vcirom);" + CR;		       
	    netlist = netlist + "  vgsb.p_to_target[3](signal_vci_vcisimhelper);" + CR2;
	    netlist = netlist + "  vgsb.p_to_target[4](signal_vci_xicu);" + CR;
	    netlist = netlist + "  vgsb.p_to_target[5](signal_vci_vcirttimer);" + CR2;
	    netlist = netlist + "  vgsb.p_to_target[6](signal_vci_vcifdtrom);" + CR2;	
	    netlist = netlist + "  vgsb.p_to_initiator[cpus.size()](signal_vci_bdi);" + CR;
	    netlist = netlist + "  vgsb.p_to_initiator[cpus.size()+1](signal_vci_vcifdaccessi);" + CR;
	    netlist = netlist + "  vgsb.p_to_initiator[cpus.size()+2](signal_vci_etherneti);" + CR2;
	}
			
	if(nb_clusters==0){
	    netlist = netlist + "// RAM netlist" + CR2;
	    for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) {    
Daniela Genius's avatar
Daniela Genius committed
     
Daniela Genius's avatar
Daniela Genius committed
		netlist = netlist + ram.getMemoryName()+".p_clk(" + NAME_CLK + ");" + CR;
		netlist = netlist + ram.getMemoryName()+".p_resetn(" + NAME_RST + ");" + CR;
		netlist = netlist + ram.getMemoryName()+".p_vci(signal_vci_vciram"+ram.getIndex()+");" + CR2;
Daniela Genius's avatar
Daniela Genius committed
		if(icn=="vgmn"){
		    netlist = netlist + "vgmn.p_to_target["+(ram.getNo_target())+"](signal_vci_vciram"+ram.getIndex()+");" + CR2;
Daniela Genius's avatar
Daniela Genius committed
		}
Daniela Genius's avatar
Daniela Genius committed
		else{
		    netlist = netlist + "vgsb.p_to_target["+(ram.getNo_target())+"](signal_vci_vciram"+ram.getIndex()+");" + CR2;
Daniela Genius's avatar
Daniela Genius committed
		}		   
Daniela Genius's avatar
Daniela Genius committed
	}

	/* clustered version */
	/* one or several ram, one locks engine, one mwmr ram and one mwmrd ram per cluster*/
	else{		   
	    int i;  
	    netlist = netlist + "// RAM netlist" + CR2;
	    for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) {    
Daniela Genius's avatar
Daniela Genius committed
     
Daniela Genius's avatar
Daniela Genius committed
		netlist = netlist + ram.getMemoryName()+".p_clk(" + NAME_CLK + ");" + CR;
		netlist = netlist + ram.getMemoryName()+".p_resetn(" + NAME_RST + ");" + CR;
		netlist = netlist + ram.getMemoryName()+".p_vci(signal_vci_vciram"+ram.getIndex()+");" + CR2;
Daniela Genius's avatar
Daniela Genius committed
		//target number for local cluster: this is set at avatardd creation	      		    
		netlist = netlist + "crossbar"+ram.getNo_cluster()+".p_to_target["+ram.getNo_target()+"](signal_vci_vciram"+ram.getIndex()+");" + CR2;		  	   
Daniela Genius's avatar
Daniela Genius committed
	    }
	
	    //one mwmr ram and one mwmrdram per cluster are added transparently
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
	/*convention for local target ids on cluster :
Daniela Genius's avatar
Daniela Genius committed
	  channel: 0
	  mwmr_ram: 1
	  mwmrd_ram: 2
          locks: 3
          ram: 4
          tty: 5
	 */

Daniela Genius's avatar
Daniela Genius committed
	    /* for(i=0;i<nb_clusters;i++){
		netlist = netlist + "crossbar"+i+".p_to_target["+1+"](signal_vci_mwmr_ram"+i+");" + CR2;
		//netlist = netlist +"mwmr_ram"+i+".p_irq[0](signal_xicu_irq[0]);" + CR2;		  
		netlist = netlist + "crossbar"+i+".p_to_target["+2+"](signal_vci_mwmrd_ram"+i+");" + CR2;
		//netlist = netlist +"mwmr_ram"+i+".p_irq[0](signal_xicu_irq[0]);" + CR2;		  
	    }	 */
	}
Daniela Genius's avatar
Daniela Genius committed
		   	
Daniela Genius's avatar
Daniela Genius committed
	if(nb_clusters==0){
Daniela Genius's avatar
Daniela Genius committed
	    // we can have several TTYs and each is associated to the fdtrom 

	    /*	    if(icn=="vgmn"){
Daniela Genius's avatar
Daniela Genius committed
		netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target())+"](signal_vci_vcifdaccesst);" + CR; 
		netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+1)+"](signal_vci_ethernett);" + CR;	
		netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+2)+"](signal_vci_bdt);" + CR;	
Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+3)+"](signal_vci_vcilocks);" + CR;	
Daniela Genius's avatar
Daniela Genius committed
	    }else{ //vgsb 
Daniela Genius's avatar
Daniela Genius committed
		netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target())+"](signal_vci_vcifdaccesst);" + CR; 
		netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+1)+"](signal_vci_ethernett);" + CR;	
Daniela Genius's avatar
Daniela Genius committed
		netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+2)+"](signal_vci_bdt);" + CR;	
		   		netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+3)+"](signal_vci_vcilocks);" + CR;	
Daniela Genius's avatar
Daniela Genius committed
		   }*/

	    int l=8; //number of last tty ToDo
	    if(icn=="vgmn"){
		netlist = netlist + "vgmn.p_to_target["+(l)+"](signal_vci_vcifdaccesst);" + CR; 
		netlist = netlist + "vgmn.p_to_target["+(l+1)+"](signal_vci_ethernett);" + CR;	
		netlist = netlist + "vgmn.p_to_target["+(l+2)+"](signal_vci_bdt);" + CR;	
	netlist = netlist + "vgmn.p_to_target["+(l+3)+"](signal_vci_vcilocks);" + CR;	
Daniela Genius's avatar
Daniela Genius committed
	int i;
	//DG 14.09.
	int coproc_count=0;
	for(i=0;i<coproc_count;i++){

	    netlist = netlist + "vgmn.p_to_target["+(l+4+i)+"](signal_mwmr_"+i+"_target);" + CR;
	}
Daniela Genius's avatar
Daniela Genius committed
	    }else{ //vgsb 
		netlist = netlist + "vgsb.p_to_target["+(l)+"](signal_vci_vcifdaccesst);" + CR; 
		netlist = netlist + "vgsb.p_to_target["+(l+1)+"](signal_vci_ethernett);" + CR;	
		netlist = netlist + "vgsb.p_to_target["+(l+2)+"](signal_vci_bdt);" + CR;	
		   		netlist = netlist + "vgsb.p_to_target["+(l+3)+"](signal_vci_vcilocks);" + CR;	

Daniela Genius's avatar
Daniela Genius committed
	//DG 14.09.
				int coproc_count=0;
				int i;
	  for(i=0;i<coproc_count;i++){
	      netlist = netlist + "vgmn.p_to_target["+(l+4+i)+"](signal_mwmr_"+i+"_target);" + CR;
	  }
	    }

	}else{
Daniela Genius's avatar
Daniela Genius committed
	    /* cluster case */
	    if(icn=="vgmn"){
		netlist = netlist + "vgmn.p_to_target["+5+"](signal_vci_vcifdaccesst);" + CR; 						
		netlist = netlist + "vgmn.p_to_target["+6+"](signal_vci_ethernett);" + CR;    
													     netlist = netlist + "vgmn.p_to_target["+7+"](signal_vci_bdt);" + CR;	
	    }else{
		netlist = netlist + "vgsb.p_to_target["+5+"](signal_vci_vcifdaccesst);" + CR; 
		netlist = netlist + "vgsb.p_to_target["+6+"](signal_vci_ethernett);" + CR;      
		netlist = netlist + "vgsb.p_to_target["+7+"](signal_vci_bdt);" + CR;	                   
	    }
	}
	//netlist = netlist + "vcifdtrom.begin_device_node(\"vci_multi_tty\",\"soclib:vci_multi_tty\");" + CR2;
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "vcifdtrom.add_property(\"interrupts\", 0);" + CR2;
	netlist = netlist + "vcifdtrom.end_node();;" + CR2;
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
	netlist = netlist + "// TTY netlist" + CR2;
	int i=0;
Daniela Genius's avatar
Daniela Genius committed

	for (AvatarTTY tty : TopCellGenerator.avatardd.getAllTTY()){
Daniela Genius's avatar
Daniela Genius committed
	    netlist = netlist + tty.getTTYName()+".p_clk(signal_clk);" + CR;
	    netlist = netlist + tty.getTTYName()+".p_resetn(signal_resetn);" + CR;
	    netlist = netlist + tty.getTTYName()+".p_vci(signal_vci_tty"+i+");" + CR2; 		    
	    int no_irq_tty=0;
	    if(nb_clusters==0){
		
		if(icn=="vgmn"){
		    netlist = netlist + "vcifdtrom.begin_device_node(\"vci_multi_tty"+i+"\",\"soclib:vci_multi_tty"+i+"\");" + CR2;
		    netlist = netlist + "vgmn.p_to_target["+tty.getNo_target()+"](signal_vci_tty"+i+");" + CR2;
		    netlist = netlist + tty.getTTYName()+".p_irq[0](signal_xicu_irq["+no_irq_tty+"]);" + CR2;	
		}else{
		    netlist = netlist + "vcifdtrom.begin_device_node(\"vci_multi_tty"+i+"\",\"soclib:vci_multi_tty"+tty.getNo_tty()+"\");" + CR2;
		    netlist = netlist + "vgsb.p_to_target["+tty.getNo_target()+"](signal_vci_tty"+i+");" + CR2;		    
		    netlist = netlist + tty.getTTYName()+".p_irq[0](signal_xicu_irq["+no_irq_tty+"]);" + CR2;	
Daniela Genius's avatar
Daniela Genius committed
		}
Daniela Genius's avatar
Daniela Genius committed
	    }	
	    
	    //we have a clustered architecture: identify local crossbar	
	    else{ 
		int j;		   
		for(j=0;j<nb_clusters;j++){
		    netlist = netlist + "crossbar"+j+".p_to_target["+tty.getNo_target()+"](signal_vci_tty"+j+");" + CR2;
		    //recalculate irq addresses, 5 devices generating irq per cluster
		    netlist = netlist + tty.getTTYName()+".p_irq[0](signal_xicu_irq["+(tty.getNo_cluster()*5)+"]);" + CR2;		      
		}	 
	    }
	    i++;
Daniela Genius's avatar
Daniela Genius committed
	    //One ICU per cluster per default
Daniela Genius's avatar
Daniela Genius committed
	    no_irq_tty+=6;//if there is more than one tty, irq >5
	}

	//////////////// fdrom
	   
       	netlist = netlist + "{" + CR2;
       	netlist = netlist + "  vcifdtrom.begin_node(\"aliases\");" + CR;		netlist = netlist + "  vcifdtrom.add_property(\"timer\", vcifdtrom.get_device_name(\"vci_rttimer\") + \"[0]\");" + CR;
       	netlist = netlist + "  vcifdtrom.add_property(\"console\", vcifdtrom.get_device_name(\"vci_multi_tty0\") + \"[0]\");" + CR;
       	netlist = netlist + "  vcifdtrom.end_node();" + CR;
       	netlist = netlist + "}" + CR2;
Daniela Genius's avatar
Daniela Genius committed

Daniela Genius's avatar
Daniela Genius committed
	//////////////// ethernet
Daniela Genius's avatar
Daniela Genius committed

 	netlist = netlist + "vcieth.p_clk(signal_clk);" + CR;
  	netlist = netlist + "vcieth.p_resetn(signal_resetn);" + CR;
  	netlist = netlist + "vcieth.p_irq(signal_xicu_irq[3]);" + CR;
  	netlist = netlist + "vcieth.p_vci_target(signal_vci_ethernett);" + CR;
  	netlist = netlist + "vcieth.p_vci_initiator(signal_vci_etherneti);" + CR;

  	netlist = netlist + "vcifdtrom.begin_device_node(\"vci_ethernet\", \"soclib:vci_ethernet\");" + CR;
  	netlist = netlist + "vcifdtrom.add_property(\"interrupts\", 3);" + CR;
  	netlist = netlist + "vcifdtrom.end_node();" + CR;

Daniela Genius's avatar
Daniela Genius committed
	//////////////// block device
Daniela Genius's avatar
Daniela Genius committed

 	netlist = netlist + "vcibd.p_clk(signal_clk);" + CR;
  	netlist = netlist + "vcibd.p_resetn(signal_resetn);" + CR;
  	netlist = netlist + "vcibd.p_irq(signal_xicu_irq[1]);" + CR;
  	netlist = netlist + "vcibd.p_vci_target(signal_vci_bdt);" + CR;
  	netlist = netlist + "vcibd.p_vci_initiator(signal_vci_bdi);" + CR;

  	netlist = netlist + "vcifdtrom.begin_device_node(\"vci_block_device\", \"soclib:vci_block_device\");" + CR;
  	netlist = netlist + "vcifdtrom.add_property(\"interrupts\", 1);" + CR;
  	netlist = netlist + "vcifdtrom.end_node();" + CR;

Daniela Genius's avatar
Daniela Genius committed
	//////////////// fd access
Daniela Genius's avatar
Daniela Genius committed
 	netlist = netlist + "vcihetrom.add_srcid(*cpus[0]->text_ldr, IntTab(cpus.size()+1));" + CR; /* allows dma read in rodata */

  	netlist = netlist + "vcifd.p_clk(signal_clk);" + CR;
  	netlist = netlist + "vcifd.p_resetn(signal_resetn);" + CR;
  	netlist = netlist + "vcifd.p_irq(signal_xicu_irq[2]);" + CR;
  	netlist = netlist + "vcifd.p_vci_target(signal_vci_vcifdaccesst);" + CR;
  	netlist = netlist + "vcifd.p_vci_initiator(signal_vci_vcifdaccessi);" + CR;

  	netlist = netlist + "vcifdtrom.begin_device_node(\"vci_fd_access\", \"soclib:vci_fd_access\");" + CR;
  	netlist = netlist + "vcifdtrom.add_property(\"interrupts\", 2);" + CR;
  	netlist = netlist + "vcifdtrom.end_node();" + CR2;
Daniela Genius's avatar
Daniela Genius committed

	//////////////// locks
 
  	netlist = netlist + "vcilocks.p_clk(signal_clk);" + CR;
  	netlist = netlist + "vcilocks.p_resetn(signal_resetn);" + CR;     
  	netlist = netlist + "vcilocks.p_vci(signal_vci_vcilocks);" + CR;	
Daniela Genius's avatar
Daniela Genius committed

	////////////////MWMR controller; hypothesis 1 per coprocessor
	//	if(nb_cluster == 0){
	    i=0;
Daniela Genius's avatar
Daniela Genius committed
	    int coproc_count=0;

Daniela Genius's avatar
Daniela Genius committed
	    for (AvatarCoproMWMR copro : TopCellGenerator.avatardd.getAllCoproMWMR()){
		//a coprocessor with its FIFO interface built from HWA 
		netlist = netlist +"hwa"+i+".p_clk(signal_clk);" + CR;
		netlist = netlist +"hwa"+i+".p_resetn(signal_resetn);" + CR;	      	
                netlist = netlist +"hwa"+i+".p_from_ctrl["+i+"](signal_fifo_"+i+"_from_ctrl);" + CR;
		netlist = netlist +"hwa"+i+".p_to_ctrl["+i+"](signal_fifo_"+i+"_to_ctrl);" + CR2;
	
		//MWMR controller of the HWA
		netlist = netlist +copro.getCoprocName() +".p_clk(signal_clk);" + CR;
		netlist = netlist +copro.getCoprocName() +".p_resetn(signal_resetn);" + CR;
		netlist = netlist +copro.getCoprocName() +".p_vci_initiator(signal_mwmr_"+i+"_initiator);" + CR;
		netlist = netlist + copro.getCoprocName()+".p_vci_target(signal_mwmr_"+i+"_target);" + CR2;
		netlist = netlist +copro.getCoprocName() +".p_from_coproc["+i+"](signal_fifo_"+i+"_from_ctrl);" + CR;
netlist = netlist +copro.getCoprocName() +".p_to_coproc["+i+"](signal_fifo_"+i+"_to_ctrl);" + CR;
//DG 5.9.
//	netlist = netlist +copro.getCoprocName() +".status();" + CR;
//	netlist = netlist +copro.getCoprocName() +".config();" + CR;
i++;
Daniela Genius's avatar
Daniela Genius committed
coproc_count++;
Daniela Genius's avatar
Daniela Genius committed
          }
   //If there is a spy, add logger or stats to vci interface

	    i=0;
   for (AvatarCPU cpu : TopCellGenerator.avatardd.getAllCPU()) { 
       int number = cpu.getNo_proc();	
	  if(cpu.getMonitored()==1){
	  netlist=netlist+CR+
	  "logger"+i+".p_clk(signal_clk);" +CR+
	  "logger"+i+".p_resetn(signal_resetn);" +CR+	     
	  "logger"+i+".p_vci(signal_vci_m["+number+"]);" +CR2;
Daniela Genius's avatar
Daniela Genius committed
	for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) { 
	    if (ram.getMonitored()==1){	
		int number = number = ram.getIndex();
Daniela Genius's avatar
Daniela Genius committed
		netlist += "logger"+i+".p_clk(signal_clk);" + CR;
		netlist += "logger"+i+".p_resetn(signal_resetn);" + CR; 
		netlist += "logger"+i+".p_vci(signal_vci_vciram"+number+");" + CR2;  	  
		i++;   
		if (ram.getMonitored()==2){
		    int number = number = ram.getIndex();	
		    netlist += "mwmr_stats"+j+".p_clk(signal_clk);" + CR;
		    netlist += "mwmr_stats"+j+".p_resetn(signal_resetn);" + CR; 
		    netlist += "mwmr_stats"+j+".p_vci(signal_vci_vciram"+number+");" + CR2;		    
		    j++;	      
Daniela Genius's avatar
Daniela Genius committed
		}	 		
Daniela Genius's avatar
Daniela Genius committed
	}

	//if (with_hw_accellerator>0){  

	int p=0;
	//for testing:   vci_synthetic_initiator.h and vci_synthetic_target.h    
	//for (AvatarCoproMWMR HWAccelerator : TopCellGenerator.avatardd.getAllCoproMWMR()) {
    /*    netlist += "mwmr"+HWAccelerator.getNo()+".p_clk(signal_clk);" + CR;
    netlist += "mwmr"+HWAccelerator.getNo()+".p_resetn(signal_resetn);" + CR;
    netlist += "mwmr"+HWAccelerator.getNo()+".p_vci_initiator(signal_mwmr"+HWAccelerator.getNo()+"_initiator);" + CR;
    netlist += "	mwmr"+HWAccelerator.getNo()+".p_vci_target(signal_mwmr"+HWAccelerator.getNo()+"_target);" + CR;
    netlist += "	mwmr"+HWAccelerator.getNo()+".p_from_coproc["+HWAccelerator.getNo()+"](signal_fifo_to_ctrl);" + CR;
    netlist += "	mwmr"+HWAccelerator.getNo()+".p_to_coproc["+HWAccelerator.getNo()+"](signal_fifo_from_ctrl);" + CR;*/

	/*  netlist += "mwmr"+p+".p_clk(signal_clk);" + CR;
    netlist += "mwmr"+p+".p_resetn(signal_resetn);" + CR;
    netlist += "mwmr"+p+".p_vci_initiator(signal_mwmr"+p+"_initiator);" + CR;
    netlist += "	mwmr"+p+".p_vci_target(signal_mwmr"+p+"_target);" + CR;
    netlist += "	mwmr"+p+".p_from_coproc["+p+"](signal_fifo_"+p+"_to_ctrl);" + CR;
    netlist += "	mwmr"+p+".p_to_coproc["+p+"](signal_fifo_"+p+"_from_ctrl);" + CR;
    }	 */   
Daniela Genius's avatar
Daniela Genius committed
		
	//generate trace file if marked trace option 
	
	if(tracing){
		netlist += "sc_trace_file *tf;" + CR;
Daniela Genius's avatar
Daniela Genius committed
	netlist += "tf=sc_create_vcd_trace_file(\"mytrace\");" + CR;
	netlist += "sc_trace(tf,signal_clk,\"CLK\");" + CR;
	netlist += "sc_trace(tf,signal_resetn,\"RESETN\");" + CR;

	netlist += "sc_trace(tf, signal_vci_xicu,\"signal_vci_xicu\");" + CR;
	netlist += "sc_trace(tf, signal_vci_vcifdtrom,\"signal_vci_vcifdtrom\");" + CR;
	netlist += "sc_trace(tf, signal_vci_vcihetrom,\"signal_vci_vcihetrom\");" + CR;
	netlist += "sc_trace(tf, signal_vci_vcirom ,\"signal_vci_vcirom\");" + CR;
	netlist += "sc_trace(tf, signal_vci_vcisimhelper,\"signal_vci_vcisimhelper\");" + CR;
	netlist += "sc_trace(tf, signal_vci_vcirttimer ,\"signal_vci_vcirttimer\");" + CR;	    
	netlist += "sc_trace(tf, signal_vci_vcifdaccessi,\"signal_vci_vcifdaccessi\");" + CR;
	netlist += "sc_trace(tf,signal_vci_vcifdaccesst ,\"signal_vci_vcifdaccesst\");" + CR;
	netlist += "sc_trace(tf,signal_vci_bdi ,\"signal_vci_bdi\");" + CR;
	netlist += "sc_trace(tf, signal_vci_bdt,\"signal_vci_bdt\");" + CR;
	netlist += "sc_trace(tf, signal_vci_etherneti,\"signal_vci_etherneti\");" + CR;
	netlist += "sc_trace(tf,signal_vci_ethernett ,\"signal_vci_ethernett\");" + CR;

	for(i=0;i<TopCellGenerator.avatardd.getNb_init();i++){ 
	    netlist += "sc_trace(tf,signal_vci_m["+ i +"] ,\"signal_vci_m["+ i +"]\");" + CR;
	}

	i=0;
	for (AvatarTTY tty : TopCellGenerator.avatardd.getAllTTY()) { 
Daniela Genius's avatar
Daniela Genius committed
	    netlist += "sc_trace(tf,signal_vci_tty"+tty.getNo_tty()+",\"TTY"+tty.getNo_tty()+"\");" + CR; 
	    netlist += "sc_trace(tf,signal_xicu_irq["+ i +"] ,\"signal_xicu_irq["+ i +"]\");" + CR;    
	    i++;
	}
Daniela Genius's avatar
Daniela Genius committed
    
Daniela Genius's avatar
Daniela Genius committed
	netlist += "sc_trace(tf,signal_xicu_irq["+i+"] ,\"signal_xicu_irq["+i+"]\");" + CR;  
	netlist += "sc_trace(tf,signal_xicu_irq["+i+"] ,\"signal_xicu_irq["+i+"]\");" + CR; 
	netlist += "sc_trace(tf,signal_xicu_irq["+i+"] ,\"signal_xicu_irq["+i+"]\");" + CR; 
    
	for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) { 
	    if (ram.getMonitored()==0){			
		netlist += "sc_trace(tf,signal_vci_vciram"+ram.getIndex()+",\"Memory"+ram.getIndex()+"\");" + CR;
Daniela Genius's avatar
Daniela Genius committed
    netlist = netlist + "  sc_core::sc_start(sc_core::sc_time(0, sc_core::SC_NS));" + CR;
    netlist = netlist + "  signal_resetn = false;" + CR;
    netlist = netlist + "  sc_core::sc_start(sc_core::sc_time(1, sc_core::SC_NS));" + CR;
    netlist = netlist + "  signal_resetn = true;" + CR;
    netlist = netlist + "  sc_core::sc_start();" + CR;
    if(tracing){
    	netlist += "sc_close_vcd_trace_file(tf);" + CR;
    	}
Daniela Genius's avatar
Daniela Genius committed
    netlist = netlist + CR + "  return EXIT_SUCCESS;"+ CR;
    netlist = netlist +"}" + CR;
    return netlist;		
Daniela Genius's avatar
Daniela Genius committed
}