Skip to content
Snippets Groups Projects
Commit 67e43723 authored by Lucian Petrica's avatar Lucian Petrica
Browse files

Forcing minimum 32-deep FIFOs on input and output of dataflow

parent eb02604b
No related branches found
No related tags found
No related merge requests found
...@@ -147,31 +147,34 @@ class InsertFIFO(Transformation): ...@@ -147,31 +147,34 @@ class InsertFIFO(Transformation):
dtype = n0.get_input_datatype() dtype = n0.get_input_datatype()
fifo_depth = n0.get_nodeattr("inFIFODepth") fifo_depth = n0.get_nodeattr("inFIFODepth")
if fifo_depth > 2: if fifo_depth <= 2:
# create fifo node warnings.warn("Overriding input FIFO depth to 32")
fifo_output_tensor = oh.make_tensor_value_info( fifo_depth = 32
model.make_new_valueinfo_name(),
TensorProto.FLOAT, # create fifo node
n0.get_normal_input_shape(), fifo_output_tensor = oh.make_tensor_value_info(
) model.make_new_valueinfo_name(),
graph.value_info.append(fifo_output_tensor) TensorProto.FLOAT,
model.set_tensor_datatype(fifo_output_tensor.name, dtype) n0.get_normal_input_shape(),
)
fifo_node = oh.make_node( graph.value_info.append(fifo_output_tensor)
"StreamingFIFO", model.set_tensor_datatype(fifo_output_tensor.name, dtype)
[n_input],
[fifo_output_tensor.name], fifo_node = oh.make_node(
domain="finn", "StreamingFIFO",
backend="fpgadataflow", [n_input],
depth=fifo_depth, [fifo_output_tensor.name],
folded_shape=fld_shape, domain="finn",
dataType=str(dtype.name), backend="fpgadataflow",
) depth=fifo_depth,
# insert fifo folded_shape=fld_shape,
graph.node.insert(0, fifo_node) dataType=str(dtype.name),
)
# set fifo output tensor as new input tensor of second node # insert fifo
n.input[0] = fifo_output_tensor.name graph.node.insert(0, fifo_node)
# set fifo output tensor as new input tensor of second node
n.input[0] = fifo_output_tensor.name
# insert FIFO as last node, except when last node is DMA # insert FIFO as last node, except when last node is DMA
if ( if (
...@@ -190,30 +193,33 @@ class InsertFIFO(Transformation): ...@@ -190,30 +193,33 @@ class InsertFIFO(Transformation):
dtype = n0.get_output_datatype() dtype = n0.get_output_datatype()
fifo_depth = n0.get_nodeattr("outFIFODepth") fifo_depth = n0.get_nodeattr("outFIFODepth")
if fifo_depth > 2: if fifo_depth <= 2:
# create fifo node warnings.warn("Overriding output FIFO depth to 32")
fifo_input_tensor = oh.make_tensor_value_info( fifo_depth = 32
model.make_new_valueinfo_name(),
TensorProto.FLOAT, # create fifo node
n0.get_normal_output_shape(), fifo_input_tensor = oh.make_tensor_value_info(
) model.make_new_valueinfo_name(),
graph.value_info.append(fifo_input_tensor) TensorProto.FLOAT,
model.set_tensor_datatype(fifo_input_tensor.name, dtype) n0.get_normal_output_shape(),
)
fifo_node = oh.make_node( graph.value_info.append(fifo_input_tensor)
"StreamingFIFO", model.set_tensor_datatype(fifo_input_tensor.name, dtype)
[fifo_input_tensor.name],
[graph_out_name], fifo_node = oh.make_node(
domain="finn", "StreamingFIFO",
backend="fpgadataflow", [fifo_input_tensor.name],
depth=fifo_depth, [graph_out_name],
folded_shape=fld_shape, domain="finn",
dataType=str(dtype.name), backend="fpgadataflow",
) depth=fifo_depth,
# insert fifo folded_shape=fld_shape,
graph.node.append(fifo_node) dataType=str(dtype.name),
)
# set fifo output tensor as new input tensor of second node # insert fifo
n.output[0] = fifo_input_tensor.name graph.node.append(fifo_node)
# set fifo output tensor as new input tensor of second node
n.output[0] = fifo_input_tensor.name
return (model, graph_modified) return (model, graph_modified)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment