@@ -495,6 +495,7 @@ module cheshire_soc import cheshire_pkg::*; #(
495495 // This is necessary for routing in the LLC-internal interconnect.
496496 always_comb begin
497497 axi_llc_remap_req = axi_llc_cut_req;
498+
498499 if (axi_llc_cut_req.aw.addr & ~ AmSpmRegionMask == AmSpmBaseUncached & ~ AmSpmRegionMask)
499500 axi_llc_remap_req.aw.addr = AmSpm | (AmSpmRegionMask & axi_llc_cut_req.aw.addr);
500501 if (axi_llc_cut_req.ar.addr & ~ AmSpmRegionMask == AmSpmBaseUncached & ~ AmSpmRegionMask)
@@ -503,20 +504,25 @@ module cheshire_soc import cheshire_pkg::*; #(
503504 end
504505
505506 axi_llc_reg_wrap # (
506- .SetAssociativity ( Cfg.LlcSetAssoc ),
507- .NumLines ( Cfg.LlcNumLines ),
508- .NumBlocks ( Cfg.LlcNumBlocks ),
509- .AxiIdWidth ( AxiSlvIdWidth ),
510- .AxiAddrWidth ( Cfg.AddrWidth ),
511- .AxiDataWidth ( Cfg.AxiDataWidth ),
512- .AxiUserWidth ( Cfg.AxiUserWidth ),
513- .slv_req_t ( axi_slv_req_t ),
514- .slv_resp_t ( axi_slv_rsp_t ),
515- .mst_req_t ( axi_ext_llc_req_t ),
516- .mst_resp_t ( axi_ext_llc_rsp_t ),
517- .reg_req_t ( reg_req_t ),
518- .reg_resp_t ( reg_rsp_t ),
519- .rule_full_t ( addr_rule_t )
507+ .SetAssociativity ( Cfg.LlcSetAssoc ),
508+ .NumLines ( Cfg.LlcNumLines ),
509+ .NumBlocks ( Cfg.LlcNumBlocks ),
510+ .CachePartition ( Cfg.LlcCachePartition ),
511+ .MaxPartition ( Cfg.LlcMaxPartition ),
512+ .RemapHash ( Cfg.LlcRemapHash ),
513+ .AxiIdWidth ( AxiSlvIdWidth ),
514+ .AxiAddrWidth ( Cfg.AddrWidth ),
515+ .AxiDataWidth ( Cfg.AxiDataWidth ),
516+ .AxiUserWidth ( Cfg.AxiUserWidth ),
517+ .AxiUserIdMsb ( Cfg.LlcUserAmoMsb ),
518+ .AxiUserIdLsb ( Cfg.LlcUserAmoLsb ),
519+ .slv_req_t ( axi_slv_req_t ),
520+ .slv_resp_t ( axi_slv_rsp_t ),
521+ .mst_req_t ( axi_ext_llc_req_t ),
522+ .mst_resp_t ( axi_ext_llc_rsp_t ),
523+ .reg_req_t ( reg_req_t ),
524+ .reg_resp_t ( reg_rsp_t ),
525+ .rule_full_t ( addr_rule_t )
520526 ) i_llc (
521527 .clk_i,
522528 .rst_ni,
@@ -581,6 +587,9 @@ module cheshire_soc import cheshire_pkg::*; #(
581587
582588 assign intr.intn.bus_err.cores = core_bus_err_intr_comb;
583589
590+ axi_mst_req_t [AxiIn.num_in- 1 : 0 ] tagger_req;
591+ axi_mst_rsp_t [AxiIn.num_in- 1 : 0 ] tagger_rsp;
592+
584593 for (genvar i = 0 ; i < NumIntHarts; i++ ) begin : gen_cva6_cores
585594 axi_cva6_req_t core_out_req, core_ur_req;
586595 axi_cva6_rsp_t core_out_rsp, core_ur_rsp;
@@ -740,11 +749,62 @@ module cheshire_soc import cheshire_pkg::*; #(
740749 ) i_axi_id_serialize (
741750 .clk_i,
742751 .rst_ni,
743- .slv_req_i ( core_ur_req ),
744- .slv_resp_o ( core_ur_rsp ),
745- .mst_req_o ( axi_in_req[AxiIn.cores[i] ] ),
746- .mst_resp_i ( axi_in_rsp[AxiIn.cores[i] ] )
752+ .slv_req_i ( core_ur_req ),
753+ .slv_resp_o ( core_ur_rsp ),
754+ .mst_req_o ( tagger_req[i ] ),
755+ .mst_resp_i ( tagger_rsp[i ] )
747756 );
757+
758+ if (Cfg.LlcCachePartition) begin : gen_tagger
759+ if (i == 0 ) begin : gen_wr_tagger
760+ tagger # (
761+ .DATA_WIDTH ( Cfg.AxiDataWidth ),
762+ .ADDR_WIDTH ( Cfg.AddrWidth ),
763+ .MAXPARTITION ( Cfg.LlcMaxPartition ),
764+ .AXI_USER_ID_MSB ( Cfg.LlcUserAmoMsb ),
765+ .AXI_USER_ID_LSB ( Cfg.LlcUserAmoLsb ),
766+ .TAGGER_GRAN ( 3 ),
767+ .axi_req_t ( axi_mst_req_t ),
768+ .axi_rsp_t ( axi_mst_rsp_t ),
769+ .reg_req_t ( reg_req_t ),
770+ .reg_rsp_t ( reg_rsp_t )
771+ ) i_tagger (
772+ .clk_i,
773+ .rst_ni,
774+ .slv_req_i ( tagger_req[i] ),
775+ .slv_rsp_o ( tagger_rsp[i] ),
776+ .mst_req_o ( axi_in_req[AxiIn.cores[i]] ),
777+ .mst_rsp_i ( axi_in_rsp[AxiIn.cores[i]] ),
778+ .cfg_req_i ( reg_out_req[RegOut.tagger] ),
779+ .cfg_rsp_o ( reg_out_rsp[RegOut.tagger] )
780+ );
781+ end else begin : gen_r_tagger
782+ tagger # (
783+ .DATA_WIDTH ( Cfg.AxiDataWidth ),
784+ .ADDR_WIDTH ( Cfg.AddrWidth ),
785+ .MAXPARTITION ( Cfg.LlcMaxPartition ),
786+ .AXI_USER_ID_MSB ( Cfg.LlcUserAmoMsb ),
787+ .AXI_USER_ID_LSB ( Cfg.LlcUserAmoLsb ),
788+ .TAGGER_GRAN ( 3 ),
789+ .axi_req_t ( axi_mst_req_t ),
790+ .axi_rsp_t ( axi_mst_rsp_t ),
791+ .reg_req_t ( reg_req_t ),
792+ .reg_rsp_t ( reg_rsp_t )
793+ ) i_tagger (
794+ .clk_i,
795+ .rst_ni,
796+ .slv_req_i ( tagger_req[i] ),
797+ .slv_rsp_o ( tagger_rsp[i] ),
798+ .mst_req_o ( axi_in_req[AxiIn.cores[i]] ),
799+ .mst_rsp_i ( axi_in_rsp[AxiIn.cores[i]] ),
800+ .cfg_req_i ( reg_out_req[RegOut.tagger] ),
801+ .cfg_rsp_o ( )
802+ );
803+ end
804+ end else begin : gen_no_tagger
805+ assign axi_in_req[AxiIn.cores[i]] = tagger_req[i];
806+ assign tagger_rsp[i] = axi_in_rsp[AxiIn.cores[i]];
807+ end
748808 end
749809
750810 // ///////////////////////
0 commit comments