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] - Diff between revs 48 and 54

Only display areas with differences | Details | Blame | View Log

Rev 48 Rev 54
#ifndef TOPOLOGY_TOP_H
#ifndef TOPOLOGY_TOP_H
#define TOPOLOGY_TOP_H
#define TOPOLOGY_TOP_H
 
 
 
        unsigned int    R2R_TABLE_SIZ =0;
 
 
 
        #define CNT_R2R_SIZ  (NR * MAX_P)     //((NR1+NR2+1)*(K+1))
 
        #define CNT_R2E_SIZ  (NE+1)
 
 
 
        typedef struct R2R_CNT_TABLE {
 
                unsigned int id1;
 
                unsigned int t1;
 
                unsigned int r1;
 
                unsigned int p1;
 
                unsigned int id2;
 
                unsigned int t2;
 
                unsigned int r2;
 
                unsigned int p2;
 
        } r2r_cnt_table_t;
 
 
 
        r2r_cnt_table_t r2r_cnt_all[CNT_R2R_SIZ];
 
 
 
        typedef struct R2E_CNT_TABLE {
 
                unsigned int r1;
 
                unsigned int p1;
 
        } r2e_cnt_table_t;
 
 
 
        r2e_cnt_table_t r2e_cnt_all[CNT_R2E_SIZ];
 
 
 
 
        int get_router_num (int NR_num, int NR_id){
        int get_router_num (int NR_num, int NR_id){
                int offset=0;
                int offset=0;
                if(NR_num* sizeof(int) > sizeof(router_NRs)){
                if(NR_num* sizeof(int) > sizeof(router_NRs)){
                                fprintf(stderr,"ERROR: NR%u is not defined\n",NR_num);
                                fprintf(stderr,"ERROR: NR%u is not defined\n",NR_num);
                                exit(1);
                                exit(1);
                }
                }
                while (NR_num > 1) {
                while (NR_num > 1) {
                        NR_num-=1;
                        NR_num-=1;
                        offset += router_NRs[NR_num];
                        offset += router_NRs[NR_num];
                }
                }
                return offset + NR_id;
                return offset + NR_id;
        }
        }
 
 
 
 
        unsigned int er_addr [NE+1];
        unsigned int er_addr [NE+1];
        char start_i=0;
        char start_i=0;
        char start_o[NE+1]={0};
        char start_o[NE+1]={0};
 
 
        unsigned int Log2 (unsigned int n){
        unsigned int Log2 (unsigned int n){
                unsigned int l=1;
                unsigned int l=1;
                while((0x1<<l) < n)l++;
                while((0x1<<l) < n)l++;
                return l;
                return l;
        }
        }
 
 
        unsigned int powi (unsigned int x, unsigned int y){ // x^y
        unsigned int powi (unsigned int x, unsigned int y){ // x^y
                unsigned int i;
                unsigned int i;
                unsigned int pow=1;
                unsigned int pow=1;
        for (int i = 0; i <y; i=i+1 ) {
        for (int i = 0; i <y; i=i+1 ) {
            pow=pow * x;
            pow=pow * x;
        }
        }
                return pow;
                return pow;
        }
        }
 
 
        unsigned int sum_powi (unsigned int x, unsigned int y){//x^(y-1) + x^(y-2) + ...+ 1;
        unsigned int sum_powi (unsigned int x, unsigned int y){//x^(y-1) + x^(y-2) + ...+ 1;
        unsigned int i;
        unsigned int i;
        unsigned int sum = 0;
        unsigned int sum = 0;
        for (i = 0; i < y; i=i+1){
        for (i = 0; i < y; i=i+1){
            sum = sum + powi( x, i );
            sum = sum + powi( x, i );
        }
        }
                return sum;
                return sum;
    }
    }
 
 
