From 70d5df18f89a4785b7b021908389e2eaf8f2237a Mon Sep 17 00:00:00 2001
From: Daniel Newbrook <dwn1c21@soton.ac.uk>
Date: Tue, 5 Dec 2023 17:21:28 +0000
Subject: [PATCH] Add 3rd DMA350 channel

---
 nanosoc_tech                       |  2 +-
 system/src/accelerator_subsystem.v | 53 ++++++++++++++++++++++++++----
 2 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/nanosoc_tech b/nanosoc_tech
index c03d8b0..48919e6 160000
--- a/nanosoc_tech
+++ b/nanosoc_tech
@@ -1 +1 @@
-Subproject commit c03d8b0d858c5c1dcc1c5feae589ceef1741a098
+Subproject commit 48919e6951c7420cee6343957ecd1f68270138ff
diff --git a/system/src/accelerator_subsystem.v b/system/src/accelerator_subsystem.v
index a07ff98..f3e97d8 100644
--- a/system/src/accelerator_subsystem.v
+++ b/system/src/accelerator_subsystem.v
@@ -38,32 +38,49 @@ module accelerator_subsystem #(
   output wire   [1:0]              EXP_DRQ,
   input  wire   [1:0]              EXP_DLAST,
    // DMAC Stream interfaces
-`ifdef DMAC_1_DMA350
+`ifdef DMAC_DMA350
+`ifdef DMA350_STREAM_2
   input  wire                      EXP_STR_IN_0_TVALID,
   output wire                      EXP_STR_IN_0_TREADY,
   input  wire [SYS_DATA_W-1:0]     EXP_STR_IN_0_TDATA,
-  input  wire [15:0]               EXP_STR_IN_0_TSTRB,
+  input  wire [3:0]               EXP_STR_IN_0_TSTRB,
   input  wire                      EXP_STR_IN_0_TLAST,
 
   output wire                      EXP_STR_OUT_0_TVALID,
   input  wire                      EXP_STR_OUT_0_TREADY,
   output wire [SYS_DATA_W-1:0]     EXP_STR_OUT_0_TDATA,
-  output wire [15:0]               EXP_STR_OUT_0_TSTRB,
+  output wire [3:0]               EXP_STR_OUT_0_TSTRB,
   output wire                      EXP_STR_OUT_0_TLAST,
   input  wire                      EXP_STR_OUT_0_FLUSH,
 
   input  wire                      EXP_STR_IN_1_TVALID,
   output wire                      EXP_STR_IN_1_TREADY,
   input  wire [SYS_DATA_W-1:0]     EXP_STR_IN_1_TDATA,
-  input  wire [15:0]               EXP_STR_IN_1_TSTRB,
+  input  wire [3:0]               EXP_STR_IN_1_TSTRB,
   input  wire                      EXP_STR_IN_1_TLAST,
 
   output wire                      EXP_STR_OUT_1_TVALID,
   input  wire                      EXP_STR_OUT_1_TREADY,
   output wire [SYS_DATA_W-1:0]     EXP_STR_OUT_1_TDATA,
-  output wire [15:0]               EXP_STR_OUT_1_TSTRB,
+  output wire [3:0]               EXP_STR_OUT_1_TSTRB,
   output wire                      EXP_STR_OUT_1_TLAST,
   input  wire                      EXP_STR_OUT_1_FLUSH,
+`endif 
+`ifdef DMA350_STREAM_3
+
+  input  wire                      EXP_STR_IN_2_TVALID,
+  output wire                      EXP_STR_IN_2_TREADY,
+  input  wire [SYS_DATA_W-1:0]     EXP_STR_IN_2_TDATA,
+  input  wire [3:0]               EXP_STR_IN_2_TSTRB,
+  input  wire                      EXP_STR_IN_2_TLAST,
+
+  output wire                      EXP_STR_OUT_2_TVALID,
+  input  wire                      EXP_STR_OUT_2_TREADY,
+  output wire [SYS_DATA_W-1:0]     EXP_STR_OUT_2_TDATA,
+  output wire [3:0]               EXP_STR_OUT_2_TSTRB,
+  output wire                      EXP_STR_OUT_2_TLAST,
+  input  wire                      EXP_STR_OUT_2_FLUSH,
+`endif 
 `endif 
 
   // Interrupts
@@ -73,6 +90,30 @@ module accelerator_subsystem #(
   //-------------------------------------------
   // Instantiate your accelerator/wrapper here
   //-------------------------------------------
-  
+
+// Default DMA350 stream loopback
+`ifdef DMAC_DMA350
+`ifdef DMA350_STREAM_2
+  assign EXP_STR_OUT_0_TVALID = EXP_STR_IN_0_TVALID;
+  assign EXP_STR_IN_0_TREADY = EXP_STR_OUT_0_TREADY;
+  assign EXP_STR_OUT_0_TDATA = EXP_STR_IN_0_TDATA;
+  assign EXP_STR_OUT_0_TSTRB = EXP_STR_IN_0_TSTRB;
+  assign EXP_STR_OUT_0_TLAST = EXP_STR_IN_0_TLAST;
+
+  assign EXP_STR_OUT_1_TVALID = EXP_STR_IN_1_TVALID;
+  assign EXP_STR_IN_1_TREADY = EXP_STR_OUT_1_TREADY;
+  assign EXP_STR_OUT_1_TDATA = EXP_STR_IN_1_TDATA;
+  assign EXP_STR_OUT_1_TSTRB = EXP_STR_IN_1_TSTRB;
+  assign EXP_STR_OUT_1_TLAST = EXP_STR_IN_1_TLAST;
+`endif 
+`ifdef DMA350_STREAM_3
+
+  assign EXP_STR_OUT_2_TVALID = EXP_STR_IN_2_TVALID;
+  assign EXP_STR_IN_2_TREADY = EXP_STR_OUT_2_TREADY;
+  assign EXP_STR_OUT_2_TDATA = EXP_STR_IN_2_TDATA;
+  assign EXP_STR_OUT_2_TSTRB = EXP_STR_IN_2_TSTRB;
+  assign EXP_STR_OUT_2_TLAST = EXP_STR_IN_2_TLAST;
+`endif 
+`endif 
 
 endmodule
-- 
GitLab