OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_verilator/] [topology/] [topology_top.h] - Blame information for rev 54

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
#ifndef TOPOLOGY_TOP_H
2
#define TOPOLOGY_TOP_H
3
 
4 54 alirezamon
        unsigned int    R2R_TABLE_SIZ =0;
5
 
6
        #define CNT_R2R_SIZ  (NR * MAX_P)     //((NR1+NR2+1)*(K+1))
7
        #define CNT_R2E_SIZ  (NE+1)
8
 
9
        typedef struct R2R_CNT_TABLE {
10
                unsigned int id1;
11
                unsigned int t1;
12
                unsigned int r1;
13
                unsigned int p1;
14
                unsigned int id2;
15
                unsigned int t2;
16
                unsigned int r2;
17
                unsigned int p2;
18
        } r2r_cnt_table_t;
19
 
20
        r2r_cnt_table_t r2r_cnt_all[CNT_R2R_SIZ];
21
 
22
        typedef struct R2E_CNT_TABLE {
23
                unsigned int r1;
24
                unsigned int p1;
25
        } r2e_cnt_table_t;
26
 
27
        r2e_cnt_table_t r2e_cnt_all[CNT_R2E_SIZ];
28
 
29
 
30 48 alirezamon
        int get_router_num (int NR_num, int NR_id){
31
                int offset=0;
32
                if(NR_num* sizeof(int) > sizeof(router_NRs)){
33
                                fprintf(stderr,"ERROR: NR%u is not defined\n",NR_num);
34
                                exit(1);
35
                }
36
                while (NR_num > 1) {
37
                        NR_num-=1;
38
                        offset += router_NRs[NR_num];
39
                }
40
                return offset + NR_id;
41
        }
42
 
43
 
44
        unsigned int er_addr [NE+1];
45
        char start_i=0;
46
        char start_o[NE+1]={0};
47
 
48
        unsigned int Log2 (unsigned int n){
49
                unsigned int l=1;
50
                while((0x1<<l) < n)l++;
51
                return l;
52
        }
53
 
54
        unsigned int powi (unsigned int x, unsigned int y){ // x^y
55
                unsigned int i;
56
                unsigned int pow=1;
57
        for (int i = 0; i <y; i=i+1 ) {
58
            pow=pow * x;
59
        }
60
                return pow;
61
        }
62
 
63
        unsigned int sum_powi (unsigned int x, unsigned int y){//x^(y-1) + x^(y-2) + ...+ 1;
64
        unsigned int i;
65
        unsigned int sum = 0;
66
        for (i = 0; i < y; i=i+1){
67
            sum = sum + powi( x, i );
68
        }
69
                return sum;
70
    }
71
 
72
#if defined (IS_FATTREE) || defined (IS_TREE)
73
                inline unsigned int  Ti( unsigned int id){
74
                  return (id < NR1)? 1 : 2;
75
                }
76
                inline unsigned int Ri(unsigned int id){
77
                        return  (id < NR1)? id : id-NR1;
78
                }
79
 
80
                #define         K T1
81
                #define     L T2 
82
 
83
 
84
 
85
 
86
                inline void fattree_connect ( r2r_cnt_table_t in){
87
                        unsigned int t1 = in.t1;
88
                        unsigned int r1 = in.r1;
89
                        unsigned int p1 = in.p1;
90
                        unsigned int t2 = in.t2;
91
                        unsigned int r2 = in.r2;
92
                        unsigned int p2 = in.p2;
93
 
94
                        if (t1==1 && t2 == 1) {
95
                                conect_r2r(1,r1,p1,1,r2,p2);
96
                                conect_r2r(1,r2,p2,1,r1,p1);
97
                        }
98
                        else if (t1==1 && t2 == 2) {
99
                                conect_r2r(1,r1,p1,2,r2,p2);
100
                                conect_r2r(2,r2,p2,1,r1,p1);
101
                        }
102
                        else if (t1==2 && t2 == 1){
103
                                conect_r2r(2,r1,p1,1,r2,p2);
104
                                conect_r2r(1,r2,p2,2,r1,p1);
105
                        }
106
                        else{
107
                                conect_r2r(2,r1,p1,2,r2,p2);
108
                                conect_r2r(2,r2,p2,2,r1,p1);
109
                        }
110
                }
111
#endif
112
 
113
 
114
 
115
 
116
        #if defined (IS_MESH) || defined (IS_FMESH) || defined (IS_TORUS) || defined (IS_LINE) || defined (IS_RING )
117 54 alirezamon
 
118
 
119
 
120
 
121 48 alirezamon
                #include "mesh.h"
122
        #elif  defined (IS_FATTREE)
123
                #include "fattree.h"
124
        #elif  defined (IS_TREE)
125
                #include "tree.h"
126
        #elif  defined (IS_STAR)
127
                #include "star.h"
128
        #else
129
                //custom not coded
130
                unsigned int endp_addr_encoder ( unsigned int id){
131
                        return id;
132
                }
133
 
134
                unsigned int endp_addr_decoder (unsigned int code){
135
                        return code;
136
                }
137 54 alirezamon
                #include "custom.h"
138 48 alirezamon
 
139
        #endif
140
 
141
 
142
#endif
143
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.