From 697e268e685ecfe0c48b5e74127c965f249fffc0 Mon Sep 17 00:00:00 2001
From: David Mapstone <david@mapstone.me>
Date: Mon, 20 Mar 2023 15:22:58 +0000
Subject: [PATCH] SOC1-141: Updated top-level wrapper to use AHB packet
 constructor for input port

---
 accelerator-wrapper                           |   2 +-
 nanosoc                                       |   2 +-
 wrapper/src/wrapper_sha256_hashing_stream.sv  | 228 ++++++++++++++----
 .../verif/tb_wrapper_sha256_hashing_stream.sv |   4 +-
 4 files changed, 190 insertions(+), 46 deletions(-)

diff --git a/accelerator-wrapper b/accelerator-wrapper
index 031c516..34fab01 160000
--- a/accelerator-wrapper
+++ b/accelerator-wrapper
@@ -1 +1 @@
-Subproject commit 031c516e3aded99b3fe63311f1500bb751705c27
+Subproject commit 34fab012317556651f1de4debf369a8f3db6330b
diff --git a/nanosoc b/nanosoc
index 5843789..6138eb0 160000
--- a/nanosoc
+++ b/nanosoc
@@ -1 +1 @@
-Subproject commit 5843789d5155903a0868741a33cf016875831b27
+Subproject commit 6138eb07a20f6394b39ea5f53f553a4300d8b6e4
diff --git a/wrapper/src/wrapper_sha256_hashing_stream.sv b/wrapper/src/wrapper_sha256_hashing_stream.sv
index 89dd297..05135e7 100644
--- a/wrapper/src/wrapper_sha256_hashing_stream.sv
+++ b/wrapper/src/wrapper_sha256_hashing_stream.sv
@@ -37,7 +37,9 @@
 //-----------------------------------------------------------------------------
 
 module wrapper_sha256_hashing_stream #(
