From 61e31371cb3f0e47cb7988c390cd088b0270dc45 Mon Sep 17 00:00:00 2001
From: auphelia <jakobapk@web.de>
Date: Wed, 11 Mar 2020 11:26:22 +0000
Subject: [PATCH] [StreamingFC] Copy rtllib memstream verilog files
 automatically after ip block is generated for MVAU in decoupled mode

---
 .../fpgadataflow/streamingfclayer_batch.py    | 27 ++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py b/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py
index d2c577b83..181a608c4 100644
--- a/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py
+++ b/src/finn/custom_op/fpgadataflow/streamingfclayer_batch.py
@@ -28,6 +28,7 @@
 
 import math
 import os
+from shutil import copy
 
 import numpy as np
 from pyverilator import PyVerilator
@@ -824,11 +825,12 @@ class StreamingFCLayer_Batch(HLSCustomOp):
             ]
         elif mem_mode == "decoupled":
             self.code_gen_dict["$BLACKBOXFUNCTION$"] = [
-                """void Matrix_Vector_Activate_Stream_Batch(
+                """void {}(
                     hls::stream<ap_uint<{}>> &in0,
                     hls::stream<ap_uint<{}>> &weights,
                     hls::stream<ap_uint<{}>> &out
                     )""".format(
+                    self.onnx_node.name,
                     self.get_instream_width(),
                     self.get_weightstream_width(),
                     self.get_outstream_width(),
@@ -900,3 +902,26 @@ class StreamingFCLayer_Batch(HLSCustomOp):
                     "complete dim=3)"
                 )
             )
+
+    def code_generation_ipgen(self, model, fpgapart, clk):
+        # generate code for all mem_mode of MVAU/FCLayer unit
+        super().code_generation_ipgen(model, fpgapart, clk)
+        # TODO generate code for verilog wrapper
+
+    def ipgen_singlenode_code(self):
+        # generate ip block of MVAU/FCLayer unit for all mem modes
+        super().ipgen_singlenode_code()
+
+        mem_mode = self.get_nodeattr("mem_mode")
+        if mem_mode == "decoupled":
+            # copy memstream component from finn-rtllib
+            # into verilog folder in code generation folder
+            code_gen_dir = self.get_nodeattr("code_gen_dir_ipgen")
+            verilog_folder = "{}/project_{}/sol1/impl/verilog/".format(
+                code_gen_dir, self.onnx_node.name
+            )
+            memstream_dir = "/workspace/finn/finn-rtllib/memstream/hdl/"
+            for file in os.listdir(memstream_dir):
+                if file.endswith(".v"):
+                    verilog_file = os.path.join(memstream_dir, file)
+                    copy(verilog_file, verilog_folder)
-- 
GitLab