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_noc/] [router_two_stage.sv] - Diff between revs 55 and 56

Show entire file | Details | Blame | View Log

Rev 55 Rev 56
Line 28... Line 28...
 **   stage1: lk-route,sw/VC allocation
 **   stage1: lk-route,sw/VC allocation
 **   stage2: switch-traversal
 **   stage2: switch-traversal
 **************************************************************/
 **************************************************************/
 
 
 
 
module router_two_stage
module router_two_stage #(
                import pronoc_pkg::*;
        parameter NOC_ID=0,
 
        parameter P=5
                # (
 
                        parameter P = 6     // router port num
 
                )(
                )(
                current_r_id,
                current_r_id,
                current_r_addr,// connected to constant parameter
                current_r_addr,// connected to constant parameter
 
 
                chan_in,
                chan_in,
Line 56... Line 54...
                clk,
                clk,
                reset
                reset
 
 
                );
                );
 
 
 
        `NOC_CONF
 
 
 
 
        // The current/neighbor routers addresses/port. These values are fixed in each router and they are supposed to be given as parameter.
        // The current/neighbor routers addresses/port. These values are fixed in each router and they are supposed to be given as parameter.
        // However, in order to give an identical RTL code to each router, they are given as input ports. The identical RTL code reduces the
        // However, in order to give an identical RTL code to each router, they are given as input ports. The identical RTL code reduces the
        // compilation time. Note that they wont be implemented as  input ports in the final synthesized code.
        // compilation time. Note that they wont be implemented as  input ports in the final synthesized code.
Line 179... Line 178...
 
 
                        if(CAST_TYPE == "UNICAST") begin : uni
                        if(CAST_TYPE == "UNICAST") begin : uni
                                assign chan_in_tmp[i] = chan_in[i];
                                assign chan_in_tmp[i] = chan_in[i];
                        end else begin : multi
                        end else begin : multi
                                multicast_chan_in_process #(
                                multicast_chan_in_process #(
 
                                        .NOC_ID(NOC_ID),
                                        .P(P),
                                        .P(P),
                                        .SW_LOC  (i)
                                        .SW_LOC  (i)
                                ) multicast_process (
                                ) multicast_process (
                                        .endp_port       (ctrl_in[i].endp_port),
                                        .endp_port       (ctrl_in[i].endp_port),
                                        .current_r_addr  (current_r_addr ),
                                        .current_r_addr  (current_r_addr ),
Line 238... Line 238...
 
 
                        for (j=0;j
                        for (j=0;j
 
 
                                //credit_release. Only activated for local ports as credit_release_en never be asserted in router to router connection.
                                //credit_release. Only activated for local ports as credit_release_en never be asserted in router to router connection.
                                credit_release_gen #(
                                credit_release_gen #(
 
                                        .NOC_ID(NOC_ID),
                                        .CREDIT_NUM  (LB)
                                        .CREDIT_NUM  (LB)
                                ) credit_release_gen (
                                ) credit_release_gen (
                                        .clk         (clk        ),
                                        .clk         (clk        ),
                                        .reset       (reset      ),
                                        .reset       (reset      ),
                                        .en          (ctrl_in[i].credit_release_en[j] ),
                                        .en          (ctrl_in[i].credit_release_en[j] ),
Line 264... Line 265...
        endgenerate
        endgenerate
 
 
 
 
 
 
 
 
        inout_ports
        inout_ports #(
                #(
                .NOC_ID(NOC_ID),
                        .P(P)
                        .P(P)
                )
        ) the_inout_ports (
                the_inout_ports
 
                (
 
                        .current_r_addr(current_r_addr),
                        .current_r_addr(current_r_addr),
                        .neighbors_r_addr(neighbors_r_addr),
                        .neighbors_r_addr(neighbors_r_addr),
                        .flit_in_all(flit_in_all),
                        .flit_in_all(flit_in_all),
                        .flit_in_wr_all(flit_in_wr_all),
                        .flit_in_wr_all(flit_in_wr_all),
                        .credit_out_all(credit_out_all),
                        .credit_out_all(credit_out_all),
Line 320... Line 319...
                        .vsa_credit_decreased_all(vsa_credit_decreased_all)
                        .vsa_credit_decreased_all(vsa_credit_decreased_all)
                );
                );
 
 
 
 
        combined_vc_sw_alloc #(
        combined_vc_sw_alloc #(
 
                .NOC_ID(NOC_ID),
                        .P(P)
                        .P(P)
                )
        ) vsa (
                vsa
 
                (
 
                        .dest_port_all(dest_port_all),
                        .dest_port_all(dest_port_all),
                        .masked_ovc_request_all(masked_ovc_request_all),
                        .masked_ovc_request_all(masked_ovc_request_all),
                        .granted_dst_is_from_a_single_flit_pck(granted_dst_is_from_a_single_flit_pck),
                        .granted_dst_is_from_a_single_flit_pck(granted_dst_is_from_a_single_flit_pck),
                        .ovc_allocated_all(ovc_allocated_all),
                        .ovc_allocated_all(ovc_allocated_all),
                        .granted_ovc_num_all(granted_ovc_num_all),
                        .granted_ovc_num_all(granted_ovc_num_all),
Line 351... Line 349...
 
 
        pronoc_register #(.W(PP_1)) reg2 (.in(granted_dest_port_all ), .out(granted_dest_port_all_delayed), .reset(reset), .clk(clk));
        pronoc_register #(.W(PP_1)) reg2 (.in(granted_dest_port_all ), .out(granted_dest_port_all_delayed), .reset(reset), .clk(clk));
 
 
 
 
                crossbar #(
                crossbar #(
 
                                .NOC_ID(NOC_ID),
                                .TOPOLOGY(TOPOLOGY),
                                .TOPOLOGY(TOPOLOGY),
                                .V (V),     // vc_num_per_port
                                .V (V),     // vc_num_per_port
                                .P (P),     // router port num
                                .P (P),     // router port num
                                .Fw (Fw),
                                .Fw (Fw),
                                .MUX_TYPE (MUX_TYPE),
                                .MUX_TYPE (MUX_TYPE),
                                .SSA_EN (SSA_EN),
                                .SSA_EN (SSA_EN),
                                .SELF_LOOP_EN(SELF_LOOP_EN)
                                .SELF_LOOP_EN(SELF_LOOP_EN)
 
 
                        )
                        )
                        the_crossbar
                        the_crossbar
                        (
                        (
                                .granted_dest_port_all (granted_dest_port_all_delayed),
                                .granted_dest_port_all (granted_dest_port_all_delayed),
                                .flit_in_all (iport_flit_out_all),
                                .flit_in_all (iport_flit_out_all),
                                .ssa_flit_wr_all (ssa_flit_wr_all),
                                .ssa_flit_wr_all (ssa_flit_wr_all),
                                .flit_out_all (crossbar_flit_out_all),
                                .flit_out_all (crossbar_flit_out_all),
                                .flit_out_wr_all (crossbar_flit_out_wr_all)
                                .flit_out_wr_all (crossbar_flit_out_wr_all)
 
 
                        );
                        );
 
 
                //link reg
                //link reg
                generate
                generate
                //if( ADD_PIPREG_AFTER_CROSSBAR == 1 || SMART_EN == 1) begin :link_reg
                //if( ADD_PIPREG_AFTER_CROSSBAR == 1 || SMART_EN == 1) begin :link_reg
Line 423... Line 419...
                                .oports_weight_all(oports_weight_all)
                                .oports_weight_all(oports_weight_all)
 
 
                        );
                        );
 
 
                        weights_update #(
                        weights_update #(
 
                                .NOC_ID(NOC_ID),
                                .ARBITER_TYPE(SWA_ARBITER_TYPE),
                                .ARBITER_TYPE(SWA_ARBITER_TYPE),
                                .V(V),
                                .V(V),
                                .P(P),
                                .P(P),
                                .Fw(Fw),
                                .Fw(Fw),
                                .WEIGHTw(WEIGHTw),
                                .WEIGHTw(WEIGHTw),
Line 500... Line 497...
                generate
                generate
                        for (i=0;i
                        for (i=0;i
 
 
 
 
                                always @(posedge clk) begin
                                always @(posedge clk) begin
                                        if(reset)begin
                                        if(`pronoc_reset)begin
                                                t1[i]<=1'b0;
                                                t1[i]<=1'b0;
                                                t2[i]<=1'b0;
                                                t2[i]<=1'b0;
                                        end else begin
                                        end else begin
                                                if(flit_out_wr_all[i]>0 && t2[i]==0)begin
                                                if(flit_out_wr_all[i]>0 && t2[i]==0)begin
                                                        $display("%t :Out router (id=%d, addr=%h, port=%d), flitout=%h",$time,current_r_id,current_r_addr,i,flit_out_all[(i+1)*Fw-1 : i*Fw]);
                                                        $display("%t :Out router (id=%d, addr=%h, port=%d), flitout=%h",$time,current_r_id,current_r_addr,i,flit_out_all[(i+1)*Fw-1 : i*Fw]);
Line 554... Line 551...
//TRACE_DUMP_PER is defined in pronoc_def file
//TRACE_DUMP_PER is defined in pronoc_def file
 
 
 
 
`ifdef TRACE_DUMP_PER_NoC
`ifdef TRACE_DUMP_PER_NoC
        pronoc_trace_dump #(
        pronoc_trace_dump #(
 
                .NOC_ID(NOC_ID),
                .P(P),
                .P(P),
                .TRACE_DUMP_PER("NOC"), //NOC, ROUTER, PORT
                .TRACE_DUMP_PER("NOC"), //NOC, ROUTER, PORT
                .CYCLE_REPORT(0) // 1 : enable, 0 : disable
                .CYCLE_REPORT(0) // 1 : enable, 0 : disable
 
 
        )dump1
        )dump1
Line 568... Line 566...
                .clk(clk)
                .clk(clk)
        );
        );
`endif
`endif
`ifdef TRACE_DUMP_PER_ROUTER
`ifdef TRACE_DUMP_PER_ROUTER
        pronoc_trace_dump #(
        pronoc_trace_dump #(
 
                .NOC_ID(NOC_ID),
                .P(P),
                .P(P),
                .TRACE_DUMP_PER("ROUTER"), //NOC, ROUTER, PORT
                .TRACE_DUMP_PER("ROUTER"), //NOC, ROUTER, PORT
                .CYCLE_REPORT(0) // 1 : enable, 0 : disable
                .CYCLE_REPORT(0) // 1 : enable, 0 : disable
 
 
        )dump2
        )dump2
