[aes] Introduce parameters to replace literals related to reg clearing

Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
diff --git a/hw/ip/aes/rtl/aes_cipher_core.sv b/hw/ip/aes/rtl/aes_cipher_core.sv
index e7ad8aa..8d0221b 100644
--- a/hw/ip/aes/rtl/aes_cipher_core.sv
+++ b/hw/ip/aes/rtl/aes_cipher_core.sv
@@ -225,12 +225,13 @@
   logic                               prd_masking_rsd_req;
   logic                               prd_masking_rsd_ack;
 
-  // Generate clearing signals of appropriate widths.
+  // Generate clearing signals of appropriate widths. If masking is enabled, the two shares of
+  // the registers must be cleared with different pseudo-random data.
   for (genvar s = 0; s < NumShares; s++) begin : gen_prd_clearing_shares
-    for (genvar c = 0; c < 2; c++) begin : gen_prd_clearing_128
+    for (genvar c = 0; c < NumChunksPRDClearing128; c++) begin : gen_prd_clearing_128
       assign prd_clearing_128[s][c * WidthPRDClearing +: WidthPRDClearing] = prd_clearing_i[s];
     end
-    for (genvar c = 0; c < 4; c++) begin : gen_prd_clearing_256
+    for (genvar c = 0; c < NumChunksPRDClearing256; c++) begin : gen_prd_clearing_256
       assign prd_clearing_256[s][c * WidthPRDClearing +: WidthPRDClearing] = prd_clearing_i[s];
     end
   end
diff --git a/hw/ip/aes/rtl/aes_control.sv b/hw/ip/aes/rtl/aes_control.sv
index 8737010..366b995 100644
--- a/hw/ip/aes/rtl/aes_control.sv
+++ b/hw/ip/aes/rtl/aes_control.sv
@@ -34,7 +34,7 @@
   output logic                    alert_o,
 
   // I/O register read/write enables
-  input  logic [7:0]              key_init_qe_i [2],
+  input  logic [7:0]              key_init_qe_i [NumSharesKey],
   input  logic [3:0]              iv_qe_i,
   input  logic [3:0]              data_in_qe_i,
   input  logic [3:0]              data_out_re_i,
@@ -71,7 +71,7 @@
 
   // Initial key registers
   output key_init_sel_e           key_init_sel_o,
-  output sp2v_e [7:0]             key_init_we_o [2],
+  output sp2v_e [7:0]             key_init_we_o [NumSharesKey],
 
   // IV registers
   output iv_sel_e                 iv_sel_o,
@@ -347,7 +347,7 @@
 
         if (idle_o) begin
           // Initial key and IV updates are ignored if we are not idle.
-          for (int s = 0; s < 2; s++) begin
+          for (int s = 0; s < NumSharesKey; s++) begin
             for (int i = 0; i < 8; i++) begin
               key_init_we_o[s][i] = key_init_qe_i[s][i] ? SP2V_HIGH : SP2V_LOW;
             end
@@ -624,8 +624,8 @@
   // We only use clean initial keys. Either software/counter has updated
   // - all initial key registers, or
   // - none of the initial key registers but the registers were updated in the past.
-  logic [7:0] key_init_we [2];
-  for (genvar s = 0; s < 2; s++) begin : gen_status_key_init_we_shares
+  logic [7:0] key_init_we [NumSharesKey];
+  for (genvar s = 0; s < NumSharesKey; s++) begin : gen_status_key_init_we_shares
     for (genvar i = 0; i < 8; i++) begin : gen_status_key_init_we
       assign key_init_we[s][i] = (key_init_we_o[s][i] == SP2V_HIGH);
     end
diff --git a/hw/ip/aes/rtl/aes_core.sv b/hw/ip/aes/rtl/aes_core.sv
index 68058c5..4e21d3e 100644
--- a/hw/ip/aes/rtl/aes_core.sv
+++ b/hw/ip/aes/rtl/aes_core.sv
@@ -86,13 +86,13 @@
   logic        [3:0][3:0][7:0] state_done [NumShares];
   logic        [3:0][3:0][7:0] state_out;
 
-  logic            [7:0][31:0] key_init [2];
-  logic            [7:0]       key_init_qe [2];
-  logic            [7:0][31:0] key_init_d [2];
-  logic            [7:0][31:0] key_init_q [2];
+  logic            [7:0][31:0] key_init [NumSharesKey];
+  logic            [7:0]       key_init_qe [NumSharesKey];
+  logic            [7:0][31:0] key_init_d [NumSharesKey];
+  logic            [7:0][31:0] key_init_q [NumSharesKey];
   logic            [7:0][31:0] key_init_cipher [NumShares];
-  sp2v_e           [7:0]       key_init_we_ctrl [2];
-  sp2v_e           [7:0]       key_init_we [2];
+  sp2v_e           [7:0]       key_init_we_ctrl [NumSharesKey];
+  sp2v_e           [7:0]       key_init_we [NumSharesKey];
   logic  [KeyInitSelWidth-1:0] key_init_sel_raw;
   key_init_sel_e               key_init_sel_ctrl;
   key_init_sel_e               key_init_sel;
@@ -156,13 +156,13 @@
 
   // Pseudo-random data for clearing purposes
   logic [WidthPRDClearing-1:0] cipher_prd_clearing [NumShares];