#if defined (IS_FATTREE) || defined (IS_TREE)
#if defined (IS_FATTREE) || defined (IS_TREE)
                inline unsigned int  Ti( unsigned int id){
                inline unsigned int  Ti( unsigned int id){
                  return (id < NR1)? 1 : 2;
                  return (id < NR1)? 1 : 2;
                }
                }
                inline unsigned int Ri(unsigned int id){
                inline unsigned int Ri(unsigned int id){
                        return  (id < NR1)? id : id-NR1;
                        return  (id < NR1)? id : id-NR1;
                }
                }
 
 
                #define         K T1
                #define         K T1
                #define     L T2 
                #define     L T2 
                #define CNT_R2R_SIZ  ((NR1+NR2+1)*(K+1)) 
 
                #define CNT_R2E_SIZ  (NE+1)
 
 
 
                typedef struct R2R_CNT_TABLE {
 
                        unsigned int t1;
 
                        unsigned int r1;
 
                        unsigned int p1;
 
                        unsigned int t2;
 
                        unsigned int r2;
 
                        unsigned int p2;
 
                } r2r_cnt_table_t;
 
 
 
                r2r_cnt_table_t r2r_cnt_all[CNT_R2R_SIZ];
 
 
 
                typedef struct R2E_CNT_TABLE {
 
                        unsigned int r1;
 
                        unsigned int p1;
 
                } r2e_cnt_table_t;
 
 
 
                r2e_cnt_table_t r2e_cnt_all[CNT_R2E_SIZ];
 
 
 
                inline void fattree_connect ( r2r_cnt_table_t in){
                inline void fattree_connect ( r2r_cnt_table_t in){
                        unsigned int t1 = in.t1;
                        unsigned int t1 = in.t1;
                        unsigned int r1 = in.r1;
                        unsigned int r1 = in.r1;
                        unsigned int p1 = in.p1;
                        unsigned int p1 = in.p1;
                        unsigned int t2 = in.t2;
                        unsigned int t2 = in.t2;
                        unsigned int r2 = in.r2;
                        unsigned int r2 = in.r2;
                        unsigned int p2 = in.p2;
                        unsigned int p2 = in.p2;
 
 
                        if (t1==1 && t2 == 1) {
                        if (t1==1 && t2 == 1) {
                                conect_r2r(1,r1,p1,1,r2,p2);
                                conect_r2r(1,r1,p1,1,r2,p2);
                                conect_r2r(1,r2,p2,1,r1,p1);
                                conect_r2r(1,r2,p2,1,r1,p1);
                        }
                        }
                        else if (t1==1 && t2 == 2) {
                        else if (t1==1 && t2 == 2) {
                                conect_r2r(1,r1,p1,2,r2,p2);
                                conect_r2r(1,r1,p1,2,r2,p2);
                                conect_r2r(2,r2,p2,1,r1,p1);
                                conect_r2r(2,r2,p2,1,r1,p1);
                        }
                        }
                        else if (t1==2 && t2 == 1){
                        else if (t1==2 && t2 == 1){
                                conect_r2r(2,r1,p1,1,r2,p2);
                                conect_r2r(2,r1,p1,1,r2,p2);
                                conect_r2r(1,r2,p2,2,r1,p1);
                                conect_r2r(1,r2,p2,2,r1,p1);
                        }
                        }
                        else{
                        else{
                                conect_r2r(2,r1,p1,2,r2,p2);
                                conect_r2r(2,r1,p1,2,r2,p2);
                                conect_r2r(2,r2,p2,2,r1,p1);
                                conect_r2r(2,r2,p2,2,r1,p1);
                        }
                        }
                }
                }
#endif
#endif
 
 
 
 
 
 
 
 
        #if defined (IS_MESH) || defined (IS_FMESH) || defined (IS_TORUS) || defined (IS_LINE) || defined (IS_RING )
        #if defined (IS_MESH) || defined (IS_FMESH) || defined (IS_TORUS) || defined (IS_LINE) || defined (IS_RING )
 
 
 
 
 
 
 
 
                #include "mesh.h"
                #include "mesh.h"
        #elif  defined (IS_FATTREE)
        #elif  defined (IS_FATTREE)
                #include "fattree.h"
                #include "fattree.h"
        #elif  defined (IS_TREE)
        #elif  defined (IS_TREE)
                #include "tree.h"
                #include "tree.h"
        #elif  defined (IS_STAR)
        #elif  defined (IS_STAR)
                #include "star.h"
                #include "star.h"
        #else
        #else
                //custom not coded
                //custom not coded
                unsigned int endp_addr_encoder ( unsigned int id){
                unsigned int endp_addr_encoder ( unsigned int id){
                        return id;
                        return id;
                }
                }
 
 
                unsigned int endp_addr_decoder (unsigned int code){
                unsigned int endp_addr_decoder (unsigned int code){
                        return code;
                        return code;
                }
                }
 
                #include "custom.h"
 
 
        #endif
        #endif
 
 
 
 
#endif
#endif
 
 
 
 

powered by: WebSVN 2.1.0

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