Line 582... Line 581...
                .clk(clk)
                .clk(clk)
        );
        );
`endif
`endif
`ifdef TRACE_DUMP_PER_PORT
`ifdef TRACE_DUMP_PER_PORT
        pronoc_trace_dump #(
        pronoc_trace_dump #(
 
                .NOC_ID(NOC_ID),
                .P(P),
                .P(P),
                .TRACE_DUMP_PER("PORT"), //NOC, ROUTER, PORT
                .TRACE_DUMP_PER("PORT"), //NOC, ROUTER, PORT
                .CYCLE_REPORT(0) // 1 : enable, 0 : disable
                .CYCLE_REPORT(0) // 1 : enable, 0 : disable
 
 
        )dump3
        )dump3
Line 608... Line 608...
 
 
 
 
 
 
 
 
 
 
module credit_release_gen
module credit_release_gen #(
        import pronoc_pkg::*;
        parameter NOC_ID=0,
#(
 
        parameter CREDIT_NUM=4
        parameter CREDIT_NUM=4
)(
)
 
(
        clk,
        clk,
        reset,
        reset,
        en,
        en,
        credit_out
        credit_out
);
);
 
 
 
        `NOC_CONF
 
 
        input  clk,     reset;
        input  clk,     reset;
        input  en;
        input  en;
        output reg credit_out;
        output reg credit_out;
 
 
        localparam W=log2(CREDIT_NUM +1);
        localparam W=log2(CREDIT_NUM +1);
Line 653... Line 656...
 
 
 
 
 
 
 
 
//synthesis translate_off
//synthesis translate_off
module pronoc_trace_dump
module pronoc_trace_dump #(
        import pronoc_pkg::*;
        parameter NOC_ID=0,
#(
 
        parameter P = 6,
        parameter P = 6,
        parameter TRACE_DUMP_PER= "ROUTER", //NOC, ROUTER, PORT
        parameter TRACE_DUMP_PER= "ROUTER", //NOC, ROUTER, PORT
        parameter CYCLE_REPORT=0 // 1 : enable, 0 : disable
        parameter CYCLE_REPORT=0 // 1 : enable, 0 : disable
 
)
)(
(
        current_r_id,
        current_r_id,
        chan_in,
        chan_in,
        chan_out,
        chan_out,
        clk
        clk
);
);
 
 
 
 
 
        `NOC_CONF
 
 
        input  [31:0] current_r_id;
        input  [31:0] current_r_id;
        input   flit_chanel_t chan_in  [P-1 : 0];
        input   flit_chanel_t chan_in  [P-1 : 0];
        input   flit_chanel_t chan_out [P-1 : 0];
        input   flit_chanel_t chan_out [P-1 : 0];
        input   clk;
        input   clk;
 
 
        pronoc_trace_dump_sub #(
        pronoc_trace_dump_sub #(
 
                .NOC_ID(NOC_ID),
                .P(P),
                .P(P),
                .TRACE_DUMP_PER(TRACE_DUMP_PER), //NOC, ROUTER, PORT
                .TRACE_DUMP_PER(TRACE_DUMP_PER), //NOC, ROUTER, PORT
                .DIRECTION("in"), // in,out
                .DIRECTION("in"), // in,out
                .CYCLE_REPORT(CYCLE_REPORT) // 1 : enable, 0 : disable
                .CYCLE_REPORT(CYCLE_REPORT) // 1 : enable, 0 : disable
 
 