-  parameter ADDRWIDTH=12
+  parameter ADDRWIDTH=12,
+  parameter INPACKETWIDTH=512,
+  parameter OUTPACKETWIDTH=256
   ) (
     input  logic                  HCLK,       // Clock
     input  logic                  HRESETn,    // Reset
@@ -94,6 +96,9 @@ module wrapper_sha256_hashing_stream #(
   logic         in_packet_valid;
   logic         in_packet_ready;
 
+  // Input Data Request
+  logic         in_data_req;
+
   // Output Packet Wires
   logic [255:0] out_packet;    
   logic         out_packet_last; 
@@ -112,10 +117,131 @@ module wrapper_sha256_hashing_stream #(
   assign cfg_last   = 1'b1;
   assign cfg_valid  = 1'b1;
 
+  // Engine Input AHB Signals
+  logic             hsel0;
+  logic             hreadyout0;
+  logic             hresp0;
+  logic [31:0]      hrdata0;
+
+  // Engine Output AHB Signals
+  logic             hsel1;
+  logic             hreadyout1;
+  logic             hresp1;
+  logic [31:0]      hrdata1;
+
+  // Default Target AHB Signals
+  logic             hsel2;
+  logic             hreadyout2;
+  logic             hresp2;
+  logic [31:0]      hrdata2;
+
+  // Address Decoder
+  assign hsel0 = (~HADDRS[ADDRWIDTH-1]) ? 1'b1:1'b0; // Input Port Select
+  assign hsel1 = (HADDRS[ADDRWIDTH-1])  ? 1'b1:1'b0; // Output Port Select
+  assign hsel2 = (hsel0 | hsel1)        ? 1'b0:1'b1; // Default Target Select
+
   //-----------------------------------------------------------
   // Module logic start
   //----------------------------------------------------------
+  cmsdk_ahb_slave_mux  #(
+    1, //PORT0_ENABLE
+    1, //PORT1_ENABLE
+    1, //PORT2_ENABLE
+    0, //PORT3_ENABLE
+    0, //PORT4_ENABLE
+    0, //PORT5_ENABLE
+    0, //PORT6_ENABLE
+    0, //PORT7_ENABLE
+    0, //PORT8_ENABLE
+    0  //PORT9_ENABLE  
+  ) u_ahb_slave_mux (
+    .HCLK        (HCLK),
+    .HRESETn     (HRESETn),
+    .HREADY      (HREADYS),
+    .HSEL0       (hsel0),     // Input Port 0
+    .HREADYOUT0  (hreadyout0),
+    .HRESP0      (hresp0),
+    .HRDATA0     (hrdata0),
+    .HSEL1       (hsel1),     // Input Port 1
+    .HREADYOUT1  (hreadyout1),
+    .HRESP1      (hresp1),
+    .HRDATA1     (hrdata1),
+    .HSEL2       (hsel2),     // Input Port 2
+    .HREADYOUT2  (hreadyout2),
+    .HRESP2      (hresp2),
+    .HRDATA2     (hrdata2),
+    .HSEL3       (1'b0),      // Input Port 3
+    .HREADYOUT3  (),
+    .HRESP3      (),
+    .HRDATA3     (),
+    .HSEL4       (1'b0),      // Input Port 4
+    .HREADYOUT4  (),
+    .HRESP4      (),
+    .HRDATA4     (),
+    .HSEL5       (1'b0),      // Input Port 5
+    .HREADYOUT5  (),
+    .HRESP5      (),
+    .HRDATA5     (),
+    .HSEL6       (1'b0),      // Input Port 6
+    .HREADYOUT6  (),
+    .HRESP6      (),
+    .HRDATA6     (),
+    .HSEL7       (1'b0),      // Input Port 7
+    .HREADYOUT7  (),
+    .HRESP7      (),
+    .HRDATA7     (),
+    .HSEL8       (1'b0),      // Input Port 8
+    .HREADYOUT8  (),
+    .HRESP8      (),
+    .HRDATA8     (),
+    .HSEL9       (1'b0),      // Input Port 9
+    .HREADYOUT9  (),
+    .HRESP9      (),
+    .HRDATA9     (),
+  
+    .HREADYOUT   (HREADYOUTS),     // Outputs
+    .HRESP       (HRESPS),
+    .HRDATA      (HRDATAS)
+  );
+
+  //----------------------------
+  // Input Port
+  //----------------------------
+  wrapper_ahb_packet_constructor #(
+    ADDRWIDTH-1,
+    INPACKETWIDTH
+  ) u_wrapper_data_input_port (
+    .hclk         (HCLK),
+    .hresetn      (HRESETn),
+
+    // Input slave port: 32 bit data bus interface
+    .hsels        (hsel0),
+    .haddrs       (HADDRS[ADDRWIDTH-2:0]),
+    .htranss      (HTRANSS),
+    .hsizes       (HSIZES),
+    .hwrites      (HWRITES),
+    .hreadys      (HREADYS),
+    .hwdatas      (HWDATAS),
+
+    .hreadyouts   (hreadyout0),
+    .hresps       (hresp0),
+    .hrdatas      (hrdata0),
 
+    // Valid/Ready Interface
+    .packet_data       (in_packet),
+    .packet_data_last  (in_packet_last),
+    .packet_data_valid (in_packet_valid),
+    .packet_data_ready (in_packet_ready),
+
+    // Input Data Request
+    .data_req          (in_data_req)
+  );
+
+
+
+  //----------------------------
+  // Output Port
+  //----------------------------
   // Interface block to convert AHB transfers to Register transfers to engine input/output channels
   // engine Input/Output Channels
   wrapper_ahb_vr_interface #(
@@ -125,7 +251,7 @@ module wrapper_sha256_hashing_stream #(
     .hresetn      (HRESETn),
 
     // Input slave port: 32 bit data bus interface
-    .hsels        (HSELS),
+    .hsels        (hsel1),
     .haddrs       (HADDRS),
     .htranss      (HTRANSS),
     .hsizes       (HSIZES),
@@ -133,9 +259,9 @@ module wrapper_sha256_hashing_stream #(
     .hreadys      (HREADYS),
     .hwdatas      (HWDATAS),
 
-    .hreadyouts   (HREADYOUTS),
-    .hresps       (HRESPS),
-    .hrdatas      (HRDATAS),
+    .hreadyouts   (hreadyout1),
+    .hresps       (hresp1),
+    .hrdatas      (hrdata1),
 
     // Register interface - Accelerator Engine Input
     .input_addr        (input_addr),
@@ -158,30 +284,59 @@ module wrapper_sha256_hashing_stream #(
     .output_rready      (output_rready)
   );
 
-  wrapper_packet_construct #(
+  wrapper_packet_deconstruct #(
     (ADDRWIDTH - 1),  // Only half address map allocated to this device
-    512               // Packet Width
-  ) u_wrapper_packet_construct (
+    256               // Ouptut Packet WIdth
+  ) u_wrapper_packet_deconstruct (
     .hclk         (HCLK),
     .hresetn      (HRESETn),
 
     // Register interface
-    .addr        (input_addr),
-    .read_en     (input_read_en),
-    .write_en    (input_write_en),
-    .byte_strobe (input_byte_strobe),
-    .wdata       (input_wdata),
-    .rdata       (input_rdata),
-    .wready      (input_wready),
-    .rready      (input_rready),
+    .addr        (output_addr),
+    .read_en     (output_read_en),
+    .write_en    (output_write_en),
+    .byte_strobe (output_byte_strobe),
+    .wdata       (output_wdata),
+    .rdata       (output_rdata),
+    .wready      (output_wready),
+    .rready      (output_rready),
 
     // Valid/Ready Interface
-    .packet_data       (in_packet),
-    .packet_data_last  (in_packet_last),
-    .packet_data_valid (in_packet_valid),
-    .packet_data_ready (in_packet_ready)
+    .packet_data       (out_packet),
+    .packet_data_last  (out_packet_last),
+    .packet_data_valid (out_packet_valid),
+    .packet_data_ready (out_packet_ready)
   );
 
+  // wrapper_packet_construct #(
+  //   (ADDRWIDTH - 1),  // Only half address map allocated to this device
+  //   512               // Packet Width
+  // ) u_wrapper_packet_construct (
+  //   .hclk         (HCLK),
+  //   .hresetn      (HRESETn),
+
+  //   // Register interface
+  //   .addr        (input_addr),
+  //   .read_en     (input_read_en),
+  //   .write_en    (input_write_en),
+  //   .byte_strobe (input_byte_strobe),
+  //   .wdata       (input_wdata),
+  //   .rdata       (input_rdata),
+  //   .wready      (input_wready),
+  //   .rready      (input_rready),
+
+  //   // Valid/Ready Interface
+  //   .packet_data       (in_packet),
+  //   .packet_data_last  (in_packet_last),
+  //   .packet_data_valid (in_packet_valid),
+  //   .packet_data_ready (in_packet_ready),
+
+  //   .engine_ready()
+  // );
+
+  //------------------------
+  // Accelerator Engine
+  //------------------------
   sha256_hashing_stream u_sha256_hashing_stream (
         .clk            (HCLK),
         .nrst           (HRESETn),
@@ -208,28 +363,17 @@ module wrapper_sha256_hashing_stream #(
         .data_out_ready (out_packet_ready)
     );
 
-  wrapper_packet_deconstruct #(
-    (ADDRWIDTH - 1),  // Only half address map allocated to this device
-    256               // Ouptut Packet WIdth
-  ) u_wrapper_packet_deconstruct (
-    .hclk         (HCLK),
-    .hresetn      (HRESETn),
-
-    // Register interface
-    .addr        (output_addr),
-    .read_en     (output_read_en),
-    .write_en    (output_write_en),
-    .byte_strobe (output_byte_strobe),
-    .wdata       (output_wdata),
-    .rdata       (output_rdata),
-    .wready      (output_wready),
-    .rready      (output_rready),
-
-    // Valid/Ready Interface
-    .packet_data       (out_packet),
-    .packet_data_last  (out_packet_last),
-    .packet_data_valid (out_packet_valid),
-    .packet_data_ready (out_packet_ready)
+  // Default Target
+  cmsdk_ahb_default_slave  u_ahb_default_slave(
+    .HCLK         (HCLK),
+    .HRESETn      (HRESETn),
+    .HSEL         (hsel2),
+    .HTRANS       (HTRANSS),
+    .HREADY       (HREADYS),
+    .HREADYOUT    (hreadyout2),
+    .HRESP        (hresp2)
   );
 
+  assign hrdata2 = {32{1'b0}}; // Default target doesn't have data
+
 endmodule
\ No newline at end of file
diff --git a/wrapper/verif/tb_wrapper_sha256_hashing_stream.sv b/wrapper/verif/tb_wrapper_sha256_hashing_stream.sv
index 36def96..dae3183 100644
--- a/wrapper/verif/tb_wrapper_sha256_hashing_stream.sv
+++ b/wrapper/verif/tb_wrapper_sha256_hashing_stream.sv
@@ -147,13 +147,13 @@ cmsdk_ahb_fileread_master32 #(InputFileName,
 
 //********************************************************************************
 // Slave multiplexer module:
-//  multiplex the slave signals to master, three ports are enabled
+//  multiplex the slave signals to master, two ports are enabled
 //********************************************************************************
 
  cmsdk_ahb_slave_mux  #(
    1, //PORT0_ENABLE
    1, //PORT1_ENABLE
-   1, //PORT2_ENABLE
+   0, //PORT2_ENABLE
    0, //PORT3_ENABLE
    0, //PORT4_ENABLE
    0, //PORT5_ENABLE
-- 
GitLab