source: branches/v5/modules/dspin_simple_ring_fast_c/caba/docs/top.cpp @ 327

Last change on this file since 327 was 327, checked in by simerabe, 11 years ago

introducing topcell examples using dspin ring interconnect

  • Property svn:executable set to *
File size: 3.7 KB
Line 
1#include <systemc>
2#include <sys/time.h>
3#include <iostream>
4#include <cstdlib>
5#include <cstdarg>
6
7#include "mapping_table.h"
8#include "dspin_simple_ring_fast_c.h"
9#include "soclib_vci_initiator.h"
10#include "soclib_vci_target.h"
11#include "alloc_elems.h"
12#include "vci_param.h"
13
14#define SRCID_WIDTH     4
15#define CYCLES 100000
16
17int _main(int argc, char *argv[])
18{
19        using namespace sc_core;
20        // Avoid repeating these everywhere
21        using soclib::common::IntTab;
22        using soclib::common::Segment;
23        using soclib::common::alloc_elems;
24
25        // Define VCI parameters
26        typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
27
28       // Mapping table primary network
29
30        soclib::common::MappingTable maptabp(32, IntTab(SRCID_WIDTH), IntTab(SRCID_WIDTH), 0x00FF0000);
31
32       for ( size_t p = 0 ; p < 4 ; p++) 
33       {
34        std::ostringstream sp;
35        sp << "c_seg_proc_" <<  p;
36        maptabp.add( Segment( sp.str() , (p << (32 - SRCID_WIDTH)), 0x10 , IntTab(p) , false)); 
37       }
38        // Signals
39
40        sc_clock        signal_clk("clk");
41        sc_signal<bool> signal_resetn("resetn");
42
43        soclib::caba::DspinSignals<40> * dspin_cmd = soclib::common::alloc_elems<soclib::caba::DspinSignals<40> >("dspin_cmd", 5);
44        soclib::caba::DspinSignals<33> * dspin_rsp = soclib::common::alloc_elems<soclib::caba::DspinSignals<33> >("dspin_rsp", 5);
45
46
47        soclib::caba::SoclibVciInitiator<40,33> 
48        initp0("initp0", 4);
49        //soclib::caba::SoclibVciInitiator<vci_param>
50        //initp1("initp1", 1);
51        //soclib::caba::SoclibVciInitiator<vci_param>
52        //initp2("initp2", 2);
53        //soclib::caba::SoclibVciInitiator<vci_param>
54        //initp3("initp3", 3);
55
56        soclib::caba::SoclibVciTarget<40,33> 
57        target0("target0"); 
58        soclib::caba::SoclibVciTarget<40,33> 
59        target1("target1");
60        soclib::caba::SoclibVciTarget<40,33> 
61        target2("target2");
62        soclib::caba::SoclibVciTarget<40,33> 
63        target3("target3");
64
65        // Local ring interconnects : 1 direct ring per cluster
66        soclib::caba::DspinSimpleRingFastC<vci_param, 40, 33> 
67        cluster("cluster",maptabp, IntTab(), 2, 1, 4);
68       
69
70        // Initiators
71        initp0.p_clk(signal_clk); 
72        initp0.p_resetn(signal_resetn); 
73        initp0.p_cmd_out(dspin_cmd[0]);
74        initp0.p_rsp_in(dspin_rsp[0]);
75
76
77       // Target
78        target0.p_clk(signal_clk);
79        target0.p_resetn(signal_resetn);
80        target0.p_cmd_in(dspin_cmd[1]);
81        target0.p_rsp_out(dspin_rsp[1]);
82
83        target1.p_clk(signal_clk);
84        target1.p_resetn(signal_resetn);
85        target1.p_cmd_in(dspin_cmd[2]);
86        target1.p_rsp_out(dspin_rsp[2]);
87
88        target2.p_clk(signal_clk);
89        target2.p_resetn(signal_resetn);
90        target2.p_cmd_in(dspin_cmd[3]);
91        target2.p_rsp_out(dspin_rsp[3]);
92
93        target3.p_clk(signal_clk);
94        target3.p_resetn(signal_resetn);
95        target3.p_cmd_in(dspin_cmd[4]);
96        target3.p_rsp_out(dspin_rsp[4]);
97
98        cluster.p_clk(signal_clk);
99        cluster.p_resetn(signal_resetn);
100
101        cluster.p_cmd_out[0](dspin_cmd[1]);
102        cluster.p_rsp_in[0](dspin_rsp[1]);
103        cluster.p_cmd_out[1](dspin_cmd[2]);
104        cluster.p_rsp_in[1](dspin_rsp[2]);
105        cluster.p_cmd_out[2](dspin_cmd[3]);
106        cluster.p_rsp_in[2](dspin_rsp[3]);
107        cluster.p_cmd_out[3](dspin_cmd[4]);
108        cluster.p_rsp_in[3](dspin_rsp[4]);
109
110        cluster.p_cmd_in[0](dspin_cmd[0]);
111        cluster.p_rsp_out[0](dspin_rsp[0]);
112
113
114////////////////////////////////////////////////////////
115
116        int ncycles;
117
118        sc_start(sc_core::sc_time(0, SC_NS));
119        signal_resetn = false;
120
121        sc_start(sc_core::sc_time(1, SC_NS));
122        signal_resetn = true;
123
124        while(1)
125        {
126          sc_start(sc_core::sc_time(CYCLES, SC_NS));
127
128        }
129
130        std::cout << "Hit ENTER to end simulation" << std::endl;
131        char buf[1];
132
133        std::cin.getline(buf,1);
134
135        return EXIT_SUCCESS;
136}
137
138int sc_main (int argc, char *argv[])
139{
140        try {
141                return _main(argc, argv);
142        } catch (std::exception &e) {
143                std::cout << e.what() << std::endl;
144        } catch (...) {
145                std::cout << "Unknown exception occured" << std::endl;
146                throw;
147        }
148        return 1;
149}
Note: See TracBrowser for help on using the repository browser.