diff --git a/docs/finn/_build/doctrees/environment.pickle b/docs/finn/_build/doctrees/environment.pickle index 16b82a01f39f26608790004b11de5961bc6f9652..2874d35c8368dabd221dca584e32ae670bfcd929 100644 Binary files a/docs/finn/_build/doctrees/environment.pickle and b/docs/finn/_build/doctrees/environment.pickle differ diff --git a/docs/finn/_build/doctrees/index.doctree b/docs/finn/_build/doctrees/index.doctree index b1c15bd5ccb7be66cd46bbb132b0a933a2c189ca..09a447d29e120db8eb6be903904e83e2cec9052f 100644 Binary files a/docs/finn/_build/doctrees/index.doctree and b/docs/finn/_build/doctrees/index.doctree differ diff --git a/docs/finn/_build/html/_images/finn-flow.png b/docs/finn/_build/html/_images/finn-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..47aef287095c46b2f38030bca0a8d2e5d7cae2a9 Binary files /dev/null and b/docs/finn/_build/html/_images/finn-flow.png differ diff --git a/docs/finn/_build/html/_sources/index.rst.txt b/docs/finn/_build/html/_sources/index.rst.txt index 98f2564815fad2af314c4c639197f3722e2705e8..f8254e24a85c2351db25bc6824af22348ad91522 100644 --- a/docs/finn/_build/html/_sources/index.rst.txt +++ b/docs/finn/_build/html/_sources/index.rst.txt @@ -11,12 +11,15 @@ FINN is an experimental framework from Xilinx Research Labs to explore deep neur What is FINN? ============= 'FINN' is colloquially used to refer to two separate but highly related things: + * The FINN project, which includes tools for training quantized neural networks such as Brevitas, the FINN compiler, and the finn-hlslib Vivado HLS library of FPGA components for QNNs. An overview of the project can be taken from the following graphic and details can be seen on the project homepage. + .. image:: ../img/finn-flow.png - :height: 600px - :scale: 75% - :align: center -* The repository, this readthedocs website corresponds to. This is the FINN compiler, which is the centerpiece of the FINN project. The GitHub repositroy can be viewed using the link in the upper right corner. + :height: 600px + :scale: 75% + :align: center + +* The repository, this Read the Docs website corresponds to. This is the FINN compiler, which is the centerpiece of the FINN project. The GitHub repository can be viewed using the link in the upper right corner. .. toctree:: :maxdepth: 2 diff --git a/docs/finn/_build/html/index.html b/docs/finn/_build/html/index.html index d91397a242c3da47d71e9488b100dc7b33fdc0bb..107fcfb040a54dd96ac84da8acf62ad85b62d3d7 100644 --- a/docs/finn/_build/html/index.html +++ b/docs/finn/_build/html/index.html @@ -154,24 +154,13 @@ <p>FINN is an experimental framework from Xilinx Research Labs to explore deep neural network inference on FPGAs. It specifically targets quantized neural networks, with emphasis on generating dataflow-style architectures customized for each network. It is not intended to be a generic DNN accelerator like xDNN, but rather a tool for exploring the design space of DNN inference accelerators on FPGAs.</p> <div class="section" id="what-is-finn"> <h2>What is FINN?<a class="headerlink" href="#what-is-finn" title="Permalink to this headline">¶</a></h2> -<p>‘FINN’ is colloquially used to refer to two separate but highly related things: -* The FINN project, which includes tools for training quantized neural networks such as Brevitas, the FINN compiler, and the finn-hlslib Vivado HLS library of FPGA components for QNNs. An overview of the project can be taken from the following graphic and details can be seen on the project homepage. -.. image:: ../img/finn-flow.png</p> -<blockquote> -<div><dl class="field-list simple"> -<dt class="field-odd">height</dt> -<dd class="field-odd"><p>600px</p> -</dd> -<dt class="field-even">scale</dt> -<dd class="field-even"><p>75%</p> -</dd> -<dt class="field-odd">align</dt> -<dd class="field-odd"><p>center</p> -</dd> -</dl> -</div></blockquote> +<p>‘FINN’ is colloquially used to refer to two separate but highly related things:</p> <ul class="simple"> -<li><p>The repository, this readthedocs website corresponds to. This is the FINN compiler, which is the centerpiece of the FINN project. The GitHub repositroy can be viewed using the link in the upper right corner.</p></li> +<li><p>The FINN project, which includes tools for training quantized neural networks such as Brevitas, the FINN compiler, and the finn-hlslib Vivado HLS library of FPGA components for QNNs. An overview of the project can be taken from the following graphic and details can be seen on the project homepage.</p></li> +</ul> +<a class="reference internal image-reference" href="_images/finn-flow.png"><img alt="_images/finn-flow.png" class="align-center" src="_images/finn-flow.png" style="width: 278.25px; height: 450.0px;" /></a> +<ul class="simple"> +<li><p>The repository, this Read the Docs website corresponds to. This is the FINN compiler, which is the centerpiece of the FINN project. The GitHub repository can be viewed using the link in the upper right corner.</p></li> </ul> <div class="toctree-wrapper compound"> </div> diff --git a/docs/finn/_build/html/searchindex.js b/docs/finn/_build/html/searchindex.js index af5d22cb71e229469a762a6a95404808260b00cf..76340dc94e52ce02ba67882fa8cdf49164f7f4d5 100644 --- a/docs/finn/_build/html/searchindex.js +++ b/docs/finn/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["finn","finn.analysis","finn.analysis.fpgadataflow","finn.core","finn.custom_op","finn.custom_op.fpgadataflow","finn.transformation","finn.transformation.fpgadataflow","finn.transformation.streamline","finn.util","index","modules"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["finn.rst","finn.analysis.rst","finn.analysis.fpgadataflow.rst","finn.core.rst","finn.custom_op.rst","finn.custom_op.fpgadataflow.rst","finn.transformation.rst","finn.transformation.fpgadataflow.rst","finn.transformation.streamline.rst","finn.util.rst","index.rst","modules.rst"],objects:{"":{finn:[0,0,0,"-"]},"finn.analysis":{fpgadataflow:[2,0,0,"-"],topology:[1,0,0,"-"],verify_custom_nodes:[1,0,0,"-"]},"finn.analysis.fpgadataflow":{hls_synth_res_estimation:[2,0,0,"-"],res_estimation:[2,0,0,"-"]},"finn.analysis.fpgadataflow.hls_synth_res_estimation":{hls_synth_res_estimation:[2,1,1,""]},"finn.analysis.fpgadataflow.res_estimation":{res_estimation:[2,1,1,""]},"finn.analysis.topology":{all_tensors_f32:[1,1,1,""],get_per_tensor_fanouts:[1,1,1,""],is_linear:[1,1,1,""],node_inputs_in_expected_order:[1,1,1,""]},"finn.analysis.verify_custom_nodes":{verify_nodes:[1,1,1,""]},"finn.core":{datatype:[3,0,0,"-"],execute_custom_node:[3,0,0,"-"],modelwrapper:[3,0,0,"-"],onnx_exec:[3,0,0,"-"]},"finn.core.datatype":{DataType:[3,2,1,""]},"finn.core.datatype.DataType":{BINARY:[3,3,1,""],BIPOLAR:[3,3,1,""],FLOAT32:[3,3,1,""],INT16:[3,3,1,""],INT2:[3,3,1,""],INT32:[3,3,1,""],INT3:[3,3,1,""],INT4:[3,3,1,""],INT8:[3,3,1,""],TERNARY:[3,3,1,""],UINT16:[3,3,1,""],UINT2:[3,3,1,""],UINT32:[3,3,1,""],UINT3:[3,3,1,""],UINT4:[3,3,1,""],UINT8:[3,3,1,""],allowed:[3,4,1,""],bitwidth:[3,4,1,""],get_hls_datatype_str:[3,4,1,""],get_num_possible_values:[3,4,1,""],get_smallest_possible:[3,4,1,""],is_integer:[3,4,1,""],max:[3,4,1,""],min:[3,4,1,""],signed:[3,4,1,""]},"finn.core.execute_custom_node":{execute_custom_node:[3,1,1,""]},"finn.core.modelwrapper":{ModelWrapper:[3,2,1,""]},"finn.core.modelwrapper.ModelWrapper":{analysis:[3,4,1,""],check_all_tensor_shapes_specified:[3,4,1,""],check_compatibility:[3,4,1,""],find_consumer:[3,4,1,""],find_producer:[3,4,1,""],get_all_tensor_names:[3,4,1,""],get_initializer:[3,4,1,""],get_metadata_prop:[3,4,1,""],get_tensor_datatype:[3,4,1,""],get_tensor_fanout:[3,4,1,""],get_tensor_shape:[3,4,1,""],get_tensor_valueinfo:[3,4,1,""],graph:[3,4,1,""],make_empty_exec_context:[3,4,1,""],make_new_valueinfo_name:[3,4,1,""],model:[3,4,1,""],rename_tensor:[3,4,1,""],save:[3,4,1,""],set_initializer:[3,4,1,""],set_metadata_prop:[3,4,1,""],set_tensor_datatype:[3,4,1,""],set_tensor_shape:[3,4,1,""],transform:[3,4,1,""]},"finn.core.onnx_exec":{compare_execution:[3,1,1,""],execute_node:[3,1,1,""],execute_onnx:[3,1,1,""],execute_onnx_and_make_model:[3,1,1,""]},"finn.custom_op":{CustomOp:[4,2,1,""],fpgadataflow:[5,0,0,"-"],multithreshold:[4,0,0,"-"],registry:[4,0,0,"-"],streamingdataflowpartition:[4,0,0,"-"],xnorpopcount:[4,0,0,"-"]},"finn.custom_op.CustomOp":{execute_node:[4,4,1,""],get_nodeattr:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],set_nodeattr:[4,4,1,""],verify_node:[4,4,1,""]},"finn.custom_op.fpgadataflow":{HLSCustomOp:[5,2,1,""],convolutioninputgenerator:[5,0,0,"-"],streamingfclayer_batch:[5,0,0,"-"],streamingmaxpool_batch:[5,0,0,"-"],templates:[5,0,0,"-"],tlastmarker:[5,0,0,"-"]},"finn.custom_op.fpgadataflow.HLSCustomOp":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],code_generation_ipgen:[5,4,1,""],code_generation_npysim:[5,4,1,""],compile_singlenode_code:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],dynamic_input_to_npy:[5,4,1,""],exec_precompiled_singlenode_model:[5,4,1,""],execute_node:[5,4,1,""],generate_params:[5,4,1,""],get_folded_input_shape:[5,4,1,""],get_folded_output_shape:[5,4,1,""],get_instream_width:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_outstream_width:[5,4,1,""],global_includes:[5,4,1,""],ipgen_singlenode_code:[5,4,1,""],lut_estimation:[5,4,1,""],node_res_estimation:[5,4,1,""],npy_to_dynamic_output:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],reset_rtlsim:[5,4,1,""],rtlsim:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],toggle_clk:[5,4,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator":{ConvolutionInputGenerator:[5,2,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator.ConvolutionInputGenerator":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],execute_node:[5,4,1,""],get_input_datatype:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_output_datatype:[5,4,1,""],get_stream_width:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],lut_estimation:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch":{StreamingFCLayer_Batch:[5,2,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch.StreamingFCLayer_Batch":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],calc_tmem:[5,4,1,""],calc_wmem:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],execute_node:[5,4,1,""],generate_params:[5,4,1,""],get_folded_input_shape:[5,4,1,""],get_folded_output_shape:[5,4,1,""],get_hls_compatible_threshold_tensor:[5,4,1,""],get_hls_compatible_weight_tensor:[5,4,1,""],get_input_datatype:[5,4,1,""],get_instream_width:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_output_datatype:[5,4,1,""],get_outstream_width:[5,4,1,""],get_template_param_values:[5,4,1,""],get_weight_datatype:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],lut_estimation:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch":{StreamingMaxPool_Batch:[5,2,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch.StreamingMaxPool_Batch":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],lut_estimation:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.fpgadataflow.tlastmarker":{TLastMarker:[5,2,1,""]},"finn.custom_op.fpgadataflow.tlastmarker.TLastMarker":{blackboxfunction:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],execute_node:[5,4,1,""],get_folded_input_shape:[5,4,1,""],get_folded_output_shape:[5,4,1,""],get_instream_width:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_outstream_width:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.multithreshold":{MultiThreshold:[4,2,1,""],compare:[4,1,1,""],multithreshold:[4,1,1,""]},"finn.custom_op.multithreshold.MultiThreshold":{execute_node:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],verify_node:[4,4,1,""]},"finn.custom_op.registry":{getCustomOp:[4,1,1,""]},"finn.custom_op.streamingdataflowpartition":{StreamingDataflowPartition:[4,2,1,""]},"finn.custom_op.streamingdataflowpartition.StreamingDataflowPartition":{execute_node:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],verify_node:[4,4,1,""]},"finn.custom_op.xnorpopcount":{XnorPopcountMatMul:[4,2,1,""],xnorpopcountmatmul:[4,1,1,""]},"finn.custom_op.xnorpopcount.XnorPopcountMatMul":{execute_node:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],verify_node:[4,4,1,""]},"finn.transformation":{Transformation:[6,2,1,""],batchnorm_to_affine:[6,0,0,"-"],bipolar_to_xnor:[6,0,0,"-"],fold_constants:[6,0,0,"-"],fpgadataflow:[7,0,0,"-"],general:[6,0,0,"-"],infer_datatypes:[6,0,0,"-"],infer_shapes:[6,0,0,"-"],streamline:[8,0,0,"-"]},"finn.transformation.Transformation":{apply:[6,4,1,""]},"finn.transformation.batchnorm_to_affine":{BatchNormToAffine:[6,2,1,""]},"finn.transformation.batchnorm_to_affine.BatchNormToAffine":{apply:[6,4,1,""]},"finn.transformation.bipolar_to_xnor":{ConvertBipolarMatMulToXnorPopcount:[6,2,1,""]},"finn.transformation.bipolar_to_xnor.ConvertBipolarMatMulToXnorPopcount":{apply:[6,4,1,""]},"finn.transformation.fold_constants":{FoldConstants:[6,2,1,""]},"finn.transformation.fold_constants.FoldConstants":{apply:[6,4,1,""]},"finn.transformation.fpgadataflow":{cleanup:[7,0,0,"-"],codegen_ipgen:[7,0,0,"-"],codegen_ipstitch:[7,0,0,"-"],codegen_npysim:[7,0,0,"-"],compile:[7,0,0,"-"],convert_to_hls_layers:[7,0,0,"-"],create_dataflow_partition:[7,0,0,"-"],hlssynth_ipgen:[7,0,0,"-"],insert_tlastmarker:[7,0,0,"-"],make_deployment:[7,0,0,"-"],make_pynq_driver:[7,0,0,"-"],make_pynq_proj:[7,0,0,"-"],synth_pynq_proj:[7,0,0,"-"],templates:[7,0,0,"-"]},"finn.transformation.fpgadataflow.cleanup":{CleanUp:[7,2,1,""]},"finn.transformation.fpgadataflow.cleanup.CleanUp":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen":{CodeGen_ipgen:[7,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen.CodeGen_ipgen":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch":{CodeGen_ipstitch:[7,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch.CodeGen_ipstitch":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.codegen_npysim":{CodeGen_npysim:[7,2,1,""]},"finn.transformation.fpgadataflow.codegen_npysim.CodeGen_npysim":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.compile":{Compile:[7,2,1,""]},"finn.transformation.fpgadataflow.compile.Compile":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers":{InferBinaryStreamingFCLayer:[7,2,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers.InferBinaryStreamingFCLayer":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition":{CreateDataflowPartition:[7,2,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition.CreateDataflowPartition":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen":{HLSSynth_IPGen:[7,2,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen.HLSSynth_IPGen":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker":{InsertTLastMarker:[7,2,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker.InsertTLastMarker":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.make_deployment":{DeployToPYNQ:[7,2,1,""]},"finn.transformation.fpgadataflow.make_deployment.DeployToPYNQ":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver":{MakePYNQDriver:[7,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver.MakePYNQDriver":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj":{MakePYNQProject:[7,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj.MakePYNQProject":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj":{SynthPYNQProject:[7,2,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj.SynthPYNQProject":{apply:[7,4,1,""]},"finn.transformation.general":{ConvertSubToAdd:[6,2,1,""],GiveRandomTensorNames:[6,2,1,""],GiveReadableTensorNames:[6,2,1,""],GiveUniqueNodeNames:[6,2,1,""]},"finn.transformation.general.ConvertSubToAdd":{apply:[6,4,1,""]},"finn.transformation.general.GiveRandomTensorNames":{apply:[6,4,1,""]},"finn.transformation.general.GiveReadableTensorNames":{apply:[6,4,1,""]},"finn.transformation.general.GiveUniqueNodeNames":{apply:[6,4,1,""]},"finn.transformation.infer_datatypes":{InferDataTypes:[6,2,1,""]},"finn.transformation.infer_datatypes.InferDataTypes":{apply:[6,4,1,""]},"finn.transformation.infer_shapes":{InferShapes:[6,2,1,""]},"finn.transformation.infer_shapes.InferShapes":{apply:[6,4,1,""]},"finn.transformation.streamline":{Streamline:[8,2,1,""],absorb:[8,0,0,"-"],collapse_repeated:[8,0,0,"-"],reorder:[8,0,0,"-"],round_thresholds:[8,0,0,"-"],sign_to_thres:[8,0,0,"-"]},"finn.transformation.streamline.Streamline":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb":{Absorb1BitMulIntoMatMul:[8,2,1,""],AbsorbAddIntoMultiThreshold:[8,2,1,""],AbsorbMulIntoMultiThreshold:[8,2,1,""],FactorOutMulSignMagnitude:[8,2,1,""]},"finn.transformation.streamline.absorb.Absorb1BitMulIntoMatMul":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb.AbsorbAddIntoMultiThreshold":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb.AbsorbMulIntoMultiThreshold":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb.FactorOutMulSignMagnitude":{apply:[8,4,1,""]},"finn.transformation.streamline.collapse_repeated":{CollapseRepeatedAdd:[8,2,1,""],CollapseRepeatedMul:[8,2,1,""],CollapseRepeatedOp:[8,2,1,""]},"finn.transformation.streamline.collapse_repeated.CollapseRepeatedOp":{apply:[8,4,1,""]},"finn.transformation.streamline.reorder":{MoveAddPastMul:[8,2,1,""],MoveScalarAddPastMatMul:[8,2,1,""],MoveScalarMulPastMatMul:[8,2,1,""]},"finn.transformation.streamline.reorder.MoveAddPastMul":{apply:[8,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarAddPastMatMul":{apply:[8,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarMulPastMatMul":{apply:[8,4,1,""]},"finn.transformation.streamline.round_thresholds":{RoundAndClipThresholds:[8,2,1,""]},"finn.transformation.streamline.round_thresholds.RoundAndClipThresholds":{apply:[8,4,1,""]},"finn.transformation.streamline.sign_to_thres":{ConvertSignToThres:[8,2,1,""]},"finn.transformation.streamline.sign_to_thres.ConvertSignToThres":{apply:[8,4,1,""]},"finn.util":{basic:[9,0,0,"-"],data_packing:[9,0,0,"-"],fpgadataflow:[9,0,0,"-"],onnx:[9,0,0,"-"],test:[9,0,0,"-"]},"finn.util.basic":{CppBuilder:[9,2,1,""],calculate_signed_dot_prod_range:[9,1,1,""],gen_finn_dt_tensor:[9,1,1,""],get_by_name:[9,1,1,""],get_finn_root:[9,1,1,""],interleave_matrix_outer_dim_from_partitions:[9,1,1,""],make_build_dir:[9,1,1,""],pad_tensor_to_multiple_of:[9,1,1,""],random_string:[9,1,1,""],remove_by_name:[9,1,1,""],roundup_to_integer_multiple:[9,1,1,""]},"finn.util.basic.CppBuilder":{append_includes:[9,4,1,""],append_sources:[9,4,1,""],build:[9,4,1,""],set_executable_path:[9,4,1,""]},"finn.util.data_packing":{array2hexstring:[9,1,1,""],finnpy_to_packed_bytearray:[9,1,1,""],hexstring2npbytearray:[9,1,1,""],npbytearray2hexstring:[9,1,1,""],npy_to_rtlsim_input:[9,1,1,""],numpy_to_hls_code:[9,1,1,""],pack_innermost_dim_as_hex_string:[9,1,1,""],packed_bytearray_to_finnpy:[9,1,1,""],rtlsim_output_to_npy:[9,1,1,""],unpack_innermost_dim_from_hex_string:[9,1,1,""]},"finn.util.fpgadataflow":{IPGenBuilder:[9,2,1,""],pyverilate_stitched_ip:[9,1,1,""]},"finn.util.fpgadataflow.IPGenBuilder":{append_tcl:[9,4,1,""],build:[9,4,1,""],set_ipgen_path:[9,4,1,""]},"finn.util.onnx":{valueinfo_to_tensor:[9,1,1,""]},"finn.util.test":{get_test_model_def_fxn:[9,1,1,""],get_test_model_trained:[9,1,1,""],get_test_model_untrained:[9,1,1,""],get_trained_checkpoint:[9,1,1,""]},finn:{analysis:[1,0,0,"-"],core:[3,0,0,"-"],custom_op:[4,0,0,"-"],transformation:[6,0,0,"-"],util:[9,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"],"4":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute","4":"py:method"},terms:{"0f01":9,"0x07":9,"0x0e":9,"0x0f01":9,"0xb":9,"0xe":9,"600px":10,"abstract":[4,5,6],"boolean":3,"class":[3,4,5,6,7,8,9],"const":6,"default":[4,5,6],"enum":3,"final":3,"float":9,"function":[3,6,9],"new":3,"return":[1,2,3,4,5,6,8,9],"static":1,"true":[3,9],"var":5,For:8,HLS:[3,10],IPs:7,PEs:5,The:[1,3,6,7,8,9,10],Use:9,abc:[4,6],abit:9,about:[1,7],absorb1bitmulintomatmul:8,absorb:[0,6,7],absorbaddintomultithreshold:8,absorbmulintomultithreshold:8,acceler:[7,10],account:3,action:7,activ:3,add:[6,8],addition:8,address:7,after:9,aim:8,align:10,all:[1,3,4,5,6,7,9],all_tensors_f32:1,allow:3,alreadi:7,also:[4,5,7],amount:9,analysi:[0,3],analysis_fxn:3,anaylsis_fxn:3,ani:[3,6,7,9],annot:[1,4,5],anoth:7,append_includ:9,append_sourc:9,append_tcl:9,appli:[3,6,7,8],apply_rep:6,appropri:6,arbitrari:9,architectur:10,around:3,arrai:9,array2hexstr:9,arxiv:8,assign:3,associ:[3,6],assum:9,attribut:[1,4,5,7],attribute_nam:[4,5],attributeproto:[4,5],backend:7,base:[3,4,5,6,7,8,9],basic:0,batchnorm:6,batchnorm_to_affin:0,batchnormtoaffin:6,been:7,befor:9,between:[5,9],binari:[3,5,7,8,9],bipolar:[3,5,6,8,9],bipolar_to_xnor:0,bit:[3,9],bitwidth:3,blackboxfunct:5,block:7,blott:5,board:7,bool:[1,6],both:9,bram_estim:5,brevita:10,brien:5,build:9,built:1,calc_tmem:5,calc_wmem:5,calcul:5,calculate_signed_dot_prod_rang:9,call:[3,5,6,7],can:[3,6,7,8,9,10],cannot:6,center:10,centerpiec:10,certain:1,chang:[3,6],check:[1,3,4,5],check_all_tensor_shapes_specifi:3,check_compat:3,cleanup:[0,6],clk:[5,7],clone:9,code:[7,9],code_gen_dir:9,code_generation_ipgen:5,code_generation_npysim:5,codegen_ipgen:[0,6],codegen_ipstitch:[0,6],codegen_npysim:[0,6],collaps:8,collapse_rep:[0,6],collapserepeatedadd:8,collapserepeatedmul:8,collapserepeatedop:8,collect:7,colloqui:10,come:1,compar:[3,4],compare_execut:3,compare_fxn:3,compat:[3,4,5],compil:[0,6,10],compile_singlenode_cod:5,compon:10,comput:3,consecut:8,constant:[1,3,8],consum:3,contain:[3,4,7,9],content:[],context:[3,4,5],convent:1,convert:[5,6,7,8,9],convert_to_hls_lay:[0,6],convertbipolarmatmultoxnorpopcount:6,convertsigntothr:8,convertsubtoadd:6,convolutioninputgener:[0,4],copi:[3,6,7],core:0,corner:10,correct:6,correctli:[1,4,5,7],correspond:[3,4,5,10],count:5,cpp_file:9,cppbuilder:9,creat:[3,7,9],create_dataflow_partit:[0,6],createdataflowpartit:7,current:3,custom:[1,3,10],custom_op:0,customop:[4,5],data:[4,7,9],data_pack:0,dataflow:[3,7,10],dataoutstrm:5,datatyp:[0,4,5,6,9],debug:3,declar:6,deep:[3,5,6,10],default_v:[4,5],default_valu:[4,5],defin:5,deploy:7,deploytopynq:7,design:[7,10],detail:10,dict:[3,4,5],dictionari:[1,3],digit:9,dimens:9,dimension:9,dir:[7,9],directori:[7,9],distr_pad:9,divis:9,dnn:10,docker:9,docomput:5,don:6,done:1,dot:9,driver:7,dt_a:9,dt_b:9,dtype:[1,3,4,5,9],dynam:1,dynamic_input_to_npi:5,each:[1,3,6,8,9,10],effect:6,element:9,embed:3,emit:9,emphasi:10,empti:3,end:5,ensur:[5,6,7,9],enumer:[3,6],equal:[4,5],equival:8,estim:2,even:6,evenli:9,everi:6,exampl:9,exec_precompiled_singlenode_model:5,execut:[3,4,5],execute_custom_nod:0,execute_nod:[3,4,5],execute_onnx:3,execute_onnx_and_make_model:3,exist:[4,9],exit:9,expect:[1,3,4,5,7],experiment:10,explor:[3,5,10],expos:3,extra:[1,9],extract:[1,2],factor:9,factoroutmulsignmagnitud:8,fals:[3,6,9],fan:1,fast:5,fewest:3,field:[7,9],file:[3,7,9],filenam:[3,7],find:3,find_consum:3,find_produc:3,finn:[],finn_dt:9,finnpy_to_packed_bytearrai:9,first:[1,8],fix:[6,9],flatten:9,float32:[1,3],flow:10,fold_const:0,foldconst:6,folder:[7,9],follow:[1,7,10],form:5,found:7,four:9,fpga:10,fpgadataflow:[0,1,4,6],fpgapart:[5,7],framework:[5,10],fraser:5,from:[2,3,7,9,10],full:3,further:6,gambardella:5,gen_finn_dt_tensor:9,gener:[0,7,9,10],generate_param:5,get:[3,4],get_all_tensor_nam:3,get_by_nam:9,get_finn_root:9,get_folded_input_shap:5,get_folded_output_shap:5,get_hls_compatible_threshold_tensor:5,get_hls_compatible_weight_tensor:5,get_hls_datatype_str:3,get_initi:3,get_input_datatyp:5,get_instream_width:5,get_metadata_prop:3,get_nodeattr:4,get_nodeattr_typ:[4,5],get_num_possible_valu:3,get_number_output_valu:5,get_output_datatyp:5,get_outstream_width:5,get_per_tensor_fanout:1,get_smallest_poss:3,get_stream_width:5,get_template_param_valu:5,get_tensor_datatyp:3,get_tensor_fanout:3,get_tensor_shap:3,get_tensor_valueinfo:3,get_test_model_def_fxn:9,get_test_model_train:9,get_test_model_untrain:9,get_trained_checkpoint:9,get_weight_datatyp:5,getcustomop:4,github:10,give:[6,8],give_unique_node_nam:6,given:[1,2,3,4,5,9],giverandomtensornam:6,givereadabletensornam:6,giveuniquenodenam:6,global_includ:5,graph:[1,3,4,5,6,7],graphic:10,guarante:6,guid:0,has:[1,3,6,7,9],have:[1,3,6,7,8],height:10,hex:9,hexstr:9,hexstring2npbytearrai:9,highli:10,hls_synth_res_estim:[0,1],hls_var_nam:9,hlscustomop:5,hlslib:[5,10],hlssynth_ipgen:[0,6],homepag:10,host:9,how:[0,9],human:6,imag:10,img:10,immedi:7,implement:3,includ:[3,7,10],index:10,indic:[3,4,5,6,7],infer:[3,4,5,6,9,10],infer_datatyp:0,infer_node_datatyp:[4,5],infer_shap:0,inferbinarystreamingfclay:7,inferdatatyp:6,infershap:6,infinit:6,info:[6,9],info_messag:1,inform:[1,7],infrastructur:7,inherit:6,initi:[1,3],innermost:9,inp0:4,inp1:4,inp:5,input:[1,3,4,5,6,8,9],input_dict:3,input_dtyp:9,input_fil:9,insert:[7,9],insert_tlastmark:[0,6],inserttlastmark:7,insid:4,instanc:[3,4,5,8],instanti:7,instead:9,int16:3,int2:3,int32:3,int3:3,int4:3,int8:3,integ:[3,8,9],intend:10,interfac:7,interleav:5,interleave_matrix_outer_dim_from_partit:9,intermedi:[3,6],intern:6,ipgen_singlenode_cod:5,ipgenbuild:9,is_integ:3,is_linear:1,item:9,kei:3,know:6,lab:10,lambda:3,largest:3,layer:[6,7],lead:9,learn:5,leeser:5,len:9,let:6,letter:9,librari:10,library_path:9,like:10,linear:[1,3],link:10,list:[1,3],look:1,loop:6,lut_estim:5,made:[3,6],magnitud:8,make:[6,7],make_build_dir:9,make_collapsed_param_fxn:8,make_deepcopi:3,make_deploy:[0,6],make_empty_exec_context:3,make_new_valueinfo_nam:3,make_project:7,make_pynq_driv:[0,6],make_pynq_proj:[0,6],make_shape_compatible_op:[4,5],makepynqdriv:7,makepynqproject:7,manipul:3,manual:6,matmul:[6,8],matrix:[5,8,9],max:[3,9],mean:9,meant:6,member:[4,5],metadata_prop:[3,7],min:[3,9],minimum:9,mixtur:1,mkdtemp:9,mode:[],model:[1,2,3,4,5,6,7,8,9],model_a:3,model_b:3,model_was_chang:6,modelproto:[3,7],modelwrapp:[0,1,6],modul:10,more:[3,6,9],move:8,moveaddpastmul:8,movescalaraddpastmatmul:8,movescalarmulpastmatmul:8,mul:[6,8],multidimension:9,multipl:[6,8,9],multipli:8,multithreshold:[0,7,8],must:[4,6,7,8,9],mvtu:7,n_partit:9,n_thres_step:5,name:[1,2,3,4,6,9],name_field:9,ndarrai:9,nearest:[8,9],necessari:7,need:[2,4,5,6],neg:[3,8],netnam:9,network:[5,10],neural:[5,10],new_nam:3,next:8,no_decl:9,node:[1,2,3,4,5,6,7,8],node_inputs_in_expected_ord:1,node_res_estim:5,non:7,none:[3,4,9],notwithstand:1,now:[1,3],npbytearrai:9,npbytearray2hexstr:9,npy:9,npy_to_dynamic_output:5,npy_to_rtlsim_input:9,number:[3,4,5,9],numpi:[5,9],numpy_to_hls_cod:9,object:[3,9],old_nam:3,onc:6,one:[1,3,7,9],onli:[1,3,6,7,8],onnx:[0,3,4,5,7],onnx_exec:0,onnx_model_proto:3,onnx_nod:[4,5],onnxruntim:3,op_nam:8,op_typ:1,oper:[3,8],ops:[1,8],order:1,orig_thres_matrix:5,orig_weight_matrix:5,origin:5,other:[3,8],otherwis:[3,6,9],out:1,out_bia:4,out_scal:4,out_shap:9,outcom:7,output:[3,4,5,6,9],output_shap:9,overlai:7,overview:10,pack:[7,9],pack_innermost_dim:9,pack_innermost_dim_as_hex_str:9,packag:[],packed_bytearrai:9,packed_bytearray_to_finnpi:9,packedbit:9,pad:9,pad_tensor_to_multiple_of:9,pad_to_dim:9,pad_to_nbit:9,page:10,pair:7,paramet:8,part:[4,9],particular:[4,5,9],partit:3,pass:[0,5],password:7,past:8,path:[5,9],per:7,perform:[4,5],permit:[4,5],place:7,platform:7,png:10,point:6,posit:[5,8,9],possibl:[3,7],pragma:5,preced:8,precid:8,precis:9,precomput:6,prefer:3,prefix:9,prepend:9,preusser:5,previous:7,prior:[6,7,9],produc:[1,3],product:9,project:[7,10],properti:[1,3],provid:3,pynq:7,pynq_driver_dir:7,python:[7,9],pyveril:9,pyverilate_stitched_ip:9,qnn:10,quantiz:[1,5,10],random:[6,9],random_str:9,randomli:9,rather:10,reach:6,read_npy_data:5,readabl:6,readthedoc:10,recommend:6,refer:10,registri:0,relat:10,remot:3,remov:[7,9],remove_by_nam:9,remove_prefix:9,renam:3,rename_tensor:3,reorder:[0,6],repeat:[6,8],repeatedli:3,replac:6,repositori:10,repositroi:10,repres:[3,9],represent:9,requir:[3,4,5],res_estim:[0,1],research:10,reset_rtlsim:5,reshap:5,resourc:2,respect:9,result:[1,2,3,6,7,8,9],return_full_exec_context:3,returned_dict:[4,5],revers:9,reverse_endian:9,reverse_inn:9,right:10,root:9,round:[8,9],round_threshold:[0,6],roundandclipthreshold:8,roundup_to_integer_multipl:9,row:5,rtlsim:[3,5],rtlsim_output_to_npi:9,run:[3,7],same:[7,9],save:[3,9],save_as_npi:5,scalar:8,scale:10,scp:7,script:7,search:10,second:[7,8],see:[8,9],seen:10,sep:5,separ:10,sequenc:9,set:[3,4,5,7,8,9],set_attribut:[],set_executable_path:9,set_initi:3,set_ipgen_path:9,set_metadata_prop:3,set_nodeattr:4,set_sim_mod:[0,6],set_tensor_datatyp:3,set_tensor_shap:3,setsimmod:[],shape:[3,4,5,6,9],shell:7,should:[1,3,6],sign:[3,6,8,9],sign_to_thr:[0,6],sim:[5,9],sim_mod:[],simd:5,sinc:[3,9],singl:[3,8,9],small:1,smallest:3,some:[3,6],space:10,specif:10,specifi:[3,6,9],split:[7,8,9],standard:[3,4,5],stitch:[7,9],store:[4,7,9],streamingdataflowpartit:[0,7],streamingfclayer_batch:[0,4,7],streamingmaxpool_batch:[0,4],streamlin:[0,6],string:[1,9],stringlength:9,strm_decl:5,structur:1,style:10,sub:6,subdirectori:7,subgraph:3,submodul:0,subpackag:[],subset:1,success:7,suitabl:5,surviv:9,synth_pynq_proj:[0,6],synthesi:[2,7],synthpynqproject:7,take:[1,3,6,8,9],taken:[3,7,10],target:[7,10],target_dir:7,targetbit:9,tcl:7,tcl_script:9,tempfil:9,templat:[0,4,6],temporari:9,tensor:[1,3,6,8,9],tensor_fanout:1,tensor_nam:[1,3],tensor_shap:[3,9],tensor_valu:3,termin:7,ternari:3,test:[0,6],thei:8,them:[1,7,8],thi:[1,3,4,5,6,7,9,10],thing:10,threshold:[4,5,8],time:6,tlastmark:[0,4,7],tmem:5,togeth:7,toggle_clk:5,tool:10,topolog:0,train:10,transform:[0,3],transformed_model:6,travers:1,tupl:6,two:[3,7,8,9,10],type:[3,6,9],uint16:3,uint2:[3,9],uint32:3,uint3:3,uint4:3,uint8:[3,9],umuroglu:5,under:7,uniqu:6,unpack:[7,9],unpack_innermost_dim_from_hex_str:9,unsign:[3,8],until:3,updat:8,upper:10,used:[3,4,5,9,10],useful:3,user:6,usernam:7,using:[3,6,8,9,10],util:[0,3,4,5],val:9,valu:[3,4,5,7,8,9],value_info:3,valueinfo:[3,6],valueinfo_to_tensor:9,valueinfoproto:[3,9],variabl:9,vector:[8,9],verif:1,verifi:[1,4,5],verify_custom_nod:0,verify_nod:[1,4,5],via:3,view:10,visser:5,vivado:[2,3,7,10],vivado_pynq_proj:7,vivado_stitch_proj:7,wai:1,want:8,wbit:9,websit:10,weight:[3,5],when:[1,6],where:[3,4,5,7,8],whether:[1,3,4,5,6],which:[3,4,5,7,8,9,10],width:9,wmem:5,work:[3,9],wrapper:3,write:0,xdnn:10,xilinx:10,xnorpopcount:0,xnorpopcountmatmul:[4,6,7],you:6,your:6,zero:[3,8,9]},titles:["finn package","finn.analysis package","finn.analysis.fpgadataflow package","finn.core package","finn.custom_op package","finn.custom_op.fpgadataflow package","finn.transformation package","finn.transformation.fpgadataflow package","finn.transformation.streamline package","finn.util package","FINN","src"],titleterms:{absorb:8,analysi:[1,2],basic:9,batchnorm_to_affin:6,bipolar_to_xnor:6,cleanup:7,codegen_ipgen:7,codegen_ipstitch:7,codegen_npysim:7,collapse_rep:8,compil:7,content:[0,1,2,3,4,5,6,7,8,9],convert_to_hls_lay:7,convolutioninputgener:5,core:3,create_dataflow_partit:7,custom_op:[4,5],data_pack:9,datatyp:3,document:[],execute_custom_nod:3,finn:[0,1,2,3,4,5,6,7,8,9,10],fold_const:6,fpgadataflow:[2,5,7,9],gener:6,guid:6,hls_synth_res_estim:2,hlssynth_ipgen:7,how:1,indic:10,infer_datatyp:6,infer_shap:6,insert_tlastmark:7,make_deploy:7,make_pynq_driv:7,make_pynq_proj:7,modelwrapp:3,modul:[0,1,2,3,4,5,6,7,8,9],multithreshold:4,onnx:9,onnx_exec:3,packag:[0,1,2,3,4,5,6,7,8,9],pass:1,registri:4,reorder:8,res_estim:2,round_threshold:8,set_sim_mod:7,sign_to_thr:8,src:11,streamingdataflowpartit:4,streamingfclayer_batch:5,streamingmaxpool_batch:5,streamlin:8,submodul:[1,2,3,4,5,6,7,8,9],subpackag:[0,1,4,6],synth_pynq_proj:7,tabl:10,templat:[5,7],test:9,tlastmark:5,topolog:1,transform:[6,7,8],util:9,verify_custom_nod:1,welcom:[],what:10,write:[1,6],xnorpopcount:4}}) \ No newline at end of file +Search.setIndex({docnames:["finn","finn.analysis","finn.analysis.fpgadataflow","finn.core","finn.custom_op","finn.custom_op.fpgadataflow","finn.transformation","finn.transformation.fpgadataflow","finn.transformation.streamline","finn.util","index","modules"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["finn.rst","finn.analysis.rst","finn.analysis.fpgadataflow.rst","finn.core.rst","finn.custom_op.rst","finn.custom_op.fpgadataflow.rst","finn.transformation.rst","finn.transformation.fpgadataflow.rst","finn.transformation.streamline.rst","finn.util.rst","index.rst","modules.rst"],objects:{"":{finn:[0,0,0,"-"]},"finn.analysis":{fpgadataflow:[2,0,0,"-"],topology:[1,0,0,"-"],verify_custom_nodes:[1,0,0,"-"]},"finn.analysis.fpgadataflow":{hls_synth_res_estimation:[2,0,0,"-"],res_estimation:[2,0,0,"-"]},"finn.analysis.fpgadataflow.hls_synth_res_estimation":{hls_synth_res_estimation:[2,1,1,""]},"finn.analysis.fpgadataflow.res_estimation":{res_estimation:[2,1,1,""]},"finn.analysis.topology":{all_tensors_f32:[1,1,1,""],get_per_tensor_fanouts:[1,1,1,""],is_linear:[1,1,1,""],node_inputs_in_expected_order:[1,1,1,""]},"finn.analysis.verify_custom_nodes":{verify_nodes:[1,1,1,""]},"finn.core":{datatype:[3,0,0,"-"],execute_custom_node:[3,0,0,"-"],modelwrapper:[3,0,0,"-"],onnx_exec:[3,0,0,"-"]},"finn.core.datatype":{DataType:[3,2,1,""]},"finn.core.datatype.DataType":{BINARY:[3,3,1,""],BIPOLAR:[3,3,1,""],FLOAT32:[3,3,1,""],INT16:[3,3,1,""],INT2:[3,3,1,""],INT32:[3,3,1,""],INT3:[3,3,1,""],INT4:[3,3,1,""],INT8:[3,3,1,""],TERNARY:[3,3,1,""],UINT16:[3,3,1,""],UINT2:[3,3,1,""],UINT32:[3,3,1,""],UINT3:[3,3,1,""],UINT4:[3,3,1,""],UINT8:[3,3,1,""],allowed:[3,4,1,""],bitwidth:[3,4,1,""],get_hls_datatype_str:[3,4,1,""],get_num_possible_values:[3,4,1,""],get_smallest_possible:[3,4,1,""],is_integer:[3,4,1,""],max:[3,4,1,""],min:[3,4,1,""],signed:[3,4,1,""]},"finn.core.execute_custom_node":{execute_custom_node:[3,1,1,""]},"finn.core.modelwrapper":{ModelWrapper:[3,2,1,""]},"finn.core.modelwrapper.ModelWrapper":{analysis:[3,4,1,""],check_all_tensor_shapes_specified:[3,4,1,""],check_compatibility:[3,4,1,""],find_consumer:[3,4,1,""],find_producer:[3,4,1,""],get_all_tensor_names:[3,4,1,""],get_initializer:[3,4,1,""],get_metadata_prop:[3,4,1,""],get_tensor_datatype:[3,4,1,""],get_tensor_fanout:[3,4,1,""],get_tensor_shape:[3,4,1,""],get_tensor_valueinfo:[3,4,1,""],graph:[3,4,1,""],make_empty_exec_context:[3,4,1,""],make_new_valueinfo_name:[3,4,1,""],model:[3,4,1,""],rename_tensor:[3,4,1,""],save:[3,4,1,""],set_initializer:[3,4,1,""],set_metadata_prop:[3,4,1,""],set_tensor_datatype:[3,4,1,""],set_tensor_shape:[3,4,1,""],transform:[3,4,1,""]},"finn.core.onnx_exec":{compare_execution:[3,1,1,""],execute_node:[3,1,1,""],execute_onnx:[3,1,1,""],execute_onnx_and_make_model:[3,1,1,""]},"finn.custom_op":{CustomOp:[4,2,1,""],fpgadataflow:[5,0,0,"-"],multithreshold:[4,0,0,"-"],registry:[4,0,0,"-"],streamingdataflowpartition:[4,0,0,"-"],xnorpopcount:[4,0,0,"-"]},"finn.custom_op.CustomOp":{execute_node:[4,4,1,""],get_nodeattr:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],set_nodeattr:[4,4,1,""],verify_node:[4,4,1,""]},"finn.custom_op.fpgadataflow":{HLSCustomOp:[5,2,1,""],convolutioninputgenerator:[5,0,0,"-"],streamingfclayer_batch:[5,0,0,"-"],streamingmaxpool_batch:[5,0,0,"-"],templates:[5,0,0,"-"],tlastmarker:[5,0,0,"-"]},"finn.custom_op.fpgadataflow.HLSCustomOp":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],code_generation_ipgen:[5,4,1,""],code_generation_npysim:[5,4,1,""],compile_singlenode_code:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],dynamic_input_to_npy:[5,4,1,""],exec_precompiled_singlenode_model:[5,4,1,""],execute_node:[5,4,1,""],generate_params:[5,4,1,""],get_folded_input_shape:[5,4,1,""],get_folded_output_shape:[5,4,1,""],get_instream_width:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_outstream_width:[5,4,1,""],global_includes:[5,4,1,""],ipgen_singlenode_code:[5,4,1,""],lut_estimation:[5,4,1,""],node_res_estimation:[5,4,1,""],npy_to_dynamic_output:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],reset_rtlsim:[5,4,1,""],rtlsim:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],toggle_clk:[5,4,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator":{ConvolutionInputGenerator:[5,2,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator.ConvolutionInputGenerator":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],execute_node:[5,4,1,""],get_input_datatype:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_output_datatype:[5,4,1,""],get_stream_width:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],lut_estimation:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch":{StreamingFCLayer_Batch:[5,2,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch.StreamingFCLayer_Batch":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],calc_tmem:[5,4,1,""],calc_wmem:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],execute_node:[5,4,1,""],generate_params:[5,4,1,""],get_folded_input_shape:[5,4,1,""],get_folded_output_shape:[5,4,1,""],get_hls_compatible_threshold_tensor:[5,4,1,""],get_hls_compatible_weight_tensor:[5,4,1,""],get_input_datatype:[5,4,1,""],get_instream_width:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_output_datatype:[5,4,1,""],get_outstream_width:[5,4,1,""],get_template_param_values:[5,4,1,""],get_weight_datatype:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],lut_estimation:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch":{StreamingMaxPool_Batch:[5,2,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch.StreamingMaxPool_Batch":{blackboxfunction:[5,4,1,""],bram_estimation:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],lut_estimation:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.fpgadataflow.tlastmarker":{TLastMarker:[5,2,1,""]},"finn.custom_op.fpgadataflow.tlastmarker.TLastMarker":{blackboxfunction:[5,4,1,""],dataoutstrm:[5,4,1,""],defines:[5,4,1,""],docompute:[5,4,1,""],execute_node:[5,4,1,""],get_folded_input_shape:[5,4,1,""],get_folded_output_shape:[5,4,1,""],get_instream_width:[5,4,1,""],get_nodeattr_types:[5,4,1,""],get_number_output_values:[5,4,1,""],get_outstream_width:[5,4,1,""],global_includes:[5,4,1,""],infer_node_datatype:[5,4,1,""],make_shape_compatible_op:[5,4,1,""],pragmas:[5,4,1,""],read_npy_data:[5,4,1,""],save_as_npy:[5,4,1,""],strm_decl:[5,4,1,""],verify_node:[5,4,1,""]},"finn.custom_op.multithreshold":{MultiThreshold:[4,2,1,""],compare:[4,1,1,""],multithreshold:[4,1,1,""]},"finn.custom_op.multithreshold.MultiThreshold":{execute_node:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],verify_node:[4,4,1,""]},"finn.custom_op.registry":{getCustomOp:[4,1,1,""]},"finn.custom_op.streamingdataflowpartition":{StreamingDataflowPartition:[4,2,1,""]},"finn.custom_op.streamingdataflowpartition.StreamingDataflowPartition":{execute_node:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],verify_node:[4,4,1,""]},"finn.custom_op.xnorpopcount":{XnorPopcountMatMul:[4,2,1,""],xnorpopcountmatmul:[4,1,1,""]},"finn.custom_op.xnorpopcount.XnorPopcountMatMul":{execute_node:[4,4,1,""],get_nodeattr_types:[4,4,1,""],infer_node_datatype:[4,4,1,""],make_shape_compatible_op:[4,4,1,""],verify_node:[4,4,1,""]},"finn.transformation":{Transformation:[6,2,1,""],batchnorm_to_affine:[6,0,0,"-"],bipolar_to_xnor:[6,0,0,"-"],fold_constants:[6,0,0,"-"],fpgadataflow:[7,0,0,"-"],general:[6,0,0,"-"],infer_datatypes:[6,0,0,"-"],infer_shapes:[6,0,0,"-"],streamline:[8,0,0,"-"]},"finn.transformation.Transformation":{apply:[6,4,1,""]},"finn.transformation.batchnorm_to_affine":{BatchNormToAffine:[6,2,1,""]},"finn.transformation.batchnorm_to_affine.BatchNormToAffine":{apply:[6,4,1,""]},"finn.transformation.bipolar_to_xnor":{ConvertBipolarMatMulToXnorPopcount:[6,2,1,""]},"finn.transformation.bipolar_to_xnor.ConvertBipolarMatMulToXnorPopcount":{apply:[6,4,1,""]},"finn.transformation.fold_constants":{FoldConstants:[6,2,1,""]},"finn.transformation.fold_constants.FoldConstants":{apply:[6,4,1,""]},"finn.transformation.fpgadataflow":{cleanup:[7,0,0,"-"],codegen_ipgen:[7,0,0,"-"],codegen_ipstitch:[7,0,0,"-"],codegen_npysim:[7,0,0,"-"],compile:[7,0,0,"-"],convert_to_hls_layers:[7,0,0,"-"],create_dataflow_partition:[7,0,0,"-"],hlssynth_ipgen:[7,0,0,"-"],insert_tlastmarker:[7,0,0,"-"],make_deployment:[7,0,0,"-"],make_pynq_driver:[7,0,0,"-"],make_pynq_proj:[7,0,0,"-"],synth_pynq_proj:[7,0,0,"-"],templates:[7,0,0,"-"]},"finn.transformation.fpgadataflow.cleanup":{CleanUp:[7,2,1,""]},"finn.transformation.fpgadataflow.cleanup.CleanUp":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen":{CodeGen_ipgen:[7,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen.CodeGen_ipgen":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch":{CodeGen_ipstitch:[7,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch.CodeGen_ipstitch":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.codegen_npysim":{CodeGen_npysim:[7,2,1,""]},"finn.transformation.fpgadataflow.codegen_npysim.CodeGen_npysim":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.compile":{Compile:[7,2,1,""]},"finn.transformation.fpgadataflow.compile.Compile":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers":{InferBinaryStreamingFCLayer:[7,2,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers.InferBinaryStreamingFCLayer":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition":{CreateDataflowPartition:[7,2,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition.CreateDataflowPartition":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen":{HLSSynth_IPGen:[7,2,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen.HLSSynth_IPGen":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker":{InsertTLastMarker:[7,2,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker.InsertTLastMarker":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.make_deployment":{DeployToPYNQ:[7,2,1,""]},"finn.transformation.fpgadataflow.make_deployment.DeployToPYNQ":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver":{MakePYNQDriver:[7,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver.MakePYNQDriver":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj":{MakePYNQProject:[7,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj.MakePYNQProject":{apply:[7,4,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj":{SynthPYNQProject:[7,2,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj.SynthPYNQProject":{apply:[7,4,1,""]},"finn.transformation.general":{ConvertSubToAdd:[6,2,1,""],GiveRandomTensorNames:[6,2,1,""],GiveReadableTensorNames:[6,2,1,""],GiveUniqueNodeNames:[6,2,1,""]},"finn.transformation.general.ConvertSubToAdd":{apply:[6,4,1,""]},"finn.transformation.general.GiveRandomTensorNames":{apply:[6,4,1,""]},"finn.transformation.general.GiveReadableTensorNames":{apply:[6,4,1,""]},"finn.transformation.general.GiveUniqueNodeNames":{apply:[6,4,1,""]},"finn.transformation.infer_datatypes":{InferDataTypes:[6,2,1,""]},"finn.transformation.infer_datatypes.InferDataTypes":{apply:[6,4,1,""]},"finn.transformation.infer_shapes":{InferShapes:[6,2,1,""]},"finn.transformation.infer_shapes.InferShapes":{apply:[6,4,1,""]},"finn.transformation.streamline":{Streamline:[8,2,1,""],absorb:[8,0,0,"-"],collapse_repeated:[8,0,0,"-"],reorder:[8,0,0,"-"],round_thresholds:[8,0,0,"-"],sign_to_thres:[8,0,0,"-"]},"finn.transformation.streamline.Streamline":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb":{Absorb1BitMulIntoMatMul:[8,2,1,""],AbsorbAddIntoMultiThreshold:[8,2,1,""],AbsorbMulIntoMultiThreshold:[8,2,1,""],FactorOutMulSignMagnitude:[8,2,1,""]},"finn.transformation.streamline.absorb.Absorb1BitMulIntoMatMul":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb.AbsorbAddIntoMultiThreshold":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb.AbsorbMulIntoMultiThreshold":{apply:[8,4,1,""]},"finn.transformation.streamline.absorb.FactorOutMulSignMagnitude":{apply:[8,4,1,""]},"finn.transformation.streamline.collapse_repeated":{CollapseRepeatedAdd:[8,2,1,""],CollapseRepeatedMul:[8,2,1,""],CollapseRepeatedOp:[8,2,1,""]},"finn.transformation.streamline.collapse_repeated.CollapseRepeatedOp":{apply:[8,4,1,""]},"finn.transformation.streamline.reorder":{MoveAddPastMul:[8,2,1,""],MoveScalarAddPastMatMul:[8,2,1,""],MoveScalarMulPastMatMul:[8,2,1,""]},"finn.transformation.streamline.reorder.MoveAddPastMul":{apply:[8,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarAddPastMatMul":{apply:[8,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarMulPastMatMul":{apply:[8,4,1,""]},"finn.transformation.streamline.round_thresholds":{RoundAndClipThresholds:[8,2,1,""]},"finn.transformation.streamline.round_thresholds.RoundAndClipThresholds":{apply:[8,4,1,""]},"finn.transformation.streamline.sign_to_thres":{ConvertSignToThres:[8,2,1,""]},"finn.transformation.streamline.sign_to_thres.ConvertSignToThres":{apply:[8,4,1,""]},"finn.util":{basic:[9,0,0,"-"],data_packing:[9,0,0,"-"],fpgadataflow:[9,0,0,"-"],onnx:[9,0,0,"-"],test:[9,0,0,"-"]},"finn.util.basic":{CppBuilder:[9,2,1,""],calculate_signed_dot_prod_range:[9,1,1,""],gen_finn_dt_tensor:[9,1,1,""],get_by_name:[9,1,1,""],get_finn_root:[9,1,1,""],interleave_matrix_outer_dim_from_partitions:[9,1,1,""],make_build_dir:[9,1,1,""],pad_tensor_to_multiple_of:[9,1,1,""],random_string:[9,1,1,""],remove_by_name:[9,1,1,""],roundup_to_integer_multiple:[9,1,1,""]},"finn.util.basic.CppBuilder":{append_includes:[9,4,1,""],append_sources:[9,4,1,""],build:[9,4,1,""],set_executable_path:[9,4,1,""]},"finn.util.data_packing":{array2hexstring:[9,1,1,""],finnpy_to_packed_bytearray:[9,1,1,""],hexstring2npbytearray:[9,1,1,""],npbytearray2hexstring:[9,1,1,""],npy_to_rtlsim_input:[9,1,1,""],numpy_to_hls_code:[9,1,1,""],pack_innermost_dim_as_hex_string:[9,1,1,""],packed_bytearray_to_finnpy:[9,1,1,""],rtlsim_output_to_npy:[9,1,1,""],unpack_innermost_dim_from_hex_string:[9,1,1,""]},"finn.util.fpgadataflow":{IPGenBuilder:[9,2,1,""],pyverilate_stitched_ip:[9,1,1,""]},"finn.util.fpgadataflow.IPGenBuilder":{append_tcl:[9,4,1,""],build:[9,4,1,""],set_ipgen_path:[9,4,1,""]},"finn.util.onnx":{valueinfo_to_tensor:[9,1,1,""]},"finn.util.test":{get_test_model_def_fxn:[9,1,1,""],get_test_model_trained:[9,1,1,""],get_test_model_untrained:[9,1,1,""],get_trained_checkpoint:[9,1,1,""]},finn:{analysis:[1,0,0,"-"],core:[3,0,0,"-"],custom_op:[4,0,0,"-"],transformation:[6,0,0,"-"],util:[9,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"],"4":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute","4":"py:method"},terms:{"0f01":9,"0x07":9,"0x0e":9,"0x0f01":9,"0xb":9,"0xe":9,"600px":[],"abstract":[4,5,6],"boolean":3,"class":[3,4,5,6,7,8,9],"const":6,"default":[4,5,6],"enum":3,"final":3,"float":9,"function":[3,6,9],"new":3,"return":[1,2,3,4,5,6,8,9],"static":1,"true":[3,9],"var":5,For:8,HLS:[3,10],IPs:7,PEs:5,The:[1,3,6,7,8,9,10],Use:9,abc:[4,6],abit:9,about:[1,7],absorb1bitmulintomatmul:8,absorb:[0,6,7],absorbaddintomultithreshold:8,absorbmulintomultithreshold:8,acceler:[7,10],account:3,action:7,activ:3,add:[6,8],addition:8,address:7,after:9,aim:8,align:[],all:[1,3,4,5,6,7,9],all_tensors_f32:1,allow:3,alreadi:7,also:[4,5,7],amount:9,analysi:[0,3],analysis_fxn:3,anaylsis_fxn:3,ani:[3,6,7,9],annot:[1,4,5],anoth:7,append_includ:9,append_sourc:9,append_tcl:9,appli:[3,6,7,8],apply_rep:6,appropri:6,arbitrari:9,architectur:10,around:3,arrai:9,array2hexstr:9,arxiv:8,assign:3,associ:[3,6],assum:9,attribut:[1,4,5,7],attribute_nam:[4,5],attributeproto:[4,5],backend:7,base:[3,4,5,6,7,8,9],basic:0,batchnorm:6,batchnorm_to_affin:0,batchnormtoaffin:6,been:7,befor:9,between:[5,9],binari:[3,5,7,8,9],bipolar:[3,5,6,8,9],bipolar_to_xnor:0,bit:[3,9],bitwidth:3,blackboxfunct:5,block:7,blott:5,board:7,bool:[1,6],both:9,bram_estim:5,brevita:10,brien:5,build:9,built:1,calc_tmem:5,calc_wmem:5,calcul:5,calculate_signed_dot_prod_rang:9,call:[3,5,6,7],can:[3,6,7,8,9,10],cannot:6,center:[],centerpiec:10,certain:1,chang:[3,6],check:[1,3,4,5],check_all_tensor_shapes_specifi:3,check_compat:3,cleanup:[0,6],clk:[5,7],clone:9,code:[7,9],code_gen_dir:9,code_generation_ipgen:5,code_generation_npysim:5,codegen_ipgen:[0,6],codegen_ipstitch:[0,6],codegen_npysim:[0,6],collaps:8,collapse_rep:[0,6],collapserepeatedadd:8,collapserepeatedmul:8,collapserepeatedop:8,collect:7,colloqui:10,come:1,compar:[3,4],compare_execut:3,compare_fxn:3,compat:[3,4,5],compil:[0,6,10],compile_singlenode_cod:5,compon:10,comput:3,consecut:8,constant:[1,3,8],consum:3,contain:[3,4,7,9],content:[],context:[3,4,5],convent:1,convert:[5,6,7,8,9],convert_to_hls_lay:[0,6],convertbipolarmatmultoxnorpopcount:6,convertsigntothr:8,convertsubtoadd:6,convolutioninputgener:[0,4],copi:[3,6,7],core:0,corner:10,correct:6,correctli:[1,4,5,7],correspond:[3,4,5,10],count:5,cpp_file:9,cppbuilder:9,creat:[3,7,9],create_dataflow_partit:[0,6],createdataflowpartit:7,current:3,custom:[1,3,10],custom_op:0,customop:[4,5],data:[4,7,9],data_pack:0,dataflow:[3,7,10],dataoutstrm:5,datatyp:[0,4,5,6,9],debug:3,declar:6,deep:[3,5,6,10],default_v:[4,5],default_valu:[4,5],defin:5,deploy:7,deploytopynq:7,design:[7,10],detail:10,dict:[3,4,5],dictionari:[1,3],digit:9,dimens:9,dimension:9,dir:[7,9],directori:[7,9],distr_pad:9,divis:9,dnn:10,doc:10,docker:9,docomput:5,don:6,done:1,dot:9,driver:7,dt_a:9,dt_b:9,dtype:[1,3,4,5,9],dynam:1,dynamic_input_to_npi:5,each:[1,3,6,8,9,10],effect:6,element:9,embed:3,emit:9,emphasi:10,empti:3,end:5,ensur:[5,6,7,9],enumer:[3,6],equal:[4,5],equival:8,estim:2,even:6,evenli:9,everi:6,exampl:9,exec_precompiled_singlenode_model:5,execut:[3,4,5],execute_custom_nod:0,execute_nod:[3,4,5],execute_onnx:3,execute_onnx_and_make_model:3,exist:[4,9],exit:9,expect:[1,3,4,5,7],experiment:10,explor:[3,5,10],expos:3,extra:[1,9],extract:[1,2],factor:9,factoroutmulsignmagnitud:8,fals:[3,6,9],fan:1,fast:5,fewest:3,field:[7,9],file:[3,7,9],filenam:[3,7],find:3,find_consum:3,find_produc:3,finn:[],finn_dt:9,finnpy_to_packed_bytearrai:9,first:[1,8],fix:[6,9],flatten:9,float32:[1,3],flow:[],fold_const:0,foldconst:6,folder:[7,9],follow:[1,7,10],form:5,found:7,four:9,fpga:10,fpgadataflow:[0,1,4,6],fpgapart:[5,7],framework:[5,10],fraser:5,from:[2,3,7,9,10],full:3,further:6,gambardella:5,gen_finn_dt_tensor:9,gener:[0,7,9,10],generate_param:5,get:[3,4],get_all_tensor_nam:3,get_by_nam:9,get_finn_root:9,get_folded_input_shap:5,get_folded_output_shap:5,get_hls_compatible_threshold_tensor:5,get_hls_compatible_weight_tensor:5,get_hls_datatype_str:3,get_initi:3,get_input_datatyp:5,get_instream_width:5,get_metadata_prop:3,get_nodeattr:4,get_nodeattr_typ:[4,5],get_num_possible_valu:3,get_number_output_valu:5,get_output_datatyp:5,get_outstream_width:5,get_per_tensor_fanout:1,get_smallest_poss:3,get_stream_width:5,get_template_param_valu:5,get_tensor_datatyp:3,get_tensor_fanout:3,get_tensor_shap:3,get_tensor_valueinfo:3,get_test_model_def_fxn:9,get_test_model_train:9,get_test_model_untrain:9,get_trained_checkpoint:9,get_weight_datatyp:5,getcustomop:4,github:10,give:[6,8],give_unique_node_nam:6,given:[1,2,3,4,5,9],giverandomtensornam:6,givereadabletensornam:6,giveuniquenodenam:6,global_includ:5,graph:[1,3,4,5,6,7],graphic:10,guarante:6,guid:0,has:[1,3,6,7,9],have:[1,3,6,7,8],height:[],hex:9,hexstr:9,hexstring2npbytearrai:9,highli:10,hls_synth_res_estim:[0,1],hls_var_nam:9,hlscustomop:5,hlslib:[5,10],hlssynth_ipgen:[0,6],homepag:10,host:9,how:[0,9],human:6,imag:[],img:[],immedi:7,implement:3,includ:[3,7,10],index:10,indic:[3,4,5,6,7],infer:[3,4,5,6,9,10],infer_datatyp:0,infer_node_datatyp:[4,5],infer_shap:0,inferbinarystreamingfclay:7,inferdatatyp:6,infershap:6,infinit:6,info:[6,9],info_messag:1,inform:[1,7],infrastructur:7,inherit:6,initi:[1,3],innermost:9,inp0:4,inp1:4,inp:5,input:[1,3,4,5,6,8,9],input_dict:3,input_dtyp:9,input_fil:9,insert:[7,9],insert_tlastmark:[0,6],inserttlastmark:7,insid:4,instanc:[3,4,5,8],instanti:7,instead:9,int16:3,int2:3,int32:3,int3:3,int4:3,int8:3,integ:[3,8,9],intend:10,interfac:7,interleav:5,interleave_matrix_outer_dim_from_partit:9,intermedi:[3,6],intern:6,ipgen_singlenode_cod:5,ipgenbuild:9,is_integ:3,is_linear:1,item:9,kei:3,know:6,lab:10,lambda:3,largest:3,layer:[6,7],lead:9,learn:5,leeser:5,len:9,let:6,letter:9,librari:10,library_path:9,like:10,linear:[1,3],link:10,list:[1,3],look:1,loop:6,lut_estim:5,made:[3,6],magnitud:8,make:[6,7],make_build_dir:9,make_collapsed_param_fxn:8,make_deepcopi:3,make_deploy:[0,6],make_empty_exec_context:3,make_new_valueinfo_nam:3,make_project:7,make_pynq_driv:[0,6],make_pynq_proj:[0,6],make_shape_compatible_op:[4,5],makepynqdriv:7,makepynqproject:7,manipul:3,manual:6,matmul:[6,8],matrix:[5,8,9],max:[3,9],mean:9,meant:6,member:[4,5],metadata_prop:[3,7],min:[3,9],minimum:9,mixtur:1,mkdtemp:9,mode:[],model:[1,2,3,4,5,6,7,8,9],model_a:3,model_b:3,model_was_chang:6,modelproto:[3,7],modelwrapp:[0,1,6],modul:10,more:[3,6,9],move:8,moveaddpastmul:8,movescalaraddpastmatmul:8,movescalarmulpastmatmul:8,mul:[6,8],multidimension:9,multipl:[6,8,9],multipli:8,multithreshold:[0,7,8],must:[4,6,7,8,9],mvtu:7,n_partit:9,n_thres_step:5,name:[1,2,3,4,6,9],name_field:9,ndarrai:9,nearest:[8,9],necessari:7,need:[2,4,5,6],neg:[3,8],netnam:9,network:[5,10],neural:[5,10],new_nam:3,next:8,no_decl:9,node:[1,2,3,4,5,6,7,8],node_inputs_in_expected_ord:1,node_res_estim:5,non:7,none:[3,4,9],notwithstand:1,now:[1,3],npbytearrai:9,npbytearray2hexstr:9,npy:9,npy_to_dynamic_output:5,npy_to_rtlsim_input:9,number:[3,4,5,9],numpi:[5,9],numpy_to_hls_cod:9,object:[3,9],old_nam:3,onc:6,one:[1,3,7,9],onli:[1,3,6,7,8],onnx:[0,3,4,5,7],onnx_exec:0,onnx_model_proto:3,onnx_nod:[4,5],onnxruntim:3,op_nam:8,op_typ:1,oper:[3,8],ops:[1,8],order:1,orig_thres_matrix:5,orig_weight_matrix:5,origin:5,other:[3,8],otherwis:[3,6,9],out:1,out_bia:4,out_scal:4,out_shap:9,outcom:7,output:[3,4,5,6,9],output_shap:9,overlai:7,overview:10,pack:[7,9],pack_innermost_dim:9,pack_innermost_dim_as_hex_str:9,packag:[],packed_bytearrai:9,packed_bytearray_to_finnpi:9,packedbit:9,pad:9,pad_tensor_to_multiple_of:9,pad_to_dim:9,pad_to_nbit:9,page:10,pair:7,paramet:8,part:[4,9],particular:[4,5,9],partit:3,pass:[0,5],password:7,past:8,path:[5,9],per:7,perform:[4,5],permit:[4,5],place:7,platform:7,png:[],point:6,posit:[5,8,9],possibl:[3,7],pragma:5,preced:8,precid:8,precis:9,precomput:6,prefer:3,prefix:9,prepend:9,preusser:5,previous:7,prior:[6,7,9],produc:[1,3],product:9,project:[7,10],properti:[1,3],provid:3,pynq:7,pynq_driver_dir:7,python:[7,9],pyveril:9,pyverilate_stitched_ip:9,qnn:10,quantiz:[1,5,10],random:[6,9],random_str:9,randomli:9,rather:10,reach:6,read:10,read_npy_data:5,readabl:6,readthedoc:[],recommend:6,refer:10,registri:0,relat:10,remot:3,remov:[7,9],remove_by_nam:9,remove_prefix:9,renam:3,rename_tensor:3,reorder:[0,6],repeat:[6,8],repeatedli:3,replac:6,repositori:10,repositroi:[],repres:[3,9],represent:9,requir:[3,4,5],res_estim:[0,1],research:10,reset_rtlsim:5,reshap:5,resourc:2,respect:9,result:[1,2,3,6,7,8,9],return_full_exec_context:3,returned_dict:[4,5],revers:9,reverse_endian:9,reverse_inn:9,right:10,root:9,round:[8,9],round_threshold:[0,6],roundandclipthreshold:8,roundup_to_integer_multipl:9,row:5,rtlsim:[3,5],rtlsim_output_to_npi:9,run:[3,7],same:[7,9],save:[3,9],save_as_npi:5,scalar:8,scale:[],scp:7,script:7,search:10,second:[7,8],see:[8,9],seen:10,sep:5,separ:10,sequenc:9,set:[3,4,5,7,8,9],set_attribut:[],set_executable_path:9,set_initi:3,set_ipgen_path:9,set_metadata_prop:3,set_nodeattr:4,set_sim_mod:[0,6],set_tensor_datatyp:3,set_tensor_shap:3,setsimmod:[],shape:[3,4,5,6,9],shell:7,should:[1,3,6],sign:[3,6,8,9],sign_to_thr:[0,6],sim:[5,9],sim_mod:[],simd:5,sinc:[3,9],singl:[3,8,9],small:1,smallest:3,some:[3,6],space:10,specif:10,specifi:[3,6,9],split:[7,8,9],standard:[3,4,5],stitch:[7,9],store:[4,7,9],streamingdataflowpartit:[0,7],streamingfclayer_batch:[0,4,7],streamingmaxpool_batch:[0,4],streamlin:[0,6],string:[1,9],stringlength:9,strm_decl:5,structur:1,style:10,sub:6,subdirectori:7,subgraph:3,submodul:0,subpackag:[],subset:1,success:7,suitabl:5,surviv:9,synth_pynq_proj:[0,6],synthesi:[2,7],synthpynqproject:7,take:[1,3,6,8,9],taken:[3,7,10],target:[7,10],target_dir:7,targetbit:9,tcl:7,tcl_script:9,tempfil:9,templat:[0,4,6],temporari:9,tensor:[1,3,6,8,9],tensor_fanout:1,tensor_nam:[1,3],tensor_shap:[3,9],tensor_valu:3,termin:7,ternari:3,test:[0,6],thei:8,them:[1,7,8],thi:[1,3,4,5,6,7,9,10],thing:10,threshold:[4,5,8],time:6,tlastmark:[0,4,7],tmem:5,togeth:7,toggle_clk:5,tool:10,topolog:0,train:10,transform:[0,3],transformed_model:6,travers:1,tupl:6,two:[3,7,8,9,10],type:[3,6,9],uint16:3,uint2:[3,9],uint32:3,uint3:3,uint4:3,uint8:[3,9],umuroglu:5,under:7,uniqu:6,unpack:[7,9],unpack_innermost_dim_from_hex_str:9,unsign:[3,8],until:3,updat:8,upper:10,used:[3,4,5,9,10],useful:3,user:6,usernam:7,using:[3,6,8,9,10],util:[0,3,4,5],val:9,valu:[3,4,5,7,8,9],value_info:3,valueinfo:[3,6],valueinfo_to_tensor:9,valueinfoproto:[3,9],variabl:9,vector:[8,9],verif:1,verifi:[1,4,5],verify_custom_nod:0,verify_nod:[1,4,5],via:3,view:10,visser:5,vivado:[2,3,7,10],vivado_pynq_proj:7,vivado_stitch_proj:7,wai:1,want:8,wbit:9,websit:10,weight:[3,5],when:[1,6],where:[3,4,5,7,8],whether:[1,3,4,5,6],which:[3,4,5,7,8,9,10],width:9,wmem:5,work:[3,9],wrapper:3,write:0,xdnn:10,xilinx:10,xnorpopcount:0,xnorpopcountmatmul:[4,6,7],you:6,your:6,zero:[3,8,9]},titles:["finn package","finn.analysis package","finn.analysis.fpgadataflow package","finn.core package","finn.custom_op package","finn.custom_op.fpgadataflow package","finn.transformation package","finn.transformation.fpgadataflow package","finn.transformation.streamline package","finn.util package","FINN","src"],titleterms:{absorb:8,analysi:[1,2],basic:9,batchnorm_to_affin:6,bipolar_to_xnor:6,cleanup:7,codegen_ipgen:7,codegen_ipstitch:7,codegen_npysim:7,collapse_rep:8,compil:7,content:[0,1,2,3,4,5,6,7,8,9],convert_to_hls_lay:7,convolutioninputgener:5,core:3,create_dataflow_partit:7,custom_op:[4,5],data_pack:9,datatyp:3,document:[],execute_custom_nod:3,finn:[0,1,2,3,4,5,6,7,8,9,10],fold_const:6,fpgadataflow:[2,5,7,9],gener:6,guid:6,hls_synth_res_estim:2,hlssynth_ipgen:7,how:1,indic:10,infer_datatyp:6,infer_shap:6,insert_tlastmark:7,make_deploy:7,make_pynq_driv:7,make_pynq_proj:7,modelwrapp:3,modul:[0,1,2,3,4,5,6,7,8,9],multithreshold:4,onnx:9,onnx_exec:3,packag:[0,1,2,3,4,5,6,7,8,9],pass:1,registri:4,reorder:8,res_estim:2,round_threshold:8,set_sim_mod:7,sign_to_thr:8,src:11,streamingdataflowpartit:4,streamingfclayer_batch:5,streamingmaxpool_batch:5,streamlin:8,submodul:[1,2,3,4,5,6,7,8,9],subpackag:[0,1,4,6],synth_pynq_proj:7,tabl:10,templat:[5,7],test:9,tlastmark:5,topolog:1,transform:[6,7,8],util:9,verify_custom_nod:1,welcom:[],what:10,write:[1,6],xnorpopcount:4}}) \ No newline at end of file diff --git a/docs/finn/index.rst b/docs/finn/index.rst index 98f2564815fad2af314c4c639197f3722e2705e8..f8254e24a85c2351db25bc6824af22348ad91522 100644 --- a/docs/finn/index.rst +++ b/docs/finn/index.rst @@ -11,12 +11,15 @@ FINN is an experimental framework from Xilinx Research Labs to explore deep neur What is FINN? ============= 'FINN' is colloquially used to refer to two separate but highly related things: + * The FINN project, which includes tools for training quantized neural networks such as Brevitas, the FINN compiler, and the finn-hlslib Vivado HLS library of FPGA components for QNNs. An overview of the project can be taken from the following graphic and details can be seen on the project homepage. + .. image:: ../img/finn-flow.png - :height: 600px - :scale: 75% - :align: center -* The repository, this readthedocs website corresponds to. This is the FINN compiler, which is the centerpiece of the FINN project. The GitHub repositroy can be viewed using the link in the upper right corner. + :height: 600px + :scale: 75% + :align: center + +* The repository, this Read the Docs website corresponds to. This is the FINN compiler, which is the centerpiece of the FINN project. The GitHub repository can be viewed using the link in the upper right corner. .. toctree:: :maxdepth: 2