SimpleVOut  1.0.0 Initial
A Simple FPGA Core for Creating VGA/DVI/HDMI/OpenLDI Signals
axi_crossbar.cpp
Go to the documentation of this file.
1 // 67d7842dbbe25473c3c32b93c0da8047785f30d78e8a024de1b57352245f9689
2 #include "axi_crossbar.h"
3 #include "xtlm_simple_interconnect_model.h"
4 #include <cmath>
5 axi_crossbar::axi_crossbar(sc_module_name name, xsc::common_cpp::properties& properties) {
6  uint64_t num_mi=properties.getLongLong("C_NUM_MASTER_SLOTS");
7  uint64_t num_si=properties.getLongLong("C_NUM_SLAVE_SLOTS");
8  uint64_t axi_data_width=properties.getLongLong("C_AXI_DATA_WIDTH");
9  uint64_t axi_addr_width=properties.getLongLong("C_AXI_ADDR_WIDTH");
10  properties.addLong("C_NUM_MI", std::to_string(num_mi));
11  properties.addLong("C_NUM_SI", std::to_string(num_si));
12  m_report_handler=new xsc::common_cpp::report_handler("report_handler");
13  //m_report_handler->set_verbosity_level(xsc::common_cpp::VERBOSITY::DEBUG);
14  for(uint64_t i=0;i<num_si;i++) {
15  std::stringstream ss;
16  ss<<"C_S";
17  if(i<10) {
18  ss<<"0";
19  }
20  ss<<i<<"_AXI_DATA_WIDTH";
21  properties.addLong(ss.str().c_str(),std::to_string(axi_data_width));
22  }
23  for(uint64_t i=0;i<num_mi;i++) {
24  std::stringstream ss;
25  ss<<"C_M";
26  if(i<10) {
27  ss<<"0";
28  }
29  ss<<i<<"_AXI_DATA_WIDTH";
30  properties.addLong(ss.str().c_str(),std::to_string(axi_data_width));
31  }
32  for(uint64_t i=0;i<num_si;i++) {
33  std::stringstream ss;
34  ss<<"C_S";
35  if(i<10) {
36  ss<<"0";
37  }
38  ss<<i<<"_AXI_ADDR_WIDTH";
39  properties.addLong(ss.str().c_str(),std::to_string(axi_addr_width));
40  }
41  for(uint64_t i=0;i<num_mi;i++) {
42  std::stringstream ss;
43  ss<<"C_M";
44  if(i<10) {
45  ss<<"0";
46  }
47  ss<<i<<"_AXI_ADDR_WIDTH";
48  properties.addLong(ss.str().c_str(),std::to_string(axi_addr_width));
49  }
50  unsigned int len;
51  std::string axi_conn=properties.getBitString("C_M_AXI_WRITE_CONNECTIVITY",len);
52 
53  for(uint64_t j=0;j<num_mi;j++) {
54  std::string m_axi_conn=axi_conn.substr(j*32,32);
55  for(int start=0;start<num_si;start++)
56  {
57  int i=31-start;
58  std::stringstream ss;
59  ss.str("");
60  ss<<"C_M";
61  if(j<10) ss<<"0";
62  ss<<j<<"_S";
63  if(start<10) ss<<"0";
64  ss<<start<<"_CONNECTIVITY";
65  std::string connectivity=m_axi_conn.substr(i,1);
66  properties.addLong(ss.str().c_str(),connectivity);
67  if(m_report_handler->get_verbosity_level()==xsc::common_cpp::VERBOSITY::DEBUG) {
68  std::stringstream m_ss;
69  m_ss.str("");
70  m_ss<<this->name()<<"ADD PROPERTY CONNECTIVITY"<<ss.str().c_str()<<" "<<connectivity<<std::endl;
71  XSC_REPORT_INFO_VERB((*m_report_handler),"crossbar",m_ss.str().c_str(),DEBUG);
72  }
73  }
74  }
75  uint64_t num_addr_ranges= properties.getLongLong("C_NUM_ADDR_RANGES");
76  properties.addLong("C_ADDR_RANGES",std::to_string(num_addr_ranges));
77  unsigned int range;
78  std::string addr_range=properties.getBitString("C_M_AXI_BASE_ADDR",range);
79  for(int start=0;start<num_mi;start++)
80  {
81  std::string base_addr_range=addr_range.substr(start*num_addr_ranges*64,64*num_addr_ranges);
82  auto tmpstr = base_addr_range.c_str();
83  const char *ptr = nullptr;
84  unsigned long long toValue;
85  toValue = 0;
86  for(uint64_t j=0;j<num_addr_ranges;j++) {
87  int num_range=num_addr_ranges -j -1;
88  toValue = 0;
89  ptr = tmpstr +j*64;
90  for(int i = 0 ; i < 64 ; i++)
91  {
92  if(ptr[63-i] != '0')
93  toValue += ((unsigned long long)1 << i);
94  }
95  int t=num_mi-start-1;
96  std::stringstream ss;
97  ss.str("");
98  ss<<"C_M";
99  if(t<10) ss<<"0";
100  ss<<t<<"_A";
101  if(num_range<10) ss<<"0";
102  ss<<num_range;
103  ss<<"_BASE_ADDRESS";
104  properties.addLong(ss.str().c_str(),std::to_string(toValue));
105  if(m_report_handler->get_verbosity_level()==xsc::common_cpp::VERBOSITY::DEBUG) {
106  std::stringstream m_ss;
107  m_ss.str("");
108  m_ss<<this->name()<<"ADD PROPERTY BASE"<<std::hex<<ss.str().c_str()<<" "<<toValue<<std::endl;
109  XSC_REPORT_INFO_VERB((*m_report_handler),"crossbar",m_ss.str().c_str(),DEBUG);
110  }
111  }
112  }
113  unsigned int addr_rng;
114  std::string master_addr_range=properties.getBitString("C_M_AXI_ADDR_WIDTH",addr_rng);
115  for(int start=0;start<num_mi;start++)
116  {
117  std::string master_base_addr_range=master_addr_range.substr(start*32*num_addr_ranges,32*num_addr_ranges);
118  auto tmpstr = master_base_addr_range.c_str();
119  const char *ptr = nullptr;
120  unsigned long long toValue;
121  toValue = 0;
122  for(uint64_t j=0;j<num_addr_ranges;j++) {
123  int num_range=num_addr_ranges -j -1;
124  toValue = 0;
125  ptr = tmpstr +j*32 ;
126  for(int i = 0 ; i < 32 ; i++)
127  {
128  if(ptr[31-i] != '0')
129  toValue += ((unsigned long long)1 << i);
130  }
131  int t=num_mi-start-1;
132  std::stringstream ss;
133  ss.str("");
134  ss<<"C_M";
135  if(t<10) ss<<"0";
136  ss<<t<<"_A";
137  if(num_range<10) ss<<"0";
138  ss<<num_range;
139  ss<<"_ADDR_RANGE";
140  toValue=((toValue<=64)?toValue:64);
141  unsigned long long rangeVal= pow(2,toValue);
142  properties.addLong(ss.str().c_str(),std::to_string(rangeVal));
143  if(m_report_handler->get_verbosity_level()==xsc::common_cpp::VERBOSITY::DEBUG) {
144  std::stringstream m_ss;
145  m_ss.str("");
146  m_ss<<this->name()<<"ADD PROPERTY RANGE"<<std::hex<<ss.str().c_str()<<" "<<rangeVal<<std::endl;
147  XSC_REPORT_INFO_VERB((*m_report_handler),"crossbar",m_ss.str().c_str(),DEBUG);
148  }
149  if(toValue==0){
150  std::stringstream ss;
151  ss.str("");
152  ss<<"C_M";
153  if(t<10) ss<<"0";
154  ss<<t<<"_A";
155  if(num_range<10) ss<<"0";
156  ss<<num_range;
157  ss<<"_BASE_ADDRESS";
158  properties.addLong(ss.str().c_str(),std::to_string(0));
159  if(m_report_handler->get_verbosity_level()==xsc::common_cpp::VERBOSITY::DEBUG) {
160  std::stringstream m_ss;
161  m_ss.str("");
162  m_ss<<this->name()<<"ADD PROPERTY BASE"<<std::hex<<ss.str().c_str()<<" "<<toValue<<std::endl;
163  XSC_REPORT_INFO_VERB((*m_report_handler),"crossbar",m_ss.str().c_str(),DEBUG);
164  }
165  }
166  }
167  }
168  m_model = new xtlm_simple_interconnect_model("icn", properties);
169  initiator_0_rd_socket = m_model->initiator_rd_sockets[0];
170  initiator_0_wr_socket = m_model->initiator_wr_sockets[0];
171  initiator_1_rd_socket = m_model->initiator_rd_sockets[1];
172  initiator_1_wr_socket = m_model->initiator_wr_sockets[1];
173  initiator_2_rd_socket = m_model->initiator_rd_sockets[2];
174  initiator_2_wr_socket = m_model->initiator_wr_sockets[2];
175  initiator_3_rd_socket = m_model->initiator_rd_sockets[3];
176  initiator_3_wr_socket = m_model->initiator_wr_sockets[3];
177  initiator_4_rd_socket = m_model->initiator_rd_sockets[4];
178  initiator_4_wr_socket = m_model->initiator_wr_sockets[4];
179  initiator_5_rd_socket = m_model->initiator_rd_sockets[5];
180  initiator_5_wr_socket = m_model->initiator_wr_sockets[5];
181  initiator_6_rd_socket = m_model->initiator_rd_sockets[6];
182  initiator_6_wr_socket = m_model->initiator_wr_sockets[6];
183  initiator_7_rd_socket = m_model->initiator_rd_sockets[7];
184  initiator_7_wr_socket = m_model->initiator_wr_sockets[7];
185  initiator_8_rd_socket = m_model->initiator_rd_sockets[8];
186  initiator_8_wr_socket = m_model->initiator_wr_sockets[8];
187  initiator_9_rd_socket = m_model->initiator_rd_sockets[9];
188  initiator_9_wr_socket = m_model->initiator_wr_sockets[9];
189  initiator_10_rd_socket = m_model->initiator_rd_sockets[10];
190  initiator_10_wr_socket = m_model->initiator_wr_sockets[10];
191  initiator_11_rd_socket = m_model->initiator_rd_sockets[11];
192  initiator_11_wr_socket = m_model->initiator_wr_sockets[11];
193  initiator_12_rd_socket = m_model->initiator_rd_sockets[12];
194  initiator_12_wr_socket = m_model->initiator_wr_sockets[12];
195  initiator_13_rd_socket = m_model->initiator_rd_sockets[13];
196 
197  initiator_13_wr_socket = m_model->initiator_wr_sockets[13];
198 
199  initiator_14_rd_socket = m_model->initiator_rd_sockets[14];
200 
201  initiator_14_wr_socket = m_model->initiator_wr_sockets[14];
202 
203  initiator_15_rd_socket = m_model->initiator_rd_sockets[15];
204 
205  initiator_15_wr_socket = m_model->initiator_wr_sockets[15];
206 
207 
208  target_0_rd_socket = m_model->target_rd_sockets[0];
209 
210  target_0_wr_socket = m_model->target_wr_sockets[0];
211 
212  target_1_rd_socket = m_model->target_rd_sockets[1];
213 
214  target_1_wr_socket = m_model->target_wr_sockets[1];
215 
216  target_2_rd_socket = m_model->target_rd_sockets[2];
217 
218  target_2_wr_socket = m_model->target_wr_sockets[2];
219 
220  target_3_rd_socket = m_model->target_rd_sockets[3];
221 
222  target_3_wr_socket = m_model->target_wr_sockets[3];
223 
224  target_4_rd_socket = m_model->target_rd_sockets[4];
225 
226  target_4_wr_socket = m_model->target_wr_sockets[4];
227 
228  target_5_rd_socket = m_model->target_rd_sockets[5];
229 
230  target_5_wr_socket = m_model->target_wr_sockets[5];
231 
232  target_6_rd_socket = m_model->target_rd_sockets[6];
233 
234  target_6_wr_socket = m_model->target_wr_sockets[6];
235 
236  target_7_rd_socket = m_model->target_rd_sockets[7];
237 
238  target_7_wr_socket = m_model->target_wr_sockets[7];
239 
240  target_8_rd_socket = m_model->target_rd_sockets[8];
241 
242  target_8_wr_socket = m_model->target_wr_sockets[8];
243 
244  target_9_rd_socket = m_model->target_rd_sockets[9];
245 
246  target_9_wr_socket = m_model->target_wr_sockets[9];
247 
248  target_10_rd_socket = m_model->target_rd_sockets[10];
249 
250  target_10_wr_socket = m_model->target_wr_sockets[10];
251 
252  target_11_rd_socket = m_model->target_rd_sockets[11];
253 
254  target_11_wr_socket = m_model->target_wr_sockets[11];
255 
256  target_12_rd_socket = m_model->target_rd_sockets[12];
257  target_12_wr_socket = m_model->target_wr_sockets[12];
258  target_13_rd_socket = m_model->target_rd_sockets[13];
259  target_13_wr_socket = m_model->target_wr_sockets[13];
260  target_14_rd_socket = m_model->target_rd_sockets[14];
261  target_14_wr_socket = m_model->target_wr_sockets[14];
262  target_15_rd_socket = m_model->target_rd_sockets[15];
263  target_15_wr_socket = m_model->target_wr_sockets[15];
264 
265 }
266 
268  delete m_model;
269 }
axi_crossbar::initiator_3_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_3_rd_socket
Definition: axi_crossbar.h:20
axi_crossbar::target_1_wr_socket
xtlm::xtlm_aximm_target_socket * target_1_wr_socket
Definition: axi_crossbar.h:50
axi_crossbar::target_9_wr_socket
xtlm::xtlm_aximm_target_socket * target_9_wr_socket
Definition: axi_crossbar.h:66
axi_crossbar::initiator_14_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_14_wr_socket
Definition: axi_crossbar.h:43
axi_crossbar::initiator_0_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_0_rd_socket
Definition: axi_crossbar.h:14
axi_crossbar::target_3_rd_socket
xtlm::xtlm_aximm_target_socket * target_3_rd_socket
Definition: axi_crossbar.h:53
axi_crossbar::target_5_rd_socket
xtlm::xtlm_aximm_target_socket * target_5_rd_socket
Definition: axi_crossbar.h:57
axi_crossbar::initiator_2_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_2_wr_socket
Definition: axi_crossbar.h:19
axi_crossbar::initiator_11_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_11_wr_socket
Definition: axi_crossbar.h:37
axi_crossbar::initiator_13_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_13_rd_socket
Definition: axi_crossbar.h:40
axi_crossbar::target_1_rd_socket
xtlm::xtlm_aximm_target_socket * target_1_rd_socket
Definition: axi_crossbar.h:49
axi_crossbar::initiator_8_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_8_wr_socket
Definition: axi_crossbar.h:31
axi_crossbar::~axi_crossbar
virtual ~axi_crossbar()
Definition: axi_crossbar.cpp:267
axi_crossbar::target_8_rd_socket
xtlm::xtlm_aximm_target_socket * target_8_rd_socket
Definition: axi_crossbar.h:63
axi_crossbar::initiator_5_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_5_wr_socket
Definition: axi_crossbar.h:25
axi_crossbar::initiator_9_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_9_rd_socket
Definition: axi_crossbar.h:32
axi_crossbar::initiator_6_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_6_wr_socket
Definition: axi_crossbar.h:27
axi_crossbar::target_2_rd_socket
xtlm::xtlm_aximm_target_socket * target_2_rd_socket
Definition: axi_crossbar.h:51
axi_crossbar::target_7_wr_socket
xtlm::xtlm_aximm_target_socket * target_7_wr_socket
Definition: axi_crossbar.h:62
axi_crossbar::initiator_5_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_5_rd_socket
Definition: axi_crossbar.h:24
axi_crossbar::initiator_4_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_4_wr_socket
Definition: axi_crossbar.h:23
axi_crossbar::target_8_wr_socket
xtlm::xtlm_aximm_target_socket * target_8_wr_socket
Definition: axi_crossbar.h:64
axi_crossbar::target_15_wr_socket
xtlm::xtlm_aximm_target_socket * target_15_wr_socket
Definition: axi_crossbar.h:78
axi_crossbar::initiator_0_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_0_wr_socket
Definition: axi_crossbar.h:15
axi_crossbar::target_7_rd_socket
xtlm::xtlm_aximm_target_socket * target_7_rd_socket
Definition: axi_crossbar.h:61
axi_crossbar::target_3_wr_socket
xtlm::xtlm_aximm_target_socket * target_3_wr_socket
Definition: axi_crossbar.h:54
axi_crossbar::initiator_13_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_13_wr_socket
Definition: axi_crossbar.h:41
axi_crossbar::target_12_rd_socket
xtlm::xtlm_aximm_target_socket * target_12_rd_socket
Definition: axi_crossbar.h:71
axi_crossbar::initiator_1_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_1_rd_socket
Definition: axi_crossbar.h:16
axi_crossbar::target_11_wr_socket
xtlm::xtlm_aximm_target_socket * target_11_wr_socket
Definition: axi_crossbar.h:70
axi_crossbar::initiator_6_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_6_rd_socket
Definition: axi_crossbar.h:26
axi_crossbar::initiator_15_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_15_rd_socket
Definition: axi_crossbar.h:44
axi_crossbar::target_13_rd_socket
xtlm::xtlm_aximm_target_socket * target_13_rd_socket
Definition: axi_crossbar.h:73
axi_crossbar::initiator_14_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_14_rd_socket
Definition: axi_crossbar.h:42
axi_crossbar::target_15_rd_socket
xtlm::xtlm_aximm_target_socket * target_15_rd_socket
Definition: axi_crossbar.h:77
axi_crossbar::initiator_4_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_4_rd_socket
Definition: axi_crossbar.h:22
axi_crossbar::target_10_rd_socket
xtlm::xtlm_aximm_target_socket * target_10_rd_socket
Definition: axi_crossbar.h:67
axi_crossbar::m_report_handler
xsc::common_cpp::report_handler * m_report_handler
Definition: axi_crossbar.h:12
axi_crossbar::initiator_7_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_7_wr_socket
Definition: axi_crossbar.h:29
axi_crossbar::initiator_9_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_9_wr_socket
Definition: axi_crossbar.h:33
axi_crossbar::target_11_rd_socket
xtlm::xtlm_aximm_target_socket * target_11_rd_socket
Definition: axi_crossbar.h:69
axi_crossbar::target_14_rd_socket
xtlm::xtlm_aximm_target_socket * target_14_rd_socket
Definition: axi_crossbar.h:75
axi_crossbar::target_13_wr_socket
xtlm::xtlm_aximm_target_socket * target_13_wr_socket
Definition: axi_crossbar.h:74
axi_crossbar::m_model
xtlm_simple_interconnect_model * m_model
Definition: axi_crossbar.h:82
axi_crossbar::target_0_rd_socket
xtlm::xtlm_aximm_target_socket * target_0_rd_socket
Definition: axi_crossbar.h:47
axi_crossbar::target_6_rd_socket
xtlm::xtlm_aximm_target_socket * target_6_rd_socket
Definition: axi_crossbar.h:59
axi_crossbar::target_4_rd_socket
xtlm::xtlm_aximm_target_socket * target_4_rd_socket
Definition: axi_crossbar.h:55
axi_crossbar.h
axi_crossbar::target_2_wr_socket
xtlm::xtlm_aximm_target_socket * target_2_wr_socket
Definition: axi_crossbar.h:52
axi_crossbar::initiator_7_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_7_rd_socket
Definition: axi_crossbar.h:28
axi_crossbar::initiator_11_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_11_rd_socket
Definition: axi_crossbar.h:36
axi_crossbar::initiator_3_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_3_wr_socket
Definition: axi_crossbar.h:21
axi_crossbar::initiator_10_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_10_wr_socket
Definition: axi_crossbar.h:35
axi_crossbar::target_5_wr_socket
xtlm::xtlm_aximm_target_socket * target_5_wr_socket
Definition: axi_crossbar.h:58
axi_crossbar::target_0_wr_socket
xtlm::xtlm_aximm_target_socket * target_0_wr_socket
Definition: axi_crossbar.h:48
axi_crossbar::target_10_wr_socket
xtlm::xtlm_aximm_target_socket * target_10_wr_socket
Definition: axi_crossbar.h:68
axi_crossbar::initiator_15_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_15_wr_socket
Definition: axi_crossbar.h:45
axi_crossbar::initiator_8_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_8_rd_socket
Definition: axi_crossbar.h:30
axi_crossbar::target_9_rd_socket
xtlm::xtlm_aximm_target_socket * target_9_rd_socket
Definition: axi_crossbar.h:65
axi_crossbar::target_6_wr_socket
xtlm::xtlm_aximm_target_socket * target_6_wr_socket
Definition: axi_crossbar.h:60
axi_crossbar::axi_crossbar
axi_crossbar(sc_module_name name, xsc::common_cpp::properties &properties)
Definition: axi_crossbar.cpp:5
axi_crossbar::initiator_12_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_12_rd_socket
Definition: axi_crossbar.h:38
axi_crossbar::initiator_10_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_10_rd_socket
Definition: axi_crossbar.h:34
axi_crossbar::initiator_2_rd_socket
xtlm::xtlm_aximm_initiator_socket * initiator_2_rd_socket
Definition: axi_crossbar.h:18
axi_crossbar::target_12_wr_socket
xtlm::xtlm_aximm_target_socket * target_12_wr_socket
Definition: axi_crossbar.h:72
axi_crossbar::target_4_wr_socket
xtlm::xtlm_aximm_target_socket * target_4_wr_socket
Definition: axi_crossbar.h:56
axi_crossbar::target_14_wr_socket
xtlm::xtlm_aximm_target_socket * target_14_wr_socket
Definition: axi_crossbar.h:76
axi_crossbar::initiator_12_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_12_wr_socket
Definition: axi_crossbar.h:39
axi_crossbar::initiator_1_wr_socket
xtlm::xtlm_aximm_initiator_socket * initiator_1_wr_socket
Definition: axi_crossbar.h:17