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 48

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

powered by: WebSVN 2.1.0

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