diff --git a/packages/pulp_cluster_package.sv b/packages/pulp_cluster_package.sv index 431c0fb..6ce7759 100644 --- a/packages/pulp_cluster_package.sv +++ b/packages/pulp_cluster_package.sv @@ -82,8 +82,24 @@ package pulp_cluster_package; byte_t HwpeNumPorts; // Enable the HMR Unit bit HMRPresent; + // Enable double modular redundancy + bit HMRDmrEnabled; // Enable triple modular redundancy bit HMRTmrEnabled; + // Lock HMR into permanent DMR mode + bit HMRDmrFIxed; + // Lock HMR into permanent TMR mode + bit HMRTmrFIxed; + // Interleave DMR/TMR cores + bit HMRInterleaveGrps; + // Enable rapid recovery + bit HMREnableRapidRecovery; + // Separates voters and checkers for data + bit HMRSeparateDataVoters; + // Separates voters and checkers for AXI buses + bit HMRSeparateAxiBus; + // Number of separate voters/checkers for individual buses + bit HMRNumBusVoters; // Enable ECC bit EnableECC; // Enable ECC on the hci interconnect @@ -203,7 +219,15 @@ package pulp_cluster_package; HwpeCfg: '{NumHwpes: 3, HwpeList: {SOFTEX, NEUREKA, REDMULE}}, HwpeNumPorts: 9, HMRPresent: 1, + HMRDmrEnabled: 1, HMRTmrEnabled: 1, + HMRDmrFIxed: 0, + HMRTmrFIxed: 0, + HMRInterleaveGrps: 1, + HMREnableRapidRecovery: 1, + HMRSeparateDataVoters:1, + HMRSeparateAxiBus:0, + HMRNumBusVoters:1, EnableECC: 1, ECCInterco: 1, iCacheNumBanks: 2, diff --git a/rtl/pulp_cluster.sv b/rtl/pulp_cluster.sv index d4c888d..7e45056 100644 --- a/rtl/pulp_cluster.sv +++ b/rtl/pulp_cluster.sv @@ -1108,15 +1108,15 @@ generate if (Cfg.HMRPresent) begin : gen_hmr_unit hmr_unit #( .NumCores ( Cfg.NumCores ), - .DMRSupported ( 1 ), - .DMRFixed ( 0 ), + .DMRSupported ( Cfg.HMRDmrEnabled ), + .DMRFixed ( Cfg.HMRDmrFIxed ), .TMRSupported ( Cfg.HMRTmrEnabled ), - .TMRFixed ( 0 ), - .InterleaveGrps ( 1 ), - .RapidRecovery ( 1 ), - .SeparateData ( 1 ), - .SeparateAxiBus ( 0 ), - .NumBusVoters ( 1 ), + .TMRFixed ( Cfg.HMRTmrFIxed ), + .InterleaveGrps ( Cfg.HMRInterleaveGrps ), + .RapidRecovery ( Cfg.HMREnableRapidRecovery ), + .SeparateData ( Cfg.HMRSeparateDataVoters ), + .SeparateAxiBus ( Cfg.HMRSeparateAxiBus ), + .NumBusVoters ( Cfg.HMRNumBusVoters ), .all_inputs_t ( core_inputs_t ), .nominal_outputs_t ( core_outputs_t ), .core_backup_t ( core_backup_t ), diff --git a/tb/pulp_cluster_tb.sv b/tb/pulp_cluster_tb.sv index 8bcd3e7..90b1534 100644 --- a/tb/pulp_cluster_tb.sv +++ b/tb/pulp_cluster_tb.sv @@ -302,7 +302,16 @@ module pulp_cluster_tb; HwpeCfg: '{NumHwpes: 3, HwpeList: {SOFTEX, NEUREKA, REDMULE}}, HwpeNumPorts: 9, HMRPresent: 1, + HMRPresent: 1, + HMRDmrEnabled: 1, HMRTmrEnabled: 1, + HMRDmrFIxed: 0, + HMRTmrFIxed: 0, + HMRInterleaveGrps: 1, + HMREnableRapidRecovery: 1, + HMRSeparateDataVoters: 1, + HMRSeparateAxiBus: 0, + HMRNumBusVoters: 1, EnableECC: 1, ECCInterco: 1, iCacheNumBanks: 2,