[secded_gen] Enhance inverted ECC code

This tweaks the inverted ECC codes so that neither all-zero nor all-ones
are valid code words in order to guard against glitch attacks.

Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/prim/dv/prim_secded/secded_enc.c b/hw/ip/prim/dv/prim_secded/secded_enc.c
index e9ef24e..e61909f 100644
--- a/hw/ip/prim/dv/prim_secded/secded_enc.c
+++ b/hw/ip/prim/dv/prim_secded/secded_enc.c
@@ -95,11 +95,11 @@
 uint8_t enc_secded_inv_22_16(const uint8_t bytes[2]) {
   uint16_t word = ((uint16_t)bytes[0] << 0) | ((uint16_t)bytes[1] << 8);
 
-  return (calc_parity(word & 0x496e, true) << 0) |
+  return (calc_parity(word & 0x496e, false) << 0) |
          (calc_parity(word & 0xf20b, true) << 1) |
-         (calc_parity(word & 0x8ed8, true) << 2) |
+         (calc_parity(word & 0x8ed8, false) << 2) |
          (calc_parity(word & 0x7714, true) << 3) |
-         (calc_parity(word & 0xaca5, true) << 4) |
+         (calc_parity(word & 0xaca5, false) << 4) |
          (calc_parity(word & 0x11f3, true) << 5);
 }
 
@@ -107,11 +107,11 @@
   uint32_t word = ((uint32_t)bytes[0] << 0) | ((uint32_t)bytes[1] << 8) |
                   ((uint32_t)bytes[2] << 16);
 
-  return (calc_parity(word & 0x3003ff, true) << 0) |
+  return (calc_parity(word & 0x3003ff, false) << 0) |
          (calc_parity(word & 0x10fc0f, true) << 1) |
-         (calc_parity(word & 0x271c71, true) << 2) |
+         (calc_parity(word & 0x271c71, false) << 2) |
          (calc_parity(word & 0x3b6592, true) << 3) |
-         (calc_parity(word & 0x3daaa4, true) << 4) |
+         (calc_parity(word & 0x3daaa4, false) << 4) |
          (calc_parity(word & 0x3ed348, true) << 5);
 }
 
@@ -119,13 +119,13 @@
   uint32_t word = ((uint32_t)bytes[0] << 0) | ((uint32_t)bytes[1] << 8) |
                   ((uint32_t)bytes[2] << 16) | ((uint32_t)bytes[3] << 24);
 
-  return (calc_parity(word & 0x2606bd25, true) << 0) |
+  return (calc_parity(word & 0x2606bd25, false) << 0) |
          (calc_parity(word & 0xdeba8050, true) << 1) |
-         (calc_parity(word & 0x413d89aa, true) << 2) |
+         (calc_parity(word & 0x413d89aa, false) << 2) |
          (calc_parity(word & 0x31234ed1, true) << 3) |
-         (calc_parity(word & 0xc2c1323b, true) << 4) |
+         (calc_parity(word & 0xc2c1323b, false) << 4) |
          (calc_parity(word & 0x2dcc624c, true) << 5) |
-         (calc_parity(word & 0x98505586, true) << 6);
+         (calc_parity(word & 0x98505586, false) << 6);
 }
 
 uint8_t enc_secded_inv_64_57(const uint8_t bytes[8]) {
@@ -134,13 +134,13 @@
                   ((uint64_t)bytes[4] << 32) | ((uint64_t)bytes[5] << 40) |
                   ((uint64_t)bytes[6] << 48) | ((uint64_t)bytes[7] << 56);
 
-  return (calc_parity(word & 0x103fff800007fff, true) << 0) |
+  return (calc_parity(word & 0x103fff800007fff, false) << 0) |
          (calc_parity(word & 0x17c1ff801ff801f, true) << 1) |
-         (calc_parity(word & 0x1bde1f87e0781e1, true) << 2) |
+         (calc_parity(word & 0x1bde1f87e0781e1, false) << 2) |
          (calc_parity(word & 0x1deee3b8e388e22, true) << 3) |
-         (calc_parity(word & 0x1ef76cdb2c93244, true) << 4) |
+         (calc_parity(word & 0x1ef76cdb2c93244, false) << 4) |
          (calc_parity(word & 0x1f7bb56d5525488, true) << 5) |
-         (calc_parity(word & 0x1fbdda769a46910, true) << 6);
+         (calc_parity(word & 0x1fbdda769a46910, false) << 6);
 }
 
 uint8_t enc_secded_inv_72_64(const uint8_t bytes[8]) {
@@ -149,12 +149,12 @@
                   ((uint64_t)bytes[4] << 32) | ((uint64_t)bytes[5] << 40) |
                   ((uint64_t)bytes[6] << 48) | ((uint64_t)bytes[7] << 56);
 
-  return (calc_parity(word & 0xb9000000001fffff, true) << 0) |
+  return (calc_parity(word & 0xb9000000001fffff, false) << 0) |
          (calc_parity(word & 0x5e00000fffe0003f, true) << 1) |
-         (calc_parity(word & 0x67003ff003e007c1, true) << 2) |
+         (calc_parity(word & 0x67003ff003e007c1, false) << 2) |
          (calc_parity(word & 0xcd0fc0f03c207842, true) << 3) |
-         (calc_parity(word & 0xb671c711c4438884, true) << 4) |
+         (calc_parity(word & 0xb671c711c4438884, false) << 4) |
          (calc_parity(word & 0xb5b65926488c9108, true) << 5) |
-         (calc_parity(word & 0xcbdaaa4a91152210, true) << 6) |
+         (calc_parity(word & 0xcbdaaa4a91152210, false) << 6) |
          (calc_parity(word & 0x7aed348d221a4420, true) << 7);
 }
diff --git a/hw/ip/prim/fpv/tb/prim_secded_22_16_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_22_16_bind_fpv.sv
index 9953a00..1102d95 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_22_16_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_22_16_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_22_16_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_22_16_tb.sv
index 7a334b3..e7da60e 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_22_16_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_22_16_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [15:0] data_i,
   output logic [15:0] data_o,
+  output logic [21:0] encoded_o,
   output logic [5:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [21:0] error_inject_i
 );
 
-  logic [21:0] data_enc;
-
   prim_secded_22_16_enc prim_secded_22_16_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_22_16_dec prim_secded_22_16_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_28_22_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_28_22_bind_fpv.sv
index 81c0345..06a0ab7 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_28_22_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_28_22_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_28_22_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_28_22_tb.sv
index 2a3c0cb..6a6ff79 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_28_22_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_28_22_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [21:0] data_i,
   output logic [21:0] data_o,
+  output logic [27:0] encoded_o,
   output logic [5:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [27:0] error_inject_i
 );
 
-  logic [27:0] data_enc;
-
   prim_secded_28_22_enc prim_secded_28_22_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_28_22_dec prim_secded_28_22_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_39_32_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_39_32_bind_fpv.sv
index 216412e..1215d79 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_39_32_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_39_32_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_39_32_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_39_32_tb.sv
index 6dc9b70..a497af9 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_39_32_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_39_32_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [31:0] data_i,
   output logic [31:0] data_o,
+  output logic [38:0] encoded_o,
   output logic [6:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [38:0] error_inject_i
 );
 
-  logic [38:0] data_enc;
-
   prim_secded_39_32_enc prim_secded_39_32_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_39_32_dec prim_secded_39_32_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_64_57_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_64_57_bind_fpv.sv
index 9852d52..0acfbe8 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_64_57_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_64_57_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_64_57_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_64_57_tb.sv
index f32c811..9cc9ef3 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_64_57_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_64_57_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [56:0] data_i,
   output logic [56:0] data_o,
+  output logic [63:0] encoded_o,
   output logic [6:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [63:0] error_inject_i
 );
 
-  logic [63:0] data_enc;
-
   prim_secded_64_57_enc prim_secded_64_57_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_64_57_dec prim_secded_64_57_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_72_64_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_72_64_bind_fpv.sv
index 2eaa49e..31a1657 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_72_64_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_72_64_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_72_64_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_72_64_tb.sv
index 543e29a..f653524 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_72_64_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_72_64_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [63:0] data_i,
   output logic [63:0] data_o,
+  output logic [71:0] encoded_o,
   output logic [7:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [71:0] error_inject_i
 );
 
-  logic [71:0] data_enc;
-
   prim_secded_72_64_enc prim_secded_72_64_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_72_64_dec prim_secded_72_64_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_bind_fpv.sv
index 16bef29..8ecfc23 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_tb.sv
index 0ba0517..cffae6b 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_22_16_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [15:0] data_i,
   output logic [15:0] data_o,
+  output logic [21:0] encoded_o,
   output logic [5:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [21:0] error_inject_i
 );
 
-  logic [21:0] data_enc;
-
   prim_secded_hamming_22_16_enc prim_secded_hamming_22_16_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_hamming_22_16_dec prim_secded_hamming_22_16_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_bind_fpv.sv
index 2f70c08..35eb0bf 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_tb.sv
index b94d348..5a59e15 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_39_32_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [31:0] data_i,
   output logic [31:0] data_o,
+  output logic [38:0] encoded_o,
   output logic [6:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [38:0] error_inject_i
 );
 
-  logic [38:0] data_enc;
-
   prim_secded_hamming_39_32_enc prim_secded_hamming_39_32_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_hamming_39_32_dec prim_secded_hamming_39_32_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_bind_fpv.sv
index 8574601..bf09d37 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_tb.sv
index ae1faf6..5f4c8e3 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_72_64_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [63:0] data_i,
   output logic [63:0] data_o,
+  output logic [71:0] encoded_o,
   output logic [7:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [71:0] error_inject_i
 );
 
-  logic [71:0] data_enc;
-
   prim_secded_hamming_72_64_enc prim_secded_hamming_72_64_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_hamming_72_64_dec prim_secded_hamming_72_64_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_bind_fpv.sv
index 18cc1b7..4962eb1 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_tb.sv
index 201f6c8..a599ce1 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_hamming_76_68_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [67:0] data_i,
   output logic [67:0] data_o,
+  output logic [75:0] encoded_o,
   output logic [7:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [75:0] error_inject_i
 );
 
-  logic [75:0] data_enc;
-
   prim_secded_hamming_76_68_enc prim_secded_hamming_76_68_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_hamming_76_68_dec prim_secded_hamming_76_68_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_bind_fpv.sv
index 3a3c0a7..96d0c95 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_tb.sv
index 8f974d2..aaa5123 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_22_16_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [15:0] data_i,
   output logic [15:0] data_o,
+  output logic [21:0] encoded_o,
   output logic [5:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [21:0] error_inject_i
 );
 
-  logic [21:0] data_enc;
-
   prim_secded_inv_22_16_enc prim_secded_inv_22_16_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_22_16_dec prim_secded_inv_22_16_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_bind_fpv.sv
index 69e7de0..5b114b2 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_tb.sv
index bcf5e4c..ff4caf4 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_28_22_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [21:0] data_i,
   output logic [21:0] data_o,
+  output logic [27:0] encoded_o,
   output logic [5:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [27:0] error_inject_i
 );
 
-  logic [27:0] data_enc;
-
   prim_secded_inv_28_22_enc prim_secded_inv_28_22_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_28_22_dec prim_secded_inv_28_22_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_bind_fpv.sv
index 6a3057a..a115964 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_tb.sv
index debec41..b1c5af6 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_39_32_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [31:0] data_i,
   output logic [31:0] data_o,
+  output logic [38:0] encoded_o,
   output logic [6:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [38:0] error_inject_i
 );
 
-  logic [38:0] data_enc;
-
   prim_secded_inv_39_32_enc prim_secded_inv_39_32_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_39_32_dec prim_secded_inv_39_32_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_bind_fpv.sv
index 5dd52d5..81bb663 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_tb.sv
index afc717b..fd0751d 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_64_57_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [56:0] data_i,
   output logic [56:0] data_o,
+  output logic [63:0] encoded_o,
   output logic [6:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [63:0] error_inject_i
 );
 
-  logic [63:0] data_enc;
-
   prim_secded_inv_64_57_enc prim_secded_inv_64_57_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_64_57_dec prim_secded_inv_64_57_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_bind_fpv.sv
index 7e90740..3a37a45 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_tb.sv
index a997105..1d2c6d8 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_72_64_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [63:0] data_i,
   output logic [63:0] data_o,
+  output logic [71:0] encoded_o,
   output logic [7:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [71:0] error_inject_i
 );
 
-  logic [71:0] data_enc;
-
   prim_secded_inv_72_64_enc prim_secded_inv_72_64_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_72_64_dec prim_secded_inv_72_64_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_bind_fpv.sv
index 519d841..07e95af 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_tb.sv
index 9a04c87..6397d77 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_22_16_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [15:0] data_i,
   output logic [15:0] data_o,
+  output logic [21:0] encoded_o,
   output logic [5:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [21:0] error_inject_i
 );
 
-  logic [21:0] data_enc;
-
   prim_secded_inv_hamming_22_16_enc prim_secded_inv_hamming_22_16_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_hamming_22_16_dec prim_secded_inv_hamming_22_16_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_bind_fpv.sv
index 026df35..a364b15 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_tb.sv
index 3db6b68..7d1fcdf 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_39_32_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [31:0] data_i,
   output logic [31:0] data_o,
+  output logic [38:0] encoded_o,
   output logic [6:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [38:0] error_inject_i
 );
 
-  logic [38:0] data_enc;
-
   prim_secded_inv_hamming_39_32_enc prim_secded_inv_hamming_39_32_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_hamming_39_32_dec prim_secded_inv_hamming_39_32_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_bind_fpv.sv
index ffa3220..4c4bc3a 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_tb.sv
index d881c64..52acadd 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_72_64_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [63:0] data_i,
   output logic [63:0] data_o,
+  output logic [71:0] encoded_o,
   output logic [7:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [71:0] error_inject_i
 );
 
-  logic [71:0] data_enc;
-
   prim_secded_inv_hamming_72_64_enc prim_secded_inv_hamming_72_64_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_hamming_72_64_dec prim_secded_inv_hamming_72_64_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_bind_fpv.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_bind_fpv.sv
