From a4d1ca6d7b21a8bce1e9bd7e82ae1f428f7a311a Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <maltanar@gmail.com>
Date: Thu, 20 Aug 2020 16:00:49 +0200
Subject: [PATCH] [Driver] add helper fxn for copying output buffer

---
 .../transformation/fpgadataflow/templates.py  | 22 ++++++++++++-------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/finn/transformation/fpgadataflow/templates.py b/src/finn/transformation/fpgadataflow/templates.py
index 0559d4926..def513d7c 100644
--- a/src/finn/transformation/fpgadataflow/templates.py
+++ b/src/finn/transformation/fpgadataflow/templates.py
@@ -191,6 +191,14 @@ class FINNAccelDriver():
     def copy_input_data_to_device(self, data):
         \"\"\"Copies given input data to PYNQ buffer.\"\"\"
         np.copyto(self.ibuf_packed_device, data)
+        if self.platform == "alveo":
+            self.ibuf_packed_device.sync_to_device()
+
+    def copy_output_data_from_device(self, data):
+        \"\"\"Copies PYNQ output buffer from device.\"\"\"
+        if self.platform == "alveo":
+            self.obuf_packed_device.sync_from_device()
+        np.copyto(data, self.obuf_packed_device)
 
     def execute(self):
         \"\"\"Executes accelerator by setting up the DMA(s) and
@@ -214,14 +222,10 @@ class FINNAccelDriver():
             status = self.odma.read(0x00)
             while status & 0x2 == 0:
                 status = self.odma.read(0x00)
-
         elif self.platform == "alveo":
-            self.ibuf_packed_device.sync_to_device()
-            self.idma.start(self.ibuf_packed_device, self.N)
-            self.odma.start(self.obuf_packed_device, self.N)
-            self.idma.wait()
-            self.odma.wait()
-            self.obuf_packed_device.sync_from_device()
+            idma_handle = self.idma.start_sw(self.ibuf_packed_device, self.N)
+            odma_handle = self.odma.start_sw(self.obuf_packed_device, self.N)
+            odma_handle.wait()
 
 
 
@@ -293,7 +297,9 @@ if __name__ == "__main__":
 
     # if execution is selected unpack, unfold and save output to output npy file
     else:
-        obuf_folded = finnDriver.unpack_output(finnDriver.obuf_packed_device)
+        obuf_packed = np.empty_like(finnDriver.obuf_packed_device)
+        finnDriver.copy_output_data_from_device(obuf_packed)
+        obuf_folded = finnDriver.unpack_output(obuf_packed)
         obuf_normal = finnDriver.unfold_output(obuf_folded)
         np.save(outputfile, obuf_normal)
 
-- 
GitLab