From c2ed6e1737aca11075b4234a712e59acf79c88d9 Mon Sep 17 00:00:00 2001 From: auphelia <jakobapk@web.de> Date: Wed, 6 Nov 2019 14:41:35 +0000 Subject: [PATCH] [Code Generation] Added stream declaration to output dictionary and [Test] run pre-commit so little changes in tab size and spacing --- src/finn/backend/fpgadataflow/code_gen.py | 57 +++++++++++++++++++++++ tests/test_code_generation.py | 4 +- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/finn/backend/fpgadataflow/code_gen.py b/src/finn/backend/fpgadataflow/code_gen.py index e69de29bb..0fb2296dc 100644 --- a/src/finn/backend/fpgadataflow/code_gen.py +++ b/src/finn/backend/fpgadataflow/code_gen.py @@ -0,0 +1,57 @@ +# def get_num_of_attributes(node): +# return len(node.attribute) + + +def extract_layer_attributes(model): + # Layer attributes + j = -1 + L_PE = {} + L_SIMD = {} + L_MH = {} + L_MW = {} + L_resDataType = {} + L_resType = {} + for node in model.graph.node: + num_attr = len(node.attribute) + j += 1 + if node.op_type == "StreamingFCLayer_Batch": + for k in range(num_attr): + if node.attribute[k].name == "PE": + L_PE[j] = node.attribute[k].i + if node.attribute[k].name == "SIMD": + L_SIMD[j] = node.attribute[k].i + if node.attribute[k].name == "MH": + L_MH[j] = node.attribute[k].i + if node.attribute[k].name == "MW": + L_MW[j] = node.attribute[k].i + if node.attribute[k].name == "resDataType": + L_resDataType[j] = node.attribute[k].i + if node.attribute[k].name == "resType": + L_resType[j] = node.attribute[k].i + return [L_PE, L_SIMD, L_MH, L_MW, L_resDataType, L_resType] + + +def strm_decl(model, code_gen_dict): + code_gen_dict["stream declarations"] = [] + for node in model.graph.node: + if node.op_type == "FIFO": + name = node.name + # last number in input shape determines the bits per cycle + bits_per_cycle = (model.get_tensor_shape(node.input[0]))[2] + code_gen_dict["stream declarations"].append( + 'hls::stream<ap_uint<{}>> {}("DoCompute.{}");'.format( + bits_per_cycle, name, name + ) + ) + + +def code_generation(model): + + code_gen_dict = {} + + # stream declarations + strm_decl(model, code_gen_dict) + + [L_PE, L_SIMD, L_MH, L_MW, L_resDataType, L_resType] = extract_layer_attributes( + model + ) diff --git a/tests/test_code_generation.py b/tests/test_code_generation.py index 08d99cd25..cb2c3763c 100644 --- a/tests/test_code_generation.py +++ b/tests/test_code_generation.py @@ -1,6 +1,8 @@ from pkgutil import get_data + +import finn.backend.fpgadataflow.code_gen as cg from finn.core.modelwrapper import ModelWrapper -import finn.backend.fpgadataflow.code_gen as cg + def test_code_generation(): # load the onnx model -- GitLab