-  logic [WidthPRDClearing-1:0] prd_clearing [2];
+  logic [WidthPRDClearing-1:0] prd_clearing [NumSharesKey];
   logic                        prd_clearing_upd_req;
   logic                        prd_clearing_upd_ack;
   logic                        prd_clearing_rsd_req;
   logic                        prd_clearing_rsd_ack;
   logic                [127:0] prd_clearing_128;
-  logic                [255:0] prd_clearing_256 [2];
+  logic                [255:0] prd_clearing_256 [NumSharesKey];
 
   // Unused signals
   logic            [3:0][31:0] unused_data_out_q;
@@ -192,11 +192,13 @@
   );
 
   // Generate clearing signals of appropriate widths.
-  for (genvar c = 0; c < 2; c++) begin : gen_prd_clearing_128
+  for (genvar c = 0; c < NumChunksPRDClearing128; c++) begin : gen_prd_clearing_128
     assign prd_clearing_128[c * WidthPRDClearing +: WidthPRDClearing] = prd_clearing[0];
   end
-  for (genvar s = 0; s < 2; s++) begin : gen_prd_clearing_256_shares
-    for (genvar c = 0; c < 4; c++) begin : gen_prd_clearing_256
+  // The initial key is always provided in two shares. The two shares of the initial key register
+  // need to be cleared with different pseudo-random data.
+  for (genvar s = 0; s < NumSharesKey; s++) begin : gen_prd_clearing_256_shares
+    for (genvar c = 0; c < NumChunksPRDClearing256; c++) begin : gen_prd_clearing_256
       assign prd_clearing_256[s][c * WidthPRDClearing +: WidthPRDClearing] = prd_clearing[s];
     end
   end
@@ -253,7 +255,7 @@
     if (!rst_ni) begin
       key_init_q <= '{default: '0};
     end else begin
-      for (int s = 0; s < 2; s++) begin
+      for (int s = 0; s < NumSharesKey; s++) begin
         for (int i = 0; i < 8; i++) begin
           if (key_init_we[s][i] == SP2V_HIGH) begin
             key_init_q[s][i] <= key_init_d[s][i];
@@ -731,7 +733,7 @@
   logic  [NumSp2VSig-1:0][Sp2VWidth-1:0] sp2v_sig_chk_raw;
   logic  [NumSp2VSig-1:0]                sp2v_sig_err;
 
-  for (genvar s = 0; s < 2; s++) begin : gen_use_key_init_we_ctrl_shares
+  for (genvar s = 0; s < NumSharesKey; s++) begin : gen_use_key_init_we_ctrl_shares
     for (genvar i = 0; i < 8; i++) begin : gen_use_key_init_we_ctrl
       assign sp2v_sig[s*8+i] = key_init_we_ctrl[s][i];
     end
@@ -757,7 +759,7 @@
     assign sp2v_sig_chk[i] = sp2v_e'(sp2v_sig_chk_raw[i]);
   end
 
-  for (genvar s = 0; s < 2; s++) begin : gen_key_init_we_shares
+  for (genvar s = 0; s < NumSharesKey; s++) begin : gen_key_init_we_shares
     for (genvar i = 0; i < 8; i++) begin : gen_key_init_we
       assign key_init_we[s][i] = sp2v_sig_chk[s*8+i];
     end
diff --git a/hw/ip/aes/rtl/aes_pkg.sv b/hw/ip/aes/rtl/aes_pkg.sv
index 2a2ce08..3e13b7b 100644
--- a/hw/ip/aes/rtl/aes_pkg.sv
+++ b/hw/ip/aes/rtl/aes_pkg.sv
@@ -6,8 +6,16 @@
 
 package aes_pkg;
 
-// Widths of signals carrying pseudo-random data for clearing and masking and purposes
+// The initial key is always provided in two shares, independently whether the cipher core is
+// masked or not.
+parameter int unsigned NumSharesKey = 2;
+
+// Widths of signals carrying pseudo-random data for clearing
 parameter int unsigned WidthPRDClearing = 64;
+parameter int unsigned NumChunksPRDClearing128 = 128/WidthPRDClearing;
+parameter int unsigned NumChunksPRDClearing256 = 256/WidthPRDClearing;
+
+// Widths of signals carrying pseudo-random data for masking
 parameter int unsigned WidthPRDSBox     = 8;  // Number PRD bits per S-Box. This includes the
                                               // 8 bits for the output mask when using any of the
                                               // masked Canright S-Box implementations.
@@ -196,7 +204,7 @@
 // Minimum Hamming distance: 3
 // Maximum Hamming distance: 5
 //
-localparam int Mux6SelWidth = 6;
+parameter int Mux6SelWidth = 6;
 typedef enum logic [Mux6SelWidth-1:0] {
   MUX6_SEL_0 = 6'b011101,
   MUX6_SEL_1 = 6'b110000,
diff --git a/hw/ip/aes/rtl/aes_prng_clearing.sv b/hw/ip/aes/rtl/aes_prng_clearing.sv
index 6186dbc..2f4fc51 100644
--- a/hw/ip/aes/rtl/aes_prng_clearing.sv
+++ b/hw/ip/aes/rtl/aes_prng_clearing.sv
@@ -29,7 +29,7 @@
   // Connections to AES internals, PRNG consumers
   input  logic                    data_req_i,
   output logic                    data_ack_o,
-  output logic        [Width-1:0] data_o [2],
+  output logic        [Width-1:0] data_o [NumSharesKey],
   input  logic                    reseed_req_i,
   output logic                    reseed_ack_o,