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/] [rtl/] [src_modelsim/] [noc_sim_statistic.sv] - Diff between revs 54 and 56

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

Rev 54 Rev 56
// synthesis translate_off
// synthesis translate_off
`timescale   1ns/1ns
`timescale   1ns/1ns
`include "pronoc_def.v"
`include "pronoc_def.v"
module routers_statistic_collector
module routers_statistic_collector #(
                import pronoc_pkg::*;
        parameter NOC_ID=0
        (
)(
                reset,
                reset,
                clk,
        clk,
                router_event,
        router_event,
                print
        print
        );
);
 
 
 
        `NOC_CONF
 
 
        input   clk,reset;
        input   clk,reset;
        input   router_event_t  router_event [NR-1 : 0][MAX_P-1 : 0];
        input   router_event_t  router_event [NR-1 : 0][MAX_P-1 : 0];
        input   print;
        input   print;
        typedef struct   {
        typedef struct   {
                integer pck_num_in;
                integer pck_num_in;
                integer flit_num_in;
                integer flit_num_in;
                integer pck_num_out;
                integer pck_num_out;
                integer flit_num_out;
                integer flit_num_out;
                integer flit_num_in_bypassed;
                integer flit_num_in_bypassed;
                integer flit_num_in_buffered;
                integer flit_num_in_buffered;
                integer bypass_counter [SMART_NUM : 0];
                integer bypass_counter [SMART_NUM : 0];
        } router_stat_t;
        } router_stat_t;
        task  reset_router_stat;
        task  reset_router_stat;
                output  router_stat_t stat_in;
                output  router_stat_t stat_in;
                integer k;
                integer k;
                begin
                begin
                        stat_in.pck_num_in=0;
                        stat_in.pck_num_in=0;
                        stat_in.flit_num_in=0;
                        stat_in.flit_num_in=0;
                        stat_in.pck_num_out=0;
                        stat_in.pck_num_out=0;
                        stat_in.flit_num_out=0;
                        stat_in.flit_num_out=0;
                        stat_in.flit_num_in_bypassed=0;
                        stat_in.flit_num_in_bypassed=0;
                        stat_in.flit_num_in_buffered=0;
                        stat_in.flit_num_in_buffered=0;
                        for (k=0;k
                        for (k=0;k
                end
                end
        endtask
        endtask
        task print_router_st;
        task print_router_st;
                input router_stat_t stat_in;
                input router_stat_t stat_in;
                integer k;
                integer k;
                begin
                begin
                        $write("%0d,", stat_in.flit_num_in);
                        $write("%0d,", stat_in.flit_num_in);
                        $write("%0d,", stat_in.pck_num_in);
                        $write("%0d,", stat_in.pck_num_in);
                        $write("%0d,", stat_in.flit_num_out);
                        $write("%0d,", stat_in.flit_num_out);
                        $write("%0d,", stat_in.pck_num_out);
                        $write("%0d,", stat_in.pck_num_out);
                        $write("%0d,", stat_in.flit_num_in_buffered);
                        $write("%0d,", stat_in.flit_num_in_buffered);
                        $write("%0d,", stat_in.flit_num_in_bypassed);
                        $write("%0d,", stat_in.flit_num_in_bypassed);
                        if(SMART_MAX>0) for (k=0;k
                        if(SMART_MAX>0) for (k=0;k
                        $write("\n");
                        $write("\n");
                end
                end
        endtask
        endtask
        router_stat_t router_stat [NR][MAX_P];
        router_stat_t router_stat [NR][MAX_P];
        router_stat_t router_stat_accum [NR];
        router_stat_t router_stat_accum [NR];
        integer r,p;
        integer r,p;
        initial begin
        initial begin
                for(r=0;r
                for(r=0;r
                        reset_router_stat(router_stat_accum[r]);
                        reset_router_stat(router_stat_accum[r]);
                        for (p=0;p
                        for (p=0;p
                                reset_router_stat(router_stat[r][p]);
                                reset_router_stat(router_stat[r][p]);
                        end//p
                        end//p
                end//r
                end//r
        end//init
        end//init
        always @ (posedge clk) begin
        always @ (posedge clk) begin
                for(r=0;r
                for(r=0;r
                        for (p=0;p
                        for (p=0;p
                                if( router_event[r][p].flit_wr_i )      router_stat[r][p].flit_num_in++;
                                if( router_event[r][p].flit_wr_i )      router_stat[r][p].flit_num_in++;
                                if( router_event[r][p].pck_wr_i  ) router_stat[r][p].pck_num_in++;
                                if( router_event[r][p].pck_wr_i  ) router_stat[r][p].pck_num_in++;
                                if( router_event[r][p].flit_wr_o ) router_stat[r][p].flit_num_out++;
                                if( router_event[r][p].flit_wr_o ) router_stat[r][p].flit_num_out++;
                                if( router_event[r][p].pck_wr_o  ) router_stat[r][p].pck_num_out++;
                                if( router_event[r][p].pck_wr_o  ) router_stat[r][p].pck_num_out++;
                                if(     router_event[r][p].flit_in_bypassed) router_stat[r][p].flit_num_in_bypassed++;
                                if(     router_event[r][p].flit_in_bypassed) router_stat[r][p].flit_num_in_bypassed++;
                                else if( router_event[r][p].flit_wr_i) begin
                                else if( router_event[r][p].flit_wr_i) begin
                                        router_stat [r][p].flit_num_in_buffered++;
                                        router_stat [r][p].flit_num_in_buffered++;
                                        router_stat[r][p].bypass_counter[router_event[r][p].bypassed_num]++;
                                        router_stat[r][p].bypass_counter[router_event[r][p].bypassed_num]++;
                                end
                                end
                        end//p
                        end//p
                end//r
                end//r
        end//always
        end//always
        integer k;
        integer k;
        always @(posedge print) begin
        always @(posedge print) begin
                for(r=0;r
                for(r=0;r
                        for (p=0;p
                        for (p=0;p
                                router_stat_accum[r].pck_num_in+=                  router_stat[r][p].pck_num_in;
                                router_stat_accum[r].pck_num_in+=                  router_stat[r][p].pck_num_in;
                                router_stat_accum[r].flit_num_in+=         router_stat[r][p].flit_num_in;
                                router_stat_accum[r].flit_num_in+=         router_stat[r][p].flit_num_in;
                                router_stat_accum[r].pck_num_out+=         router_stat[r][p].pck_num_out;
                                router_stat_accum[r].pck_num_out+=         router_stat[r][p].pck_num_out;
                                router_stat_accum[r].flit_num_out+=        router_stat[r][p].flit_num_out;
                                router_stat_accum[r].flit_num_out+=        router_stat[r][p].flit_num_out;
                                router_stat_accum[r].flit_num_in_bypassed+=router_stat[r][p].flit_num_in_bypassed;
                                router_stat_accum[r].flit_num_in_bypassed+=router_stat[r][p].flit_num_in_bypassed;
                                router_stat_accum[r].flit_num_in_buffered+=router_stat[r][p].flit_num_in_buffered;
                                router_stat_accum[r].flit_num_in_buffered+=router_stat[r][p].flit_num_in_buffered;
                                for (k=0;k
                                for (k=0;k
                        end//p
                        end//p
                end//r
                end//r
                //report router statistic
                //report router statistic
                $display("\n\tRouters' statistics");
                $display("\n\tRouters' statistics");
                $write("\t#RID, #Port,flit_in,pck_in,flit_out,pck_out,flit_in_buffered,flit_in_bypassed,");
                $write("\t#RID, #Port,flit_in,pck_in,flit_out,pck_out,flit_in_buffered,flit_in_bypassed,");
                if(SMART_MAX>0) for (k=0;k
                if(SMART_MAX>0) for (k=0;k
                $write("\n");
                $write("\n");
                for(r=0;r
                for(r=0;r
                        for (p=0;p
                        for (p=0;p
                                $write("\t%0d,%0d,",r,p);
                                $write("\t%0d,%0d,",r,p);
                                print_router_st(router_stat [r][p]);
                                print_router_st(router_stat [r][p]);
                        end//p
                        end//p
                        $write("\t%0d,total,",r);
                        $write("\t%0d,total,",r);
                        print_router_st(router_stat_accum [r]);
                        print_router_st(router_stat_accum [r]);
                end     //r
                end     //r
        end//always
        end//always
endmodule
endmodule
// synthesis translate_on
// synthesis translate_on
 
 

powered by: WebSVN 2.1.0

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