From 38e9d5afd096004e9b3b1494d02641cb76d60b7a Mon Sep 17 00:00:00 2001 From: Yaman Umuroglu <maltanar@gmail.com> Date: Wed, 1 Feb 2023 11:21:23 +0100 Subject: [PATCH] [FIFO] use impl_style=hls for first&last FIFOs to avoid glitch --- .../fpgadataflow/insert_fifo.py | 20 ++++++------------- .../fpgadataflow/set_fifo_depths.py | 7 ++++++- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/finn/transformation/fpgadataflow/insert_fifo.py b/src/finn/transformation/fpgadataflow/insert_fifo.py index 50da9cdf1..bfeee95e9 100644 --- a/src/finn/transformation/fpgadataflow/insert_fifo.py +++ b/src/finn/transformation/fpgadataflow/insert_fifo.py @@ -209,13 +209,9 @@ class InsertFIFO(Transformation): graph.value_info.append(fifo_output_tensor) model.set_tensor_datatype(fifo_output_tensor.name, dtype) - if ( - self.max_qsrl_depth is None - or fifo_depth <= self.max_qsrl_depth - ): - impl_style = "rtl" - else: - impl_style = "vivado" + # only use rtl-style FIFOs to avoid simulation bug + # (top-level IOs should not have impl_style=vivado) + impl_style = "rtl" fifo_node = oh.make_node( "StreamingFIFO", @@ -271,13 +267,9 @@ class InsertFIFO(Transformation): graph.value_info.append(fifo_input_tensor) model.set_tensor_datatype(fifo_input_tensor.name, dtype) - if ( - self.max_qsrl_depth is None - or fifo_depth <= self.max_qsrl_depth - ): - impl_style = "rtl" - else: - impl_style = "vivado" + # only use rtl-style FIFOs to avoid simulation bug + # (top-level IOs should not have impl_style=vivado) + impl_style = "rtl" fifo_node = oh.make_node( "StreamingFIFO", diff --git a/src/finn/transformation/fpgadataflow/set_fifo_depths.py b/src/finn/transformation/fpgadataflow/set_fifo_depths.py index 2619557ed..35e7b9e6c 100644 --- a/src/finn/transformation/fpgadataflow/set_fifo_depths.py +++ b/src/finn/transformation/fpgadataflow/set_fifo_depths.py @@ -412,8 +412,13 @@ class InsertAndSetFIFODepths(Transformation): node_inst = getCustomOp(node) node_inst.set_nodeattr("depth", depth) node_inst.set_nodeattr("depth_monitor", 0) + # exception for top-level IO FIFOs which cause a bug in simulation + # (top-level IOs should not have impl_style=vivado) + toplevel_in = node.input[0] in [x.name for x in model.graph.input] + toplevel_out = node.output[0] in [x.name for x in model.graph.output] + toplevel_style_exception = toplevel_in or toplevel_out # Set FIFO implementation/ram styles - if depth > self.max_qsrl_depth: + if (depth > self.max_qsrl_depth) and (not toplevel_style_exception): node_inst.set_nodeattr("impl_style", "vivado") node_inst.set_nodeattr("ram_style", self.vivado_ram_style) else: -- GitLab