Line 686... Line 692...
                .chan_in(chan_in),
                .chan_in(chan_in),
                .clk(clk)
                .clk(clk)
        );
        );
 
 
        pronoc_trace_dump_sub #(
        pronoc_trace_dump_sub #(
 
                .NOC_ID(NOC_ID),
                .P(P),
                .P(P),
                .TRACE_DUMP_PER(TRACE_DUMP_PER), //NOC, ROUTER, PORT
                .TRACE_DUMP_PER(TRACE_DUMP_PER), //NOC, ROUTER, PORT
                .DIRECTION("out"), // in,out
                .DIRECTION("out"), // in,out
                .CYCLE_REPORT(CYCLE_REPORT) // 1 : enable, 0 : disable
                .CYCLE_REPORT(CYCLE_REPORT) // 1 : enable, 0 : disable
 
 
Line 699... Line 706...
                .chan_in(chan_out),
                .chan_in(chan_out),
                .clk(clk)
                .clk(clk)
        );
        );
endmodule
endmodule
 
 
module pronoc_trace_dump_sub
module pronoc_trace_dump_sub #(
        import pronoc_pkg::*;
        parameter NOC_ID=0,
#(
 
        parameter P = 6,
        parameter P = 6,
        parameter TRACE_DUMP_PER= "ROUTER", //NOC, ROUTER, PORT
        parameter TRACE_DUMP_PER= "ROUTER", //NOC, ROUTER, PORT
        parameter DIRECTION="in", // in,out
        parameter DIRECTION="in", // in,out
        parameter CYCLE_REPORT=0 // 1 : enable, 0 : disable
        parameter CYCLE_REPORT=0 // 1 : enable, 0 : disable
 
 
)(
)(
        current_r_id,
        current_r_id,
        chan_in,
        chan_in,
        clk
        clk
);
);
 
 
 
 
 
 
 
        `NOC_CONF
 
 
 
 
 
 
input  [31:0] current_r_id;
input  [31:0] current_r_id;
input   flit_chanel_t chan_in  [P-1 : 0];
input   flit_chanel_t chan_in  [P-1 : 0];
input   clk;
input   clk;
 
 
integer out;
integer out;
Line 727... Line 738...
for (p=0;p
for (p=0;p
        initial begin
        initial begin
        /* verilator lint_off WIDTH */
        /* verilator lint_off WIDTH */
                if(TRACE_DUMP_PER == "PORT"  ) fname[p] = $sformatf("trace_dump_R%0d_P%0d.out",current_r_id,p);
                if(TRACE_DUMP_PER == "PORT"  ) fname[p] = $sformatf("trace_dump_R%0d_P%0d.out",current_r_id,p);
                if(TRACE_DUMP_PER == "ROUTER") fname[p] = $sformatf("trace_dump_R%0d.out",current_r_id);
                if(TRACE_DUMP_PER == "ROUTER") fname[p] = $sformatf("trace_dump_R%0d.out",current_r_id);
                if(TRACE_DUMP_PER == "NOC"   ) fname[p] = $sformatf("trace_dump.out",current_r_id,p);
                if(TRACE_DUMP_PER == "NOC"   ) fname[p] = $sformatf("trace_dump.out");
        /* verilator lint_on WIDTH */
        /* verilator lint_on WIDTH */
                out = $fopen(fname[p],"w");
                out = $fopen(fname[p],"w");
                $fclose(out);
                $fclose(out);
        end
        end
 
 

powered by: WebSVN 2.1.0

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