diff --git a/hw/ip/prim/rtl/prim_secded_pkg.sv b/hw/ip/prim/rtl/prim_secded_pkg.sv
index e668dcf..e14374b 100644
--- a/hw/ip/prim/rtl/prim_secded_pkg.sv
+++ b/hw/ip/prim/rtl/prim_secded_pkg.sv
@@ -7,6 +7,54 @@
 
 package prim_secded_pkg;
 
+  typedef struct packed {
+    logic [15:0] data;
+    logic [5:0] syndrome;
+    logic [1:0]  err;
+  } secded_22_16_t;
+
+  typedef struct packed {
+    logic [21:0] data;
+    logic [5:0] syndrome;
+    logic [1:0]  err;
+  } secded_28_22_t;
+
+  typedef struct packed {
+    logic [31:0] data;
+    logic [6:0] syndrome;
+    logic [1:0]  err;
+  } secded_39_32_t;
+
+  typedef struct packed {
+    logic [56:0] data;
+    logic [6:0] syndrome;
+    logic [1:0]  err;
+  } secded_64_57_t;
+
+  typedef struct packed {
+    logic [63:0] data;
+    logic [7:0] syndrome;
+    logic [1:0]  err;
+  } secded_72_64_t;
+
+  typedef struct packed {
+    logic [15:0] data;
+    logic [5:0] syndrome;
+    logic [1:0]  err;
+  } secded_hamming_22_16_t;
+
+  typedef struct packed {
+    logic [31:0] data;
+    logic [6:0] syndrome;
+    logic [1:0]  err;
+  } secded_hamming_39_32_t;
+
+  typedef struct packed {
+    logic [63:0] data;
+    logic [7:0] syndrome;
+    logic [1:0]  err;
+  } secded_hamming_72_64_t;
+
   function automatic logic [21:0] prim_secded_22_16_enc (logic [15:0] in);
     logic [21:0] out;
     out = 22'(in);
@@ -19,12 +67,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_22_16_dec (
-    input  logic [21:0] in,
-    output logic [15:0] d_o,
-    output logic [5:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_22_16_t prim_secded_22_16_dec (logic [21:0] in);
+    logic [15:0] d_o;
+    logic [5:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_22_16_t dec;
+
     logic single_error;
 
     // Syndrome calculation
@@ -58,6 +107,11 @@
     err_o[0] = single_error;
     err_o[1] = ~single_error & (|syndrome_o);
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [27:0] prim_secded_28_22_enc (logic [21:0] in);
@@ -72,12 +126,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_28_22_dec (
-    input  logic [27:0] in,
-    output logic [21:0] d_o,
-    output logic [5:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_28_22_t prim_secded_28_22_dec (logic [27:0] in);
+    logic [21:0] d_o;
+    logic [5:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_28_22_t dec;
+
     logic single_error;
 
     // Syndrome calculation
@@ -117,6 +172,11 @@
     err_o[0] = single_error;
     err_o[1] = ~single_error & (|syndrome_o);
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [38:0] prim_secded_39_32_enc (logic [31:0] in);
@@ -132,12 +192,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_39_32_dec (
-    input  logic [38:0] in,
-    output logic [31:0] d_o,
-    output logic [6:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_39_32_t prim_secded_39_32_dec (logic [38:0] in);
+    logic [31:0] d_o;
+    logic [6:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_39_32_t dec;
+
     logic single_error;
 
     // Syndrome calculation
@@ -188,6 +249,11 @@
     err_o[0] = single_error;
     err_o[1] = ~single_error & (|syndrome_o);
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [63:0] prim_secded_64_57_enc (logic [56:0] in);
@@ -203,12 +269,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_64_57_dec (
-    input  logic [63:0] in,
-    output logic [56:0] d_o,
-    output logic [6:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_64_57_t prim_secded_64_57_dec (logic [63:0] in);
+    logic [56:0] d_o;
+    logic [6:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_64_57_t dec;
+
     logic single_error;
 
     // Syndrome calculation
@@ -284,6 +351,11 @@
     err_o[0] = single_error;
     err_o[1] = ~single_error & (|syndrome_o);
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [71:0] prim_secded_72_64_enc (logic [63:0] in);
@@ -300,12 +372,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_72_64_dec (
-    input  logic [71:0] in,
-    output logic [63:0] d_o,
-    output logic [7:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_72_64_t prim_secded_72_64_dec (logic [71:0] in);
+    logic [63:0] d_o;
+    logic [7:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_72_64_t dec;
+
     logic single_error;
 
     // Syndrome calculation
@@ -389,6 +462,11 @@
     err_o[0] = single_error;
     err_o[1] = ~single_error & (|syndrome_o);
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [21:0] prim_secded_hamming_22_16_enc (logic [15:0] in);
@@ -403,12 +481,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_hamming_22_16_dec (
-    input  logic [21:0] in,
-    output logic [15:0] d_o,
-    output logic [5:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_hamming_22_16_t prim_secded_hamming_22_16_dec (logic [21:0] in);
+    logic [15:0] d_o;
+    logic [5:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_hamming_22_16_t dec;
+
 
     // Syndrome calculation
     syndrome_o[0] = ^(in & 22'h01AD5B);
@@ -440,6 +519,11 @@
     err_o[0] = syndrome_o[5];
     err_o[1] = |syndrome_o[4:0] & ~syndrome_o[5];
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [38:0] prim_secded_hamming_39_32_enc (logic [31:0] in);
@@ -455,12 +539,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_hamming_39_32_dec (
-    input  logic [38:0] in,
-    output logic [31:0] d_o,
-    output logic [6:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_hamming_39_32_t prim_secded_hamming_39_32_dec (logic [38:0] in);
+    logic [31:0] d_o;
+    logic [6:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_hamming_39_32_t dec;
+
 
     // Syndrome calculation
     syndrome_o[0] = ^(in & 39'h0156AAAD5B);
@@ -509,6 +594,11 @@
     err_o[0] = syndrome_o[6];
     err_o[1] = |syndrome_o[5:0] & ~syndrome_o[6];
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
   function automatic logic [71:0] prim_secded_hamming_72_64_enc (logic [63:0] in);
@@ -525,12 +615,13 @@
     return out;
   endfunction
 
-  function automatic prim_secded_hamming_72_64_dec (
-    input  logic [71:0] in,
-    output logic [63:0] d_o,
-    output logic [7:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic secded_hamming_72_64_t prim_secded_hamming_72_64_dec (logic [71:0] in);
+    logic [63:0] d_o;
+    logic [7:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    secded_hamming_72_64_t dec;
+
 
     // Syndrome calculation
     syndrome_o[0] = ^(in & 72'h01AB55555556AAAD5B);
@@ -612,6 +703,11 @@
     err_o[0] = syndrome_o[7];
     err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7];
 
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 
 
diff --git a/util/design/secded_gen.py b/util/design/secded_gen.py
index 3c19fb6..4a32f64 100755
--- a/util/design/secded_gen.py
+++ b/util/design/secded_gen.py
@@ -80,10 +80,25 @@
     return fanin_masks
 
 
+def print_pkg_types(n, k, m, codes, suffix, codetype):
+    typename = "secded%s_%d_%d_t" % (suffix, n, k)
+
+    typestr = '''
+  typedef struct packed {{
+    logic [{}:0] data;
+    logic [{}:0] syndrome;
+    logic [1:0]  err;
+  }} {};
+'''.format((k - 1), (m - 1), typename)
+
+    return typestr
+
+
 def print_fn(n, k, m, codes, suffix, codetype):
     enc_out = print_enc(n, k, m, codes)
     dec_out = print_dec(n, k, m, codes, codetype, "function")
 
+    typename = "secded%s_%d_%d_t" % (suffix, n, k)
     module_name = "prim_secded%s_%d_%d" % (suffix, n, k)
 
     outstr = '''
@@ -92,16 +107,22 @@
 {}    return out;
   endfunction
 
-  function automatic {}_dec (
-    input  logic [{}:0] in,
-    output logic [{}:0] d_o,
-    output logic [{}:0] syndrome_o,
-    output logic [1:0]  err_o
-  );
+  function automatic {} {}_dec (logic [{}:0] in);
+    logic [{}:0] d_o;
+    logic [{}:0] syndrome_o;
+    logic [1:0]  err_o;
+
+    {} dec;
+
 {}
+    dec.data      = d_o;
+    dec.syndrome  = syndrome_o;
+    dec.err       = err_o;
+    return dec;
+
   endfunction
 '''.format((n - 1), module_name, (k - 1), (n - 1), enc_out,
-           module_name, (n - 1), (k - 1), (m - 1), dec_out)
+           typename, module_name, (n - 1), (k - 1), (m - 1), typename, dec_out)
 
     return outstr
 
@@ -127,8 +148,8 @@
 
     outstr = ""
     if codetype == "hsiao":
-      outstr += "  {}logic single_error;\n".format(
-          preamble if print_type == "function" else "")
+        outstr += "  {}logic single_error;\n".format(
+            preamble if print_type == "function" else "")
 
     outstr += "\n"
     outstr += "  {}// Syndrome calculation\n".format(
@@ -204,6 +225,7 @@
 
 def generate(cfgs, args, seed):
     pkg_out_str = ""
+    pkg_type_str = ""
     for cfg in cfgs['cfgs']:
         log.debug("Working on {}".format(cfg))
         k = cfg['k']
@@ -219,6 +241,8 @@
         # write out rtl files
         write_enc_dec_files(n, k, m, seed, codes, suffix, args.outdir, 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)
 
@@ -226,7 +250,8 @@
             write_fpv_files(n, k, m, codes, codetype, args.fpv_outdir)
 
     # write out package file
-    write_pkg_file(seed, args.outdir, pkg_out_str)
+    full_pkg_str = pkg_type_str + pkg_out_str
+    write_pkg_file(seed, args.outdir, full_pkg_str)
 
 
 # k = data bits
