From fe2dfa99353ff342626e3e2d4eec974c00837165 Mon Sep 17 00:00:00 2001 From: auphelia <jakobapk@web.de> Date: Tue, 31 Mar 2020 14:33:47 +0100 Subject: [PATCH] [Test] Add test for streaming dwc --- tests/fpgadataflow/test_fpgadataflow_dwc.py | 75 +++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 tests/fpgadataflow/test_fpgadataflow_dwc.py diff --git a/tests/fpgadataflow/test_fpgadataflow_dwc.py b/tests/fpgadataflow/test_fpgadataflow_dwc.py new file mode 100644 index 000000000..651df836a --- /dev/null +++ b/tests/fpgadataflow/test_fpgadataflow_dwc.py @@ -0,0 +1,75 @@ +import pytest + +from onnx import TensorProto, helper + +from finn.core.datatype import DataType +from finn.core.modelwrapper import ModelWrapper +from finn.transformation.fpgadataflow.codegen_ipgen import CodeGen_ipgen +from finn.transformation.fpgadataflow.hlssynth_ipgen import HLSSynth_IPGen +from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode +from finn.transformation.general import GiveUniqueNodeNames +from finn.util.basic import gen_finn_dt_tensor +import finn.core.onnx_exec as oxe + + +def make_single_dwc_modelwrapper(Shape, INWidth, OUTWidth, finn_dtype): + + inp = helper.make_tensor_value_info("inp", TensorProto.FLOAT, Shape) + outp = helper.make_tensor_value_info("outp", TensorProto.FLOAT, Shape) + + DWC_node = helper.make_node( + "StreamingDataWidthConverter_Batch", + ["inp"], + ["outp"], + domain="finn", + backend="fpgadataflow", + shape=Shape, + inWidth=INWidth, + outWidth=OUTWidth, + dataType=str(finn_dtype.name), + ) + + graph = helper.make_graph( + nodes=[DWC_node], name="dwc_graph", inputs=[inp], outputs=[outp] + ) + + model = helper.make_model(graph, producer_name="dwc-model") + model = ModelWrapper(model) + + model.set_tensor_datatype("inp", finn_dtype) + model.set_tensor_datatype("outp", finn_dtype) + + return model + + +def prepare_inputs(input_tensor, dt): + return {"inp": input_tensor} + + +# shape +@pytest.mark.parametrize("Shape", [[1, 4], [1, 2, 8]]) +# inWidth +@pytest.mark.parametrize("INWidth", [2, 4]) +# outWidth +@pytest.mark.parametrize("OUTWidth", [2, 4]) +# finn_dtype +@pytest.mark.parametrize("finn_dtype", [DataType.BIPOLAR, DataType.INT2]) +def test_fpgadataflow_dwc_rtlsim(Shape, INWidth, OUTWidth, finn_dtype): + + # generate input data + x = gen_finn_dt_tensor(finn_dtype, Shape) + input_dict = prepare_inputs(x, finn_dtype) + + model = make_single_dwc_modelwrapper(Shape, INWidth, OUTWidth, finn_dtype) + + model = model.transform(SetExecMode("rtlsim")) + model = model.transform(GiveUniqueNodeNames()) + model = model.transform(CodeGen_ipgen("xc7z020clg400-1", 5)) + model = model.transform(HLSSynth_IPGen()) + y = oxe.execute_onnx(model, input_dict)["outp"] + + assert ( + y == x + ).all(), """The output values are not the same as the + input values anymore.""" + assert y.shape == tuple(Shape), """The output shape is incorrect.""" -- GitLab