index 3ce6d9f..8c2bac9 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_bind_fpv.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_bind_fpv.sv
@@ -12,6 +12,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i
diff --git a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_tb.sv b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_tb.sv
index 7d80ef7..c635bb1 100644
--- a/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_tb.sv
+++ b/hw/ip/prim/fpv/tb/prim_secded_inv_hamming_76_68_tb.sv
@@ -9,20 +9,19 @@
   input               rst_ni,
   input        [67:0] data_i,
   output logic [67:0] data_o,
+  output logic [75:0] encoded_o,
   output logic [7:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [75:0] error_inject_i
 );
 
-  logic [75:0] data_enc;
-
   prim_secded_inv_hamming_76_68_enc prim_secded_inv_hamming_76_68_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   prim_secded_inv_hamming_76_68_dec prim_secded_inv_hamming_76_68_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
diff --git a/hw/ip/prim/fpv/vip/prim_secded_22_16_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_22_16_assert_fpv.sv
index ff75279..93e65c8 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_22_16_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_22_16_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [15:0] data_i,
   input [15:0] data_o,
+  input [21:0] encoded_o,
   input [5:0] syndrome_o,
   input [1:0]  err_o,
   input [21:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_28_22_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_28_22_assert_fpv.sv
index 7b39b91..8e5c1d2 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_28_22_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_28_22_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [21:0] data_i,
   input [21:0] data_o,
+  input [27:0] encoded_o,
   input [5:0] syndrome_o,
   input [1:0]  err_o,
   input [27:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_39_32_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_39_32_assert_fpv.sv
index 9d5f57e..91a8033 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_39_32_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_39_32_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [31:0] data_i,
   input [31:0] data_o,
+  input [38:0] encoded_o,
   input [6:0] syndrome_o,
   input [1:0]  err_o,
   input [38:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_64_57_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_64_57_assert_fpv.sv
index eb32433..b724060 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_64_57_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_64_57_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [56:0] data_i,
   input [56:0] data_o,
+  input [63:0] encoded_o,
   input [6:0] syndrome_o,
   input [1:0]  err_o,
   input [63:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_72_64_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_72_64_assert_fpv.sv
index 7fd0066..dfbc2b5 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_72_64_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_72_64_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [63:0] data_i,
   input [63:0] data_o,
+  input [71:0] encoded_o,
   input [7:0] syndrome_o,
   input [1:0]  err_o,
   input [71:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_hamming_22_16_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_hamming_22_16_assert_fpv.sv
index 600576b..213533e 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_hamming_22_16_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_hamming_22_16_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [15:0] data_i,
   input [15:0] data_o,
+  input [21:0] encoded_o,
   input [5:0] syndrome_o,
   input [1:0]  err_o,
   input [21:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_hamming_39_32_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_hamming_39_32_assert_fpv.sv
index 1b2c0b4..0a23731 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_hamming_39_32_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_hamming_39_32_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [31:0] data_i,
   input [31:0] data_o,
+  input [38:0] encoded_o,
   input [6:0] syndrome_o,
   input [1:0]  err_o,
   input [38:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_hamming_72_64_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_hamming_72_64_assert_fpv.sv
index fed2707..78657dd 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_hamming_72_64_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_hamming_72_64_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [63:0] data_i,
   input [63:0] data_o,
+  input [71:0] encoded_o,
   input [7:0] syndrome_o,
   input [1:0]  err_o,
   input [71:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_hamming_76_68_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_hamming_76_68_assert_fpv.sv
index 45ce2f0..146194a 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_hamming_76_68_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_hamming_76_68_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [67:0] data_i,
   input [67:0] data_o,
+  input [75:0] encoded_o,
   input [7:0] syndrome_o,
   input [1:0]  err_o,
   input [75:0] error_inject_i
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_22_16_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_22_16_assert_fpv.sv
index 8f0d802..d039f35 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_22_16_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_22_16_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [15:0] data_i,
   input [15:0] data_o,
+  input [21:0] encoded_o,
   input [5:0] syndrome_o,
   input [1:0]  err_o,
   input [21:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_22_16_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_28_22_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_28_22_assert_fpv.sv
index aeee046..a9b9ad7 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_28_22_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_28_22_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [21:0] data_i,
   input [21:0] data_o,
+  input [27:0] encoded_o,
   input [5:0] syndrome_o,
   input [1:0]  err_o,
   input [27:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_28_22_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_39_32_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_39_32_assert_fpv.sv
index 27c52cc..55df09e 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_39_32_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_39_32_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [31:0] data_i,
   input [31:0] data_o,
+  input [38:0] encoded_o,
   input [6:0] syndrome_o,
   input [1:0]  err_o,
   input [38:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_39_32_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_64_57_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_64_57_assert_fpv.sv
index 6803f2c..e1ca7e0 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_64_57_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_64_57_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [56:0] data_i,
   input [56:0] data_o,
+  input [63:0] encoded_o,
   input [6:0] syndrome_o,
   input [1:0]  err_o,
   input [63:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_64_57_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_72_64_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_72_64_assert_fpv.sv
index 252ea32..c662a1b 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_72_64_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_72_64_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [63:0] data_i,
   input [63:0] data_o,
+  input [71:0] encoded_o,
   input [7:0] syndrome_o,
   input [1:0]  err_o,
   input [71:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_72_64_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_22_16_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_22_16_assert_fpv.sv
index 4123a18..29c97d3 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_22_16_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_22_16_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [15:0] data_i,
   input [15:0] data_o,
+  input [21:0] encoded_o,
   input [5:0] syndrome_o,
   input [1:0]  err_o,
   input [21:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_hamming_22_16_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_39_32_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_39_32_assert_fpv.sv
index fe3790e..a14cc79 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_39_32_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_39_32_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [31:0] data_i,
   input [31:0] data_o,
+  input [38:0] encoded_o,
   input [6:0] syndrome_o,
   input [1:0]  err_o,
   input [38:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_hamming_39_32_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_72_64_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_72_64_assert_fpv.sv
index e483a3f..b3159d2 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_72_64_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_72_64_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [63:0] data_i,
   input [63:0] data_o,
+  input [71:0] encoded_o,
   input [7:0] syndrome_o,
   input [1:0]  err_o,
   input [71:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_hamming_72_64_assert_fpv
diff --git a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_76_68_assert_fpv.sv b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_76_68_assert_fpv.sv
index 414bbd4..170b0d1 100644
--- a/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_76_68_assert_fpv.sv
+++ b/hw/ip/prim/fpv/vip/prim_secded_inv_hamming_76_68_assert_fpv.sv
@@ -9,6 +9,7 @@
   input        rst_ni,
   input [67:0] data_i,
   input [67:0] data_o,
+  input [75:0] encoded_o,
   input [7:0] syndrome_o,
   input [1:0]  err_o,
   input [75:0] error_inject_i
@@ -30,4 +31,9 @@
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
 
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+
 endmodule : prim_secded_inv_hamming_76_68_assert_fpv
diff --git a/hw/ip/prim/rtl/prim_secded_22_16_enc.sv b/hw/ip/prim/rtl/prim_secded_22_16_enc.sv
index 41ad31b..47d30e5 100644
--- a/hw/ip/prim/rtl/prim_secded_22_16_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_22_16_enc.sv
@@ -11,12 +11,12 @@
 
   always_comb begin : p_encode
     data_o = 22'(data_i);
-    data_o[16] = ^(data_o & 22'h00496E);
-    data_o[17] = ^(data_o & 22'h00F20B);
-    data_o[18] = ^(data_o & 22'h008ED8);
-    data_o[19] = ^(data_o & 22'h007714);
-    data_o[20] = ^(data_o & 22'h00ACA5);
-    data_o[21] = ^(data_o & 22'h0011F3);
+    data_o[16] = 0 ^ ^(data_o & 22'h00496E);
+    data_o[17] = 0 ^ ^(data_o & 22'h00F20B);
+    data_o[18] = 0 ^ ^(data_o & 22'h008ED8);
+    data_o[19] = 0 ^ ^(data_o & 22'h007714);
+    data_o[20] = 0 ^ ^(data_o & 22'h00ACA5);
+    data_o[21] = 0 ^ ^(data_o & 22'h0011F3);
   end
 
 endmodule : prim_secded_22_16_enc
diff --git a/hw/ip/prim/rtl/prim_secded_28_22_enc.sv b/hw/ip/prim/rtl/prim_secded_28_22_enc.sv
index f4e451a..8aa3d90 100644
--- a/hw/ip/prim/rtl/prim_secded_28_22_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_28_22_enc.sv
@@ -11,12 +11,12 @@
 
   always_comb begin : p_encode
     data_o = 28'(data_i);
-    data_o[22] = ^(data_o & 28'h03003FF);
-    data_o[23] = ^(data_o & 28'h010FC0F);
-    data_o[24] = ^(data_o & 28'h0271C71);
-    data_o[25] = ^(data_o & 28'h03B6592);
-    data_o[26] = ^(data_o & 28'h03DAAA4);
-    data_o[27] = ^(data_o & 28'h03ED348);
+    data_o[22] = 0 ^ ^(data_o & 28'h03003FF);
+    data_o[23] = 0 ^ ^(data_o & 28'h010FC0F);
+    data_o[24] = 0 ^ ^(data_o & 28'h0271C71);
+    data_o[25] = 0 ^ ^(data_o & 28'h03B6592);
+    data_o[26] = 0 ^ ^(data_o & 28'h03DAAA4);
+    data_o[27] = 0 ^ ^(data_o & 28'h03ED348);
   end
 
 endmodule : prim_secded_28_22_enc
diff --git a/hw/ip/prim/rtl/prim_secded_39_32_enc.sv b/hw/ip/prim/rtl/prim_secded_39_32_enc.sv
index 5668ff3..cbe3195 100644
--- a/hw/ip/prim/rtl/prim_secded_39_32_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_39_32_enc.sv
@@ -11,13 +11,13 @@
 
   always_comb begin : p_encode
     data_o = 39'(data_i);
-    data_o[32] = ^(data_o & 39'h002606BD25);
-    data_o[33] = ^(data_o & 39'h00DEBA8050);
-    data_o[34] = ^(data_o & 39'h00413D89AA);
-    data_o[35] = ^(data_o & 39'h0031234ED1);
-    data_o[36] = ^(data_o & 39'h00C2C1323B);
-    data_o[37] = ^(data_o & 39'h002DCC624C);
-    data_o[38] = ^(data_o & 39'h0098505586);
+    data_o[32] = 0 ^ ^(data_o & 39'h002606BD25);
+    data_o[33] = 0 ^ ^(data_o & 39'h00DEBA8050);
+    data_o[34] = 0 ^ ^(data_o & 39'h00413D89AA);
+    data_o[35] = 0 ^ ^(data_o & 39'h0031234ED1);
+    data_o[36] = 0 ^ ^(data_o & 39'h00C2C1323B);
+    data_o[37] = 0 ^ ^(data_o & 39'h002DCC624C);
+    data_o[38] = 0 ^ ^(data_o & 39'h0098505586);
   end
 
 endmodule : prim_secded_39_32_enc
diff --git a/hw/ip/prim/rtl/prim_secded_64_57_enc.sv b/hw/ip/prim/rtl/prim_secded_64_57_enc.sv
index 6e83726..6c89d91 100644
--- a/hw/ip/prim/rtl/prim_secded_64_57_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_64_57_enc.sv
@@ -11,13 +11,13 @@
 
   always_comb begin : p_encode
     data_o = 64'(data_i);
-    data_o[57] = ^(data_o & 64'h0103FFF800007FFF);
-    data_o[58] = ^(data_o & 64'h017C1FF801FF801F);
-    data_o[59] = ^(data_o & 64'h01BDE1F87E0781E1);
-    data_o[60] = ^(data_o & 64'h01DEEE3B8E388E22);
-    data_o[61] = ^(data_o & 64'h01EF76CDB2C93244);
-    data_o[62] = ^(data_o & 64'h01F7BB56D5525488);
-    data_o[63] = ^(data_o & 64'h01FBDDA769A46910);
+    data_o[57] = 0 ^ ^(data_o & 64'h0103FFF800007FFF);
+    data_o[58] = 0 ^ ^(data_o & 64'h017C1FF801FF801F);
+    data_o[59] = 0 ^ ^(data_o & 64'h01BDE1F87E0781E1);
+    data_o[60] = 0 ^ ^(data_o & 64'h01DEEE3B8E388E22);
+    data_o[61] = 0 ^ ^(data_o & 64'h01EF76CDB2C93244);
+    data_o[62] = 0 ^ ^(data_o & 64'h01F7BB56D5525488);
+    data_o[63] = 0 ^ ^(data_o & 64'h01FBDDA769A46910);
   end
 
 endmodule : prim_secded_64_57_enc
diff --git a/hw/ip/prim/rtl/prim_secded_72_64_enc.sv b/hw/ip/prim/rtl/prim_secded_72_64_enc.sv
index 5e9f674..d3957b1 100644
--- a/hw/ip/prim/rtl/prim_secded_72_64_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_72_64_enc.sv
@@ -11,14 +11,14 @@
 
   always_comb begin : p_encode
     data_o = 72'(data_i);
-    data_o[64] = ^(data_o & 72'h00B9000000001FFFFF);
-    data_o[65] = ^(data_o & 72'h005E00000FFFE0003F);
-    data_o[66] = ^(data_o & 72'h0067003FF003E007C1);
-    data_o[67] = ^(data_o & 72'h00CD0FC0F03C207842);
-    data_o[68] = ^(data_o & 72'h00B671C711C4438884);
-    data_o[69] = ^(data_o & 72'h00B5B65926488C9108);
-    data_o[70] = ^(data_o & 72'h00CBDAAA4A91152210);
-    data_o[71] = ^(data_o & 72'h007AED348D221A4420);
+    data_o[64] = 0 ^ ^(data_o & 72'h00B9000000001FFFFF);
+    data_o[65] = 0 ^ ^(data_o & 72'h005E00000FFFE0003F);
+    data_o[66] = 0 ^ ^(data_o & 72'h0067003FF003E007C1);
+    data_o[67] = 0 ^ ^(data_o & 72'h00CD0FC0F03C207842);
+    data_o[68] = 0 ^ ^(data_o & 72'h00B671C711C4438884);
+    data_o[69] = 0 ^ ^(data_o & 72'h00B5B65926488C9108);
+    data_o[70] = 0 ^ ^(data_o & 72'h00CBDAAA4A91152210);
+    data_o[71] = 0 ^ ^(data_o & 72'h007AED348D221A4420);
   end
 
 endmodule : prim_secded_72_64_enc
diff --git a/hw/ip/prim/rtl/prim_secded_hamming_22_16_enc.sv b/hw/ip/prim/rtl/prim_secded_hamming_22_16_enc.sv
index 9eb7295..6fc3342 100644
--- a/hw/ip/prim/rtl/prim_secded_hamming_22_16_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_hamming_22_16_enc.sv
@@ -11,12 +11,12 @@
 
   always_comb begin : p_encode
     data_o = 22'(data_i);
-    data_o[16] = ^(data_o & 22'h00AD5B);
-    data_o[17] = ^(data_o & 22'h00366D);
-    data_o[18] = ^(data_o & 22'h00C78E);
-    data_o[19] = ^(data_o & 22'h0007F0);
-    data_o[20] = ^(data_o & 22'h00F800);
-    data_o[21] = ^(data_o & 22'h1FFFFF);
+    data_o[16] = 0 ^ ^(data_o & 22'h00AD5B);
+    data_o[17] = 0 ^ ^(data_o & 22'h00366D);
+    data_o[18] = 0 ^ ^(data_o & 22'h00C78E);
+    data_o[19] = 0 ^ ^(data_o & 22'h0007F0);
+    data_o[20] = 0 ^ ^(data_o & 22'h00F800);
+    data_o[21] = 0 ^ ^(data_o & 22'h1FFFFF);
   end
 
 endmodule : prim_secded_hamming_22_16_enc
diff --git a/hw/ip/prim/rtl/prim_secded_hamming_39_32_enc.sv b/hw/ip/prim/rtl/prim_secded_hamming_39_32_enc.sv
index 47b60f5..3ce5392 100644
--- a/hw/ip/prim/rtl/prim_secded_hamming_39_32_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_hamming_39_32_enc.sv
@@ -11,13 +11,13 @@
 
   always_comb begin : p_encode
     data_o = 39'(data_i);
-    data_o[32] = ^(data_o & 39'h0056AAAD5B);
-    data_o[33] = ^(data_o & 39'h009B33366D);
-    data_o[34] = ^(data_o & 39'h00E3C3C78E);
-    data_o[35] = ^(data_o & 39'h0003FC07F0);
-    data_o[36] = ^(data_o & 39'h0003FFF800);
-    data_o[37] = ^(data_o & 39'h00FC000000);
-    data_o[38] = ^(data_o & 39'h3FFFFFFFFF);
+    data_o[32] = 0 ^ ^(data_o & 39'h0056AAAD5B);
+    data_o[33] = 0 ^ ^(data_o & 39'h009B33366D);
+    data_o[34] = 0 ^ ^(data_o & 39'h00E3C3C78E);
+    data_o[35] = 0 ^ ^(data_o & 39'h0003FC07F0);
+    data_o[36] = 0 ^ ^(data_o & 39'h0003FFF800);
+    data_o[37] = 0 ^ ^(data_o & 39'h00FC000000);
+    data_o[38] = 0 ^ ^(data_o & 39'h3FFFFFFFFF);
   end
 
 endmodule : prim_secded_hamming_39_32_enc
diff --git a/hw/ip/prim/rtl/prim_secded_hamming_72_64_enc.sv b/hw/ip/prim/rtl/prim_secded_hamming_72_64_enc.sv
index a24f3c8..689e4ea 100644
--- a/hw/ip/prim/rtl/prim_secded_hamming_72_64_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_hamming_72_64_enc.sv
@@ -11,14 +11,14 @@
 
   always_comb begin : p_encode
     data_o = 72'(data_i);
-    data_o[64] = ^(data_o & 72'h00AB55555556AAAD5B);
-    data_o[65] = ^(data_o & 72'h00CD9999999B33366D);
-    data_o[66] = ^(data_o & 72'h00F1E1E1E1E3C3C78E);
-    data_o[67] = ^(data_o & 72'h0001FE01FE03FC07F0);
-    data_o[68] = ^(data_o & 72'h0001FFFE0003FFF800);
-    data_o[69] = ^(data_o & 72'h0001FFFFFFFC000000);
-    data_o[70] = ^(data_o & 72'h00FE00000000000000);
-    data_o[71] = ^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
+    data_o[64] = 0 ^ ^(data_o & 72'h00AB55555556AAAD5B);
+    data_o[65] = 0 ^ ^(data_o & 72'h00CD9999999B33366D);
+    data_o[66] = 0 ^ ^(data_o & 72'h00F1E1E1E1E3C3C78E);
+    data_o[67] = 0 ^ ^(data_o & 72'h0001FE01FE03FC07F0);
+    data_o[68] = 0 ^ ^(data_o & 72'h0001FFFE0003FFF800);
+    data_o[69] = 0 ^ ^(data_o & 72'h0001FFFFFFFC000000);
+    data_o[70] = 0 ^ ^(data_o & 72'h00FE00000000000000);
+    data_o[71] = 0 ^ ^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
   end
 
 endmodule : prim_secded_hamming_72_64_enc
diff --git a/hw/ip/prim/rtl/prim_secded_hamming_76_68_enc.sv b/hw/ip/prim/rtl/prim_secded_hamming_76_68_enc.sv
index 3e94083..e8c44d1 100644
--- a/hw/ip/prim/rtl/prim_secded_hamming_76_68_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_hamming_76_68_enc.sv
@@ -11,14 +11,14 @@
 
   always_comb begin : p_encode
     data_o = 76'(data_i);
-    data_o[68] = ^(data_o & 76'h00AAB55555556AAAD5B);
-    data_o[69] = ^(data_o & 76'h00CCD9999999B33366D);
-    data_o[70] = ^(data_o & 76'h000F1E1E1E1E3C3C78E);
-    data_o[71] = ^(data_o & 76'h00F01FE01FE03FC07F0);
-    data_o[72] = ^(data_o & 76'h00001FFFE0003FFF800);
-    data_o[73] = ^(data_o & 76'h00001FFFFFFFC000000);
-    data_o[74] = ^(data_o & 76'h00FFE00000000000000);
-    data_o[75] = ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
+    data_o[68] = 0 ^ ^(data_o & 76'h00AAB55555556AAAD5B);
+    data_o[69] = 0 ^ ^(data_o & 76'h00CCD9999999B33366D);
+    data_o[70] = 0 ^ ^(data_o & 76'h000F1E1E1E1E3C3C78E);
+    data_o[71] = 0 ^ ^(data_o & 76'h00F01FE01FE03FC07F0);
+    data_o[72] = 0 ^ ^(data_o & 76'h00001FFFE0003FFF800);
+    data_o[73] = 0 ^ ^(data_o & 76'h00001FFFFFFFC000000);
+    data_o[74] = 0 ^ ^(data_o & 76'h00FFE00000000000000);
+    data_o[75] = 0 ^ ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
   end
 
 endmodule : prim_secded_hamming_76_68_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_22_16_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_22_16_dec.sv
index 386208f..5d53680 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_22_16_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_22_16_dec.sv
@@ -13,12 +13,12 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 22'h3F0000) & 22'h01496E);
-    syndrome_o[1] = ^((data_i ^ 22'h3F0000) & 22'h02F20B);
-    syndrome_o[2] = ^((data_i ^ 22'h3F0000) & 22'h048ED8);
-    syndrome_o[3] = ^((data_i ^ 22'h3F0000) & 22'h087714);
-    syndrome_o[4] = ^((data_i ^ 22'h3F0000) & 22'h10ACA5);
-    syndrome_o[5] = ^((data_i ^ 22'h3F0000) & 22'h2011F3);
+    syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01496E);
+    syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02F20B);
+    syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h048ED8);
+    syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h087714);
+    syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10ACA5);
+    syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h2011F3);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 6'h32) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_22_16_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_22_16_enc.sv
index b89772d..2932a18 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_22_16_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_22_16_enc.sv
@@ -11,12 +11,12 @@
 
   always_comb begin : p_encode
     data_o = 22'(data_i);
-    data_o[16] = ~^(data_o & 22'h00496E);
-    data_o[17] = ~^(data_o & 22'h00F20B);
-    data_o[18] = ~^(data_o & 22'h008ED8);
-    data_o[19] = ~^(data_o & 22'h007714);
-    data_o[20] = ~^(data_o & 22'h00ACA5);
-    data_o[21] = ~^(data_o & 22'h0011F3);
+    data_o[16] = 0 ^ ^(data_o & 22'h00496E);
+    data_o[17] = 1 ^ ^(data_o & 22'h00F20B);
+    data_o[18] = 0 ^ ^(data_o & 22'h008ED8);
+    data_o[19] = 1 ^ ^(data_o & 22'h007714);
+    data_o[20] = 0 ^ ^(data_o & 22'h00ACA5);
+    data_o[21] = 1 ^ ^(data_o & 22'h0011F3);
   end
 
 endmodule : prim_secded_inv_22_16_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_28_22_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_28_22_dec.sv
index 0f69caf..b54b647 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_28_22_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_28_22_dec.sv
@@ -13,12 +13,12 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 28'hFC00000) & 28'h07003FF);
-    syndrome_o[1] = ^((data_i ^ 28'hFC00000) & 28'h090FC0F);
-    syndrome_o[2] = ^((data_i ^ 28'hFC00000) & 28'h1271C71);
-    syndrome_o[3] = ^((data_i ^ 28'hFC00000) & 28'h23B6592);
-    syndrome_o[4] = ^((data_i ^ 28'hFC00000) & 28'h43DAAA4);
-    syndrome_o[5] = ^((data_i ^ 28'hFC00000) & 28'h83ED348);
+    syndrome_o[0] = ^((data_i ^ 28'hA800000) & 28'h07003FF);
+    syndrome_o[1] = ^((data_i ^ 28'hA800000) & 28'h090FC0F);
+    syndrome_o[2] = ^((data_i ^ 28'hA800000) & 28'h1271C71);
+    syndrome_o[3] = ^((data_i ^ 28'hA800000) & 28'h23B6592);
+    syndrome_o[4] = ^((data_i ^ 28'hA800000) & 28'h43DAAA4);
+    syndrome_o[5] = ^((data_i ^ 28'hA800000) & 28'h83ED348);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 6'h7) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_28_22_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_28_22_enc.sv
index 290dbfa..9ec75ac 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_28_22_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_28_22_enc.sv
@@ -11,12 +11,12 @@
 
   always_comb begin : p_encode
     data_o = 28'(data_i);
-    data_o[22] = ~^(data_o & 28'h03003FF);
-    data_o[23] = ~^(data_o & 28'h010FC0F);
-    data_o[24] = ~^(data_o & 28'h0271C71);
-    data_o[25] = ~^(data_o & 28'h03B6592);
-    data_o[26] = ~^(data_o & 28'h03DAAA4);
-    data_o[27] = ~^(data_o & 28'h03ED348);
+    data_o[22] = 0 ^ ^(data_o & 28'h03003FF);
+    data_o[23] = 1 ^ ^(data_o & 28'h010FC0F);
+    data_o[24] = 0 ^ ^(data_o & 28'h0271C71);
+    data_o[25] = 1 ^ ^(data_o & 28'h03B6592);
+    data_o[26] = 0 ^ ^(data_o & 28'h03DAAA4);
+    data_o[27] = 1 ^ ^(data_o & 28'h03ED348);
   end
 
 endmodule : prim_secded_inv_28_22_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_39_32_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_39_32_dec.sv
index f58a78d..a40a86c 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_39_32_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_39_32_dec.sv
@@ -13,13 +13,13 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 39'h7F00000000) & 39'h012606BD25);
-    syndrome_o[1] = ^((data_i ^ 39'h7F00000000) & 39'h02DEBA8050);
-    syndrome_o[2] = ^((data_i ^ 39'h7F00000000) & 39'h04413D89AA);
-    syndrome_o[3] = ^((data_i ^ 39'h7F00000000) & 39'h0831234ED1);
-    syndrome_o[4] = ^((data_i ^ 39'h7F00000000) & 39'h10C2C1323B);
-    syndrome_o[5] = ^((data_i ^ 39'h7F00000000) & 39'h202DCC624C);
-    syndrome_o[6] = ^((data_i ^ 39'h7F00000000) & 39'h4098505586);
+    syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h012606BD25);
+    syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h02DEBA8050);
+    syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04413D89AA);
+    syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0831234ED1);
+    syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h10C2C1323B);
+    syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h202DCC624C);
+    syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h4098505586);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 7'h19) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_39_32_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_39_32_enc.sv
index 0161f71..c0b62a1 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_39_32_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_39_32_enc.sv
@@ -11,13 +11,13 @@
 
   always_comb begin : p_encode
     data_o = 39'(data_i);
-    data_o[32] = ~^(data_o & 39'h002606BD25);
-    data_o[33] = ~^(data_o & 39'h00DEBA8050);
-    data_o[34] = ~^(data_o & 39'h00413D89AA);
-    data_o[35] = ~^(data_o & 39'h0031234ED1);
-    data_o[36] = ~^(data_o & 39'h00C2C1323B);
-    data_o[37] = ~^(data_o & 39'h002DCC624C);
-    data_o[38] = ~^(data_o & 39'h0098505586);
+    data_o[32] = 0 ^ ^(data_o & 39'h002606BD25);
+    data_o[33] = 1 ^ ^(data_o & 39'h00DEBA8050);
+    data_o[34] = 0 ^ ^(data_o & 39'h00413D89AA);
+    data_o[35] = 1 ^ ^(data_o & 39'h0031234ED1);
+    data_o[36] = 0 ^ ^(data_o & 39'h00C2C1323B);
+    data_o[37] = 1 ^ ^(data_o & 39'h002DCC624C);
+    data_o[38] = 0 ^ ^(data_o & 39'h0098505586);
   end
 
 endmodule : prim_secded_inv_39_32_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_64_57_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_64_57_dec.sv
index 83406e9..6e34b50 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_64_57_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_64_57_dec.sv
@@ -13,13 +13,13 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 64'hFE00000000000000) & 64'h0303FFF800007FFF);
-    syndrome_o[1] = ^((data_i ^ 64'hFE00000000000000) & 64'h057C1FF801FF801F);
-    syndrome_o[2] = ^((data_i ^ 64'hFE00000000000000) & 64'h09BDE1F87E0781E1);
-    syndrome_o[3] = ^((data_i ^ 64'hFE00000000000000) & 64'h11DEEE3B8E388E22);
-    syndrome_o[4] = ^((data_i ^ 64'hFE00000000000000) & 64'h21EF76CDB2C93244);
-    syndrome_o[5] = ^((data_i ^ 64'hFE00000000000000) & 64'h41F7BB56D5525488);
-    syndrome_o[6] = ^((data_i ^ 64'hFE00000000000000) & 64'h81FBDDA769A46910);
+    syndrome_o[0] = ^((data_i ^ 64'h5400000000000000) & 64'h0303FFF800007FFF);
+    syndrome_o[1] = ^((data_i ^ 64'h5400000000000000) & 64'h057C1FF801FF801F);
+    syndrome_o[2] = ^((data_i ^ 64'h5400000000000000) & 64'h09BDE1F87E0781E1);
+    syndrome_o[3] = ^((data_i ^ 64'h5400000000000000) & 64'h11DEEE3B8E388E22);
+    syndrome_o[4] = ^((data_i ^ 64'h5400000000000000) & 64'h21EF76CDB2C93244);
+    syndrome_o[5] = ^((data_i ^ 64'h5400000000000000) & 64'h41F7BB56D5525488);
+    syndrome_o[6] = ^((data_i ^ 64'h5400000000000000) & 64'h81FBDDA769A46910);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 7'h7) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_64_57_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_64_57_enc.sv
index 74b26b5..71d1b21 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_64_57_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_64_57_enc.sv
@@ -11,13 +11,13 @@
 
   always_comb begin : p_encode
     data_o = 64'(data_i);
-    data_o[57] = ~^(data_o & 64'h0103FFF800007FFF);
-    data_o[58] = ~^(data_o & 64'h017C1FF801FF801F);
-    data_o[59] = ~^(data_o & 64'h01BDE1F87E0781E1);
-    data_o[60] = ~^(data_o & 64'h01DEEE3B8E388E22);
-    data_o[61] = ~^(data_o & 64'h01EF76CDB2C93244);
-    data_o[62] = ~^(data_o & 64'h01F7BB56D5525488);
-    data_o[63] = ~^(data_o & 64'h01FBDDA769A46910);
+    data_o[57] = 0 ^ ^(data_o & 64'h0103FFF800007FFF);
+    data_o[58] = 1 ^ ^(data_o & 64'h017C1FF801FF801F);
+    data_o[59] = 0 ^ ^(data_o & 64'h01BDE1F87E0781E1);
+    data_o[60] = 1 ^ ^(data_o & 64'h01DEEE3B8E388E22);
+    data_o[61] = 0 ^ ^(data_o & 64'h01EF76CDB2C93244);
+    data_o[62] = 1 ^ ^(data_o & 64'h01F7BB56D5525488);
+    data_o[63] = 0 ^ ^(data_o & 64'h01FBDDA769A46910);
   end
 
 endmodule : prim_secded_inv_64_57_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_72_64_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_72_64_dec.sv
index 86ffe70..aa4c5b5 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_72_64_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_72_64_dec.sv
@@ -13,14 +13,14 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 72'hFF0000000000000000) & 72'h01B9000000001FFFFF);
-    syndrome_o[1] = ^((data_i ^ 72'hFF0000000000000000) & 72'h025E00000FFFE0003F);
-    syndrome_o[2] = ^((data_i ^ 72'hFF0000000000000000) & 72'h0467003FF003E007C1);
-    syndrome_o[3] = ^((data_i ^ 72'hFF0000000000000000) & 72'h08CD0FC0F03C207842);
-    syndrome_o[4] = ^((data_i ^ 72'hFF0000000000000000) & 72'h10B671C711C4438884);
-    syndrome_o[5] = ^((data_i ^ 72'hFF0000000000000000) & 72'h20B5B65926488C9108);
-    syndrome_o[6] = ^((data_i ^ 72'hFF0000000000000000) & 72'h40CBDAAA4A91152210);
-    syndrome_o[7] = ^((data_i ^ 72'hFF0000000000000000) & 72'h807AED348D221A4420);
+    syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01B9000000001FFFFF);
+    syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h025E00000FFFE0003F);
+    syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0467003FF003E007C1);
+    syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h08CD0FC0F03C207842);
+    syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h10B671C711C4438884);
+    syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h20B5B65926488C9108);
+    syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40CBDAAA4A91152210);
+    syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'h807AED348D221A4420);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 8'h7) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_72_64_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_72_64_enc.sv
index 7a32a2d..8f6e690 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_72_64_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_72_64_enc.sv
@@ -11,14 +11,14 @@
 
   always_comb begin : p_encode
     data_o = 72'(data_i);
-    data_o[64] = ~^(data_o & 72'h00B9000000001FFFFF);
-    data_o[65] = ~^(data_o & 72'h005E00000FFFE0003F);
-    data_o[66] = ~^(data_o & 72'h0067003FF003E007C1);
-    data_o[67] = ~^(data_o & 72'h00CD0FC0F03C207842);
-    data_o[68] = ~^(data_o & 72'h00B671C711C4438884);
-    data_o[69] = ~^(data_o & 72'h00B5B65926488C9108);
-    data_o[70] = ~^(data_o & 72'h00CBDAAA4A91152210);
-    data_o[71] = ~^(data_o & 72'h007AED348D221A4420);
+    data_o[64] = 0 ^ ^(data_o & 72'h00B9000000001FFFFF);
+    data_o[65] = 1 ^ ^(data_o & 72'h005E00000FFFE0003F);
+    data_o[66] = 0 ^ ^(data_o & 72'h0067003FF003E007C1);
+    data_o[67] = 1 ^ ^(data_o & 72'h00CD0FC0F03C207842);
+    data_o[68] = 0 ^ ^(data_o & 72'h00B671C711C4438884);
+    data_o[69] = 1 ^ ^(data_o & 72'h00B5B65926488C9108);
+    data_o[70] = 0 ^ ^(data_o & 72'h00CBDAAA4A91152210);
+    data_o[71] = 1 ^ ^(data_o & 72'h007AED348D221A4420);
   end
 
 endmodule : prim_secded_inv_72_64_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_dec.sv
index 48b2117..0f077ee 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_dec.sv
@@ -13,12 +13,12 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 22'h3F0000) & 22'h01AD5B);
-    syndrome_o[1] = ^((data_i ^ 22'h3F0000) & 22'h02366D);
-    syndrome_o[2] = ^((data_i ^ 22'h3F0000) & 22'h04C78E);
-    syndrome_o[3] = ^((data_i ^ 22'h3F0000) & 22'h0807F0);
-    syndrome_o[4] = ^((data_i ^ 22'h3F0000) & 22'h10F800);
-    syndrome_o[5] = ^((data_i ^ 22'h3F0000) & 22'h3FFFFF);
+    syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01AD5B);
+    syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02366D);
+    syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h04C78E);
+    syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h0807F0);
+    syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10F800);
+    syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h3FFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 6'h23) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_enc.sv
index 642473c..ab60658 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_22_16_enc.sv
@@ -11,12 +11,12 @@
 
   always_comb begin : p_encode
     data_o = 22'(data_i);
-    data_o[16] = ~^(data_o & 22'h00AD5B);
-    data_o[17] = ~^(data_o & 22'h00366D);
-    data_o[18] = ~^(data_o & 22'h00C78E);
-    data_o[19] = ~^(data_o & 22'h0007F0);
-    data_o[20] = ~^(data_o & 22'h00F800);
-    data_o[21] = ~^(data_o & 22'h1FFFFF);
+    data_o[16] = 0 ^ ^(data_o & 22'h00AD5B);
+    data_o[17] = 1 ^ ^(data_o & 22'h00366D);
+    data_o[18] = 0 ^ ^(data_o & 22'h00C78E);
+    data_o[19] = 1 ^ ^(data_o & 22'h0007F0);
+    data_o[20] = 0 ^ ^(data_o & 22'h00F800);
+    data_o[21] = 1 ^ ^(data_o & 22'h1FFFFF);
   end
 
 endmodule : prim_secded_inv_hamming_22_16_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_dec.sv
index 9d5ccc3..f65e86d 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_dec.sv
@@ -13,13 +13,13 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 39'h7F00000000) & 39'h0156AAAD5B);
-    syndrome_o[1] = ^((data_i ^ 39'h7F00000000) & 39'h029B33366D);
-    syndrome_o[2] = ^((data_i ^ 39'h7F00000000) & 39'h04E3C3C78E);
-    syndrome_o[3] = ^((data_i ^ 39'h7F00000000) & 39'h0803FC07F0);
-    syndrome_o[4] = ^((data_i ^ 39'h7F00000000) & 39'h1003FFF800);
-    syndrome_o[5] = ^((data_i ^ 39'h7F00000000) & 39'h20FC000000);
-    syndrome_o[6] = ^((data_i ^ 39'h7F00000000) & 39'h7FFFFFFFFF);
+    syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h0156AAAD5B);
+    syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h029B33366D);
+    syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04E3C3C78E);
+    syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0803FC07F0);
+    syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h1003FFF800);
+    syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h20FC000000);
+    syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h7FFFFFFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 7'h43) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_enc.sv
index 905b6c5..710d7b5 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_39_32_enc.sv
@@ -11,13 +11,13 @@
 
   always_comb begin : p_encode
     data_o = 39'(data_i);
-    data_o[32] = ~^(data_o & 39'h0056AAAD5B);
-    data_o[33] = ~^(data_o & 39'h009B33366D);
-    data_o[34] = ~^(data_o & 39'h00E3C3C78E);
-    data_o[35] = ~^(data_o & 39'h0003FC07F0);
-    data_o[36] = ~^(data_o & 39'h0003FFF800);
-    data_o[37] = ~^(data_o & 39'h00FC000000);
-    data_o[38] = ~^(data_o & 39'h3FFFFFFFFF);
+    data_o[32] = 0 ^ ^(data_o & 39'h0056AAAD5B);
+    data_o[33] = 1 ^ ^(data_o & 39'h009B33366D);
+    data_o[34] = 0 ^ ^(data_o & 39'h00E3C3C78E);
+    data_o[35] = 1 ^ ^(data_o & 39'h0003FC07F0);
+    data_o[36] = 0 ^ ^(data_o & 39'h0003FFF800);
+    data_o[37] = 1 ^ ^(data_o & 39'h00FC000000);
+    data_o[38] = 0 ^ ^(data_o & 39'h3FFFFFFFFF);
   end
 
 endmodule : prim_secded_inv_hamming_39_32_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_dec.sv
index 1b94660..99c2e5d 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_dec.sv
@@ -13,14 +13,14 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 72'hFF0000000000000000) & 72'h01AB55555556AAAD5B);
-    syndrome_o[1] = ^((data_i ^ 72'hFF0000000000000000) & 72'h02CD9999999B33366D);
-    syndrome_o[2] = ^((data_i ^ 72'hFF0000000000000000) & 72'h04F1E1E1E1E3C3C78E);
-    syndrome_o[3] = ^((data_i ^ 72'hFF0000000000000000) & 72'h0801FE01FE03FC07F0);
-    syndrome_o[4] = ^((data_i ^ 72'hFF0000000000000000) & 72'h1001FFFE0003FFF800);
-    syndrome_o[5] = ^((data_i ^ 72'hFF0000000000000000) & 72'h2001FFFFFFFC000000);
-    syndrome_o[6] = ^((data_i ^ 72'hFF0000000000000000) & 72'h40FE00000000000000);
-    syndrome_o[7] = ^((data_i ^ 72'hFF0000000000000000) & 72'hFFFFFFFFFFFFFFFFFF);
+    syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01AB55555556AAAD5B);
+    syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h02CD9999999B33366D);
+    syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h04F1E1E1E1E3C3C78E);
+    syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0801FE01FE03FC07F0);
+    syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h1001FFFE0003FFF800);
+    syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h2001FFFFFFFC000000);
+    syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40FE00000000000000);
+    syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'hFFFFFFFFFFFFFFFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 8'h83) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_enc.sv
index 9584abe..cf81530 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_72_64_enc.sv
@@ -11,14 +11,14 @@
 
   always_comb begin : p_encode
     data_o = 72'(data_i);
-    data_o[64] = ~^(data_o & 72'h00AB55555556AAAD5B);
-    data_o[65] = ~^(data_o & 72'h00CD9999999B33366D);
-    data_o[66] = ~^(data_o & 72'h00F1E1E1E1E3C3C78E);
-    data_o[67] = ~^(data_o & 72'h0001FE01FE03FC07F0);
-    data_o[68] = ~^(data_o & 72'h0001FFFE0003FFF800);
-    data_o[69] = ~^(data_o & 72'h0001FFFFFFFC000000);
-    data_o[70] = ~^(data_o & 72'h00FE00000000000000);
-    data_o[71] = ~^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
+    data_o[64] = 0 ^ ^(data_o & 72'h00AB55555556AAAD5B);
+    data_o[65] = 1 ^ ^(data_o & 72'h00CD9999999B33366D);
+    data_o[66] = 0 ^ ^(data_o & 72'h00F1E1E1E1E3C3C78E);
+    data_o[67] = 1 ^ ^(data_o & 72'h0001FE01FE03FC07F0);
+    data_o[68] = 0 ^ ^(data_o & 72'h0001FFFE0003FFF800);
+    data_o[69] = 1 ^ ^(data_o & 72'h0001FFFFFFFC000000);
+    data_o[70] = 0 ^ ^(data_o & 72'h00FE00000000000000);
+    data_o[71] = 1 ^ ^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
   end
 
 endmodule : prim_secded_inv_hamming_72_64_enc
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_dec.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_dec.sv
index da1368b..c2aa75e 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_dec.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_dec.sv
@@ -13,14 +13,14 @@
 
   always_comb begin : p_encode
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 76'hFF00000000000000000) & 76'h01AAB55555556AAAD5B);
-    syndrome_o[1] = ^((data_i ^ 76'hFF00000000000000000) & 76'h02CCD9999999B33366D);
-    syndrome_o[2] = ^((data_i ^ 76'hFF00000000000000000) & 76'h040F1E1E1E1E3C3C78E);
-    syndrome_o[3] = ^((data_i ^ 76'hFF00000000000000000) & 76'h08F01FE01FE03FC07F0);
-    syndrome_o[4] = ^((data_i ^ 76'hFF00000000000000000) & 76'h10001FFFE0003FFF800);
-    syndrome_o[5] = ^((data_i ^ 76'hFF00000000000000000) & 76'h20001FFFFFFFC000000);
-    syndrome_o[6] = ^((data_i ^ 76'hFF00000000000000000) & 76'h40FFE00000000000000);
-    syndrome_o[7] = ^((data_i ^ 76'hFF00000000000000000) & 76'hFFFFFFFFFFFFFFFFFFF);
+    syndrome_o[0] = ^((data_i ^ 76'hAA00000000000000000) & 76'h01AAB55555556AAAD5B);
+    syndrome_o[1] = ^((data_i ^ 76'hAA00000000000000000) & 76'h02CCD9999999B33366D);
+    syndrome_o[2] = ^((data_i ^ 76'hAA00000000000000000) & 76'h040F1E1E1E1E3C3C78E);
+    syndrome_o[3] = ^((data_i ^ 76'hAA00000000000000000) & 76'h08F01FE01FE03FC07F0);
+    syndrome_o[4] = ^((data_i ^ 76'hAA00000000000000000) & 76'h10001FFFE0003FFF800);
+    syndrome_o[5] = ^((data_i ^ 76'hAA00000000000000000) & 76'h20001FFFFFFFC000000);
+    syndrome_o[6] = ^((data_i ^ 76'hAA00000000000000000) & 76'h40FFE00000000000000);
+    syndrome_o[7] = ^((data_i ^ 76'hAA00000000000000000) & 76'hFFFFFFFFFFFFFFFFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 8'h83) ^ data_i[0];
diff --git a/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_enc.sv b/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_enc.sv
index c37f374..a9c08ef 100644
--- a/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_enc.sv
+++ b/hw/ip/prim/rtl/prim_secded_inv_hamming_76_68_enc.sv
@@ -11,14 +11,14 @@
 
   always_comb begin : p_encode
     data_o = 76'(data_i);
-    data_o[68] = ~^(data_o & 76'h00AAB55555556AAAD5B);
-    data_o[69] = ~^(data_o & 76'h00CCD9999999B33366D);
-    data_o[70] = ~^(data_o & 76'h000F1E1E1E1E3C3C78E);
-    data_o[71] = ~^(data_o & 76'h00F01FE01FE03FC07F0);
-    data_o[72] = ~^(data_o & 76'h00001FFFE0003FFF800);
-    data_o[73] = ~^(data_o & 76'h00001FFFFFFFC000000);
-    data_o[74] = ~^(data_o & 76'h00FFE00000000000000);
-    data_o[75] = ~^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
+    data_o[68] = 0 ^ ^(data_o & 76'h00AAB55555556AAAD5B);
+    data_o[69] = 1 ^ ^(data_o & 76'h00CCD9999999B33366D);
+    data_o[70] = 0 ^ ^(data_o & 76'h000F1E1E1E1E3C3C78E);
+    data_o[71] = 1 ^ ^(data_o & 76'h00F01FE01FE03FC07F0);
+    data_o[72] = 0 ^ ^(data_o & 76'h00001FFFE0003FFF800);
+    data_o[73] = 1 ^ ^(data_o & 76'h00001FFFFFFFC000000);
+    data_o[74] = 0 ^ ^(data_o & 76'h00FFE00000000000000);
+    data_o[75] = 1 ^ ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
   end
 
 endmodule : prim_secded_inv_hamming_76_68_enc
diff --git a/hw/ip/prim/rtl/prim_secded_pkg.sv b/hw/ip/prim/rtl/prim_secded_pkg.sv
index 005ff10..21f5297 100644
--- a/hw/ip/prim/rtl/prim_secded_pkg.sv
+++ b/hw/ip/prim/rtl/prim_secded_pkg.sv
@@ -78,108 +78,162 @@
     endcase
   endfunction
 
+  parameter logic [5:0] Secded2216ZeroEcc = 6'h0;
+  parameter logic [21:0] Secded2216ZeroWord = 22'h0;
+
   typedef struct packed {
     logic [15:0] data;
     logic [5:0] syndrome;
     logic [1:0]  err;
   } secded_22_16_t;
 
+  parameter logic [5:0] Secded2822ZeroEcc = 6'h0;
+  parameter logic [27:0] Secded2822ZeroWord = 28'h0;
+
   typedef struct packed {
     logic [21:0] data;
     logic [5:0] syndrome;
     logic [1:0]  err;
   } secded_28_22_t;
 
+  parameter logic [6:0] Secded3932ZeroEcc = 7'h0;
+  parameter logic [38:0] Secded3932ZeroWord = 39'h0;
+
   typedef struct packed {
     logic [31:0] data;
     logic [6:0] syndrome;
     logic [1:0]  err;
   } secded_39_32_t;
 
+  parameter logic [6:0] Secded6457ZeroEcc = 7'h0;
+  parameter logic [63:0] Secded6457ZeroWord = 64'h0;
+
   typedef struct packed {
     logic [56:0] data;
     logic [6:0] syndrome;
     logic [1:0]  err;
   } secded_64_57_t;
 
+  parameter logic [7:0] Secded7264ZeroEcc = 8'h0;
+  parameter logic [71:0] Secded7264ZeroWord = 72'h0;
+
   typedef struct packed {
     logic [63:0] data;
     logic [7:0] syndrome;
     logic [1:0]  err;
   } secded_72_64_t;
 
+  parameter logic [5:0] SecdedHamming2216ZeroEcc = 6'h0;
+  parameter logic [21:0] SecdedHamming2216ZeroWord = 22'h0;
+
   typedef struct packed {
     logic [15:0] data;
     logic [5:0] syndrome;
     logic [1:0]  err;
   } secded_hamming_22_16_t;
 
+  parameter logic [6:0] SecdedHamming3932ZeroEcc = 7'h0;
+  parameter logic [38:0] SecdedHamming3932ZeroWord = 39'h0;
+
   typedef struct packed {
     logic [31:0] data;
     logic [6:0] syndrome;
     logic [1:0]  err;
   } secded_hamming_39_32_t;
 
+  parameter logic [7:0] SecdedHamming7264ZeroEcc = 8'h0;
+  parameter logic [71:0] SecdedHamming7264ZeroWord = 72'h0;
+
   typedef struct packed {
     logic [63:0] data;
     logic [7:0] syndrome;
     logic [1:0]  err;
   } secded_hamming_72_64_t;
 
+  parameter logic [7:0] SecdedHamming7668ZeroEcc = 8'h0;
+  parameter logic [75:0] SecdedHamming7668ZeroWord = 76'h0;
+
   typedef struct packed {
     logic [67:0] data;
     logic [7:0] syndrome;
     logic [1:0]  err;
   } secded_hamming_76_68_t;
 
+  parameter logic [5:0] SecdedInv2216ZeroEcc = 6'h2A;
+  parameter logic [21:0] SecdedInv2216ZeroWord = 22'h2A0000;
+
   typedef struct packed {
     logic [15:0] data;
     logic [5:0] syndrome;
     logic [1:0]  err;
   } secded_inv_22_16_t;
 
+  parameter logic [5:0] SecdedInv2822ZeroEcc = 6'h2A;
+  parameter logic [27:0] SecdedInv2822ZeroWord = 28'hA800000;
+
   typedef struct packed {
     logic [21:0] data;
     logic [5:0] syndrome;
     logic [1:0]  err;
   } secded_inv_28_22_t;
 
+  parameter logic [6:0] SecdedInv3932ZeroEcc = 7'h2A;
+  parameter logic [38:0] SecdedInv3932ZeroWord = 39'h2A00000000;
+
   typedef struct packed {
     logic [31:0] data;
     logic [6:0] syndrome;
     logic [1:0]  err;
   } secded_inv_39_32_t;
 
+  parameter logic [6:0] SecdedInv6457ZeroEcc = 7'h2A;
+  parameter logic [63:0] SecdedInv6457ZeroWord = 64'h5400000000000000;
+
   typedef struct packed {
     logic [56:0] data;
     logic [6:0] syndrome;
     logic [1:0]  err;
   } secded_inv_64_57_t;
 
+  parameter logic [7:0] SecdedInv7264ZeroEcc = 8'hAA;
+  parameter logic [71:0] SecdedInv7264ZeroWord = 72'hAA0000000000000000;
+
   typedef struct packed {
     logic [63:0] data;
     logic [7:0] syndrome;
     logic [1:0]  err;
   } secded_inv_72_64_t;
 
+  parameter logic [5:0] SecdedInvHamming2216ZeroEcc = 6'h2A;
+  parameter logic [21:0] SecdedInvHamming2216ZeroWord = 22'h2A0000;
+
   typedef struct packed {
     logic [15:0] data;
     logic [5:0] syndrome;
     logic [1:0]  err;
   } secded_inv_hamming_22_16_t;
 
+  parameter logic [6:0] SecdedInvHamming3932ZeroEcc = 7'h2A;
+  parameter logic [38:0] SecdedInvHamming3932ZeroWord = 39'h2A00000000;
+
   typedef struct packed {
     logic [31:0] data;
     logic [6:0] syndrome;
     logic [1:0]  err;
   } secded_inv_hamming_39_32_t;
 
+  parameter logic [7:0] SecdedInvHamming7264ZeroEcc = 8'hAA;
+  parameter logic [71:0] SecdedInvHamming7264ZeroWord = 72'hAA0000000000000000;
+
   typedef struct packed {
     logic [63:0] data;
     logic [7:0] syndrome;
     logic [1:0]  err;
   } secded_inv_hamming_72_64_t;
 
+  parameter logic [7:0] SecdedInvHamming7668ZeroEcc = 8'hAA;
+  parameter logic [75:0] SecdedInvHamming7668ZeroWord = 76'hAA00000000000000000;
+
   typedef struct packed {
     logic [67:0] data;
     logic [7:0] syndrome;
@@ -190,12 +244,12 @@
       prim_secded_22_16_enc (logic [15:0] data_i);
     logic [21:0] data_o;
     data_o = 22'(data_i);
-    data_o[16] = ^(data_o & 22'h00496E);
-    data_o[17] = ^(data_o & 22'h00F20B);
-    data_o[18] = ^(data_o & 22'h008ED8);
-    data_o[19] = ^(data_o & 22'h007714);
-    data_o[20] = ^(data_o & 22'h00ACA5);
-    data_o[21] = ^(data_o & 22'h0011F3);
+    data_o[16] = 0 ^ ^(data_o & 22'h00496E);
+    data_o[17] = 0 ^ ^(data_o & 22'h00F20B);
+    data_o[18] = 0 ^ ^(data_o & 22'h008ED8);
+    data_o[19] = 0 ^ ^(data_o & 22'h007714);
+    data_o[20] = 0 ^ ^(data_o & 22'h00ACA5);
+    data_o[21] = 0 ^ ^(data_o & 22'h0011F3);
     return data_o;
   endfunction
 
@@ -248,12 +302,12 @@
       prim_secded_28_22_enc (logic [21:0] data_i);
     logic [27:0] data_o;
     data_o = 28'(data_i);
-    data_o[22] = ^(data_o & 28'h03003FF);
-    data_o[23] = ^(data_o & 28'h010FC0F);
-    data_o[24] = ^(data_o & 28'h0271C71);
-    data_o[25] = ^(data_o & 28'h03B6592);
-    data_o[26] = ^(data_o & 28'h03DAAA4);
-    data_o[27] = ^(data_o & 28'h03ED348);
+    data_o[22] = 0 ^ ^(data_o & 28'h03003FF);
+    data_o[23] = 0 ^ ^(data_o & 28'h010FC0F);
+    data_o[24] = 0 ^ ^(data_o & 28'h0271C71);
+    data_o[25] = 0 ^ ^(data_o & 28'h03B6592);
+    data_o[26] = 0 ^ ^(data_o & 28'h03DAAA4);
+    data_o[27] = 0 ^ ^(data_o & 28'h03ED348);
     return data_o;
   endfunction
 
@@ -312,13 +366,13 @@
       prim_secded_39_32_enc (logic [31:0] data_i);
     logic [38:0] data_o;
     data_o = 39'(data_i);
-    data_o[32] = ^(data_o & 39'h002606BD25);
-    data_o[33] = ^(data_o & 39'h00DEBA8050);
-    data_o[34] = ^(data_o & 39'h00413D89AA);
-    data_o[35] = ^(data_o & 39'h0031234ED1);
-    data_o[36] = ^(data_o & 39'h00C2C1323B);
-    data_o[37] = ^(data_o & 39'h002DCC624C);
-    data_o[38] = ^(data_o & 39'h0098505586);
+    data_o[32] = 0 ^ ^(data_o & 39'h002606BD25);
+    data_o[33] = 0 ^ ^(data_o & 39'h00DEBA8050);
+    data_o[34] = 0 ^ ^(data_o & 39'h00413D89AA);
+    data_o[35] = 0 ^ ^(data_o & 39'h0031234ED1);
+    data_o[36] = 0 ^ ^(data_o & 39'h00C2C1323B);
+    data_o[37] = 0 ^ ^(data_o & 39'h002DCC624C);
+    data_o[38] = 0 ^ ^(data_o & 39'h0098505586);
     return data_o;
   endfunction
 
@@ -388,13 +442,13 @@
       prim_secded_64_57_enc (logic [56:0] data_i);
     logic [63:0] data_o;
     data_o = 64'(data_i);
-    data_o[57] = ^(data_o & 64'h0103FFF800007FFF);
-    data_o[58] = ^(data_o & 64'h017C1FF801FF801F);
-    data_o[59] = ^(data_o & 64'h01BDE1F87E0781E1);
-    data_o[60] = ^(data_o & 64'h01DEEE3B8E388E22);
-    data_o[61] = ^(data_o & 64'h01EF76CDB2C93244);
-    data_o[62] = ^(data_o & 64'h01F7BB56D5525488);
-    data_o[63] = ^(data_o & 64'h01FBDDA769A46910);
+    data_o[57] = 0 ^ ^(data_o & 64'h0103FFF800007FFF);
+    data_o[58] = 0 ^ ^(data_o & 64'h017C1FF801FF801F);
+    data_o[59] = 0 ^ ^(data_o & 64'h01BDE1F87E0781E1);
+    data_o[60] = 0 ^ ^(data_o & 64'h01DEEE3B8E388E22);
+    data_o[61] = 0 ^ ^(data_o & 64'h01EF76CDB2C93244);
+    data_o[62] = 0 ^ ^(data_o & 64'h01F7BB56D5525488);
+    data_o[63] = 0 ^ ^(data_o & 64'h01FBDDA769A46910);
     return data_o;
   endfunction
 
@@ -489,14 +543,14 @@
       prim_secded_72_64_enc (logic [63:0] data_i);
     logic [71:0] data_o;
     data_o = 72'(data_i);
-    data_o[64] = ^(data_o & 72'h00B9000000001FFFFF);
-    data_o[65] = ^(data_o & 72'h005E00000FFFE0003F);
-    data_o[66] = ^(data_o & 72'h0067003FF003E007C1);
-    data_o[67] = ^(data_o & 72'h00CD0FC0F03C207842);
-    data_o[68] = ^(data_o & 72'h00B671C711C4438884);
-    data_o[69] = ^(data_o & 72'h00B5B65926488C9108);
-    data_o[70] = ^(data_o & 72'h00CBDAAA4A91152210);
-    data_o[71] = ^(data_o & 72'h007AED348D221A4420);
+    data_o[64] = 0 ^ ^(data_o & 72'h00B9000000001FFFFF);
+    data_o[65] = 0 ^ ^(data_o & 72'h005E00000FFFE0003F);
+    data_o[66] = 0 ^ ^(data_o & 72'h0067003FF003E007C1);
+    data_o[67] = 0 ^ ^(data_o & 72'h00CD0FC0F03C207842);
+    data_o[68] = 0 ^ ^(data_o & 72'h00B671C711C4438884);
+    data_o[69] = 0 ^ ^(data_o & 72'h00B5B65926488C9108);
+    data_o[70] = 0 ^ ^(data_o & 72'h00CBDAAA4A91152210);
+    data_o[71] = 0 ^ ^(data_o & 72'h007AED348D221A4420);
     return data_o;
   endfunction
 
@@ -599,12 +653,12 @@
       prim_secded_hamming_22_16_enc (logic [15:0] data_i);
     logic [21:0] data_o;
     data_o = 22'(data_i);
-    data_o[16] = ^(data_o & 22'h00AD5B);
-    data_o[17] = ^(data_o & 22'h00366D);
-    data_o[18] = ^(data_o & 22'h00C78E);
-    data_o[19] = ^(data_o & 22'h0007F0);
-    data_o[20] = ^(data_o & 22'h00F800);
-    data_o[21] = ^(data_o & 22'h1FFFFF);
+    data_o[16] = 0 ^ ^(data_o & 22'h00AD5B);
+    data_o[17] = 0 ^ ^(data_o & 22'h00366D);
+    data_o[18] = 0 ^ ^(data_o & 22'h00C78E);
+    data_o[19] = 0 ^ ^(data_o & 22'h0007F0);
+    data_o[20] = 0 ^ ^(data_o & 22'h00F800);
+    data_o[21] = 0 ^ ^(data_o & 22'h1FFFFF);
     return data_o;
   endfunction
 
@@ -657,13 +711,13 @@
       prim_secded_hamming_39_32_enc (logic [31:0] data_i);
     logic [38:0] data_o;
     data_o = 39'(data_i);
-    data_o[32] = ^(data_o & 39'h0056AAAD5B);
-    data_o[33] = ^(data_o & 39'h009B33366D);
-    data_o[34] = ^(data_o & 39'h00E3C3C78E);
-    data_o[35] = ^(data_o & 39'h0003FC07F0);
-    data_o[36] = ^(data_o & 39'h0003FFF800);
-    data_o[37] = ^(data_o & 39'h00FC000000);
-    data_o[38] = ^(data_o & 39'h3FFFFFFFFF);
+    data_o[32] = 0 ^ ^(data_o & 39'h0056AAAD5B);
+    data_o[33] = 0 ^ ^(data_o & 39'h009B33366D);
+    data_o[34] = 0 ^ ^(data_o & 39'h00E3C3C78E);
+    data_o[35] = 0 ^ ^(data_o & 39'h0003FC07F0);
+    data_o[36] = 0 ^ ^(data_o & 39'h0003FFF800);
+    data_o[37] = 0 ^ ^(data_o & 39'h00FC000000);
+    data_o[38] = 0 ^ ^(data_o & 39'h3FFFFFFFFF);
     return data_o;
   endfunction
 
@@ -733,14 +787,14 @@
       prim_secded_hamming_72_64_enc (logic [63:0] data_i);
     logic [71:0] data_o;
     data_o = 72'(data_i);
-    data_o[64] = ^(data_o & 72'h00AB55555556AAAD5B);
-    data_o[65] = ^(data_o & 72'h00CD9999999B33366D);
-    data_o[66] = ^(data_o & 72'h00F1E1E1E1E3C3C78E);
-    data_o[67] = ^(data_o & 72'h0001FE01FE03FC07F0);
-    data_o[68] = ^(data_o & 72'h0001FFFE0003FFF800);
-    data_o[69] = ^(data_o & 72'h0001FFFFFFFC000000);
-    data_o[70] = ^(data_o & 72'h00FE00000000000000);
-    data_o[71] = ^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
+    data_o[64] = 0 ^ ^(data_o & 72'h00AB55555556AAAD5B);
+    data_o[65] = 0 ^ ^(data_o & 72'h00CD9999999B33366D);
+    data_o[66] = 0 ^ ^(data_o & 72'h00F1E1E1E1E3C3C78E);
+    data_o[67] = 0 ^ ^(data_o & 72'h0001FE01FE03FC07F0);
+    data_o[68] = 0 ^ ^(data_o & 72'h0001FFFE0003FFF800);
+    data_o[69] = 0 ^ ^(data_o & 72'h0001FFFFFFFC000000);
+    data_o[70] = 0 ^ ^(data_o & 72'h00FE00000000000000);
+    data_o[71] = 0 ^ ^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
     return data_o;
   endfunction
 
@@ -843,14 +897,14 @@
       prim_secded_hamming_76_68_enc (logic [67:0] data_i);
     logic [75:0] data_o;
     data_o = 76'(data_i);
-    data_o[68] = ^(data_o & 76'h00AAB55555556AAAD5B);
-    data_o[69] = ^(data_o & 76'h00CCD9999999B33366D);
-    data_o[70] = ^(data_o & 76'h000F1E1E1E1E3C3C78E);
-    data_o[71] = ^(data_o & 76'h00F01FE01FE03FC07F0);
-    data_o[72] = ^(data_o & 76'h00001FFFE0003FFF800);
-    data_o[73] = ^(data_o & 76'h00001FFFFFFFC000000);
-    data_o[74] = ^(data_o & 76'h00FFE00000000000000);
-    data_o[75] = ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
+    data_o[68] = 0 ^ ^(data_o & 76'h00AAB55555556AAAD5B);
+    data_o[69] = 0 ^ ^(data_o & 76'h00CCD9999999B33366D);
+    data_o[70] = 0 ^ ^(data_o & 76'h000F1E1E1E1E3C3C78E);
+    data_o[71] = 0 ^ ^(data_o & 76'h00F01FE01FE03FC07F0);
+    data_o[72] = 0 ^ ^(data_o & 76'h00001FFFE0003FFF800);
+    data_o[73] = 0 ^ ^(data_o & 76'h00001FFFFFFFC000000);
+    data_o[74] = 0 ^ ^(data_o & 76'h00FFE00000000000000);
+    data_o[75] = 0 ^ ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
     return data_o;
   endfunction
 
@@ -957,12 +1011,12 @@
       prim_secded_inv_22_16_enc (logic [15:0] data_i);
     logic [21:0] data_o;
     data_o = 22'(data_i);
-    data_o[16] = ~^(data_o & 22'h00496E);
-    data_o[17] = ~^(data_o & 22'h00F20B);
-    data_o[18] = ~^(data_o & 22'h008ED8);
-    data_o[19] = ~^(data_o & 22'h007714);
-    data_o[20] = ~^(data_o & 22'h00ACA5);
-    data_o[21] = ~^(data_o & 22'h0011F3);
+    data_o[16] = 0 ^ ^(data_o & 22'h00496E);
+    data_o[17] = 1 ^ ^(data_o & 22'h00F20B);
+    data_o[18] = 0 ^ ^(data_o & 22'h008ED8);
+    data_o[19] = 1 ^ ^(data_o & 22'h007714);
+    data_o[20] = 0 ^ ^(data_o & 22'h00ACA5);
+    data_o[21] = 1 ^ ^(data_o & 22'h0011F3);
     return data_o;
   endfunction
 
@@ -975,12 +1029,12 @@
     secded_inv_22_16_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 22'h3F0000) & 22'h01496E);
-    syndrome_o[1] = ^((data_i ^ 22'h3F0000) & 22'h02F20B);
-    syndrome_o[2] = ^((data_i ^ 22'h3F0000) & 22'h048ED8);
-    syndrome_o[3] = ^((data_i ^ 22'h3F0000) & 22'h087714);
-    syndrome_o[4] = ^((data_i ^ 22'h3F0000) & 22'h10ACA5);
-    syndrome_o[5] = ^((data_i ^ 22'h3F0000) & 22'h2011F3);
+    syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01496E);
+    syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02F20B);
+    syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h048ED8);
+    syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h087714);
+    syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10ACA5);
+    syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h2011F3);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 6'h32) ^ data_i[0];
@@ -1015,12 +1069,12 @@
       prim_secded_inv_28_22_enc (logic [21:0] data_i);
     logic [27:0] data_o;
     data_o = 28'(data_i);
-    data_o[22] = ~^(data_o & 28'h03003FF);
-    data_o[23] = ~^(data_o & 28'h010FC0F);
-    data_o[24] = ~^(data_o & 28'h0271C71);
-    data_o[25] = ~^(data_o & 28'h03B6592);
-    data_o[26] = ~^(data_o & 28'h03DAAA4);
-    data_o[27] = ~^(data_o & 28'h03ED348);
+    data_o[22] = 0 ^ ^(data_o & 28'h03003FF);
+    data_o[23] = 1 ^ ^(data_o & 28'h010FC0F);
+    data_o[24] = 0 ^ ^(data_o & 28'h0271C71);
+    data_o[25] = 1 ^ ^(data_o & 28'h03B6592);
+    data_o[26] = 0 ^ ^(data_o & 28'h03DAAA4);
+    data_o[27] = 1 ^ ^(data_o & 28'h03ED348);
     return data_o;
   endfunction
 
@@ -1033,12 +1087,12 @@
     secded_inv_28_22_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 28'hFC00000) & 28'h07003FF);
-    syndrome_o[1] = ^((data_i ^ 28'hFC00000) & 28'h090FC0F);
-    syndrome_o[2] = ^((data_i ^ 28'hFC00000) & 28'h1271C71);
-    syndrome_o[3] = ^((data_i ^ 28'hFC00000) & 28'h23B6592);
-    syndrome_o[4] = ^((data_i ^ 28'hFC00000) & 28'h43DAAA4);
-    syndrome_o[5] = ^((data_i ^ 28'hFC00000) & 28'h83ED348);
+    syndrome_o[0] = ^((data_i ^ 28'hA800000) & 28'h07003FF);
+    syndrome_o[1] = ^((data_i ^ 28'hA800000) & 28'h090FC0F);
+    syndrome_o[2] = ^((data_i ^ 28'hA800000) & 28'h1271C71);
+    syndrome_o[3] = ^((data_i ^ 28'hA800000) & 28'h23B6592);
+    syndrome_o[4] = ^((data_i ^ 28'hA800000) & 28'h43DAAA4);
+    syndrome_o[5] = ^((data_i ^ 28'hA800000) & 28'h83ED348);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 6'h7) ^ data_i[0];
@@ -1079,13 +1133,13 @@
       prim_secded_inv_39_32_enc (logic [31:0] data_i);
     logic [38:0] data_o;
     data_o = 39'(data_i);
-    data_o[32] = ~^(data_o & 39'h002606BD25);
-    data_o[33] = ~^(data_o & 39'h00DEBA8050);
-    data_o[34] = ~^(data_o & 39'h00413D89AA);
-    data_o[35] = ~^(data_o & 39'h0031234ED1);
-    data_o[36] = ~^(data_o & 39'h00C2C1323B);
-    data_o[37] = ~^(data_o & 39'h002DCC624C);
-    data_o[38] = ~^(data_o & 39'h0098505586);
+    data_o[32] = 0 ^ ^(data_o & 39'h002606BD25);
+    data_o[33] = 1 ^ ^(data_o & 39'h00DEBA8050);
+    data_o[34] = 0 ^ ^(data_o & 39'h00413D89AA);
+    data_o[35] = 1 ^ ^(data_o & 39'h0031234ED1);
+    data_o[36] = 0 ^ ^(data_o & 39'h00C2C1323B);
+    data_o[37] = 1 ^ ^(data_o & 39'h002DCC624C);
+    data_o[38] = 0 ^ ^(data_o & 39'h0098505586);
     return data_o;
   endfunction
 
@@ -1098,13 +1152,13 @@
     secded_inv_39_32_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 39'h7F00000000) & 39'h012606BD25);
-    syndrome_o[1] = ^((data_i ^ 39'h7F00000000) & 39'h02DEBA8050);
-    syndrome_o[2] = ^((data_i ^ 39'h7F00000000) & 39'h04413D89AA);
-    syndrome_o[3] = ^((data_i ^ 39'h7F00000000) & 39'h0831234ED1);
-    syndrome_o[4] = ^((data_i ^ 39'h7F00000000) & 39'h10C2C1323B);
-    syndrome_o[5] = ^((data_i ^ 39'h7F00000000) & 39'h202DCC624C);
-    syndrome_o[6] = ^((data_i ^ 39'h7F00000000) & 39'h4098505586);
+    syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h012606BD25);
+    syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h02DEBA8050);
+    syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04413D89AA);
+    syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0831234ED1);
+    syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h10C2C1323B);
+    syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h202DCC624C);
+    syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h4098505586);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 7'h19) ^ data_i[0];
@@ -1155,13 +1209,13 @@
       prim_secded_inv_64_57_enc (logic [56:0] data_i);
     logic [63:0] data_o;
     data_o = 64'(data_i);
-    data_o[57] = ~^(data_o & 64'h0103FFF800007FFF);
-    data_o[58] = ~^(data_o & 64'h017C1FF801FF801F);
-    data_o[59] = ~^(data_o & 64'h01BDE1F87E0781E1);
-    data_o[60] = ~^(data_o & 64'h01DEEE3B8E388E22);
-    data_o[61] = ~^(data_o & 64'h01EF76CDB2C93244);
-    data_o[62] = ~^(data_o & 64'h01F7BB56D5525488);
-    data_o[63] = ~^(data_o & 64'h01FBDDA769A46910);
+    data_o[57] = 0 ^ ^(data_o & 64'h0103FFF800007FFF);
+    data_o[58] = 1 ^ ^(data_o & 64'h017C1FF801FF801F);
+    data_o[59] = 0 ^ ^(data_o & 64'h01BDE1F87E0781E1);
+    data_o[60] = 1 ^ ^(data_o & 64'h01DEEE3B8E388E22);
+    data_o[61] = 0 ^ ^(data_o & 64'h01EF76CDB2C93244);
+    data_o[62] = 1 ^ ^(data_o & 64'h01F7BB56D5525488);
+    data_o[63] = 0 ^ ^(data_o & 64'h01FBDDA769A46910);
     return data_o;
   endfunction
 
@@ -1174,13 +1228,13 @@
     secded_inv_64_57_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 64'hFE00000000000000) & 64'h0303FFF800007FFF);
-    syndrome_o[1] = ^((data_i ^ 64'hFE00000000000000) & 64'h057C1FF801FF801F);
-    syndrome_o[2] = ^((data_i ^ 64'hFE00000000000000) & 64'h09BDE1F87E0781E1);
-    syndrome_o[3] = ^((data_i ^ 64'hFE00000000000000) & 64'h11DEEE3B8E388E22);
-    syndrome_o[4] = ^((data_i ^ 64'hFE00000000000000) & 64'h21EF76CDB2C93244);
-    syndrome_o[5] = ^((data_i ^ 64'hFE00000000000000) & 64'h41F7BB56D5525488);
-    syndrome_o[6] = ^((data_i ^ 64'hFE00000000000000) & 64'h81FBDDA769A46910);
+    syndrome_o[0] = ^((data_i ^ 64'h5400000000000000) & 64'h0303FFF800007FFF);
+    syndrome_o[1] = ^((data_i ^ 64'h5400000000000000) & 64'h057C1FF801FF801F);
+    syndrome_o[2] = ^((data_i ^ 64'h5400000000000000) & 64'h09BDE1F87E0781E1);
+    syndrome_o[3] = ^((data_i ^ 64'h5400000000000000) & 64'h11DEEE3B8E388E22);
+    syndrome_o[4] = ^((data_i ^ 64'h5400000000000000) & 64'h21EF76CDB2C93244);
+    syndrome_o[5] = ^((data_i ^ 64'h5400000000000000) & 64'h41F7BB56D5525488);
+    syndrome_o[6] = ^((data_i ^ 64'h5400000000000000) & 64'h81FBDDA769A46910);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 7'h7) ^ data_i[0];
@@ -1256,14 +1310,14 @@
       prim_secded_inv_72_64_enc (logic [63:0] data_i);
     logic [71:0] data_o;
     data_o = 72'(data_i);
-    data_o[64] = ~^(data_o & 72'h00B9000000001FFFFF);
-    data_o[65] = ~^(data_o & 72'h005E00000FFFE0003F);
-    data_o[66] = ~^(data_o & 72'h0067003FF003E007C1);
-    data_o[67] = ~^(data_o & 72'h00CD0FC0F03C207842);
-    data_o[68] = ~^(data_o & 72'h00B671C711C4438884);
-    data_o[69] = ~^(data_o & 72'h00B5B65926488C9108);
-    data_o[70] = ~^(data_o & 72'h00CBDAAA4A91152210);
-    data_o[71] = ~^(data_o & 72'h007AED348D221A4420);
+    data_o[64] = 0 ^ ^(data_o & 72'h00B9000000001FFFFF);
+    data_o[65] = 1 ^ ^(data_o & 72'h005E00000FFFE0003F);
+    data_o[66] = 0 ^ ^(data_o & 72'h0067003FF003E007C1);
+    data_o[67] = 1 ^ ^(data_o & 72'h00CD0FC0F03C207842);
+    data_o[68] = 0 ^ ^(data_o & 72'h00B671C711C4438884);
+    data_o[69] = 1 ^ ^(data_o & 72'h00B5B65926488C9108);
+    data_o[70] = 0 ^ ^(data_o & 72'h00CBDAAA4A91152210);
+    data_o[71] = 1 ^ ^(data_o & 72'h007AED348D221A4420);
     return data_o;
   endfunction
 
@@ -1276,14 +1330,14 @@
     secded_inv_72_64_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 72'hFF0000000000000000) & 72'h01B9000000001FFFFF);
-    syndrome_o[1] = ^((data_i ^ 72'hFF0000000000000000) & 72'h025E00000FFFE0003F);
-    syndrome_o[2] = ^((data_i ^ 72'hFF0000000000000000) & 72'h0467003FF003E007C1);
-    syndrome_o[3] = ^((data_i ^ 72'hFF0000000000000000) & 72'h08CD0FC0F03C207842);
-    syndrome_o[4] = ^((data_i ^ 72'hFF0000000000000000) & 72'h10B671C711C4438884);
-    syndrome_o[5] = ^((data_i ^ 72'hFF0000000000000000) & 72'h20B5B65926488C9108);
-    syndrome_o[6] = ^((data_i ^ 72'hFF0000000000000000) & 72'h40CBDAAA4A91152210);
-    syndrome_o[7] = ^((data_i ^ 72'hFF0000000000000000) & 72'h807AED348D221A4420);
+    syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01B9000000001FFFFF);
+    syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h025E00000FFFE0003F);
+    syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0467003FF003E007C1);
+    syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h08CD0FC0F03C207842);
+    syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h10B671C711C4438884);
+    syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h20B5B65926488C9108);
+    syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40CBDAAA4A91152210);
+    syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'h807AED348D221A4420);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 8'h7) ^ data_i[0];
@@ -1366,12 +1420,12 @@
       prim_secded_inv_hamming_22_16_enc (logic [15:0] data_i);
     logic [21:0] data_o;
     data_o = 22'(data_i);
-    data_o[16] = ~^(data_o & 22'h00AD5B);
-    data_o[17] = ~^(data_o & 22'h00366D);
-    data_o[18] = ~^(data_o & 22'h00C78E);
-    data_o[19] = ~^(data_o & 22'h0007F0);
-    data_o[20] = ~^(data_o & 22'h00F800);
-    data_o[21] = ~^(data_o & 22'h1FFFFF);
+    data_o[16] = 0 ^ ^(data_o & 22'h00AD5B);
+    data_o[17] = 1 ^ ^(data_o & 22'h00366D);
+    data_o[18] = 0 ^ ^(data_o & 22'h00C78E);
+    data_o[19] = 1 ^ ^(data_o & 22'h0007F0);
+    data_o[20] = 0 ^ ^(data_o & 22'h00F800);
+    data_o[21] = 1 ^ ^(data_o & 22'h1FFFFF);
     return data_o;
   endfunction
 
@@ -1384,12 +1438,12 @@
     secded_inv_hamming_22_16_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 22'h3F0000) & 22'h01AD5B);
-    syndrome_o[1] = ^((data_i ^ 22'h3F0000) & 22'h02366D);
-    syndrome_o[2] = ^((data_i ^ 22'h3F0000) & 22'h04C78E);
-    syndrome_o[3] = ^((data_i ^ 22'h3F0000) & 22'h0807F0);
-    syndrome_o[4] = ^((data_i ^ 22'h3F0000) & 22'h10F800);
-    syndrome_o[5] = ^((data_i ^ 22'h3F0000) & 22'h3FFFFF);
+    syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01AD5B);
+    syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02366D);
+    syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h04C78E);
+    syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h0807F0);
+    syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10F800);
+    syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h3FFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 6'h23) ^ data_i[0];
@@ -1424,13 +1478,13 @@
       prim_secded_inv_hamming_39_32_enc (logic [31:0] data_i);
     logic [38:0] data_o;
     data_o = 39'(data_i);
-    data_o[32] = ~^(data_o & 39'h0056AAAD5B);
-    data_o[33] = ~^(data_o & 39'h009B33366D);
-    data_o[34] = ~^(data_o & 39'h00E3C3C78E);
-    data_o[35] = ~^(data_o & 39'h0003FC07F0);
-    data_o[36] = ~^(data_o & 39'h0003FFF800);
-    data_o[37] = ~^(data_o & 39'h00FC000000);
-    data_o[38] = ~^(data_o & 39'h3FFFFFFFFF);
+    data_o[32] = 0 ^ ^(data_o & 39'h0056AAAD5B);
+    data_o[33] = 1 ^ ^(data_o & 39'h009B33366D);
+    data_o[34] = 0 ^ ^(data_o & 39'h00E3C3C78E);
+    data_o[35] = 1 ^ ^(data_o & 39'h0003FC07F0);
+    data_o[36] = 0 ^ ^(data_o & 39'h0003FFF800);
+    data_o[37] = 1 ^ ^(data_o & 39'h00FC000000);
+    data_o[38] = 0 ^ ^(data_o & 39'h3FFFFFFFFF);
     return data_o;
   endfunction
 
@@ -1443,13 +1497,13 @@
     secded_inv_hamming_39_32_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 39'h7F00000000) & 39'h0156AAAD5B);
-    syndrome_o[1] = ^((data_i ^ 39'h7F00000000) & 39'h029B33366D);
-    syndrome_o[2] = ^((data_i ^ 39'h7F00000000) & 39'h04E3C3C78E);
-    syndrome_o[3] = ^((data_i ^ 39'h7F00000000) & 39'h0803FC07F0);
-    syndrome_o[4] = ^((data_i ^ 39'h7F00000000) & 39'h1003FFF800);
-    syndrome_o[5] = ^((data_i ^ 39'h7F00000000) & 39'h20FC000000);
-    syndrome_o[6] = ^((data_i ^ 39'h7F00000000) & 39'h7FFFFFFFFF);
+    syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h0156AAAD5B);
+    syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h029B33366D);
+    syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04E3C3C78E);
+    syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0803FC07F0);
+    syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h1003FFF800);
+    syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h20FC000000);
+    syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h7FFFFFFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 7'h43) ^ data_i[0];
@@ -1500,14 +1554,14 @@
       prim_secded_inv_hamming_72_64_enc (logic [63:0] data_i);
     logic [71:0] data_o;
     data_o = 72'(data_i);
-    data_o[64] = ~^(data_o & 72'h00AB55555556AAAD5B);
-    data_o[65] = ~^(data_o & 72'h00CD9999999B33366D);
-    data_o[66] = ~^(data_o & 72'h00F1E1E1E1E3C3C78E);
-    data_o[67] = ~^(data_o & 72'h0001FE01FE03FC07F0);
-    data_o[68] = ~^(data_o & 72'h0001FFFE0003FFF800);
-    data_o[69] = ~^(data_o & 72'h0001FFFFFFFC000000);
-    data_o[70] = ~^(data_o & 72'h00FE00000000000000);
-    data_o[71] = ~^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
+    data_o[64] = 0 ^ ^(data_o & 72'h00AB55555556AAAD5B);
+    data_o[65] = 1 ^ ^(data_o & 72'h00CD9999999B33366D);
+    data_o[66] = 0 ^ ^(data_o & 72'h00F1E1E1E1E3C3C78E);
+    data_o[67] = 1 ^ ^(data_o & 72'h0001FE01FE03FC07F0);
+    data_o[68] = 0 ^ ^(data_o & 72'h0001FFFE0003FFF800);
+    data_o[69] = 1 ^ ^(data_o & 72'h0001FFFFFFFC000000);
+    data_o[70] = 0 ^ ^(data_o & 72'h00FE00000000000000);
+    data_o[71] = 1 ^ ^(data_o & 72'h7FFFFFFFFFFFFFFFFF);
     return data_o;
   endfunction
 
@@ -1520,14 +1574,14 @@
     secded_inv_hamming_72_64_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 72'hFF0000000000000000) & 72'h01AB55555556AAAD5B);
-    syndrome_o[1] = ^((data_i ^ 72'hFF0000000000000000) & 72'h02CD9999999B33366D);
-    syndrome_o[2] = ^((data_i ^ 72'hFF0000000000000000) & 72'h04F1E1E1E1E3C3C78E);
-    syndrome_o[3] = ^((data_i ^ 72'hFF0000000000000000) & 72'h0801FE01FE03FC07F0);
-    syndrome_o[4] = ^((data_i ^ 72'hFF0000000000000000) & 72'h1001FFFE0003FFF800);
-    syndrome_o[5] = ^((data_i ^ 72'hFF0000000000000000) & 72'h2001FFFFFFFC000000);
-    syndrome_o[6] = ^((data_i ^ 72'hFF0000000000000000) & 72'h40FE00000000000000);
-    syndrome_o[7] = ^((data_i ^ 72'hFF0000000000000000) & 72'hFFFFFFFFFFFFFFFFFF);
+    syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01AB55555556AAAD5B);
+    syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h02CD9999999B33366D);
+    syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h04F1E1E1E1E3C3C78E);
+    syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0801FE01FE03FC07F0);
+    syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h1001FFFE0003FFF800);
+    syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h2001FFFFFFFC000000);
+    syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40FE00000000000000);
+    syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'hFFFFFFFFFFFFFFFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 8'h83) ^ data_i[0];
@@ -1610,14 +1664,14 @@
       prim_secded_inv_hamming_76_68_enc (logic [67:0] data_i);
     logic [75:0] data_o;
     data_o = 76'(data_i);
-    data_o[68] = ~^(data_o & 76'h00AAB55555556AAAD5B);
-    data_o[69] = ~^(data_o & 76'h00CCD9999999B33366D);
-    data_o[70] = ~^(data_o & 76'h000F1E1E1E1E3C3C78E);
-    data_o[71] = ~^(data_o & 76'h00F01FE01FE03FC07F0);
-    data_o[72] = ~^(data_o & 76'h00001FFFE0003FFF800);
-    data_o[73] = ~^(data_o & 76'h00001FFFFFFFC000000);
-    data_o[74] = ~^(data_o & 76'h00FFE00000000000000);
-    data_o[75] = ~^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
+    data_o[68] = 0 ^ ^(data_o & 76'h00AAB55555556AAAD5B);
+    data_o[69] = 1 ^ ^(data_o & 76'h00CCD9999999B33366D);
+    data_o[70] = 0 ^ ^(data_o & 76'h000F1E1E1E1E3C3C78E);
+    data_o[71] = 1 ^ ^(data_o & 76'h00F01FE01FE03FC07F0);
+    data_o[72] = 0 ^ ^(data_o & 76'h00001FFFE0003FFF800);
+    data_o[73] = 1 ^ ^(data_o & 76'h00001FFFFFFFC000000);
+    data_o[74] = 0 ^ ^(data_o & 76'h00FFE00000000000000);
+    data_o[75] = 1 ^ ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF);
     return data_o;
   endfunction
 
@@ -1630,14 +1684,14 @@
     secded_inv_hamming_76_68_t dec;
 
     // Syndrome calculation
-    syndrome_o[0] = ^((data_i ^ 76'hFF00000000000000000) & 76'h01AAB55555556AAAD5B);
-    syndrome_o[1] = ^((data_i ^ 76'hFF00000000000000000) & 76'h02CCD9999999B33366D);
-    syndrome_o[2] = ^((data_i ^ 76'hFF00000000000000000) & 76'h040F1E1E1E1E3C3C78E);
-    syndrome_o[3] = ^((data_i ^ 76'hFF00000000000000000) & 76'h08F01FE01FE03FC07F0);
-    syndrome_o[4] = ^((data_i ^ 76'hFF00000000000000000) & 76'h10001FFFE0003FFF800);
-    syndrome_o[5] = ^((data_i ^ 76'hFF00000000000000000) & 76'h20001FFFFFFFC000000);
-    syndrome_o[6] = ^((data_i ^ 76'hFF00000000000000000) & 76'h40FFE00000000000000);
-    syndrome_o[7] = ^((data_i ^ 76'hFF00000000000000000) & 76'hFFFFFFFFFFFFFFFFFFF);
+    syndrome_o[0] = ^((data_i ^ 76'hAA00000000000000000) & 76'h01AAB55555556AAAD5B);
+    syndrome_o[1] = ^((data_i ^ 76'hAA00000000000000000) & 76'h02CCD9999999B33366D);
+    syndrome_o[2] = ^((data_i ^ 76'hAA00000000000000000) & 76'h040F1E1E1E1E3C3C78E);
+    syndrome_o[3] = ^((data_i ^ 76'hAA00000000000000000) & 76'h08F01FE01FE03FC07F0);
+    syndrome_o[4] = ^((data_i ^ 76'hAA00000000000000000) & 76'h10001FFFE0003FFF800);
+    syndrome_o[5] = ^((data_i ^ 76'hAA00000000000000000) & 76'h20001FFFFFFFC000000);
+    syndrome_o[6] = ^((data_i ^ 76'hAA00000000000000000) & 76'h40FFE00000000000000);
+    syndrome_o[7] = ^((data_i ^ 76'hAA00000000000000000) & 76'hFFFFFFFFFFFFFFFFFFF);
 
     // Corrected output calculation
     data_o[0] = (syndrome_o == 8'h83) ^ data_i[0];
diff --git a/util/design/secded_gen.py b/util/design/secded_gen.py
index defc1e0..48d5a7a 100755
--- a/util/design/secded_gen.py
+++ b/util/design/secded_gen.py
@@ -189,6 +189,25 @@
     return enum_str
 
 
+def print_pkg_allzero(n, k, m, codes, suffix, codetype):
+
+    suffix = suffix.split('_')
+    suffix = [x.capitalize() for x in suffix]
+    suffix = ''.join(suffix)
+
+    invecc = 0
+    invcode = 0
+    if codetype in ["inv_hsiao", "inv_hamming"]:
+        for x in range(m):
+            invecc += (x % 2) << x
+        invcode = invecc << k
+    zerostr = f'''
+  parameter logic [{m-1}:0] Secded{suffix}{n}{k}ZeroEcc = {m}'h{invecc:0X};
+  parameter logic [{n-1}:0] Secded{suffix}{n}{k}ZeroWord = {n}'h{invcode:0X};
+'''
+    return zerostr
+
+
 def print_pkg_types(n, k, m, codes, suffix, codetype):
     typename = "secded%s_%d_%d_t" % (suffix, n, k)
 
@@ -239,14 +258,18 @@
 
 
 def print_enc(n, k, m, codes, codetype):
-    invstr = "~" if codetype in ["inv_hsiao", "inv_hamming"] else ""
+    invert = 1 if codetype in ["inv_hsiao", "inv_hamming"] else 0
     outstr = "    data_o = {}'(data_i);\n".format(n)
-    format_str = "    data_o[{}] = " + str(invstr) + \
-                 "^(data_o & " + str(n) + "'h{:0" + str(
+    format_str = "    data_o[{}] = {} ^ ^(data_o & " + str(n) + "'h{:0" + str(
                  (n + 3) // 4) + "X});\n"
-    # Print parity computation
+    # Print parity computation If inverted encoding is turned on, we only
+    # invert every odd bit so that both all-one and all-zero encodings are not
+    # possible. This works for most encodings generated if the fanin is
+    # balanced (such as inverted Hsiao codes). However, since there is no
+    # guarantee, an FPV assertion is added to prove that all-zero and all-one
+    # encodings do not exist if an inverted code is used.
     for j, mask in enumerate(calc_bitmasks(k, m, codes, False)):
-        outstr += format_str.format(j + k, mask)
+        outstr += format_str.format(j + k, invert & (j % 2), mask)
     return outstr
 
 
@@ -260,9 +283,12 @@
     outstr += "    // Syndrome calculation\n"
     hexfmt = str(n) + "'h{:0" + str((n + 3) // 4) + "X}"
     format_str = "    syndrome_o[{}] = ^("
-    # Add ECC bit inversion if needed.
+    # Add ECC bit inversion if needed (see print_enc function).
     if codetype in ["inv_hsiao", "inv_hamming"]:
-        format_str += "(data_i ^ " + hexfmt.format((2**m -1) * 2**k) + ")"
+        invval = 0
+        for x in range(m):
+            invval += (x % 2) << x
+        format_str += "(data_i ^ " + hexfmt.format(invval << k) + ")"
     else:
         format_str += "data_i"
     format_str += " & " + hexfmt + ");\n"
@@ -350,7 +376,7 @@
     word_bin = format(dataword, '0' + str(k) + 'b')
 
     codeword = word_bin
-    for mask in bitmasks:
+    for k, mask in enumerate(bitmasks):
         bit = 0
         log.debug(f'codeword: {codeword}')
         log.debug(f'mask: {hex(mask)}')
@@ -363,7 +389,8 @@
             if int(f):
                 bit ^= int(codeword_rev[idx])
 
-        bit ^= invert
+        # Add ECC bit inversion if needed (see print_enc function).
+        bit ^= (invert & k % 2)
         codeword = str(bit) + codeword
 
     # Debug printouts
@@ -418,15 +445,17 @@
         # write out C files, only hsiao codes are supported
         if codetype in ["hsiao", "inv_hsiao"]:
             write_c_files(n, k, m, codes, suffix, c_src_filename, c_h_filename,
-                codetype)
+                          codetype)
 
+        # write out all-zero word values for all codes
+        pkg_type_str += print_pkg_allzero(n, k, m, codes, suffix, codetype)
         # write out package typedefs
         pkg_type_str += print_pkg_types(n, k, m, codes, suffix, codetype)
         # print out functions
         pkg_out_str += print_fn(n, k, m, codes, suffix, codetype)
 
         if not args.no_fpv:
-            write_fpv_files(n, k, m, codes, suffix, args.fpv_outdir)
+            write_fpv_files(n, k, m, codes, suffix, args.fpv_outdir, codetype)
 
     with open(c_h_filename, "a") as f:
         f.write(C_H_FOOT)
@@ -443,6 +472,7 @@
 def _inv_hsiao_code(k, m):
     return _hsiao_code(k, m)
 
+
 # k = data bits
 # m = parity bits
 # generate hsiao code
@@ -532,6 +562,7 @@
 def _inv_hamming_code(k, m):
     return _hamming_code(k, m)
 
+
 # n = total bits
 # k = data bits
 # m = parity bits
@@ -617,7 +648,7 @@
     assert in_type
     assert out_type
     assert codetype in ["hsiao", "inv_hsiao"]
-    invert = "true" if codetype == "inv_hsiao" else "false"
+    invert = (codetype == "inv_hsiao")
 
     with open(c_src_filename, "a") as f:
         # Write out function prototype in src
@@ -634,8 +665,10 @@
         # into a single word of integrity bits
         f.write("return ")
         parity_bit_masks = enumerate(calc_bitmasks(k, m, codes, False))
+        # Add ECC bit inversion if needed (see print_enc function).
         f.write(" | ".join(
-                [f"(calc_parity(word & 0x{mask:x}, {invert}) << {par_bit})"
+                [f"(calc_parity(word & 0x{mask:x}, "
+                 f"{'true' if invert and (par_bit % 2) else 'false'}) << {par_bit})"
                  for par_bit, mask in parity_bit_masks]))
 
         f.write(";\n}\n")
@@ -702,7 +735,7 @@
         f.write(outstr)
 
 
-def write_fpv_files(n, k, m, codes, suffix, outdir):
+def write_fpv_files(n, k, m, codes, suffix, outdir, codetype):
     module_name = "prim_secded%s_%d_%d" % (suffix, n, k)
 
     with open(outdir + "/tb/" + module_name + "_tb.sv", "w") as f:
@@ -713,30 +746,40 @@
   input               rst_ni,
   input        [{}:0] data_i,
   output logic [{}:0] data_o,
+  output logic [{}:0] encoded_o,
   output logic [{}:0] syndrome_o,
   output logic [1:0]  err_o,
   input        [{}:0] error_inject_i
 );
 
-  logic [{}:0] data_enc;
-
   {}_enc {}_enc (
     .data_i,
-    .data_o(data_enc)
+    .data_o(encoded_o)
   );
 
   {}_dec {}_dec (
-    .data_i(data_enc ^ error_inject_i),
+    .data_i(encoded_o ^ error_inject_i),
     .data_o,
     .syndrome_o,
     .err_o
   );
 
 endmodule : {}_tb
-'''.format(COPYRIGHT, module_name, (k - 1), (k - 1), (m - 1), (n - 1), (n - 1),
+'''.format(COPYRIGHT, module_name, (k - 1), (k - 1), (n - 1), (m - 1), (n - 1),
            module_name, module_name, module_name, module_name, module_name)
         f.write(outstr)
 
+    # Additional assertions for inverted codes.
+    if codetype in ["inv_hsiao", "inv_hamming"]:
+        inv_asserts = '''
+  // Check that all-one and all-zero data does not result in all-one or all-zero codewords
+  `ASSERT(AllZerosCheck_A, data_i == '0 |-> encoded_o != '0)
+  `ASSERT(AllOnesCheck_A, data_i == '1 |-> encoded_o != '1)
+
+'''
+    else:
+        inv_asserts = ""
+
     with open(outdir + "/vip/" + module_name + "_assert_fpv.sv", "w") as f:
         outstr = '''{}// SECDED FPV assertion file generated by util/design/secded_gen.py
 
@@ -745,6 +788,7 @@
   input        rst_ni,
   input [{}:0] data_i,
   input [{}:0] data_o,
+  input [{}:0] encoded_o,
   input [{}:0] syndrome_o,
   input [1:0]  err_o,
   input [{}:0] error_inject_i
@@ -765,10 +809,10 @@
   // Basic syndrome check
   `ASSERT(SyndromeCheck_A, |syndrome_o |-> $countones(error_inject_i) > 0)
   `ASSERT(SyndromeCheckReverse_A, $countones(error_inject_i) > 0 |-> |syndrome_o)
-
+{}
 endmodule : {}_assert_fpv
-'''.format(COPYRIGHT, module_name, (k - 1), (k - 1), (m - 1), (n - 1),
-           module_name)
+'''.format(COPYRIGHT, module_name, (k - 1), (k - 1), (n - 1), (m - 1), (n - 1),
+           inv_asserts, module_name)
         f.write(outstr)
 
     with open(outdir + "/tb/" + module_name + "_bind_fpv.sv", "w") as f:
@@ -782,6 +826,7 @@
     .rst_ni,
     .data_i,
     .data_o,
+    .encoded_o,
     .syndrome_o,
     .err_o,
     .error_inject_i