From 1b8bd097c44eeb38be498ac2c7e72aaa9884b65c Mon Sep 17 00:00:00 2001
From: David Sidler <david.sidler@inf.ethz.ch>
Date: Fri, 21 Feb 2020 23:06:04 -0800
Subject: [PATCH] change alignment of SIMD register write to 64B

---
 hdl/common/network_controller.sv | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/hdl/common/network_controller.sv b/hdl/common/network_controller.sv
index 5c0043e..88eb82c 100644
--- a/hdl/common/network_controller.sv
+++ b/hdl/common/network_controller.sv
@@ -347,6 +347,7 @@ wire        axis_legacy_merge_metadata_valid;
 wire        axis_legacy_merge_metadata_ready;
 wire[159:0] axis_legacy_merge_metadata_data;
 
+
 // Two-clock cmd_fifo: 2 stage synchronization 
 axis_data_fifo_160_cc cmd_fifo (
   .s_axis_aclk       (pcie_clk),                      // input wire s_axis_aresetn
@@ -693,7 +694,7 @@ begin
                 s_axim.bvalid          <= 1'b0;
                 axis_by_tx_metadata_valid <= 1'b0;
                         
-                mmwriteAddr = (s_axim.awaddr[11:0] >> 5);
+                mmwriteAddr = (s_axim.awaddr[11:0] >> 6); //64B aligned addresses for AVX -> no alignment issues with PCIe 8x or 16x
 
                 if (s_axim.awvalid && s_axim.awready) begin
                    s_axim.awready      <= 1'b0;
@@ -718,7 +719,7 @@ begin
                         GPIO_REG_POST: begin
                     
                             // sw data is 32 bits aligned 
-                            /* s_axim.wdata[31:0]    -> op         - sw: 8 bits
+                            /* s_axim.wdata[31:0]    -> op         - sw: 32 bits
                                            [63:32]   -> qpn        - sw: 32 bits 
                                            [127:64]  -> originAddr - sw: 64 bits
                                            [191:128] -> targetAddr - sw: 64 bits
@@ -732,20 +733,14 @@ begin
                             axis_by_tx_metadata_data[6:3]     <= s_axim.wdata[35:32];
                             axis_by_tx_metadata_data[26:7]    <= 0;                                        // 20 bits
 
-                            // originAddr - use only 48 b from the sw, that last 2 bits are set to zero
-                            // [127:64] 
-                            axis_by_tx_metadata_data[28:27]   <= 0;                                        // 2 bits
-                            axis_by_tx_metadata_data[74:29]   <= s_axim.wdata[113:66];
+                            // originAddr - use only 48 b from the sw  [127:64] 
+                            axis_by_tx_metadata_data[74:27]   <= s_axim.wdata[113:64];
 
-                            // targetAddr - use only 48 b from the sw, that last 2 bits are set to zero
-                            // [191:128]
-                            axis_by_tx_metadata_data[76:75]   <= 0;                                        // 2 bits
-                            axis_by_tx_metadata_data[122:77]  <= s_axim.wdata[177:130];
+                            // targetAddr - use only 48 b from the sw  [191:128]
+                            axis_by_tx_metadata_data[122:75]  <= s_axim.wdata[177:128];
 
-                            // size
-                            // [255:192]
-                            axis_by_tx_metadata_data[125:123] <= 0;                                        // 3 bits
-                            axis_by_tx_metadata_data[154:126] <= s_axim.wdata[223:195];
+                            // size  [255:192]
+                            axis_by_tx_metadata_data[154:123] <= s_axim.wdata[223:192];
 
                             axis_by_tx_metadata_valid         <= 1'b1;
                             s_axim.bvalid                  <= 1'b0;
-- 
GitLab