From ef5ac877659f526b16c38fd9ea1f4ec939c8a487 Mon Sep 17 00:00:00 2001 From: Szymon Bieganski Date: Wed, 18 Oct 2023 15:32:16 +0200 Subject: [PATCH 1/4] cycle and instret CSR registers added perf monitor event selector, cycle counters index 13..31 removed Signed-off-by: Szymon Bieganski --- rtl/cve2_cs_registers.sv | 34 ++++++---------------- rtl/cve2_pkg.sv | 61 +++------------------------------------- 2 files changed, 13 insertions(+), 82 deletions(-) diff --git a/rtl/cve2_cs_registers.sv b/rtl/cve2_cs_registers.sv index 34f30a6de3..8af682154a 100644 --- a/rtl/cve2_cs_registers.sv +++ b/rtl/cve2_cs_registers.sv @@ -399,37 +399,29 @@ module cve2_cs_registers #( CSR_MHPMEVENT3, CSR_MHPMEVENT4, CSR_MHPMEVENT5, CSR_MHPMEVENT6, CSR_MHPMEVENT7, CSR_MHPMEVENT8, CSR_MHPMEVENT9, CSR_MHPMEVENT10, CSR_MHPMEVENT11, - CSR_MHPMEVENT12, CSR_MHPMEVENT13, CSR_MHPMEVENT14, CSR_MHPMEVENT15, - CSR_MHPMEVENT16, CSR_MHPMEVENT17, CSR_MHPMEVENT18, CSR_MHPMEVENT19, - CSR_MHPMEVENT20, CSR_MHPMEVENT21, CSR_MHPMEVENT22, CSR_MHPMEVENT23, - CSR_MHPMEVENT24, CSR_MHPMEVENT25, CSR_MHPMEVENT26, CSR_MHPMEVENT27, - CSR_MHPMEVENT28, CSR_MHPMEVENT29, CSR_MHPMEVENT30, CSR_MHPMEVENT31: begin + CSR_MHPMEVENT12: begin csr_rdata_int = mhpmevent[mhpmcounter_idx]; end + CSR_CYCLE, CSR_MCYCLE, + CSR_INSTRET, CSR_MINSTRET, CSR_MHPMCOUNTER3, CSR_MHPMCOUNTER4, CSR_MHPMCOUNTER5, CSR_MHPMCOUNTER6, CSR_MHPMCOUNTER7, CSR_MHPMCOUNTER8, CSR_MHPMCOUNTER9, CSR_MHPMCOUNTER10, CSR_MHPMCOUNTER11, - CSR_MHPMCOUNTER12, CSR_MHPMCOUNTER13, CSR_MHPMCOUNTER14, CSR_MHPMCOUNTER15, - CSR_MHPMCOUNTER16, CSR_MHPMCOUNTER17, CSR_MHPMCOUNTER18, CSR_MHPMCOUNTER19, - CSR_MHPMCOUNTER20, CSR_MHPMCOUNTER21, CSR_MHPMCOUNTER22, CSR_MHPMCOUNTER23, - CSR_MHPMCOUNTER24, CSR_MHPMCOUNTER25, CSR_MHPMCOUNTER26, CSR_MHPMCOUNTER27, - CSR_MHPMCOUNTER28, CSR_MHPMCOUNTER29, CSR_MHPMCOUNTER30, CSR_MHPMCOUNTER31: begin + CSR_MHPMCOUNTER12: begin csr_rdata_int = mhpmcounter[mhpmcounter_idx][31:0]; end + CSR_CYCLEH, CSR_MCYCLEH, + CSR_INSTRETH, CSR_MINSTRETH, CSR_MHPMCOUNTER3H, CSR_MHPMCOUNTER4H, CSR_MHPMCOUNTER5H, CSR_MHPMCOUNTER6H, CSR_MHPMCOUNTER7H, CSR_MHPMCOUNTER8H, CSR_MHPMCOUNTER9H, CSR_MHPMCOUNTER10H, CSR_MHPMCOUNTER11H, - CSR_MHPMCOUNTER12H, CSR_MHPMCOUNTER13H, CSR_MHPMCOUNTER14H, CSR_MHPMCOUNTER15H, - CSR_MHPMCOUNTER16H, CSR_MHPMCOUNTER17H, CSR_MHPMCOUNTER18H, CSR_MHPMCOUNTER19H, - CSR_MHPMCOUNTER20H, CSR_MHPMCOUNTER21H, CSR_MHPMCOUNTER22H, CSR_MHPMCOUNTER23H, - CSR_MHPMCOUNTER24H, CSR_MHPMCOUNTER25H, CSR_MHPMCOUNTER26H, CSR_MHPMCOUNTER27H, - CSR_MHPMCOUNTER28H, CSR_MHPMCOUNTER29H, CSR_MHPMCOUNTER30H, CSR_MHPMCOUNTER31H: begin + CSR_MHPMCOUNTER12H: begin csr_rdata_int = mhpmcounter[mhpmcounter_idx][63:32]; end @@ -583,11 +575,7 @@ module cve2_cs_registers #( CSR_MHPMCOUNTER3, CSR_MHPMCOUNTER4, CSR_MHPMCOUNTER5, CSR_MHPMCOUNTER6, CSR_MHPMCOUNTER7, CSR_MHPMCOUNTER8, CSR_MHPMCOUNTER9, CSR_MHPMCOUNTER10, CSR_MHPMCOUNTER11, - CSR_MHPMCOUNTER12, CSR_MHPMCOUNTER13, CSR_MHPMCOUNTER14, CSR_MHPMCOUNTER15, - CSR_MHPMCOUNTER16, CSR_MHPMCOUNTER17, CSR_MHPMCOUNTER18, CSR_MHPMCOUNTER19, - CSR_MHPMCOUNTER20, CSR_MHPMCOUNTER21, CSR_MHPMCOUNTER22, CSR_MHPMCOUNTER23, - CSR_MHPMCOUNTER24, CSR_MHPMCOUNTER25, CSR_MHPMCOUNTER26, CSR_MHPMCOUNTER27, - CSR_MHPMCOUNTER28, CSR_MHPMCOUNTER29, CSR_MHPMCOUNTER30, CSR_MHPMCOUNTER31: begin + CSR_MHPMCOUNTER12: begin mhpmcounter_we[mhpmcounter_idx] = 1'b1; end @@ -596,11 +584,7 @@ module cve2_cs_registers #( CSR_MHPMCOUNTER3H, CSR_MHPMCOUNTER4H, CSR_MHPMCOUNTER5H, CSR_MHPMCOUNTER6H, CSR_MHPMCOUNTER7H, CSR_MHPMCOUNTER8H, CSR_MHPMCOUNTER9H, CSR_MHPMCOUNTER10H, CSR_MHPMCOUNTER11H, - CSR_MHPMCOUNTER12H, CSR_MHPMCOUNTER13H, CSR_MHPMCOUNTER14H, CSR_MHPMCOUNTER15H, - CSR_MHPMCOUNTER16H, CSR_MHPMCOUNTER17H, CSR_MHPMCOUNTER18H, CSR_MHPMCOUNTER19H, - CSR_MHPMCOUNTER20H, CSR_MHPMCOUNTER21H, CSR_MHPMCOUNTER22H, CSR_MHPMCOUNTER23H, - CSR_MHPMCOUNTER24H, CSR_MHPMCOUNTER25H, CSR_MHPMCOUNTER26H, CSR_MHPMCOUNTER27H, - CSR_MHPMCOUNTER28H, CSR_MHPMCOUNTER29H, CSR_MHPMCOUNTER30H, CSR_MHPMCOUNTER31H: begin + CSR_MHPMCOUNTER12H: begin mhpmcounterh_we[mhpmcounter_idx] = 1'b1; end diff --git a/rtl/cve2_pkg.sv b/rtl/cve2_pkg.sv index f3d71ce312..5a46abedcc 100644 --- a/rtl/cve2_pkg.sv +++ b/rtl/cve2_pkg.sv @@ -442,26 +442,9 @@ package cve2_pkg; CSR_MHPMEVENT10 = 12'h32A, CSR_MHPMEVENT11 = 12'h32B, CSR_MHPMEVENT12 = 12'h32C, - CSR_MHPMEVENT13 = 12'h32D, - CSR_MHPMEVENT14 = 12'h32E, - CSR_MHPMEVENT15 = 12'h32F, - CSR_MHPMEVENT16 = 12'h330, - CSR_MHPMEVENT17 = 12'h331, - CSR_MHPMEVENT18 = 12'h332, - CSR_MHPMEVENT19 = 12'h333, - CSR_MHPMEVENT20 = 12'h334, - CSR_MHPMEVENT21 = 12'h335, - CSR_MHPMEVENT22 = 12'h336, - CSR_MHPMEVENT23 = 12'h337, - CSR_MHPMEVENT24 = 12'h338, - CSR_MHPMEVENT25 = 12'h339, - CSR_MHPMEVENT26 = 12'h33A, - CSR_MHPMEVENT27 = 12'h33B, - CSR_MHPMEVENT28 = 12'h33C, - CSR_MHPMEVENT29 = 12'h33D, - CSR_MHPMEVENT30 = 12'h33E, - CSR_MHPMEVENT31 = 12'h33F, + CSR_CYCLE = 12'hC00, CSR_MCYCLE = 12'hB00, + CSR_INSTRET = 12'hC02, CSR_MINSTRET = 12'hB02, CSR_MHPMCOUNTER3 = 12'hB03, CSR_MHPMCOUNTER4 = 12'hB04, @@ -473,26 +456,9 @@ package cve2_pkg; CSR_MHPMCOUNTER10 = 12'hB0A, CSR_MHPMCOUNTER11 = 12'hB0B, CSR_MHPMCOUNTER12 = 12'hB0C, - CSR_MHPMCOUNTER13 = 12'hB0D, - CSR_MHPMCOUNTER14 = 12'hB0E, - CSR_MHPMCOUNTER15 = 12'hB0F, - CSR_MHPMCOUNTER16 = 12'hB10, - CSR_MHPMCOUNTER17 = 12'hB11, - CSR_MHPMCOUNTER18 = 12'hB12, - CSR_MHPMCOUNTER19 = 12'hB13, - CSR_MHPMCOUNTER20 = 12'hB14, - CSR_MHPMCOUNTER21 = 12'hB15, - CSR_MHPMCOUNTER22 = 12'hB16, - CSR_MHPMCOUNTER23 = 12'hB17, - CSR_MHPMCOUNTER24 = 12'hB18, - CSR_MHPMCOUNTER25 = 12'hB19, - CSR_MHPMCOUNTER26 = 12'hB1A, - CSR_MHPMCOUNTER27 = 12'hB1B, - CSR_MHPMCOUNTER28 = 12'hB1C, - CSR_MHPMCOUNTER29 = 12'hB1D, - CSR_MHPMCOUNTER30 = 12'hB1E, - CSR_MHPMCOUNTER31 = 12'hB1F, + CSR_CYCLEH = 12'hC80, CSR_MCYCLEH = 12'hB80, + CSR_INSTRETH = 12'hC82, CSR_MINSTRETH = 12'hB82, CSR_MHPMCOUNTER3H = 12'hB83, CSR_MHPMCOUNTER4H = 12'hB84, @@ -504,25 +470,6 @@ package cve2_pkg; CSR_MHPMCOUNTER10H = 12'hB8A, CSR_MHPMCOUNTER11H = 12'hB8B, CSR_MHPMCOUNTER12H = 12'hB8C, - CSR_MHPMCOUNTER13H = 12'hB8D, - CSR_MHPMCOUNTER14H = 12'hB8E, - CSR_MHPMCOUNTER15H = 12'hB8F, - CSR_MHPMCOUNTER16H = 12'hB90, - CSR_MHPMCOUNTER17H = 12'hB91, - CSR_MHPMCOUNTER18H = 12'hB92, - CSR_MHPMCOUNTER19H = 12'hB93, - CSR_MHPMCOUNTER20H = 12'hB94, - CSR_MHPMCOUNTER21H = 12'hB95, - CSR_MHPMCOUNTER22H = 12'hB96, - CSR_MHPMCOUNTER23H = 12'hB97, - CSR_MHPMCOUNTER24H = 12'hB98, - CSR_MHPMCOUNTER25H = 12'hB99, - CSR_MHPMCOUNTER26H = 12'hB9A, - CSR_MHPMCOUNTER27H = 12'hB9B, - CSR_MHPMCOUNTER28H = 12'hB9C, - CSR_MHPMCOUNTER29H = 12'hB9D, - CSR_MHPMCOUNTER30H = 12'hB9E, - CSR_MHPMCOUNTER31H = 12'hB9F, CSR_CPUCTRL = 12'h7C0, CSR_SECURESEED = 12'h7C1 } csr_num_e; From 07391f78fb5497cf93099ca74324b7415b7f6669 Mon Sep 17 00:00:00 2001 From: Szymon Bieganski Date: Thu, 2 Nov 2023 11:04:00 +0100 Subject: [PATCH 2/4] [rtl] mcountinhibit reset value set to disable cycle, instret and hpmcounter3 Signed-off-by: Szymon Bieganski --- rtl/cve2_cs_registers.sv | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/rtl/cve2_cs_registers.sv b/rtl/cve2_cs_registers.sv index 8af682154a..8dbee70a4f 100644 --- a/rtl/cve2_cs_registers.sv +++ b/rtl/cve2_cs_registers.sv @@ -156,6 +156,22 @@ module cve2_cs_registers #( priv_lvl_e prv; } dcsr_t; + typedef struct packed { + logic hpm12; + logic hpm11; + logic hpm10; + logic hpm9; + logic hpm8; + logic hpm7; + logic hpm6; + logic hpm5; + logic hpm4; + logic hpm3; + logic ir; + logic zero0; + logic cy; + } mcountinhibit_t; + // Interrupt and exception control signals logic [31:0] exception_pc; @@ -1273,9 +1289,25 @@ module cve2_cs_registers #( assign mcountinhibit = mcountinhibit_q; end + // MCOUNTINHIBIT + localparam mcountinhibit_t MCOUNTINHIBIT_RST_VAL = '{cy: 1'b1, + zero0: 1'b0, + ir: 1'b1, + hpm3: 1'b1, + hpm4: 1'b0, + hpm5: 1'b0, + hpm6: 1'b0, + hpm7: 1'b0, + hpm8: 1'b0, + hpm9: 1'b0, + hpm10: 1'b0, + hpm11: 1'b0, + hpm12: 1'b0}; + + always_ff @(posedge clk_i or negedge rst_ni) begin if (!rst_ni) begin - mcountinhibit_q <= '0; + mcountinhibit_q <= logic'(MCOUNTINHIBIT_RST_VAL); end else begin mcountinhibit_q <= mcountinhibit_d; end From 1c6f55dcc5633280cd60eeda4987082a690b4218 Mon Sep 17 00:00:00 2001 From: Szymon Bieganski Date: Fri, 3 Nov 2023 16:01:40 +0100 Subject: [PATCH 3/4] corrected mcountinhibit_rst width Signed-off-by: Szymon Bieganski --- rtl/cve2_cs_registers.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtl/cve2_cs_registers.sv b/rtl/cve2_cs_registers.sv index 4bc51b5ff6..a8199c86dd 100644 --- a/rtl/cve2_cs_registers.sv +++ b/rtl/cve2_cs_registers.sv @@ -1317,7 +1317,7 @@ module cve2_cs_registers #( always_ff @(posedge clk_i or negedge rst_ni) begin if (!rst_ni) begin - mcountinhibit_q <= logic'(MCOUNTINHIBIT_RST_VAL); + mcountinhibit_q <= 13'(MCOUNTINHIBIT_RST_VAL); end else begin mcountinhibit_q <= mcountinhibit_d; end From 6eb09e79a1bf2e5c002fdd927d008a228aa92a4f Mon Sep 17 00:00:00 2001 From: Szymon Bieganski Date: Wed, 10 Jan 2024 13:36:59 +0100 Subject: [PATCH 4/4] Remove SECURESEED csr Solves #96 Signed-off-by: Szymon Bieganski --- rtl/cve2_cs_registers.sv | 5 ----- rtl/cve2_pkg.sv | 3 +-- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/rtl/cve2_cs_registers.sv b/rtl/cve2_cs_registers.sv index a8199c86dd..88806cf5f5 100644 --- a/rtl/cve2_cs_registers.sv +++ b/rtl/cve2_cs_registers.sv @@ -467,11 +467,6 @@ module cve2_cs_registers #( illegal_csr = ~DbgTriggerEn; end - // Custom CSR for LFSR re-seeding (cannot be read) - CSR_SECURESEED: begin - csr_rdata_int = '0; - end - default: begin illegal_csr = 1'b1; end diff --git a/rtl/cve2_pkg.sv b/rtl/cve2_pkg.sv index 7c3aaae828..7ef53da247 100644 --- a/rtl/cve2_pkg.sv +++ b/rtl/cve2_pkg.sv @@ -469,8 +469,7 @@ package cve2_pkg; CSR_MHPMCOUNTER10H = 12'hB8A, CSR_MHPMCOUNTER11H = 12'hB8B, CSR_MHPMCOUNTER12H = 12'hB8C, - CSR_CPUCTRL = 12'h7C0, - CSR_SECURESEED = 12'h7C1 + CSR_CPUCTRL = 12'h7C0 } csr_num_e; // CSR pmp-related offsets