From 9fa75b684c18e5921b30398004d78f900c41d2de Mon Sep 17 00:00:00 2001
From: auphelia <jakobapk@web.de>
Date: Wed, 26 Feb 2020 17:14:58 +0000
Subject: [PATCH] [Sphinx Documentation] First draft of end2end flow page and
 references to flow step pages

---
 .../_build/doctrees/brevitas_export.doctree   | Bin 2654 -> 3123 bytes
 .../_build/doctrees/end_to_end_flow.doctree   | Bin 2764 -> 7511 bytes
 docs/finn/_build/doctrees/environment.pickle  | Bin 137723 -> 138570 bytes
 docs/finn/_build/doctrees/nw_prep.doctree     | Bin 2698 -> 3142 bytes
 docs/finn/_build/doctrees/pynq_deploy.doctree | Bin 2670 -> 3130 bytes
 .../finn/_build/doctrees/verification.doctree | Bin 2747 -> 3211 bytes
 .../finn/_build/doctrees/vivado_synth.doctree | Bin 2721 -> 3161 bytes
 .../html/_sources/brevitas_export.rst.txt     |   2 ++
 .../html/_sources/end_to_end_flow.rst.txt     |  19 ++++++++++++++++-
 .../finn/_build/html/_sources/nw_prep.rst.txt |   2 ++
 .../_build/html/_sources/pynq_deploy.rst.txt  |   2 ++
 .../_build/html/_sources/verification.rst.txt |   2 ++
 .../_build/html/_sources/vivado_synth.rst.txt |   8 ++++---
 docs/finn/_build/html/brevitas_export.html    |   4 ++--
 docs/finn/_build/html/end_to_end_flow.html    |  20 +++++++++++++++---
 docs/finn/_build/html/genindex.html           |   2 +-
 docs/finn/_build/html/getting_started.html    |   2 +-
 docs/finn/_build/html/index.html              |   2 +-
 docs/finn/_build/html/internals.html          |   2 +-
 docs/finn/_build/html/nw_prep.html            |   8 +++----
 docs/finn/_build/html/objects.inv             | Bin 3843 -> 3903 bytes
 docs/finn/_build/html/py-modindex.html        |   2 +-
 docs/finn/_build/html/pynq_deploy.html        |   8 +++----
 docs/finn/_build/html/search.html             |   2 +-
 docs/finn/_build/html/searchindex.js          |   2 +-
 .../finn.analysis.fpgadataflow.html           |   2 +-
 .../html/source_code/finn.analysis.html       |   2 +-
 .../_build/html/source_code/finn.core.html    |   2 +-
 .../finn.custom_op.fpgadataflow.html          |   2 +-
 .../html/source_code/finn.custom_op.html      |   2 +-
 docs/finn/_build/html/source_code/finn.html   |   2 +-
 .../finn.transformation.fpgadataflow.html     |   2 +-
 .../html/source_code/finn.transformation.html |   2 +-
 .../finn.transformation.streamline.html       |   2 +-
 .../_build/html/source_code/finn.util.html    |   2 +-
 .../finn/_build/html/source_code/modules.html |   2 +-
 docs/finn/_build/html/tutorials.html          |   2 +-
 docs/finn/_build/html/verification.html       |   4 ++--
 docs/finn/_build/html/vivado_synth.html       |  10 ++++-----
 docs/finn/brevitas_export.rst                 |   2 ++
 docs/finn/end_to_end_flow.rst                 |  19 ++++++++++++++++-
 docs/finn/nw_prep.rst                         |   2 ++
 docs/finn/pynq_deploy.rst                     |   2 ++
 docs/finn/verification.rst                    |   2 ++
 docs/finn/vivado_synth.rst                    |   8 ++++---
 45 files changed, 115 insertions(+), 47 deletions(-)

diff --git a/docs/finn/_build/doctrees/brevitas_export.doctree b/docs/finn/_build/doctrees/brevitas_export.doctree
index 00e923802dfe3532afd11a343adef831d5c4ccd0..f380990fd60a1b776ac71956405a3733e47d8d27 100644
GIT binary patch
delta 945
zcmah|!D<sx6!j&Ugfzukti(!eCZW(2acCDVw1ifX7zxCMD2RmNCG(m)m`u`nZ;Dxj
z=t6MuK*GE(T=*6F0RN=FPz680JIQ1cikQV+%$xJhz4x5+F1IFkwNHtQ()w7d9G2jQ
zObY6@nNYsk|Ez|p1e)A34Bc$H?A#WVo9tu1=ZYr^QVlh}tX8GwvQyhqa$^p8ID;rp
zrUY#}w96EvWujv{Ox1`?_NmJpp&$+f;xfs5p4(!|FO!3q*BsZJlLwH8{op6)b=awU
zO$r;qD4Puhx3TVEWwEv!%7go`hw$AQ915^g)BH0sBxV1K+)I^%F~RU}#a@r{P+3Lw
z9I2kJ0v&@s?UO?A(JJucXt>ez7H-3$ZAy@naoajnY`#}%A)_A3xHt*5NA%M6MQkut
zGMq}2+jx<+go(Z|RJz41vpF!Gw}BBu1q?D=X8(yn8xfF0!19#y+2&m%%b<Yr`*!>d
z*_-@~e<$SI<ehdzNMUl3d>?xTIg~y_xl9Eauq{5#6GMIrs3+6GsTlNGc>Wcvx(Azq
z(K+;!!mj7%(!VtLQ6t=6Uo%D+&zpR}1?!q!#yM?cYND7za%%O-JhtJtAs<z-hl}a^
zpwF_c7q2C?sM}n3dO}|)W~eVJ%s&$4;Sc&eihR4SNRYx~ME(9>8l=`?=d2Svfkd#j
hl8Kk~$}6=bXY@z{!Yd?`8R1fgpZ44?bNv@<*}wL_P&xnr

delta 460
zcmdliaZiM`fn{ni*F;vg$##r+szN<%1&Kwec_mXa1Tq*in0wfY^Gl18Q>Xa#u;gUs
z0qN4D#ECT?;-x+8C5h>IiMgp$GWas2GPpsiGo&Z;FdDFA$aphPe#2PHs6RQ2Ns3)R
zgFSXihUnyOrr>(13=5zE8M3ugG&1CYqKZJQ48*EHtR6e1G($7P3}~7$Aw`B6(ivJn
zdsu;rbqOifhP$sGtPALeRJap*_>+oK%Q8z6i*-{g3i69erX<2#g^*H!OCdRw6KE_m
z#M@xEFynIvBp^9}A(^2C^yOqDmQY5%%^fT=85wIfE3sKKGHPv(V~=Li>0t*2YGz9D
tl-em7VHv^2J)9tclFEWqh>%}#hCEOzID@-*@^8)$lRt3jP3GrO0RYw)opk^J

diff --git a/docs/finn/_build/doctrees/end_to_end_flow.doctree b/docs/finn/_build/doctrees/end_to_end_flow.doctree
index e14bda89515a9735bb09990a3d4a66f0f1922c88..c13a68e62d11c303554ae61cad7e5a50fa1ceccd 100644
GIT binary patch
literal 7511
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

delta 91
zcmca^bw-r6fo1AJu8pj1j7&XdlP55maZbr#kDZbs3gK-|U<qT~yh}8fi7BIMvyQ}K
qW`&H9jKJa^&b-9j)RM}A)Z!_%Q!+yQiZkSabYKQ|@n%sOCq@9N(jTAz

diff --git a/docs/finn/_build/doctrees/environment.pickle b/docs/finn/_build/doctrees/environment.pickle
index 910c29a470a172c93984555d67bd742431dd6a4b..5febaf2cfdde0c5413638b3dfb4d9507b533b8f7 100644
GIT binary patch
delta 20271
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

delta 21720
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

diff --git a/docs/finn/_build/doctrees/nw_prep.doctree b/docs/finn/_build/doctrees/nw_prep.doctree
index 69ff3f56bb44bea1b8884dfc64d89017c3377faa..056e7611eef0bc038c6e32857e978ca15509ab6c 100644
GIT binary patch
delta 938
zcmaiz&uSV`6vlhiQH*Ir2q8_eI!Yi)i2GJTY-z<J*j2MBGF+V#k3?te{E4+C*e(Jk
zTnI8Zi#~@>&`lqun=VSB570A{(G0ZU;x6Xi-<*5S_kH(j`};%XQ{tw&K2z%D65bO@
zhg&^xq$kUt<%KMvBGxMvRWrug$b!*RiK(`n{b<yLV!>%&mm+115B($Qij>291|NdN
zv`7s42FNB8$q~1}a3sc&VO%6_)3v%Fy_c*Mb33!<dF=r6SoRN5ZDFqEb~tYMS8ui@
zZqeGNwL@#SEnR$!`-Jb^;#k03Q}N!hYj)(Z*rW83-yT-PiFd_LybrPa(>&H!6?{Pj
zpRIz9Q4MZO5nNpbKUuao4gR8;U^!DsY#HE;P3tVsja%I5n})<JET+99RA1Qz;Y%I3
zAR($pkuD3g4LelCF1#N>*U`wK4v_d=(6!D)3#_@22$-?O&K(m$$WQ{Z1VlSt^tHHk
zX(ATL5bq}bhV9RP#=kOlJ-<|{j1}hJl5b<rF-vA-xJ`{yD*Cz|Bnqg$j@%V#f7h9e
zAl(0gddtO4-})>$%yG}1H_|yarCdI+C$<AaZ3wo_dla8#J~0`1UR&ff{H}<@29>rb
zhG*(+sMTT^)uP(BRl{^t5-1$LA}?hacq)*`KM{+k|Bc}>QNJV9Kafxca1I0i4J7<2
prAWML)nChqddpYh=lT~F6B)<ihJ9*UL$G8^tm)7-y^m`fe*rlkO=|!E

delta 464
zcmX>m(Iv{-z%sR-Ya*-LWHrVzRiPfXg2bZKypkyy0vU`M%sp(y`K3k4sZ;!VSaLG+
zfOKh6;=~dU@zNgllEn19#N5;=8GIR18QdV%8PXH~Xs~3+cr#DF!`RQLKRJg<id{d0
zJ$6cl=;U6e)Ox853!wfC+1e=@8S+3;MIcrNVpSkkkDXGQp_yR@G|ZTgBEt;n3@xBN
ztU$%OgcNJTomUUm1@uBH+zCCxd8sAk`9;~f1x2YquP2sd=I2dGgt-hZt$-?x<X}#q
z@yrn4gWbf8+dTrYQ{Vxbp#}8q<RF$%M!wA}SY|RZ)@*iSvu0$}+FZvT&7{-A4hq}M
rl;SD1Q!>Ibf{S}NK>{U}1*s4rzv2vepj2=MckyOvE;+`@N<1n6ahjg^

diff --git a/docs/finn/_build/doctrees/pynq_deploy.doctree b/docs/finn/_build/doctrees/pynq_deploy.doctree
index 10e460682f238d396cbc14b947b7e3679aea4263..c0652f5732fef5bd3778d48bba1e1aaedadcfcc8 100644
GIT binary patch
delta 957
zcmah|O>War5XMQIC=H@i1xlrmI8mjhq77mRRn>y3s3?+Iv8saQ#M4Yf>=-{A;YAf#
zAXq#JMSd(e04K<fOK<~@07Bvb%(I=yEFg<n_|50}`Mz&{-1vH1eN*^!@9IqL9JKHX
zFZ!l81YbmA@2$8LEmZmSc3U&t(0OTC;EpHZLxH89n0-Gx<*El4BTMj#Odlj^5%7|4
z4jt15fn{D8j~ozPg%@4Z1IHJbM+Nh|$R>d|01+K2`?;V$>pCZQv5tE(iJFczJ?NXb
zE=Snt3EZT(NwGz--4g-c!CivyByenCt*b`1^1gW_hm(si-<vqY%p#bi+R?3CZ(7IB
zs`{r?|IsSYF=}!15`hm_fgda<p2mOCim+U<#n&?|+A&pCSS+4qwS?n1o3NgWA|Ojm
zlN!Y|r_-r?8(zCG@C_0SNQUPFu#A3a#42411gtQ=^*1JkkiG<{5+FP6Vy;EkrJmRz
zZK5#$Oxc}(%YRmskMogws3?v3m*RQuF;+>Piph9MwjNn5HW^TT3(bI+<*OgMkiLIF
zOAl~Ex}Zv8o46Cq_scb9N(x_NA@jjDY+%eBl9QH}#bRuNlZA!T?>4`GMx{M+<O?nF
zxz@~Z-qc1+b0)r)l0*cw#XFJS0Trp^?^NRHKV5lDs9*mx0$0cI3dZsz3UX7y3s3aU
gQ;}hCc{I}IKdBh6_@3#oi-~80Cv?6Rov&^F0q?6-^8f$<

delta 478
zcmdlb@lJ%bfn{nk*F;vg$wrKMszN<%1&Kwec_mXa1Tq*in0wfY^Gl18Q>Xa#u;gUs
z0qN4D#EBIi;-x+8C5h>IiMgp$GWas2GPpsiGo&Z8FzT>m$aphPe!$qSq@TeaJ0*hw
zXh=y>eqQ>N$x}2Nr_@f-$Y9NYNQqAFWQwhq%CG>Mnjs64kq2r}1Y%_%Rs~}9*eRtM
zni*z5D~t&#GR%<9&;nY{3RJ91NU=8D(e+?mK#!%uozTNyP?=Y#o03|PlV6z&3XVjW
zs~}PeC{joc<pdhb3<(RcTbS{=0}{F%z~If$0{U{Y6H6!~-{u)CGZ`6cHXE^7Gcsyz
z&SQ^e(&=Fbg>+_0F);Kp!ZL!3dpJP?C6xuK5Fx+f40)hba0YkrW^OJy#>rwlDgd{B
BqkjMZ

diff --git a/docs/finn/_build/doctrees/verification.doctree b/docs/finn/_build/doctrees/verification.doctree
index cd9c5a3963452d52e35860897b46609925109a1a..9b33349149bca9ee596ebf0a17a4aa4d22b3c112 100644
GIT binary patch
delta 934
zcmah|O=}ZT6!j&UgqWg)T0+X0OhTb4;w-wWCG-Ogm0(=Ck`P{!o7}-<66VbmvuINn
zg5U!Q^IW)a?GFgJaqrJj6n}tsCLgAPW^otqy)*Zod(N3JTW_=4RqXxM#zd=_CA=Zy
zE_b@%DqrorQWvU(noOIf(KrXk>R2uAS_Aum!bDw7zMVaingboHt>nh)yYghh<z1Wi
zL19wHdX^2U%4B@V9k5-6QDhjEaWU|m7AXG-yC3nIlj`O1J<Q`?@Q6kYb2YEY@peEW
zU01kCwMCVo%GQ;KcX5~CJ2N;IFjv+5OZJhKeLb?BC<h$T^ve-3&SPa=tB2I;WF6=T
zjc`taz=!L=2TO9B;a9W`EVn87C(-RO>abX=Br_e)ZUyr4o^eghzr=-A1&TBzRCCTu
zlUaB<gqGVNV}R6dLA%i$H9{{g6auD%%*-LD*D>THA#_5lGF=c{OkLWB1+u{Z8hyrg
zr+VxIWACP)wL``V)1UF@kyF%3{uCE75zMyQB1{ud|2A?@CWBjdG=%y68*JA+Ob2G`
z<SEA;Z#qim*qAbTON@jI{YD>z;9UyLGMg9=T|Qo9b$&MG{u#A)D0nZ7S)h&Ls-{K5
z5{5l+jXw&Q>b06Dp1S1m*UaDXzteX_s2~4Jfz*0%4!t1yv0zmtV~=Z<r)ovQ<<Aks
Y`8zd}Dc9k)=nR}bII1T7PdD%U1{9!7PXGV_

delta 457
zcmeB{+%3x5z%q3M*F;vg$)=2TszN<%1&Kwec_mXa1Tq*in0wfY^Gl18Q>Xa#u;gUs
z0qN4D#EF$2;-x+8C5h>IiMgp$GWas2GPpsiGo&Z8G3v5p$aphP{>(U+QGfD8CMiz+
z4EES58KONYlX;j@CQC5$)=Onr0FB9zt(~HgArF*O1Y%_%Rs~}9*eRtMni*z5GmQx;
zGR%<9&;r`V3RJ91NU=8Dm8M`_K%b<-ozNqmR+^Vwl9`{En4?>kT9lcVnVbmXPDzBh
zZt`7bDUU>CH*x|^WQO<~><ngnPJoAGh8EC&lP9r+GV*PH!7`JPv1W4<n>8b&*5-Ze
z(M&o$?4Ur+OevmHJ0&A5Be=MS6C_YlS&#}5@+;1e2TBEJa2Icm=8|KaoX(>H093-8
AOaK4?

diff --git a/docs/finn/_build/doctrees/vivado_synth.doctree b/docs/finn/_build/doctrees/vivado_synth.doctree
index 9c07fc06e4a1337c0c0f072a46af36fb96ab7af7..c8ce00f960b27922dd924d09d5f250f06fb48397 100644
GIT binary patch
delta 1015
zcmah|O^ee|6!o=9O6@R1(K=RYCoKchK^kOsIt-(tWlABs5I0gn+PvuvwrR;nnJ$Ko
z3&F)xDS0jgH~s<_-S|`VSBT(Ryf0~E7it%8@p4b@J@=gRJ{7)QmoKFE`o>IdXf?RR
z6yJ1v)aN1Jf632z4P=(rG}Rc}W78TM-o)|YE{9B;&wiaeVzNt5ZHu#wxL%LyJYX5$
z>^bIua>z2NZ#$H?2vbI;OC6s>8VIDB;td10OL^EP^;FQAwGK#e_W4?&`J@>QKsM4-
zdM3CqQP4%<6<^STTd)KBq7kS%l=Yxv!j>SMZ*#bUr+{Z0PqEDdxCwg*-;Lo=fpSX@
z-;xV*6mF$%WRAo>poO<n&!#)jSl8+ywz|I#bPQ@VCxhU_b>KS*xoPwlZbOr8YOJ_W
z7y4e^bgcT~YL9FVCA!=;!KsK-5vRsDRp6Em#SU`1DoquqN0uPvX`~G+(z6lm`Ucud
z(X%eKjLyV}96jeiA?LB}zd|q!2q+<7b%iCx<<!J`s0eQe+w2Ce$c7PqNjJ&fJSBY~
z<lX$Ed`L)T{#ALNdH^N#C}(;sBWT!`7sZp}EDOwlWyM#2GNOy`uffs-$csdj(0CJe
zgSn9{lPSh()0=oc9T)@Zd1en2n1mgaC<^zM;a}V}c5s5NT}<)|HGUy#bv5!;)%H|p
z=&OGO(^j&opu#`n5KR9a(PKpY_+M0*+^1vO7jH=tt8yka^~PhqB4_g2gs$JQ8O!;u
S>3F9@cR*dPv+&L3tG@wk*lG;`

delta 618
zcmaix&r1S96vrFgT~R|MkRq$y$SAEPDvY3e3WWrgmk=6r@d>tyvnvUOcIY-2*(vDQ
z->}gC(qGcGx9iW79v;KY`@T1y_kF)>-wC-deSAg+@}-j{Cq1=P@6c*f%U>5YYF4$;
zwb(T+Fj$=l2$cmaap~50wuB@2!h(14CSJup$gskd7Hu1*B_Iw2f?Q!uyZva00+$+f
z6Hhx(p@VLI)#f3K)=c_j2#CQtL_Ikq9fjx;Y+MDMKhjSfjZhS3wVP%QVbbHDhN%S4
zIq^WQC#DDrHaoW~6gE916-U{|*umJv*eeSg(r|{N(?z0VNJ0i#WEAUj#XW3!Fdf3H
zD%cfcg22^|@3{^QrlaTj=*lLZ(=p{(s-e_h&rqt(N@oTM<F7%;`ri4l!FiyQbwCDP
za2}*P5_5l~FG6128|8wKjLSp!fkPhh7E`Y>Tq~5I$avU$u(~Z{_*7t^VyXyH=B6WC
J#K|tF{sCpL*i`@k

diff --git a/docs/finn/_build/html/_sources/brevitas_export.rst.txt b/docs/finn/_build/html/_sources/brevitas_export.rst.txt
index 9fc5d1292..7d6d4b8f6 100644
--- a/docs/finn/_build/html/_sources/brevitas_export.rst.txt
+++ b/docs/finn/_build/html/_sources/brevitas_export.rst.txt
@@ -1,3 +1,5 @@
+.. _brevitas_export:
+
 ***************
 Brevitas Export
 ***************
diff --git a/docs/finn/_build/html/_sources/end_to_end_flow.rst.txt b/docs/finn/_build/html/_sources/end_to_end_flow.rst.txt
index 937b00806..36f3f27cc 100644
--- a/docs/finn/_build/html/_sources/end_to_end_flow.rst.txt
+++ b/docs/finn/_build/html/_sources/end_to_end_flow.rst.txt
@@ -2,9 +2,26 @@
 End-to-End Flow
 ***************
 
-The following image shows the end-to-end flow of FINN.
+The following image shows the end-to-end flow of FINN. As you can see in the picture, FINN has a high modularity and has the property that the flow can be stopped at any point and the intermediate result can be used for further processing or other purposes. This enables a wide range of users to benefit from FINN, even if they do not use the whole flow.
 
 .. image:: ../../notebooks/finn-design-flow-example.svg
    :scale: 50%
    :align: center
 
+Flow structure
+==============
+
+The cylinder-like fields show the state of the network representation in the respective step. The rectangular fields represent the transformations that are applied to the network to achieve a certain result. The diagram is divided into five blocks, each of it includes several flow steps. The flow starts in top left corner with Brevitas export (pink block), followed by the preparation of the network (grey block) for the Vivado HLS and Vivado IPI (yellow block). There is also a section for testing and verification in software (green block) and the hardware generation and deployment on the PYNQ board (red block). For more details about the different flow sections, please have a look at the corresponding pages on this website.
+
+* :ref:`brevitas_export`
+
+* :ref:`nw_prep`
+
+* :ref:`vivado_synth`
+
+* :ref:`pynq_deploy`
+
+* :ref:`verification`
+
+
+
diff --git a/docs/finn/_build/html/_sources/nw_prep.rst.txt b/docs/finn/_build/html/_sources/nw_prep.rst.txt
index ed625788c..f6911d84f 100644
--- a/docs/finn/_build/html/_sources/nw_prep.rst.txt
+++ b/docs/finn/_build/html/_sources/nw_prep.rst.txt
@@ -1,3 +1,5 @@
+.. _nw_prep:
+
 *******************
 Network Preparation
 *******************
diff --git a/docs/finn/_build/html/_sources/pynq_deploy.rst.txt b/docs/finn/_build/html/_sources/pynq_deploy.rst.txt
index afdc62460..030f8f5e8 100644
--- a/docs/finn/_build/html/_sources/pynq_deploy.rst.txt
+++ b/docs/finn/_build/html/_sources/pynq_deploy.rst.txt
@@ -1,3 +1,5 @@
+.. _pynq_deploy:
+
 ***************
 PYNQ Deployment
 ***************
diff --git a/docs/finn/_build/html/_sources/verification.rst.txt b/docs/finn/_build/html/_sources/verification.rst.txt
index df72d8eeb..b2d3d6746 100644
--- a/docs/finn/_build/html/_sources/verification.rst.txt
+++ b/docs/finn/_build/html/_sources/verification.rst.txt
@@ -1,3 +1,5 @@
+.. _verification:
+
 ***********************
 Functional Verification
 ***********************
diff --git a/docs/finn/_build/html/_sources/vivado_synth.rst.txt b/docs/finn/_build/html/_sources/vivado_synth.rst.txt
index 3dbdb1905..5e479c306 100644
--- a/docs/finn/_build/html/_sources/vivado_synth.rst.txt
+++ b/docs/finn/_build/html/_sources/vivado_synth.rst.txt
@@ -1,6 +1,8 @@
-*******************************
-Vivado HLS and Vivado Synthesis
-*******************************
+.. _vivado_synth:
+
+*************************
+Vivado HLS and Vivado IPI 
+*************************
 
 .. note:: **Here will be soon a detailed description of how Vivado is used in FINN.**
 
diff --git a/docs/finn/_build/html/brevitas_export.html b/docs/finn/_build/html/brevitas_export.html
index dca2a7148..265a6bee8 100644
--- a/docs/finn/_build/html/brevitas_export.html
+++ b/docs/finn/_build/html/brevitas_export.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
@@ -157,7 +157,7 @@
            <div itemprop="articleBody">
             
   <div class="section" id="brevitas-export">
-<h1>Brevitas Export<a class="headerlink" href="#brevitas-export" title="Permalink to this headline">¶</a></h1>
+<span id="id1"></span><h1>Brevitas Export<a class="headerlink" href="#brevitas-export" title="Permalink to this headline">¶</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p><strong>Here will be soon a detailed description of brevitas export in FINN.</strong></p>
diff --git a/docs/finn/_build/html/end_to_end_flow.html b/docs/finn/_build/html/end_to_end_flow.html
index 5d5261251..4d599394b 100644
--- a/docs/finn/_build/html/end_to_end_flow.html
+++ b/docs/finn/_build/html/end_to_end_flow.html
@@ -83,11 +83,14 @@
               <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorials.html">Tutorials</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">End-to-End Flow</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">End-to-End Flow</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#flow-structure">Flow structure</a></li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
@@ -158,8 +161,19 @@
             
   <div class="section" id="end-to-end-flow">
 <h1>End-to-End Flow<a class="headerlink" href="#end-to-end-flow" title="Permalink to this headline">¶</a></h1>
-<p>The following image shows the end-to-end flow of FINN.</p>
+<p>The following image shows the end-to-end flow of FINN. As you can see in the picture, FINN has a high modularity and has the property that the flow can be stopped at any point and the intermediate result can be used for further processing or other purposes. This enables a wide range of users to benefit from FINN, even if they do not use the whole flow.</p>
 <a class="reference internal image-reference" href="_images/finn-design-flow-example.svg"><img alt="_images/finn-design-flow-example.svg" class="align-center" src="_images/finn-design-flow-example.svg" /></a>
+<div class="section" id="flow-structure">
+<h2>Flow structure<a class="headerlink" href="#flow-structure" title="Permalink to this headline">¶</a></h2>
+<p>The cylinder-like fields show the state of the network representation in the respective step. The rectangular fields represent the transformations that are applied to the network to achieve a certain result. The diagram is divided into five blocks, each of it includes several flow steps. The flow starts in top left corner with Brevitas export (pink block), followed by the preparation of the network (grey block) for the Vivado HLS and Vivado IPI (yellow block). There is also a section for testing and verification in software (green block) and the hardware generation and deployment on the PYNQ board (red block). For more details about the different flow sections, please have a look at the corresponding pages on this website.</p>
+<ul class="simple">
+<li><p><a class="reference internal" href="brevitas_export.html#brevitas-export"><span class="std std-ref">Brevitas Export</span></a></p></li>
+<li><p><a class="reference internal" href="nw_prep.html#nw-prep"><span class="std std-ref">Network Preparation</span></a></p></li>
+<li><p><a class="reference internal" href="vivado_synth.html#vivado-synth"><span class="std std-ref">Vivado HLS and Vivado IPI</span></a></p></li>
+<li><p><a class="reference internal" href="pynq_deploy.html#pynq-deploy"><span class="std std-ref">PYNQ Deployment</span></a></p></li>
+<li><p><a class="reference internal" href="verification.html#verification"><span class="std std-ref">Functional Verification</span></a></p></li>
+</ul>
+</div>
 </div>
 
 
diff --git a/docs/finn/_build/html/genindex.html b/docs/finn/_build/html/genindex.html
index 003bbe3ee..ce534ee6a 100644
--- a/docs/finn/_build/html/genindex.html
+++ b/docs/finn/_build/html/genindex.html
@@ -86,7 +86,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/getting_started.html b/docs/finn/_build/html/getting_started.html
index f8e352fec..d6892eea1 100644
--- a/docs/finn/_build/html/getting_started.html
+++ b/docs/finn/_build/html/getting_started.html
@@ -98,7 +98,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/index.html b/docs/finn/_build/html/index.html
index 63f450504..b08a3f170 100644
--- a/docs/finn/_build/html/index.html
+++ b/docs/finn/_build/html/index.html
@@ -86,7 +86,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/internals.html b/docs/finn/_build/html/internals.html
index d4f2262ce..bc2b5dd6b 100644
--- a/docs/finn/_build/html/internals.html
+++ b/docs/finn/_build/html/internals.html
@@ -101,7 +101,7 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/nw_prep.html b/docs/finn/_build/html/nw_prep.html
index d317ba4cc..a7d923540 100644
--- a/docs/finn/_build/html/nw_prep.html
+++ b/docs/finn/_build/html/nw_prep.html
@@ -35,7 +35,7 @@
   <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Vivado HLS and Vivado Synthesis" href="vivado_synth.html" />
+    <link rel="next" title="Vivado HLS and Vivado IPI" href="vivado_synth.html" />
     <link rel="prev" title="Brevitas Export" href="brevitas_export.html" /> 
 </head>
 
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
@@ -157,7 +157,7 @@
            <div itemprop="articleBody">
             
   <div class="section" id="network-preparation">
-<h1>Network Preparation<a class="headerlink" href="#network-preparation" title="Permalink to this headline">¶</a></h1>
+<span id="nw-prep"></span><h1>Network Preparation<a class="headerlink" href="#network-preparation" title="Permalink to this headline">¶</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p><strong>Here will be soon a detailed description of how the network preparation in FINN works.</strong></p>
@@ -172,7 +172,7 @@
   
     <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
       
-        <a href="vivado_synth.html" class="btn btn-neutral float-right" title="Vivado HLS and Vivado Synthesis" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+        <a href="vivado_synth.html" class="btn btn-neutral float-right" title="Vivado HLS and Vivado IPI" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
         <a href="brevitas_export.html" class="btn btn-neutral float-left" title="Brevitas Export" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
diff --git a/docs/finn/_build/html/objects.inv b/docs/finn/_build/html/objects.inv
index 876e74375478a1aeffd14a94a830d84b48fc5eda..1051aeb5e7bc103a1a5f7c03e99d6ed53aa380e7 100644
GIT binary patch
delta 3814
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

delta 3754
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
U9H}9zxHKD2vF>>O4?izc>Vv;eB>(^b

diff --git a/docs/finn/_build/html/py-modindex.html b/docs/finn/_build/html/py-modindex.html
index 7402105af..e06419ba2 100644
--- a/docs/finn/_build/html/py-modindex.html
+++ b/docs/finn/_build/html/py-modindex.html
@@ -88,7 +88,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/pynq_deploy.html b/docs/finn/_build/html/pynq_deploy.html
index 67a5b904c..e78519b46 100644
--- a/docs/finn/_build/html/pynq_deploy.html
+++ b/docs/finn/_build/html/pynq_deploy.html
@@ -36,7 +36,7 @@
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Functional Verification" href="verification.html" />
-    <link rel="prev" title="Vivado HLS and Vivado Synthesis" href="vivado_synth.html" /> 
+    <link rel="prev" title="Vivado HLS and Vivado IPI" href="vivado_synth.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
@@ -157,7 +157,7 @@
            <div itemprop="articleBody">
             
   <div class="section" id="pynq-deployment">
-<h1>PYNQ Deployment<a class="headerlink" href="#pynq-deployment" title="Permalink to this headline">¶</a></h1>
+<span id="pynq-deploy"></span><h1>PYNQ Deployment<a class="headerlink" href="#pynq-deployment" title="Permalink to this headline">¶</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p><strong>On this page you can find soon more details about the PYNQ deployment in FINN.</strong></p>
@@ -175,7 +175,7 @@
         <a href="verification.html" class="btn btn-neutral float-right" title="Functional Verification" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
-        <a href="vivado_synth.html" class="btn btn-neutral float-left" title="Vivado HLS and Vivado Synthesis" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+        <a href="vivado_synth.html" class="btn btn-neutral float-left" title="Vivado HLS and Vivado IPI" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
     </div>
   
diff --git a/docs/finn/_build/html/search.html b/docs/finn/_build/html/search.html
index b2b33038f..dfde29358 100644
--- a/docs/finn/_build/html/search.html
+++ b/docs/finn/_build/html/search.html
@@ -86,7 +86,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/searchindex.js b/docs/finn/_build/html/searchindex.js
index b86ad55e3..bf7beafc5 100644
--- a/docs/finn/_build/html/searchindex.js
+++ b/docs/finn/_build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["brevitas_export","end_to_end_flow","genindex","getting_started","index","internals","nw_prep","pynq_deploy","source_code/finn","source_code/finn.analysis","source_code/finn.analysis.fpgadataflow","source_code/finn.core","source_code/finn.custom_op","source_code/finn.custom_op.fpgadataflow","source_code/finn.transformation","source_code/finn.transformation.fpgadataflow","source_code/finn.transformation.streamline","source_code/finn.util","source_code/modules","tutorials","verification","vivado_synth"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.index":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["brevitas_export.rst","end_to_end_flow.rst","genindex.rst","getting_started.rst","index.rst","internals.rst","nw_prep.rst","pynq_deploy.rst","source_code/finn.rst","source_code/finn.analysis.rst","source_code/finn.analysis.fpgadataflow.rst","source_code/finn.core.rst","source_code/finn.custom_op.rst","source_code/finn.custom_op.fpgadataflow.rst","source_code/finn.transformation.rst","source_code/finn.transformation.fpgadataflow.rst","source_code/finn.transformation.streamline.rst","source_code/finn.util.rst","source_code/modules.rst","tutorials.rst","verification.rst","vivado_synth.rst"],objects:{"finn.analysis":{topology:[9,0,0,"-"],verify_custom_nodes:[9,0,0,"-"]},"finn.analysis.fpgadataflow":{hls_synth_res_estimation:[10,0,0,"-"],res_estimation:[10,0,0,"-"]},"finn.analysis.fpgadataflow.hls_synth_res_estimation":{hls_synth_res_estimation:[10,1,1,""]},"finn.analysis.fpgadataflow.res_estimation":{res_estimation:[10,1,1,""]},"finn.analysis.topology":{all_tensors_f32:[9,1,1,""],get_per_tensor_fanouts:[9,1,1,""],is_linear:[9,1,1,""],node_inputs_in_expected_order:[9,1,1,""]},"finn.analysis.verify_custom_nodes":{verify_nodes:[9,1,1,""]},"finn.core":{datatype:[11,0,0,"-"],execute_custom_node:[11,0,0,"-"],modelwrapper:[11,0,0,"-"],onnx_exec:[11,0,0,"-"],remote_exec:[11,0,0,"-"],rtlsim_exec:[11,0,0,"-"]},"finn.core.datatype":{DataType:[11,2,1,""]},"finn.core.datatype.DataType":{BINARY:[11,3,1,""],BIPOLAR:[11,3,1,""],FLOAT32:[11,3,1,""],INT16:[11,3,1,""],INT2:[11,3,1,""],INT32:[11,3,1,""],INT3:[11,3,1,""],INT4:[11,3,1,""],INT8:[11,3,1,""],TERNARY:[11,3,1,""],UINT16:[11,3,1,""],UINT2:[11,3,1,""],UINT32:[11,3,1,""],UINT3:[11,3,1,""],UINT4:[11,3,1,""],UINT8:[11,3,1,""],allowed:[11,4,1,""],bitwidth:[11,4,1,""],get_hls_datatype_str:[11,4,1,""],get_num_possible_values:[11,4,1,""],get_smallest_possible:[11,4,1,""],is_integer:[11,4,1,""],max:[11,4,1,""],min:[11,4,1,""],signed:[11,4,1,""]},"finn.core.execute_custom_node":{execute_custom_node:[11,1,1,""]},"finn.core.modelwrapper":{ModelWrapper:[11,2,1,""]},"finn.core.modelwrapper.ModelWrapper":{analysis:[11,4,1,""],check_all_tensor_shapes_specified:[11,4,1,""],check_compatibility:[11,4,1,""],find_consumer:[11,4,1,""],find_producer:[11,4,1,""],get_all_tensor_names:[11,4,1,""],get_initializer:[11,4,1,""],get_metadata_prop:[11,4,1,""],get_tensor_datatype:[11,4,1,""],get_tensor_fanout:[11,4,1,""],get_tensor_shape:[11,4,1,""],get_tensor_valueinfo:[11,4,1,""],graph:[11,4,1,""],make_empty_exec_context:[11,4,1,""],make_new_valueinfo_name:[11,4,1,""],model:[11,4,1,""],rename_tensor:[11,4,1,""],save:[11,4,1,""],set_initializer:[11,4,1,""],set_metadata_prop:[11,4,1,""],set_tensor_datatype:[11,4,1,""],set_tensor_shape:[11,4,1,""],transform:[11,4,1,""]},"finn.core.onnx_exec":{compare_execution:[11,1,1,""],execute_node:[11,1,1,""],execute_onnx:[11,1,1,""],execute_onnx_and_make_model:[11,1,1,""]},"finn.core.remote_exec":{remote_exec:[11,1,1,""]},"finn.core.rtlsim_exec":{rtlsim_exec:[11,1,1,""]},"finn.custom_op":{CustomOp:[12,2,1,""],fpgadataflow:[13,0,0,"-"],multithreshold:[12,0,0,"-"],registry:[12,0,0,"-"],streamingdataflowpartition:[12,0,0,"-"],xnorpopcount:[12,0,0,"-"]},"finn.custom_op.CustomOp":{execute_node:[12,4,1,""],get_nodeattr:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],set_nodeattr:[12,4,1,""],verify_node:[12,4,1,""]},"finn.custom_op.fpgadataflow":{HLSCustomOp:[13,2,1,""],convolutioninputgenerator:[13,0,0,"-"],streamingfclayer_batch:[13,0,0,"-"],streamingmaxpool_batch:[13,0,0,"-"],templates:[13,0,0,"-"],tlastmarker:[13,0,0,"-"]},"finn.custom_op.fpgadataflow.HLSCustomOp":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],code_generation_ipgen:[13,4,1,""],code_generation_npysim:[13,4,1,""],compile_singlenode_code:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],dynamic_input_to_npy:[13,4,1,""],exec_precompiled_singlenode_model:[13,4,1,""],execute_node:[13,4,1,""],generate_params:[13,4,1,""],get_folded_input_shape:[13,4,1,""],get_folded_output_shape:[13,4,1,""],get_instream_width:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_outstream_width:[13,4,1,""],global_includes:[13,4,1,""],ipgen_singlenode_code:[13,4,1,""],lut_estimation:[13,4,1,""],node_res_estimation:[13,4,1,""],npy_to_dynamic_output:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],reset_rtlsim:[13,4,1,""],rtlsim:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],toggle_clk:[13,4,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator":{ConvolutionInputGenerator:[13,2,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator.ConvolutionInputGenerator":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],execute_node:[13,4,1,""],get_input_datatype:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_output_datatype:[13,4,1,""],get_stream_width:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],lut_estimation:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch":{StreamingFCLayer_Batch:[13,2,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch.StreamingFCLayer_Batch":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],calc_tmem:[13,4,1,""],calc_wmem:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],execute_node:[13,4,1,""],generate_params:[13,4,1,""],get_folded_input_shape:[13,4,1,""],get_folded_output_shape:[13,4,1,""],get_hls_compatible_threshold_tensor:[13,4,1,""],get_hls_compatible_weight_tensor:[13,4,1,""],get_input_datatype:[13,4,1,""],get_instream_width:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_output_datatype:[13,4,1,""],get_outstream_width:[13,4,1,""],get_template_param_values:[13,4,1,""],get_weight_datatype:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],lut_estimation:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch":{StreamingMaxPool_Batch:[13,2,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch.StreamingMaxPool_Batch":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],lut_estimation:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.fpgadataflow.tlastmarker":{TLastMarker:[13,2,1,""]},"finn.custom_op.fpgadataflow.tlastmarker.TLastMarker":{blackboxfunction:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],execute_node:[13,4,1,""],get_folded_input_shape:[13,4,1,""],get_folded_output_shape:[13,4,1,""],get_instream_width:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_outstream_width:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.multithreshold":{MultiThreshold:[12,2,1,""],compare:[12,1,1,""],multithreshold:[12,1,1,""]},"finn.custom_op.multithreshold.MultiThreshold":{execute_node:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],verify_node:[12,4,1,""]},"finn.custom_op.registry":{getCustomOp:[12,1,1,""]},"finn.custom_op.streamingdataflowpartition":{StreamingDataflowPartition:[12,2,1,""]},"finn.custom_op.streamingdataflowpartition.StreamingDataflowPartition":{execute_node:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],verify_node:[12,4,1,""]},"finn.custom_op.xnorpopcount":{XnorPopcountMatMul:[12,2,1,""],xnorpopcountmatmul:[12,1,1,""]},"finn.custom_op.xnorpopcount.XnorPopcountMatMul":{execute_node:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],verify_node:[12,4,1,""]},"finn.transformation":{batchnorm_to_affine:[14,0,0,"-"],bipolar_to_xnor:[14,0,0,"-"],fold_constants:[14,0,0,"-"],general:[14,0,0,"-"],infer_datatypes:[14,0,0,"-"],infer_shapes:[14,0,0,"-"],streamline:[16,0,0,"-"]},"finn.transformation.batchnorm_to_affine":{BatchNormToAffine:[14,2,1,""]},"finn.transformation.batchnorm_to_affine.BatchNormToAffine":{apply:[14,4,1,""]},"finn.transformation.bipolar_to_xnor":{ConvertBipolarMatMulToXnorPopcount:[14,2,1,""]},"finn.transformation.bipolar_to_xnor.ConvertBipolarMatMulToXnorPopcount":{apply:[14,4,1,""]},"finn.transformation.fold_constants":{FoldConstants:[14,2,1,""]},"finn.transformation.fold_constants.FoldConstants":{apply:[14,4,1,""]},"finn.transformation.fpgadataflow":{cleanup:[15,0,0,"-"],codegen_ipgen:[15,0,0,"-"],codegen_ipstitch:[15,0,0,"-"],codegen_npysim:[15,0,0,"-"],compile:[15,0,0,"-"],convert_to_hls_layers:[15,0,0,"-"],create_dataflow_partition:[15,0,0,"-"],hlssynth_ipgen:[15,0,0,"-"],insert_tlastmarker:[15,0,0,"-"],make_deployment:[15,0,0,"-"],make_pynq_driver:[15,0,0,"-"],make_pynq_proj:[15,0,0,"-"],replace_verilog_relpaths:[15,0,0,"-"],set_exec_mode:[15,0,0,"-"],synth_pynq_proj:[15,0,0,"-"],templates:[15,0,0,"-"]},"finn.transformation.fpgadataflow.cleanup":{CleanUp:[15,2,1,""]},"finn.transformation.fpgadataflow.cleanup.CleanUp":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen":{CodeGen_ipgen:[15,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen.CodeGen_ipgen":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch":{CodeGen_ipstitch:[15,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch.CodeGen_ipstitch":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.codegen_npysim":{CodeGen_npysim:[15,2,1,""]},"finn.transformation.fpgadataflow.codegen_npysim.CodeGen_npysim":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.compile":{Compile:[15,2,1,""]},"finn.transformation.fpgadataflow.compile.Compile":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers":{InferBinaryStreamingFCLayer:[15,2,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers.InferBinaryStreamingFCLayer":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition":{CreateDataflowPartition:[15,2,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition.CreateDataflowPartition":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen":{HLSSynth_IPGen:[15,2,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen.HLSSynth_IPGen":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker":{InsertTLastMarker:[15,2,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker.InsertTLastMarker":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.make_deployment":{DeployToPYNQ:[15,2,1,""]},"finn.transformation.fpgadataflow.make_deployment.DeployToPYNQ":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver":{MakePYNQDriver:[15,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver.MakePYNQDriver":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj":{MakePYNQProject:[15,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj.MakePYNQProject":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.replace_verilog_relpaths":{ReplaceVerilogRelPaths:[15,2,1,""]},"finn.transformation.fpgadataflow.replace_verilog_relpaths.ReplaceVerilogRelPaths":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.set_exec_mode":{SetExecMode:[15,2,1,""]},"finn.transformation.fpgadataflow.set_exec_mode.SetExecMode":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj":{SynthPYNQProject:[15,2,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj.SynthPYNQProject":{apply:[15,4,1,""]},"finn.transformation.general":{ConvertSubToAdd:[14,2,1,""],GiveRandomTensorNames:[14,2,1,""],GiveReadableTensorNames:[14,2,1,""],GiveUniqueNodeNames:[14,2,1,""]},"finn.transformation.general.ConvertSubToAdd":{apply:[14,4,1,""]},"finn.transformation.general.GiveRandomTensorNames":{apply:[14,4,1,""]},"finn.transformation.general.GiveReadableTensorNames":{apply:[14,4,1,""]},"finn.transformation.general.GiveUniqueNodeNames":{apply:[14,4,1,""]},"finn.transformation.infer_datatypes":{InferDataTypes:[14,2,1,""]},"finn.transformation.infer_datatypes.InferDataTypes":{apply:[14,4,1,""]},"finn.transformation.infer_shapes":{InferShapes:[14,2,1,""]},"finn.transformation.infer_shapes.InferShapes":{apply:[14,4,1,""]},"finn.transformation.streamline":{Streamline:[16,2,1,""],absorb:[16,0,0,"-"],collapse_repeated:[16,0,0,"-"],reorder:[16,0,0,"-"],round_thresholds:[16,0,0,"-"],sign_to_thres:[16,0,0,"-"]},"finn.transformation.streamline.Streamline":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb":{Absorb1BitMulIntoMatMul:[16,2,1,""],AbsorbAddIntoMultiThreshold:[16,2,1,""],AbsorbMulIntoMultiThreshold:[16,2,1,""],FactorOutMulSignMagnitude:[16,2,1,""]},"finn.transformation.streamline.absorb.Absorb1BitMulIntoMatMul":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb.AbsorbAddIntoMultiThreshold":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb.AbsorbMulIntoMultiThreshold":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb.FactorOutMulSignMagnitude":{apply:[16,4,1,""]},"finn.transformation.streamline.collapse_repeated":{CollapseRepeatedAdd:[16,2,1,""],CollapseRepeatedMul:[16,2,1,""],CollapseRepeatedOp:[16,2,1,""]},"finn.transformation.streamline.collapse_repeated.CollapseRepeatedOp":{apply:[16,4,1,""]},"finn.transformation.streamline.reorder":{MoveAddPastMul:[16,2,1,""],MoveScalarAddPastMatMul:[16,2,1,""],MoveScalarMulPastMatMul:[16,2,1,""]},"finn.transformation.streamline.reorder.MoveAddPastMul":{apply:[16,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarAddPastMatMul":{apply:[16,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarMulPastMatMul":{apply:[16,4,1,""]},"finn.transformation.streamline.round_thresholds":{RoundAndClipThresholds:[16,2,1,""]},"finn.transformation.streamline.round_thresholds.RoundAndClipThresholds":{apply:[16,4,1,""]},"finn.transformation.streamline.sign_to_thres":{ConvertSignToThres:[16,2,1,""]},"finn.transformation.streamline.sign_to_thres.ConvertSignToThres":{apply:[16,4,1,""]},"finn.util":{basic:[17,0,0,"-"],data_packing:[17,0,0,"-"],fpgadataflow:[17,0,0,"-"],onnx:[17,0,0,"-"],test:[17,0,0,"-"]},"finn.util.basic":{CppBuilder:[17,2,1,""],calculate_signed_dot_prod_range:[17,1,1,""],gen_finn_dt_tensor:[17,1,1,""],get_by_name:[17,1,1,""],get_finn_root:[17,1,1,""],interleave_matrix_outer_dim_from_partitions:[17,1,1,""],make_build_dir:[17,1,1,""],pad_tensor_to_multiple_of:[17,1,1,""],random_string:[17,1,1,""],remove_by_name:[17,1,1,""],roundup_to_integer_multiple:[17,1,1,""]},"finn.util.basic.CppBuilder":{append_includes:[17,4,1,""],append_sources:[17,4,1,""],build:[17,4,1,""],set_executable_path:[17,4,1,""]},"finn.util.data_packing":{array2hexstring:[17,1,1,""],finnpy_to_packed_bytearray:[17,1,1,""],hexstring2npbytearray:[17,1,1,""],npbytearray2hexstring:[17,1,1,""],npy_to_rtlsim_input:[17,1,1,""],numpy_to_hls_code:[17,1,1,""],pack_innermost_dim_as_hex_string:[17,1,1,""],packed_bytearray_to_finnpy:[17,1,1,""],rtlsim_output_to_npy:[17,1,1,""],unpack_innermost_dim_from_hex_string:[17,1,1,""]},"finn.util.fpgadataflow":{IPGenBuilder:[17,2,1,""],pyverilate_get_liveness_threshold_cycles:[17,1,1,""],pyverilate_stitched_ip:[17,1,1,""]},"finn.util.fpgadataflow.IPGenBuilder":{append_tcl:[17,4,1,""],build:[17,4,1,""],set_ipgen_path:[17,4,1,""]},"finn.util.onnx":{valueinfo_to_tensor:[17,1,1,""]},"finn.util.test":{get_test_model_def_fxn:[17,1,1,""],get_test_model_trained:[17,1,1,""],get_test_model_untrained:[17,1,1,""],get_trained_checkpoint:[17,1,1,""]},finn:{custom_op:[12,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":17,"0x07":17,"0x0e":17,"0x0f01":17,"0xb":17,"0xe":17,"abstract":[12,13],"boolean":11,"case":5,"class":[5,11,14,15,16,17],"const":14,"default":[5,12,13],"enum":11,"final":11,"float":[5,17],"function":[3,11,12,13,17],"import":[3,5],"int":15,"new":[3,4,11,12,13],"public":4,"return":[5,9,10,11,12,13,16,17],"static":9,"throw":17,"true":[11,17],"try":3,"var":13,"while":5,For:[5,15,16],HLS:[4,11,12,15,17],IPs:15,PEs:13,The:[1,3,4,5,8,11,12,15,16,17],There:3,These:5,Use:[11,17],abc:12,abit:17,abort:13,about:[4,5,7,9,11,14,15],abov:[3,5],absolut:15,absorb1bitmulintomatmul:16,absorb:15,absorbaddintomultithreshold:16,absorbmulintomultithreshold:16,acceler:[3,15],access:3,accord:[13,17],account:11,action:15,activ:[11,17],actual:5,add:[14,16,17],added:13,adder:16,adding:3,addit:[3,5,13,15],addition:16,address:15,admin:3,after:[5,13,17],aim:16,all:[3,5,9,11,12,13,14,15,17],all_tensors_f32:9,allow:11,almost:5,alreadi:[5,15,19],also:[3,5,12,13,15],amount:17,analysi:[8,11,18],analysis_fxn:11,analyz:5,anaylsis_fxn:11,ani:[3,11,12,14,15,17],annot:[9,11,12,13],anoth:15,api:5,append_includ:17,append_sourc:17,append_tcl:17,appli:[5,11,14,15,16],appropri:[3,14],arbitrari:17,architectur:4,argument:[3,5,15,17],around:[5,11],arrai:17,array2hexstr:17,arxiv:16,assign:11,associ:[11,14],assum:17,attribut:[9,12,13,15],attribute_nam:[12,13],attributeproto:[12,13],avail:19,back:[3,13],backend:[5,15],base:[11,14,15,16,17],bash:[13,17],basic:13,batchnorm:14,batchnormtoaffin:14,been:[12,15],befor:17,below:[5,8],between:[13,17],bias:12,binari:[11,13,15,16,17],bipolar:[5,11,12,13,14,16,17],bit:[5,11,17],bitfil:[3,12],bitwidth:11,blackbock:13,blackboxfunct:13,block:[5,13,15,17],blott:13,board:[11,15],bool:9,both:17,bram:13,bram_estim:13,brevita:[4,17],brien:13,browser:3,build:[13,17],built:9,calc_tmem:13,calc_wmem:13,calcul:13,calculate_signed_dot_prod_rang:17,call:[3,11,13,15],can:[3,4,5,7,11,13,15,16,17],centerpiec:4,certain:5,chang:[3,5,11],chapter:[9,11,14],check:[5,9,11,12,13],check_all_tensor_shapes_specifi:11,check_compat:11,client:3,clk:[13,15],clock:13,clone:[3,17],code:[5,13,15,17,18],code_gen_dir:17,code_gen_dir_ipgen:15,code_gen_dir_npysim:15,code_generation_ipgen:13,code_generation_npysim:13,collaps:16,collapserepeatedadd:16,collapserepeatedmul:16,collapserepeatedop:16,collect:[3,15],colloqui:4,come:[3,9],command:[3,5,13,17],commun:4,compar:[11,12],compare_execut:11,compare_fxn:11,comparison:12,compat:[11,12,13],compil:[4,5,13,17],compile_singlenode_cod:13,complet:3,compon:[4,5],comput:[3,11,13],configur:3,consecut:16,constant:[5,9,11,16],construct:4,consum:[5,11],contain:[3,4,5,11,12,13,15,17],context:[11,12,13],contribut:4,convert:[3,13,14,15,16,17],convertbipolarmatmultoxnorpopcount:14,convertsigntothr:16,convertsubtoadd:14,copi:[11,15],core:[5,8,15,18],correct:[5,14,17],correctli:[3,9,12,13,15],correspond:[4,11,12,13],count:13,cpp_file:17,cppbuilder:[13,17],creat:[3,11,15,17],createdataflowpartit:15,current:[4,5,11,13],custom:[3,4,8,9,11,15,18],custom_op:5,customop:[5,12,13],cycl:[13,17],data:[11,12,13,15,17],dataflow:[4,11,15],dataoutstrm:13,datatyp:[5,12,13,14,17],datayp:5,debug:11,declar:13,deep:[4,11,13],default_v:[12,13],default_valu:[12,13],defin:[5,13],deliveri:3,depend:3,deploi:3,deploy:15,deploytopynq:15,describ:5,descript:[0,5,6,20,21],design:[3,15],detail:[0,4,5,6,7,9,11,14,20,21],determin:5,develop:4,dict:[11,12,13],dictionari:[5,9,11,13],differ:[3,8,12,13],digit:17,dimens:17,dimension:17,dir:[15,17],directli:[4,5],directori:[3,15,17],distr_pad:17,divid:8,divis:17,dnn:5,doc:4,docker:17,dockerfil:3,docomput:13,document:5,doe:[3,5,11,12],domain:5,done:9,dot:17,down:[3,5,11],driver:15,dt_a:17,dt_b:17,dtype:[5,9,11,12,13,17],dynam:9,dynamic_input_to_npi:13,each:[4,9,11,14,15,16,17],easier:5,easili:5,editor:3,either:3,element:17,embed:11,emit:17,emphasi:4,empti:11,end:13,ensur:[13,14,15,17],entir:3,entri:17,enumer:14,environ:3,equal:[12,13],equival:16,estim:[10,13],even:5,evenli:17,event:3,eventu:5,everi:[3,5,12,13,14,15],everyth:3,exampl:[3,4,5,17],excel:3,except:17,exec_mod:15,exec_precompiled_singlenode_model:13,execut:[11,12,13,15,17],executable_path:[15,17],execute_nod:[11,12,13],execute_onnx:[11,15],execute_onnx_and_make_model:11,execution_context:11,exist:[5,12,13,17],exit:17,expect:[5,9,11,12,13,15],experi:4,experiment:4,explor:[4,11,13],expos:11,extens:3,extra:[3,9,17],extract:[5,10],f5c6bd32ae93ec103a88152214baedff4ce1850d81065bfc:3,factor:17,factoroutmulsignmagnitud:16,fals:[11,17],familiar:[3,5],fan:9,fast:13,feel:19,fewer:11,fewest:11,field:[5,15,17],file:[3,11,13,15,17],filenam:[11,15],fill:[12,13],find:[5,7,11],find_consum:[5,11],find_produc:[5,11],finish:17,finn:[0,1,6,7,8,19,20,21],finn_dt:17,finn_dtyp:5,finnpy_to_packed_bytearrai:17,first:[5,9,16],fix:17,flag:5,flatten:17,float32:[5,9,11],fold:13,foldconst:14,folder:[3,15,17],follow:[1,3,4,5,9,11,12,15],form:13,format:[5,13],forward:3,found:[4,15],four:17,fpga:[3,4],fpgadataflow:[9,12,14],fpgapart:[13,15],framework:[4,13],fraser:13,free:19,from:[3,4,5,10,11,13,15,17],full:[5,11],gambardella:13,gen_finn_dt_tensor:17,gener:[4,13,15,17],generate_param:13,get:[5,11,12,13,15],get_all_tensor_nam:[5,11],get_by_nam:17,get_finn_root:17,get_folded_input_shap:13,get_folded_output_shap:13,get_hls_compatible_threshold_tensor:13,get_hls_compatible_weight_tensor:13,get_hls_datatype_str:11,get_initi:[5,11],get_input_datatyp:13,get_instream_width:13,get_metadata_prop:11,get_nodeattr:12,get_nodeattr_typ:[12,13],get_num_possible_valu:11,get_number_output_valu:13,get_output_datatyp:13,get_outstream_width:13,get_per_tensor_fanout:9,get_smallest_poss:11,get_stream_width:13,get_template_param_valu:13,get_tensor_datatyp:[5,11],get_tensor_fanout:11,get_tensor_shap:[5,11],get_tensor_valueinfo:11,get_test_model_def_fxn:17,get_test_model_train:17,get_test_model_untrain:17,get_trained_checkpoint:17,get_weight_datatyp:13,getcustomop:12,github:[3,4],give:[3,5,14,16],give_unique_node_nam:14,given:[5,9,10,11,12,13,17],giverandomtensornam:14,givereadabletensornam:14,giveuniquenodenam:14,global:13,global_includ:13,graph:[5,9,11,12,13,14,15],graphic:4,greater:12,group:12,guarante:17,guid:19,hand:4,happen:3,hardwar:5,has:[3,5,9,11,13,14,15,17],have:[3,5,9,11,12,13,15,16],help:[3,5],helper:12,here:[0,6,20,21],hex:17,hexstr:17,hexstring2npbytearrai:17,high:[3,5],highli:4,hls:13,hls_var_nam:17,hlscustomop:13,hlslib:[4,13],homepag:4,host:[3,17],how:[5,6,17,21],howev:5,howtoanalysispass:5,howtotransformationpass:5,howtoworkwithonnx:5,http:3,human:[5,14],identifi:5,imag:[1,13],immedi:15,implement:[11,13,15],includ:[4,11,13,15],include_path:17,index:5,indic:[5,11,12,13,15],individu:5,infer:[3,4,5,11,12,13,14,17],infer_node_datatyp:[12,13],inferbinarystreamingfclay:15,inferdatatyp:14,infershap:14,info:[14,17],info_messag:9,inform:[5,15],infrastructur:15,initi:[3,5,9,11],innermost:17,inp0:12,inp1:12,inp:13,input:[5,9,11,12,13,14,16,17],input_dict:11,input_dtyp:17,input_fil:17,insert:[13,15,17],inserttlastmark:15,insid:[3,5,12],instal:3,instanc:[11,12,16],instant:17,instanti:15,instead:17,int16:11,int2:11,int32:11,int3:11,int4:11,int8:11,integ:[5,11,12,16,17],interest:[5,11],interfac:15,interleav:[13,17],interleave_matrix_outer_dim_from_partit:17,intermedi:[11,14],intern:[9,11,14],interv:12,involv:3,ipgen:13,ipgen_path:[15,17],ipgen_singlenode_cod:13,ipgenbuild:[13,17],is_integ:11,is_linear:9,item:17,its:[5,12],itself:12,jupyt:[4,5,19],kei:11,kind:15,know:[9,14],lab:4,lambda:11,largest:11,launch:3,layer:[14,15],lead:17,learn:[4,13],leeser:13,len:[5,17],letter:17,librari:[4,17],library_path:17,like:3,linear:[9,11],link:[3,4,19],list:[4,5,8,9,11,17],load:17,locat:3,look:[3,4,5,9,11,14,19],loop:13,low:5,lut:13,lut_estim:13,made:11,magnitud:16,mai:[3,5],make:[3,5,13,15],make_build_dir:17,make_collapsed_param_fxn:16,make_deepcopi:11,make_empty_exec_context:11,make_new_valueinfo_nam:11,make_project:15,make_shape_compatible_op:[12,13],makepynqdriv:15,makepynqproject:15,mani:[3,5],manipul:[5,11],map:12,mark:[5,13],matmul:[14,16],matrix:[12,13,16,17],max:[11,17],mean:[5,17],meant:5,member:[12,13,17],mention:5,meta:12,metadata:11,metadata_prop:[11,15],method:[12,13,20],min:[11,17],minimum:17,minut:15,mixtur:9,mkdtemp:17,mode:[3,15],model:[5,9,10,11,12,13,14,15,16,17,20],model_a:11,model_b:11,model_was_chang:5,modelproto:[5,11,15],modul:[5,18],modular:4,more:[5,7,9,11,14,17],mount:3,move:16,moveaddpastmul:16,movescalaraddpastmatmul:16,movescalarmulpastmatmul:16,mul:[14,16],multidimension:17,multipl:[12,16,17],multipli:16,multithreshold:[15,16],must:[12,15,16,17],mvtu:15,n_partit:17,n_thres_step:13,name:[5,10,11,12,14,17],name_field:17,ndarrai:17,nearest:[16,17],necessari:15,need:[5,10,12,13],neg:[11,16],netnam:17,netron:3,network:[3,4,5,13,17],neural:[4,5,13],neuron:13,new_nam:11,next:16,no_decl:17,node:[9,10,11,14,15,16,18],node_inputs_in_expected_ord:9,node_res_estim:13,nodeproto:5,non:15,none:[5,11,12,17],note:[3,5,12],notebook:[4,5,19],notwithstand:9,now:[9,11],npbytearrai:17,npbytearray2hexstr:17,npy:[13,17],npy_to_dynamic_output:13,npy_to_rtlsim_input:17,npysim:[13,15],number:[5,11,12,13,17],numpi:[13,17],numpy_to_hls_cod:17,object:[11,17],observ:13,old_nam:11,onc:[5,13],one:[5,9,11,13,15,17],ones:[3,15],onli:[5,9,11,14,15,16],onlin:3,onnx:[11,12,13,15],onnx_exec:[5,15],onnx_model_proto:11,onnx_nod:[12,13],onnxruntim:11,op_nam:16,op_typ:[5,9],open:3,oper:[11,16],ops:[9,13,16],option:[3,5],order:[9,11],orig_thres_matrix:13,orig_weight_matrix:13,origin:13,other:[11,16],otherwis:[3,11,12,17],out:[9,12,13],out_bia:12,out_scal:12,out_shap:17,outcom:15,outermost:17,output:[11,12,13,14,17],output_shap:17,overlai:15,overview:4,own:[3,5,12],pack:[5,15,17],pack_innermost_dim:17,pack_innermost_dim_as_hex_str:17,packag:15,packed_bytearrai:17,packed_bytearray_to_finnpi:17,packedbit:17,pad:17,pad_tensor_to_multiple_of:17,pad_to_dim:17,pad_to_nbit:17,page:[7,19],pair:15,param:13,paramet:[13,16,17],part:[12,13,17],particular:[5,12,13,17],partit:[11,17],pass:[13,17,18],password:[3,15],past:16,path:[13,15,17],payload:3,per:15,perform:[3,5,12,13],permit:[12,13],place:[13,15],placehold:12,platform:15,pleas:[5,9,11,14,19],point:[3,5],popcount:12,port:3,posit:[13,16,17],possibl:[11,13,15],post:12,pragma:13,preced:16,precid:16,precis:[5,17],precompil:13,precomput:14,prefer:11,prefix:17,prepend:17,pretrain:17,preusser:13,previous:15,print:3,prior:[14,15,17],process:[3,12],produc:[5,11,12,13,17],product:17,project:[4,15],properti:[5,11],protobuf:5,provid:[3,5,11],purpos:5,push:3,pushbutton:3,pynq:[11,15],pynq_driver_dir:15,python:[3,5,15,17],pytorch:17,pyveril:[11,13,17],pyverilate_get_liveness_threshold_cycl:17,pyverilate_stitched_ip:17,qnn:[3,4],quantiz:[4,9,11,13],quantization_annot:5,random:[14,17],random_str:17,randomli:17,rather:3,read:[4,13],read_npy_data:13,readabl:[5,14],real:12,recommend:14,refer:[4,5],referenc:15,reflect:3,regular:12,rel:15,relat:[4,11,17],remot:11,remov:[15,17],remove_by_nam:17,remove_prefix:17,renam:11,rename_tensor:11,repeat:16,repeatedli:11,replac:14,replaceverilogrelpath:15,repo:[3,19],repositori:[3,4],repres:[5,11,17],represent:17,requir:[11,12,13],research:4,reset:13,reset_rtlsim:13,reshap:13,resourc:[3,10,13],respect:17,respons:5,result:[9,10,11,14,15,16,17],return_full_exec_context:11,returned_dict:[12,13],reus:13,revers:17,reverse_endian:17,reverse_inn:17,right:13,roadmap:4,root:[3,17],round:[16,17],roundandclipthreshold:16,roundup_to_integer_multipl:17,row:13,rtlsim:[11,13,15,17],rtlsim_output_to_npi:17,run:[11,13,15],run_dock:3,same:[15,17],sampl:13,save:[11,13,15,17],save_as_npi:13,scalar:16,scale:12,schema:5,scp:15,script:[3,13,15,17],second:[15,16],section:[9,11,14],see:[5,16,17],seen:4,select:5,sep:13,separ:[4,12],sequenc:17,server:3,servic:3,set:[3,5,11,12,13,15,16,17],set_executable_path:17,set_initi:11,set_ipgen_path:17,set_metadata_prop:11,set_nodeattr:12,set_tensor_datatyp:[5,11],set_tensor_shap:[5,11],setexecmod:15,settings64:3,sever:[3,15],shape:[5,11,12,13,14,17],shell:15,shortli:19,should:[3,9,11,12,13,15],show:[1,5],sign:[11,14,16,17],sim:[13,17],simd:13,simpl:5,simpli:3,simul:[12,13,15,17],sinc:[11,17],singl:[3,5,11,13,15,16,17],slide:13,small:9,smaller:[5,11],smallest:11,smee:3,some:[3,4,5,11,12,13,15],someth:3,soon:[0,6,7,20,21],sourc:18,spawn:3,specif:[4,5],specifi:[5,11,14,15,17],split:[15,16,17],stai:4,standard:[5,11,12,13],statu:4,still:5,stitch:[11,13,15,17],storag:5,store:[5,12,15,17],stream:13,streamingdataflowpartit:15,streamingfclayer_batch:15,streamlin:14,string:[9,15,17],stringlength:17,strm_decl:13,structur:5,style:4,sub:14,subdirectori:15,subgraph:11,submodul:18,subsequ:15,subset:9,succes:15,success:[12,15],suitabl:13,summar:13,support:[5,11],sure:3,surviv:17,synaps:13,synthesi:[10,15],synthpynqproject:15,t_0:12,t_1:12,t_n:12,take:[3,5,9,11,14,16,17,19],taken:[4,11,15],target:[4,5,15],target_dir:15,targetbit:17,tcl:[13,15,17],tcl_script:17,tempfil:17,temporari:17,tensor:[9,11,12,14,16,17],tensor_fanout:9,tensor_list:5,tensor_nam:[9,11],tensor_shap:[5,11,17],tensor_valu:11,tensorproto:5,termin:[3,15],ternari:[5,11],test:14,text:3,than:[5,11,12],thei:[5,8,16],them:[5,9,15,16],thi:[3,4,5,7,9,11,12,13,14,15,17,19],thin:5,thing:4,third:5,thought:3,thresh:13,threshold:[12,13,16],through:3,time:[3,13,14,15],tlastmark:15,tmem:13,togeth:[3,15],toggl:13,toggle_clk:13,token:3,tool:[3,4],train:[3,4],transform:[8,11,18],travers:5,trigger:3,tune:4,two:[4,5,11,12,15,16,17],type:[11,13,14,17],ubuntu:3,uint16:11,uint2:[11,17],uint32:11,uint3:11,uint4:11,uint8:[11,17],umuroglu:13,under:[4,15],uniqu:14,unpack:[15,17],unpack_innermost_dim_from_hex_str:17,unsign:[11,16],until:11,untrain:17,updat:[4,16],use:[4,5,15],used:[4,5,11,12,13,15,17,20,21],useful:[5,11],user:3,usernam:[3,15],uses:5,using:[5,11,13,14,15,16,17,19],util:[8,11,12,13,18],val:17,valu:[5,11,12,13,15,16,17],value_info:11,valueinfo:[11,14],valueinfo_to_tensor:17,valueinfoproto:[11,17],variabl:[3,17],vector:[16,17],verif:9,verifi:[5,9,12,13,20],verify_nod:[9,12,13],verilog:15,versa:5,version:4,via:[5,11],vice:5,visser:13,vivado:[3,4,10,11,15,17],vivado_path:3,vivado_pynq_proj:15,vivado_stitch_proj:15,wai:[3,5,9],wait:17,want:[5,9,11,14,16],wbit:17,webbrows:3,webhook:3,websit:4,weight:[11,13,17],welcom:4,well:[3,5],when:[3,9,12,13],where:[3,5,11,12,13,15,16],wherea:[5,11],whether:[9,11,12,13],which:[3,4,5,11,12,13,15,16,17],width:[13,17],window:13,without:3,wmem:13,work:[3,5,6,11,17],workspac:3,wrapper:[5,11],write:[3,5,12,13],xilinx:4,xnor:12,xnorpopcountmatmul:[12,14,15],you:[3,5,7,9,11,14],your:3,yourself:5,zero:[11,13,16,17]},titles:["Brevitas Export","End-to-End Flow","Index","Getting Started","FINN","Internals","Network Preparation","PYNQ Deployment","Source Code","Analysis","Analysis - fpgadataflow","Core","Custom Op","Custom Op - FPGADataFlow","Transformation","Transformation - fpgadataflow","Transformation - Streamline","Util","finn","Tutorials","Functional Verification","Vivado HLS and Vivado Synthesis"],titleterms:{"class":[12,13],"export":0,"function":[5,20],HLS:[13,21],absorb:16,access:5,analysi:[5,9,10],annot:5,base:[12,13],basic:17,batchnorm_to_affin:14,bipolar_to_xnor:14,brevita:0,cleanup:15,code:8,codegen_ipgen:15,codegen_ipstitch:15,codegen_npysim:15,collapse_rep:16,compil:[3,15],convert_to_hls_lay:15,convolutioninputgener:13,core:11,creat:5,create_dataflow_partit:15,custom:[5,12,13],custom_op:[12,13],data_pack:17,datatyp:11,deploy:7,develop:3,directli:3,docker:3,end:1,execut:5,execute_custom_nod:11,experiment:3,finn:[3,4,5,9,10,11,12,13,14,15,16,17,18],flow:[1,5],fold_const:14,fpgadataflow:[10,13,15,17],gener:14,get:3,graphproto:5,helper:5,hls_synth_res_estim:10,hlssynth_ipgen:15,how:3,index:2,infer_datatyp:14,infer_shap:14,insert_tlastmark:15,instanc:5,interact:3,intermedi:5,intern:5,jenkin:3,jupyt:3,make_deploy:15,make_pynq_driv:15,make_pynq_proj:15,modelwrapp:[5,11],modul:[8,11,17],more:4,multithreshold:12,network:6,node:[5,12,13],notebook:3,onnx:[5,17],onnx_exec:11,oper:5,pass:[5,9,10,14],prepar:6,pynq:7,quantiz:5,registri:12,remote_exec:11,reorder:16,replace_verilog_relpath:15,represent:5,requir:3,res_estim:10,resourc:4,round_threshold:16,rtlsim_exec:11,run:3,set_exec_mod:15,shell:3,sign_to_thr:16,sourc:8,start:3,streamingdataflowpartit:12,streamingfclayer_batch:13,streamingmaxpool_batch:13,streamlin:16,submodul:[9,12,14],suit:3,synth_pynq_proj:15,synthesi:21,templat:[13,15],tensor:5,test:[3,17],through:5,tlastmark:13,topolog:9,transform:[5,14,15,16],tutori:19,use:3,using:3,util:17,verif:20,verify_custom_nod:9,vivado:21,what:4,xnorpopcount:12}})
\ No newline at end of file
+Search.setIndex({docnames:["brevitas_export","end_to_end_flow","genindex","getting_started","index","internals","nw_prep","pynq_deploy","source_code/finn","source_code/finn.analysis","source_code/finn.analysis.fpgadataflow","source_code/finn.core","source_code/finn.custom_op","source_code/finn.custom_op.fpgadataflow","source_code/finn.transformation","source_code/finn.transformation.fpgadataflow","source_code/finn.transformation.streamline","source_code/finn.util","source_code/modules","tutorials","verification","vivado_synth"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.index":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["brevitas_export.rst","end_to_end_flow.rst","genindex.rst","getting_started.rst","index.rst","internals.rst","nw_prep.rst","pynq_deploy.rst","source_code/finn.rst","source_code/finn.analysis.rst","source_code/finn.analysis.fpgadataflow.rst","source_code/finn.core.rst","source_code/finn.custom_op.rst","source_code/finn.custom_op.fpgadataflow.rst","source_code/finn.transformation.rst","source_code/finn.transformation.fpgadataflow.rst","source_code/finn.transformation.streamline.rst","source_code/finn.util.rst","source_code/modules.rst","tutorials.rst","verification.rst","vivado_synth.rst"],objects:{"finn.analysis":{topology:[9,0,0,"-"],verify_custom_nodes:[9,0,0,"-"]},"finn.analysis.fpgadataflow":{hls_synth_res_estimation:[10,0,0,"-"],res_estimation:[10,0,0,"-"]},"finn.analysis.fpgadataflow.hls_synth_res_estimation":{hls_synth_res_estimation:[10,1,1,""]},"finn.analysis.fpgadataflow.res_estimation":{res_estimation:[10,1,1,""]},"finn.analysis.topology":{all_tensors_f32:[9,1,1,""],get_per_tensor_fanouts:[9,1,1,""],is_linear:[9,1,1,""],node_inputs_in_expected_order:[9,1,1,""]},"finn.analysis.verify_custom_nodes":{verify_nodes:[9,1,1,""]},"finn.core":{datatype:[11,0,0,"-"],execute_custom_node:[11,0,0,"-"],modelwrapper:[11,0,0,"-"],onnx_exec:[11,0,0,"-"],remote_exec:[11,0,0,"-"],rtlsim_exec:[11,0,0,"-"]},"finn.core.datatype":{DataType:[11,2,1,""]},"finn.core.datatype.DataType":{BINARY:[11,3,1,""],BIPOLAR:[11,3,1,""],FLOAT32:[11,3,1,""],INT16:[11,3,1,""],INT2:[11,3,1,""],INT32:[11,3,1,""],INT3:[11,3,1,""],INT4:[11,3,1,""],INT8:[11,3,1,""],TERNARY:[11,3,1,""],UINT16:[11,3,1,""],UINT2:[11,3,1,""],UINT32:[11,3,1,""],UINT3:[11,3,1,""],UINT4:[11,3,1,""],UINT8:[11,3,1,""],allowed:[11,4,1,""],bitwidth:[11,4,1,""],get_hls_datatype_str:[11,4,1,""],get_num_possible_values:[11,4,1,""],get_smallest_possible:[11,4,1,""],is_integer:[11,4,1,""],max:[11,4,1,""],min:[11,4,1,""],signed:[11,4,1,""]},"finn.core.execute_custom_node":{execute_custom_node:[11,1,1,""]},"finn.core.modelwrapper":{ModelWrapper:[11,2,1,""]},"finn.core.modelwrapper.ModelWrapper":{analysis:[11,4,1,""],check_all_tensor_shapes_specified:[11,4,1,""],check_compatibility:[11,4,1,""],find_consumer:[11,4,1,""],find_producer:[11,4,1,""],get_all_tensor_names:[11,4,1,""],get_initializer:[11,4,1,""],get_metadata_prop:[11,4,1,""],get_tensor_datatype:[11,4,1,""],get_tensor_fanout:[11,4,1,""],get_tensor_shape:[11,4,1,""],get_tensor_valueinfo:[11,4,1,""],graph:[11,4,1,""],make_empty_exec_context:[11,4,1,""],make_new_valueinfo_name:[11,4,1,""],model:[11,4,1,""],rename_tensor:[11,4,1,""],save:[11,4,1,""],set_initializer:[11,4,1,""],set_metadata_prop:[11,4,1,""],set_tensor_datatype:[11,4,1,""],set_tensor_shape:[11,4,1,""],transform:[11,4,1,""]},"finn.core.onnx_exec":{compare_execution:[11,1,1,""],execute_node:[11,1,1,""],execute_onnx:[11,1,1,""],execute_onnx_and_make_model:[11,1,1,""]},"finn.core.remote_exec":{remote_exec:[11,1,1,""]},"finn.core.rtlsim_exec":{rtlsim_exec:[11,1,1,""]},"finn.custom_op":{CustomOp:[12,2,1,""],fpgadataflow:[13,0,0,"-"],multithreshold:[12,0,0,"-"],registry:[12,0,0,"-"],streamingdataflowpartition:[12,0,0,"-"],xnorpopcount:[12,0,0,"-"]},"finn.custom_op.CustomOp":{execute_node:[12,4,1,""],get_nodeattr:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],set_nodeattr:[12,4,1,""],verify_node:[12,4,1,""]},"finn.custom_op.fpgadataflow":{HLSCustomOp:[13,2,1,""],convolutioninputgenerator:[13,0,0,"-"],streamingfclayer_batch:[13,0,0,"-"],streamingmaxpool_batch:[13,0,0,"-"],templates:[13,0,0,"-"],tlastmarker:[13,0,0,"-"]},"finn.custom_op.fpgadataflow.HLSCustomOp":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],code_generation_ipgen:[13,4,1,""],code_generation_npysim:[13,4,1,""],compile_singlenode_code:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],dynamic_input_to_npy:[13,4,1,""],exec_precompiled_singlenode_model:[13,4,1,""],execute_node:[13,4,1,""],generate_params:[13,4,1,""],get_folded_input_shape:[13,4,1,""],get_folded_output_shape:[13,4,1,""],get_instream_width:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_outstream_width:[13,4,1,""],global_includes:[13,4,1,""],ipgen_singlenode_code:[13,4,1,""],lut_estimation:[13,4,1,""],node_res_estimation:[13,4,1,""],npy_to_dynamic_output:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],reset_rtlsim:[13,4,1,""],rtlsim:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],toggle_clk:[13,4,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator":{ConvolutionInputGenerator:[13,2,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator.ConvolutionInputGenerator":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],execute_node:[13,4,1,""],get_input_datatype:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_output_datatype:[13,4,1,""],get_stream_width:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],lut_estimation:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch":{StreamingFCLayer_Batch:[13,2,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch.StreamingFCLayer_Batch":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],calc_tmem:[13,4,1,""],calc_wmem:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],execute_node:[13,4,1,""],generate_params:[13,4,1,""],get_folded_input_shape:[13,4,1,""],get_folded_output_shape:[13,4,1,""],get_hls_compatible_threshold_tensor:[13,4,1,""],get_hls_compatible_weight_tensor:[13,4,1,""],get_input_datatype:[13,4,1,""],get_instream_width:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_output_datatype:[13,4,1,""],get_outstream_width:[13,4,1,""],get_template_param_values:[13,4,1,""],get_weight_datatype:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],lut_estimation:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch":{StreamingMaxPool_Batch:[13,2,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch.StreamingMaxPool_Batch":{blackboxfunction:[13,4,1,""],bram_estimation:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],lut_estimation:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.fpgadataflow.tlastmarker":{TLastMarker:[13,2,1,""]},"finn.custom_op.fpgadataflow.tlastmarker.TLastMarker":{blackboxfunction:[13,4,1,""],dataoutstrm:[13,4,1,""],defines:[13,4,1,""],docompute:[13,4,1,""],execute_node:[13,4,1,""],get_folded_input_shape:[13,4,1,""],get_folded_output_shape:[13,4,1,""],get_instream_width:[13,4,1,""],get_nodeattr_types:[13,4,1,""],get_number_output_values:[13,4,1,""],get_outstream_width:[13,4,1,""],global_includes:[13,4,1,""],infer_node_datatype:[13,4,1,""],make_shape_compatible_op:[13,4,1,""],pragmas:[13,4,1,""],read_npy_data:[13,4,1,""],save_as_npy:[13,4,1,""],strm_decl:[13,4,1,""],verify_node:[13,4,1,""]},"finn.custom_op.multithreshold":{MultiThreshold:[12,2,1,""],compare:[12,1,1,""],multithreshold:[12,1,1,""]},"finn.custom_op.multithreshold.MultiThreshold":{execute_node:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],verify_node:[12,4,1,""]},"finn.custom_op.registry":{getCustomOp:[12,1,1,""]},"finn.custom_op.streamingdataflowpartition":{StreamingDataflowPartition:[12,2,1,""]},"finn.custom_op.streamingdataflowpartition.StreamingDataflowPartition":{execute_node:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],verify_node:[12,4,1,""]},"finn.custom_op.xnorpopcount":{XnorPopcountMatMul:[12,2,1,""],xnorpopcountmatmul:[12,1,1,""]},"finn.custom_op.xnorpopcount.XnorPopcountMatMul":{execute_node:[12,4,1,""],get_nodeattr_types:[12,4,1,""],infer_node_datatype:[12,4,1,""],make_shape_compatible_op:[12,4,1,""],verify_node:[12,4,1,""]},"finn.transformation":{batchnorm_to_affine:[14,0,0,"-"],bipolar_to_xnor:[14,0,0,"-"],fold_constants:[14,0,0,"-"],general:[14,0,0,"-"],infer_datatypes:[14,0,0,"-"],infer_shapes:[14,0,0,"-"],streamline:[16,0,0,"-"]},"finn.transformation.batchnorm_to_affine":{BatchNormToAffine:[14,2,1,""]},"finn.transformation.batchnorm_to_affine.BatchNormToAffine":{apply:[14,4,1,""]},"finn.transformation.bipolar_to_xnor":{ConvertBipolarMatMulToXnorPopcount:[14,2,1,""]},"finn.transformation.bipolar_to_xnor.ConvertBipolarMatMulToXnorPopcount":{apply:[14,4,1,""]},"finn.transformation.fold_constants":{FoldConstants:[14,2,1,""]},"finn.transformation.fold_constants.FoldConstants":{apply:[14,4,1,""]},"finn.transformation.fpgadataflow":{cleanup:[15,0,0,"-"],codegen_ipgen:[15,0,0,"-"],codegen_ipstitch:[15,0,0,"-"],codegen_npysim:[15,0,0,"-"],compile:[15,0,0,"-"],convert_to_hls_layers:[15,0,0,"-"],create_dataflow_partition:[15,0,0,"-"],hlssynth_ipgen:[15,0,0,"-"],insert_tlastmarker:[15,0,0,"-"],make_deployment:[15,0,0,"-"],make_pynq_driver:[15,0,0,"-"],make_pynq_proj:[15,0,0,"-"],replace_verilog_relpaths:[15,0,0,"-"],set_exec_mode:[15,0,0,"-"],synth_pynq_proj:[15,0,0,"-"],templates:[15,0,0,"-"]},"finn.transformation.fpgadataflow.cleanup":{CleanUp:[15,2,1,""]},"finn.transformation.fpgadataflow.cleanup.CleanUp":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen":{CodeGen_ipgen:[15,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen.CodeGen_ipgen":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch":{CodeGen_ipstitch:[15,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch.CodeGen_ipstitch":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.codegen_npysim":{CodeGen_npysim:[15,2,1,""]},"finn.transformation.fpgadataflow.codegen_npysim.CodeGen_npysim":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.compile":{Compile:[15,2,1,""]},"finn.transformation.fpgadataflow.compile.Compile":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers":{InferBinaryStreamingFCLayer:[15,2,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers.InferBinaryStreamingFCLayer":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition":{CreateDataflowPartition:[15,2,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition.CreateDataflowPartition":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen":{HLSSynth_IPGen:[15,2,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen.HLSSynth_IPGen":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker":{InsertTLastMarker:[15,2,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker.InsertTLastMarker":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.make_deployment":{DeployToPYNQ:[15,2,1,""]},"finn.transformation.fpgadataflow.make_deployment.DeployToPYNQ":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver":{MakePYNQDriver:[15,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver.MakePYNQDriver":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj":{MakePYNQProject:[15,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj.MakePYNQProject":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.replace_verilog_relpaths":{ReplaceVerilogRelPaths:[15,2,1,""]},"finn.transformation.fpgadataflow.replace_verilog_relpaths.ReplaceVerilogRelPaths":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.set_exec_mode":{SetExecMode:[15,2,1,""]},"finn.transformation.fpgadataflow.set_exec_mode.SetExecMode":{apply:[15,4,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj":{SynthPYNQProject:[15,2,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj.SynthPYNQProject":{apply:[15,4,1,""]},"finn.transformation.general":{ConvertSubToAdd:[14,2,1,""],GiveRandomTensorNames:[14,2,1,""],GiveReadableTensorNames:[14,2,1,""],GiveUniqueNodeNames:[14,2,1,""]},"finn.transformation.general.ConvertSubToAdd":{apply:[14,4,1,""]},"finn.transformation.general.GiveRandomTensorNames":{apply:[14,4,1,""]},"finn.transformation.general.GiveReadableTensorNames":{apply:[14,4,1,""]},"finn.transformation.general.GiveUniqueNodeNames":{apply:[14,4,1,""]},"finn.transformation.infer_datatypes":{InferDataTypes:[14,2,1,""]},"finn.transformation.infer_datatypes.InferDataTypes":{apply:[14,4,1,""]},"finn.transformation.infer_shapes":{InferShapes:[14,2,1,""]},"finn.transformation.infer_shapes.InferShapes":{apply:[14,4,1,""]},"finn.transformation.streamline":{Streamline:[16,2,1,""],absorb:[16,0,0,"-"],collapse_repeated:[16,0,0,"-"],reorder:[16,0,0,"-"],round_thresholds:[16,0,0,"-"],sign_to_thres:[16,0,0,"-"]},"finn.transformation.streamline.Streamline":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb":{Absorb1BitMulIntoMatMul:[16,2,1,""],AbsorbAddIntoMultiThreshold:[16,2,1,""],AbsorbMulIntoMultiThreshold:[16,2,1,""],FactorOutMulSignMagnitude:[16,2,1,""]},"finn.transformation.streamline.absorb.Absorb1BitMulIntoMatMul":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb.AbsorbAddIntoMultiThreshold":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb.AbsorbMulIntoMultiThreshold":{apply:[16,4,1,""]},"finn.transformation.streamline.absorb.FactorOutMulSignMagnitude":{apply:[16,4,1,""]},"finn.transformation.streamline.collapse_repeated":{CollapseRepeatedAdd:[16,2,1,""],CollapseRepeatedMul:[16,2,1,""],CollapseRepeatedOp:[16,2,1,""]},"finn.transformation.streamline.collapse_repeated.CollapseRepeatedOp":{apply:[16,4,1,""]},"finn.transformation.streamline.reorder":{MoveAddPastMul:[16,2,1,""],MoveScalarAddPastMatMul:[16,2,1,""],MoveScalarMulPastMatMul:[16,2,1,""]},"finn.transformation.streamline.reorder.MoveAddPastMul":{apply:[16,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarAddPastMatMul":{apply:[16,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarMulPastMatMul":{apply:[16,4,1,""]},"finn.transformation.streamline.round_thresholds":{RoundAndClipThresholds:[16,2,1,""]},"finn.transformation.streamline.round_thresholds.RoundAndClipThresholds":{apply:[16,4,1,""]},"finn.transformation.streamline.sign_to_thres":{ConvertSignToThres:[16,2,1,""]},"finn.transformation.streamline.sign_to_thres.ConvertSignToThres":{apply:[16,4,1,""]},"finn.util":{basic:[17,0,0,"-"],data_packing:[17,0,0,"-"],fpgadataflow:[17,0,0,"-"],onnx:[17,0,0,"-"],test:[17,0,0,"-"]},"finn.util.basic":{CppBuilder:[17,2,1,""],calculate_signed_dot_prod_range:[17,1,1,""],gen_finn_dt_tensor:[17,1,1,""],get_by_name:[17,1,1,""],get_finn_root:[17,1,1,""],interleave_matrix_outer_dim_from_partitions:[17,1,1,""],make_build_dir:[17,1,1,""],pad_tensor_to_multiple_of:[17,1,1,""],random_string:[17,1,1,""],remove_by_name:[17,1,1,""],roundup_to_integer_multiple:[17,1,1,""]},"finn.util.basic.CppBuilder":{append_includes:[17,4,1,""],append_sources:[17,4,1,""],build:[17,4,1,""],set_executable_path:[17,4,1,""]},"finn.util.data_packing":{array2hexstring:[17,1,1,""],finnpy_to_packed_bytearray:[17,1,1,""],hexstring2npbytearray:[17,1,1,""],npbytearray2hexstring:[17,1,1,""],npy_to_rtlsim_input:[17,1,1,""],numpy_to_hls_code:[17,1,1,""],pack_innermost_dim_as_hex_string:[17,1,1,""],packed_bytearray_to_finnpy:[17,1,1,""],rtlsim_output_to_npy:[17,1,1,""],unpack_innermost_dim_from_hex_string:[17,1,1,""]},"finn.util.fpgadataflow":{IPGenBuilder:[17,2,1,""],pyverilate_get_liveness_threshold_cycles:[17,1,1,""],pyverilate_stitched_ip:[17,1,1,""]},"finn.util.fpgadataflow.IPGenBuilder":{append_tcl:[17,4,1,""],build:[17,4,1,""],set_ipgen_path:[17,4,1,""]},"finn.util.onnx":{valueinfo_to_tensor:[17,1,1,""]},"finn.util.test":{get_test_model_def_fxn:[17,1,1,""],get_test_model_trained:[17,1,1,""],get_test_model_untrained:[17,1,1,""],get_trained_checkpoint:[17,1,1,""]},finn:{custom_op:[12,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":17,"0x07":17,"0x0e":17,"0x0f01":17,"0xb":17,"0xe":17,"abstract":[12,13],"boolean":11,"case":5,"class":[5,11,14,15,16,17],"const":14,"default":[5,12,13],"enum":11,"export":1,"final":11,"float":[5,17],"function":[1,3,11,12,13,17],"import":[3,5],"int":15,"new":[3,4,11,12,13],"public":4,"return":[5,9,10,11,12,13,16,17],"static":9,"throw":17,"true":[11,17],"try":3,"var":13,"while":5,For:[1,5,15,16],HLS:[1,4,11,12,15,17],IPs:15,PEs:13,The:[1,3,4,5,8,11,12,15,16,17],There:[1,3],These:5,Use:[11,17],abc:12,abit:17,abort:13,about:[1,4,5,7,9,11,14,15],abov:[3,5],absolut:15,absorb1bitmulintomatmul:16,absorb:15,absorbaddintomultithreshold:16,absorbmulintomultithreshold:16,acceler:[3,15],access:3,accord:[13,17],account:11,achiev:1,action:15,activ:[11,17],actual:5,add:[14,16,17],added:13,adder:16,adding:3,addit:[3,5,13,15],addition:16,address:15,admin:3,after:[5,13,17],aim:16,all:[3,5,9,11,12,13,14,15,17],all_tensors_f32:9,allow:11,almost:5,alreadi:[5,15,19],also:[1,3,5,12,13,15],amount:17,analysi:[8,11,18],analysis_fxn:11,analyz:5,anaylsis_fxn:11,ani:[1,3,11,12,14,15,17],annot:[9,11,12,13],anoth:15,api:5,append_includ:17,append_sourc:17,append_tcl:17,appli:[1,5,11,14,15,16],appropri:[3,14],arbitrari:17,architectur:4,argument:[3,5,15,17],around:[5,11],arrai:17,array2hexstr:17,arxiv:16,assign:11,associ:[11,14],assum:17,attribut:[9,12,13,15],attribute_nam:[12,13],attributeproto:[12,13],avail:19,back:[3,13],backend:[5,15],base:[11,14,15,16,17],bash:[13,17],basic:13,batchnorm:14,batchnormtoaffin:14,been:[12,15],befor:17,below:[5,8],benefit:1,between:[13,17],bias:12,binari:[11,13,15,16,17],bipolar:[5,11,12,13,14,16,17],bit:[5,11,17],bitfil:[3,12],bitwidth:11,blackbock:13,blackboxfunct:13,block:[1,5,13,15,17],blott:13,board:[1,11,15],bool:9,both:17,bram:13,bram_estim:13,brevita:[1,4,17],brien:13,browser:3,build:[13,17],built:9,calc_tmem:13,calc_wmem:13,calcul:13,calculate_signed_dot_prod_rang:17,call:[3,11,13,15],can:[1,3,4,5,7,11,13,15,16,17],centerpiec:4,certain:[1,5],chang:[3,5,11],chapter:[9,11,14],check:[5,9,11,12,13],check_all_tensor_shapes_specifi:11,check_compat:11,client:3,clk:[13,15],clock:13,clone:[3,17],code:[5,13,15,17,18],code_gen_dir:17,code_gen_dir_ipgen:15,code_gen_dir_npysim:15,code_generation_ipgen:13,code_generation_npysim:13,collaps:16,collapserepeatedadd:16,collapserepeatedmul:16,collapserepeatedop:16,collect:[3,15],colloqui:4,come:[3,9],command:[3,5,13,17],commun:4,compar:[11,12],compare_execut:11,compare_fxn:11,comparison:12,compat:[11,12,13],compil:[4,5,13,17],compile_singlenode_cod:13,complet:3,compon:[4,5],comput:[3,11,13],configur:3,consecut:16,constant:[5,9,11,16],construct:4,consum:[5,11],contain:[3,4,5,11,12,13,15,17],context:[11,12,13],contribut:4,convert:[3,13,14,15,16,17],convertbipolarmatmultoxnorpopcount:14,convertsigntothr:16,convertsubtoadd:14,copi:[11,15],core:[5,8,15,18],corner:1,correct:[5,14,17],correctli:[3,9,12,13,15],correspond:[1,4,11,12,13],count:13,cpp_file:17,cppbuilder:[13,17],creat:[3,11,15,17],createdataflowpartit:15,current:[4,5,11,13],custom:[3,4,8,9,11,15,18],custom_op:5,customop:[5,12,13],cycl:[13,17],cylind:1,data:[11,12,13,15,17],dataflow:[4,11,15],dataoutstrm:13,datatyp:[5,12,13,14,17],datayp:5,debug:11,declar:13,deep:[4,11,13],default_v:[12,13],default_valu:[12,13],defin:[5,13],deliveri:3,depend:3,deploi:3,deploy:[1,15],deploytopynq:15,describ:5,descript:[0,5,6,20,21],design:[3,15],detail:[0,1,4,5,6,7,9,11,14,20,21],determin:5,develop:4,diagram:1,dict:[11,12,13],dictionari:[5,9,11,13],differ:[1,3,8,12,13],digit:17,dimens:17,dimension:17,dir:[15,17],directli:[4,5],directori:[3,15,17],distr_pad:17,divid:[1,8],divis:17,dnn:5,doc:4,docker:17,dockerfil:3,docomput:13,document:5,doe:[3,5,11,12],domain:5,done:9,dot:17,down:[3,5,11],driver:15,dt_a:17,dt_b:17,dtype:[5,9,11,12,13,17],dynam:9,dynamic_input_to_npi:13,each:[1,4,9,11,14,15,16,17],easier:5,easili:5,editor:3,either:3,element:17,embed:11,emit:17,emphasi:4,empti:11,enabl:1,end:13,ensur:[13,14,15,17],entir:3,entri:17,enumer:14,environ:3,equal:[12,13],equival:16,estim:[10,13],even:[1,5],evenli:17,event:3,eventu:5,everi:[3,5,12,13,14,15],everyth:3,exampl:[3,4,5,17],excel:3,except:17,exec_mod:15,exec_precompiled_singlenode_model:13,execut:[11,12,13,15,17],executable_path:[15,17],execute_nod:[11,12,13],execute_onnx:[11,15],execute_onnx_and_make_model:11,execution_context:11,exist:[5,12,13,17],exit:17,expect:[5,9,11,12,13,15],experi:4,experiment:4,explor:[4,11,13],expos:11,extens:3,extra:[3,9,17],extract:[5,10],f5c6bd32ae93ec103a88152214baedff4ce1850d81065bfc:3,factor:17,factoroutmulsignmagnitud:16,fals:[11,17],familiar:[3,5],fan:9,fast:13,feel:19,fewer:11,fewest:11,field:[1,5,15,17],file:[3,11,13,15,17],filenam:[11,15],fill:[12,13],find:[5,7,11],find_consum:[5,11],find_produc:[5,11],finish:17,finn:[0,1,6,7,8,19,20,21],finn_dt:17,finn_dtyp:5,finnpy_to_packed_bytearrai:17,first:[5,9,16],five:1,fix:17,flag:5,flatten:17,float32:[5,9,11],fold:13,foldconst:14,folder:[3,15,17],follow:[1,3,4,5,9,11,12,15],form:13,format:[5,13],forward:3,found:[4,15],four:17,fpga:[3,4],fpgadataflow:[9,12,14],fpgapart:[13,15],framework:[4,13],fraser:13,free:19,from:[1,3,4,5,10,11,13,15,17],full:[5,11],further:1,gambardella:13,gen_finn_dt_tensor:17,gener:[1,4,13,15,17],generate_param:13,get:[5,11,12,13,15],get_all_tensor_nam:[5,11],get_by_nam:17,get_finn_root:17,get_folded_input_shap:13,get_folded_output_shap:13,get_hls_compatible_threshold_tensor:13,get_hls_compatible_weight_tensor:13,get_hls_datatype_str:11,get_initi:[5,11],get_input_datatyp:13,get_instream_width:13,get_metadata_prop:11,get_nodeattr:12,get_nodeattr_typ:[12,13],get_num_possible_valu:11,get_number_output_valu:13,get_output_datatyp:13,get_outstream_width:13,get_per_tensor_fanout:9,get_smallest_poss:11,get_stream_width:13,get_template_param_valu:13,get_tensor_datatyp:[5,11],get_tensor_fanout:11,get_tensor_shap:[5,11],get_tensor_valueinfo:11,get_test_model_def_fxn:17,get_test_model_train:17,get_test_model_untrain:17,get_trained_checkpoint:17,get_weight_datatyp:13,getcustomop:12,github:[3,4],give:[3,5,14,16],give_unique_node_nam:14,given:[5,9,10,11,12,13,17],giverandomtensornam:14,givereadabletensornam:14,giveuniquenodenam:14,global:13,global_includ:13,graph:[5,9,11,12,13,14,15],graphic:4,greater:12,green:1,grei:1,group:12,guarante:17,guid:19,hand:4,happen:3,hardwar:[1,5],has:[1,3,5,9,11,13,14,15,17],have:[1,3,5,9,11,12,13,15,16],help:[3,5],helper:12,here:[0,6,20,21],hex:17,hexstr:17,hexstring2npbytearrai:17,high:[1,3,5],highli:4,hls:13,hls_var_nam:17,hlscustomop:13,hlslib:[4,13],homepag:4,host:[3,17],how:[5,6,17,21],howev:5,howtoanalysispass:5,howtotransformationpass:5,howtoworkwithonnx:5,http:3,human:[5,14],identifi:5,imag:[1,13],immedi:15,implement:[11,13,15],includ:[1,4,11,13,15],include_path:17,index:5,indic:[5,11,12,13,15],individu:5,infer:[3,4,5,11,12,13,14,17],infer_node_datatyp:[12,13],inferbinarystreamingfclay:15,inferdatatyp:14,infershap:14,info:[14,17],info_messag:9,inform:[5,15],infrastructur:15,initi:[3,5,9,11],innermost:17,inp0:12,inp1:12,inp:13,input:[5,9,11,12,13,14,16,17],input_dict:11,input_dtyp:17,input_fil:17,insert:[13,15,17],inserttlastmark:15,insid:[3,5,12],instal:3,instanc:[11,12,16],instant:17,instanti:15,instead:17,int16:11,int2:11,int32:11,int3:11,int4:11,int8:11,integ:[5,11,12,16,17],interest:[5,11],interfac:15,interleav:[13,17],interleave_matrix_outer_dim_from_partit:17,intermedi:[1,11,14],intern:[9,11,14],interv:12,involv:3,ipgen:13,ipgen_path:[15,17],ipgen_singlenode_cod:13,ipgenbuild:[13,17],ipi:1,is_integ:11,is_linear:9,item:17,its:[5,12],itself:12,jupyt:[4,5,19],kei:11,kind:15,know:[9,14],lab:4,lambda:11,largest:11,launch:3,layer:[14,15],lead:17,learn:[4,13],leeser:13,left:1,len:[5,17],letter:17,librari:[4,17],library_path:17,like:[1,3],linear:[9,11],link:[3,4,19],list:[4,5,8,9,11,17],load:17,locat:3,look:[1,3,4,5,9,11,14,19],loop:13,low:5,lut:13,lut_estim:13,made:11,magnitud:16,mai:[3,5],make:[3,5,13,15],make_build_dir:17,make_collapsed_param_fxn:16,make_deepcopi:11,make_empty_exec_context:11,make_new_valueinfo_nam:11,make_project:15,make_shape_compatible_op:[12,13],makepynqdriv:15,makepynqproject:15,mani:[3,5],manipul:[5,11],map:12,mark:[5,13],matmul:[14,16],matrix:[12,13,16,17],max:[11,17],mean:[5,17],meant:5,member:[12,13,17],mention:5,meta:12,metadata:11,metadata_prop:[11,15],method:[12,13,20],min:[11,17],minimum:17,minut:15,mixtur:9,mkdtemp:17,mode:[3,15],model:[5,9,10,11,12,13,14,15,16,17,20],model_a:11,model_b:11,model_was_chang:5,modelproto:[5,11,15],modul:[5,18],modular:[1,4],more:[1,5,7,9,11,14,17],mount:3,move:16,moveaddpastmul:16,movescalaraddpastmatmul:16,movescalarmulpastmatmul:16,mul:[14,16],multidimension:17,multipl:[12,16,17],multipli:16,multithreshold:[15,16],must:[12,15,16,17],mvtu:15,n_partit:17,n_thres_step:13,name:[5,10,11,12,14,17],name_field:17,ndarrai:17,nearest:[16,17],necessari:15,need:[5,10,12,13],neg:[11,16],netnam:17,netron:3,network:[1,3,4,5,13,17],neural:[4,5,13],neuron:13,new_nam:11,next:16,no_decl:17,node:[9,10,11,14,15,16,18],node_inputs_in_expected_ord:9,node_res_estim:13,nodeproto:5,non:15,none:[5,11,12,17],note:[3,5,12],notebook:[4,5,19],notwithstand:9,now:[9,11],npbytearrai:17,npbytearray2hexstr:17,npy:[13,17],npy_to_dynamic_output:13,npy_to_rtlsim_input:17,npysim:[13,15],number:[5,11,12,13,17],numpi:[13,17],numpy_to_hls_cod:17,object:[11,17],observ:13,old_nam:11,onc:[5,13],one:[5,9,11,13,15,17],ones:[3,15],onli:[5,9,11,14,15,16],onlin:3,onnx:[11,12,13,15],onnx_exec:[5,15],onnx_model_proto:11,onnx_nod:[12,13],onnxruntim:11,op_nam:16,op_typ:[5,9],open:3,oper:[11,16],ops:[9,13,16],option:[3,5],order:[9,11],orig_thres_matrix:13,orig_weight_matrix:13,origin:13,other:[1,11,16],otherwis:[3,11,12,17],out:[9,12,13],out_bia:12,out_scal:12,out_shap:17,outcom:15,outermost:17,output:[11,12,13,14,17],output_shap:17,overlai:15,overview:4,own:[3,5,12],pack:[5,15,17],pack_innermost_dim:17,pack_innermost_dim_as_hex_str:17,packag:15,packed_bytearrai:17,packed_bytearray_to_finnpi:17,packedbit:17,pad:17,pad_tensor_to_multiple_of:17,pad_to_dim:17,pad_to_nbit:17,page:[1,7,19],pair:15,param:13,paramet:[13,16,17],part:[12,13,17],particular:[5,12,13,17],partit:[11,17],pass:[13,17,18],password:[3,15],past:16,path:[13,15,17],payload:3,per:15,perform:[3,5,12,13],permit:[12,13],pictur:1,pink:1,place:[13,15],placehold:12,platform:15,pleas:[1,5,9,11,14,19],point:[1,3,5],popcount:12,port:3,posit:[13,16,17],possibl:[11,13,15],post:12,pragma:13,preced:16,precid:16,precis:[5,17],precompil:13,precomput:14,prefer:11,prefix:17,prepar:1,prepend:17,pretrain:17,preusser:13,previous:15,print:3,prior:[14,15,17],process:[1,3,12],produc:[5,11,12,13,17],product:17,project:[4,15],properti:[1,5,11],protobuf:5,provid:[3,5,11],purpos:[1,5],push:3,pushbutton:3,pynq:[1,11,15],pynq_driver_dir:15,python:[3,5,15,17],pytorch:17,pyveril:[11,13,17],pyverilate_get_liveness_threshold_cycl:17,pyverilate_stitched_ip:17,qnn:[3,4],quantiz:[4,9,11,13],quantization_annot:5,random:[14,17],random_str:17,randomli:17,rang:1,rather:3,read:[4,13],read_npy_data:13,readabl:[5,14],real:12,recommend:14,rectangular:1,red:1,refer:[4,5],referenc:15,reflect:3,regular:12,rel:15,relat:[4,11,17],remot:11,remov:[15,17],remove_by_nam:17,remove_prefix:17,renam:11,rename_tensor:11,repeat:16,repeatedli:11,replac:14,replaceverilogrelpath:15,repo:[3,19],repositori:[3,4],repres:[1,5,11,17],represent:[1,17],requir:[11,12,13],research:4,reset:13,reset_rtlsim:13,reshap:13,resourc:[3,10,13],respect:[1,17],respons:5,result:[1,9,10,11,14,15,16,17],return_full_exec_context:11,returned_dict:[12,13],reus:13,revers:17,reverse_endian:17,reverse_inn:17,right:13,roadmap:4,root:[3,17],round:[16,17],roundandclipthreshold:16,roundup_to_integer_multipl:17,row:13,rtlsim:[11,13,15,17],rtlsim_output_to_npi:17,run:[11,13,15],run_dock:3,same:[15,17],sampl:13,save:[11,13,15,17],save_as_npi:13,scalar:16,scale:12,schema:5,scp:15,script:[3,13,15,17],second:[15,16],section:[1,9,11,14],see:[1,5,16,17],seen:4,select:5,sep:13,separ:[4,12],sequenc:17,server:3,servic:3,set:[3,5,11,12,13,15,16,17],set_executable_path:17,set_initi:11,set_ipgen_path:17,set_metadata_prop:11,set_nodeattr:12,set_tensor_datatyp:[5,11],set_tensor_shap:[5,11],setexecmod:15,settings64:3,sever:[1,3,15],shape:[5,11,12,13,14,17],shell:15,shortli:19,should:[3,9,11,12,13,15],show:[1,5],sign:[11,14,16,17],sim:[13,17],simd:13,simpl:5,simpli:3,simul:[12,13,15,17],sinc:[11,17],singl:[3,5,11,13,15,16,17],slide:13,small:9,smaller:[5,11],smallest:11,smee:3,softwar:1,some:[3,4,5,11,12,13,15],someth:3,soon:[0,6,7,20,21],sourc:18,spawn:3,specif:[4,5],specifi:[5,11,14,15,17],split:[15,16,17],stai:4,standard:[5,11,12,13],start:1,state:1,statu:4,step:1,still:5,stitch:[11,13,15,17],stop:1,storag:5,store:[5,12,15,17],stream:13,streamingdataflowpartit:15,streamingfclayer_batch:15,streamlin:14,string:[9,15,17],stringlength:17,strm_decl:13,structur:5,style:4,sub:14,subdirectori:15,subgraph:11,submodul:18,subsequ:15,subset:9,succes:15,success:[12,15],suitabl:13,summar:13,support:[5,11],sure:3,surviv:17,synaps:13,synthesi:[10,15],synthpynqproject:15,t_0:12,t_1:12,t_n:12,take:[3,5,9,11,14,16,17,19],taken:[4,11,15],target:[4,5,15],target_dir:15,targetbit:17,tcl:[13,15,17],tcl_script:17,tempfil:17,temporari:17,tensor:[9,11,12,14,16,17],tensor_fanout:9,tensor_list:5,tensor_nam:[9,11],tensor_shap:[5,11,17],tensor_valu:11,tensorproto:5,termin:[3,15],ternari:[5,11],test:[1,14],text:3,than:[5,11,12],thei:[1,5,8,16],them:[5,9,15,16],thi:[1,3,4,5,7,9,11,12,13,14,15,17,19],thin:5,thing:4,third:5,thought:3,thresh:13,threshold:[12,13,16],through:3,time:[3,13,14,15],tlastmark:15,tmem:13,togeth:[3,15],toggl:13,toggle_clk:13,token:3,tool:[3,4],top:1,train:[3,4],transform:[1,8,11,18],travers:5,trigger:3,tune:4,two:[4,5,11,12,15,16,17],type:[11,13,14,17],ubuntu:3,uint16:11,uint2:[11,17],uint32:11,uint3:11,uint4:11,uint8:[11,17],umuroglu:13,under:[4,15],uniqu:14,unpack:[15,17],unpack_innermost_dim_from_hex_str:17,unsign:[11,16],until:11,untrain:17,updat:[4,16],use:[1,4,5,15],used:[1,4,5,11,12,13,15,17,20,21],useful:[5,11],user:[1,3],usernam:[3,15],uses:5,using:[5,11,13,14,15,16,17,19],util:[8,11,12,13,18],val:17,valu:[5,11,12,13,15,16,17],value_info:11,valueinfo:[11,14],valueinfo_to_tensor:17,valueinfoproto:[11,17],variabl:[3,17],vector:[16,17],verif:[1,9],verifi:[5,9,12,13,20],verify_nod:[9,12,13],verilog:15,versa:5,version:4,via:[5,11],vice:5,visser:13,vivado:[1,3,4,10,11,15,17],vivado_path:3,vivado_pynq_proj:15,vivado_stitch_proj:15,wai:[3,5,9],wait:17,want:[5,9,11,14,16],wbit:17,webbrows:3,webhook:3,websit:[1,4],weight:[11,13,17],welcom:4,well:[3,5],when:[3,9,12,13],where:[3,5,11,12,13,15,16],wherea:[5,11],whether:[9,11,12,13],which:[3,4,5,11,12,13,15,16,17],whole:1,wide:1,width:[13,17],window:13,without:3,wmem:13,work:[3,5,6,11,17],workspac:3,wrapper:[5,11],write:[3,5,12,13],xilinx:4,xnor:12,xnorpopcountmatmul:[12,14,15],yellow:1,you:[1,3,5,7,9,11,14],your:3,yourself:5,zero:[11,13,16,17]},titles:["Brevitas Export","End-to-End Flow","Index","Getting Started","FINN","Internals","Network Preparation","PYNQ Deployment","Source Code","Analysis","Analysis - fpgadataflow","Core","Custom Op","Custom Op - FPGADataFlow","Transformation","Transformation - fpgadataflow","Transformation - Streamline","Util","finn","Tutorials","Functional Verification","Vivado HLS and Vivado IPI"],titleterms:{"class":[12,13],"export":0,"function":[5,20],HLS:[13,21],absorb:16,access:5,analysi:[5,9,10],annot:5,base:[12,13],basic:17,batchnorm_to_affin:14,bipolar_to_xnor:14,brevita:0,cleanup:15,code:8,codegen_ipgen:15,codegen_ipstitch:15,codegen_npysim:15,collapse_rep:16,compil:[3,15],convert_to_hls_lay:15,convolutioninputgener:13,core:11,creat:5,create_dataflow_partit:15,custom:[5,12,13],custom_op:[12,13],data_pack:17,datatyp:11,deploy:7,develop:3,directli:3,docker:3,end:1,execut:5,execute_custom_nod:11,experiment:3,finn:[3,4,5,9,10,11,12,13,14,15,16,17,18],flow:[1,5],fold_const:14,fpgadataflow:[10,13,15,17],gener:14,get:3,graphproto:5,helper:5,hls_synth_res_estim:10,hlssynth_ipgen:15,how:3,index:2,infer_datatyp:14,infer_shap:14,insert_tlastmark:15,instanc:5,interact:3,intermedi:5,intern:5,ipi:21,jenkin:3,jupyt:3,make_deploy:15,make_pynq_driv:15,make_pynq_proj:15,modelwrapp:[5,11],modul:[8,11,17],more:4,multithreshold:12,network:6,node:[5,12,13],notebook:3,onnx:[5,17],onnx_exec:11,oper:5,pass:[5,9,10,14],prepar:6,pynq:7,quantiz:5,registri:12,remote_exec:11,reorder:16,replace_verilog_relpath:15,represent:5,requir:3,res_estim:10,resourc:4,round_threshold:16,rtlsim_exec:11,run:3,set_exec_mod:15,shell:3,sign_to_thr:16,sourc:8,start:3,streamingdataflowpartit:12,streamingfclayer_batch:13,streamingmaxpool_batch:13,streamlin:16,structur:1,submodul:[9,12,14],suit:3,synth_pynq_proj:15,templat:[13,15],tensor:5,test:[3,17],through:5,tlastmark:13,topolog:9,transform:[5,14,15,16],tutori:19,use:3,using:3,util:17,verif:20,verify_custom_nod:9,vivado:21,what:4,xnorpopcount:12}})
\ No newline at end of file
diff --git a/docs/finn/_build/html/source_code/finn.analysis.fpgadataflow.html b/docs/finn/_build/html/source_code/finn.analysis.fpgadataflow.html
index 6949bee40..80ab2eed1 100644
--- a/docs/finn/_build/html/source_code/finn.analysis.fpgadataflow.html
+++ b/docs/finn/_build/html/source_code/finn.analysis.fpgadataflow.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.analysis.html b/docs/finn/_build/html/source_code/finn.analysis.html
index 27ef921b5..3277d4c7a 100644
--- a/docs/finn/_build/html/source_code/finn.analysis.html
+++ b/docs/finn/_build/html/source_code/finn.analysis.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.core.html b/docs/finn/_build/html/source_code/finn.core.html
index 83ca9a2d0..d9daf4662 100644
--- a/docs/finn/_build/html/source_code/finn.core.html
+++ b/docs/finn/_build/html/source_code/finn.core.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.custom_op.fpgadataflow.html b/docs/finn/_build/html/source_code/finn.custom_op.fpgadataflow.html
index c5f64095a..e75d5e82b 100644
--- a/docs/finn/_build/html/source_code/finn.custom_op.fpgadataflow.html
+++ b/docs/finn/_build/html/source_code/finn.custom_op.fpgadataflow.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.custom_op.html b/docs/finn/_build/html/source_code/finn.custom_op.html
index ef431107d..206bbd5bf 100644
--- a/docs/finn/_build/html/source_code/finn.custom_op.html
+++ b/docs/finn/_build/html/source_code/finn.custom_op.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.html b/docs/finn/_build/html/source_code/finn.html
index 2819afeb3..0092c5340 100644
--- a/docs/finn/_build/html/source_code/finn.html
+++ b/docs/finn/_build/html/source_code/finn.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Source Code</a><ul>
diff --git a/docs/finn/_build/html/source_code/finn.transformation.fpgadataflow.html b/docs/finn/_build/html/source_code/finn.transformation.fpgadataflow.html
index 2c2c278da..4b53cdc27 100644
--- a/docs/finn/_build/html/source_code/finn.transformation.fpgadataflow.html
+++ b/docs/finn/_build/html/source_code/finn.transformation.fpgadataflow.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.transformation.html b/docs/finn/_build/html/source_code/finn.transformation.html
index 23a22b6cb..14079a6ba 100644
--- a/docs/finn/_build/html/source_code/finn.transformation.html
+++ b/docs/finn/_build/html/source_code/finn.transformation.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.transformation.streamline.html b/docs/finn/_build/html/source_code/finn.transformation.streamline.html
index d8199d94b..123380a46 100644
--- a/docs/finn/_build/html/source_code/finn.transformation.streamline.html
+++ b/docs/finn/_build/html/source_code/finn.transformation.streamline.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/finn.util.html b/docs/finn/_build/html/source_code/finn.util.html
index 437a17df3..277b5e579 100644
--- a/docs/finn/_build/html/source_code/finn.util.html
+++ b/docs/finn/_build/html/source_code/finn.util.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="finn.html">Source Code</a><ul class="current">
diff --git a/docs/finn/_build/html/source_code/modules.html b/docs/finn/_build/html/source_code/modules.html
index 4d65b4270..0eb8bc658 100644
--- a/docs/finn/_build/html/source_code/modules.html
+++ b/docs/finn/_build/html/source_code/modules.html
@@ -85,7 +85,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/tutorials.html b/docs/finn/_build/html/tutorials.html
index b8c908ca9..474995632 100644
--- a/docs/finn/_build/html/tutorials.html
+++ b/docs/finn/_build/html/tutorials.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
diff --git a/docs/finn/_build/html/verification.html b/docs/finn/_build/html/verification.html
index 3cc100e0c..785e7c2aa 100644
--- a/docs/finn/_build/html/verification.html
+++ b/docs/finn/_build/html/verification.html
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1"><a class="reference internal" href="vivado_synth.html">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
@@ -157,7 +157,7 @@
            <div itemprop="articleBody">
             
   <div class="section" id="functional-verification">
-<h1>Functional Verification<a class="headerlink" href="#functional-verification" title="Permalink to this headline">¶</a></h1>
+<span id="verification"></span><h1>Functional Verification<a class="headerlink" href="#functional-verification" title="Permalink to this headline">¶</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p><strong>Here will be soon a detailed description of the methods used in FINN to functionally verify a model.</strong></p>
diff --git a/docs/finn/_build/html/vivado_synth.html b/docs/finn/_build/html/vivado_synth.html
index 49e0c67a1..4e4e419b3 100644
--- a/docs/finn/_build/html/vivado_synth.html
+++ b/docs/finn/_build/html/vivado_synth.html
@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Vivado HLS and Vivado Synthesis &mdash; FINN  documentation</title>
+  <title>Vivado HLS and Vivado IPI &mdash; FINN  documentation</title>
   
 
   
@@ -87,7 +87,7 @@
 <li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
 <li class="toctree-l1"><a class="reference internal" href="brevitas_export.html">Brevitas Export</a></li>
 <li class="toctree-l1"><a class="reference internal" href="nw_prep.html">Network Preparation</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Vivado HLS and Vivado Synthesis</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vivado HLS and Vivado IPI</a></li>
 <li class="toctree-l1"><a class="reference internal" href="pynq_deploy.html">PYNQ Deployment</a></li>
 <li class="toctree-l1"><a class="reference internal" href="verification.html">Functional Verification</a></li>
 <li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">Source Code</a></li>
@@ -137,7 +137,7 @@
     
       <li><a href="index.html">Docs</a> &raquo;</li>
         
-      <li>Vivado HLS and Vivado Synthesis</li>
+      <li>Vivado HLS and Vivado IPI</li>
     
     
       <li class="wy-breadcrumbs-aside">
@@ -156,8 +156,8 @@
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
             
-  <div class="section" id="vivado-hls-and-vivado-synthesis">
-<h1>Vivado HLS and Vivado Synthesis<a class="headerlink" href="#vivado-hls-and-vivado-synthesis" title="Permalink to this headline">¶</a></h1>
+  <div class="section" id="vivado-hls-and-vivado-ipi">
+<span id="vivado-synth"></span><h1>Vivado HLS and Vivado IPI<a class="headerlink" href="#vivado-hls-and-vivado-ipi" title="Permalink to this headline">¶</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p><strong>Here will be soon a detailed description of how Vivado is used in FINN.</strong></p>
diff --git a/docs/finn/brevitas_export.rst b/docs/finn/brevitas_export.rst
index 9fc5d1292..7d6d4b8f6 100644
--- a/docs/finn/brevitas_export.rst
+++ b/docs/finn/brevitas_export.rst
@@ -1,3 +1,5 @@
+.. _brevitas_export:
+
 ***************
 Brevitas Export
 ***************
diff --git a/docs/finn/end_to_end_flow.rst b/docs/finn/end_to_end_flow.rst
index 937b00806..36f3f27cc 100644
--- a/docs/finn/end_to_end_flow.rst
+++ b/docs/finn/end_to_end_flow.rst
@@ -2,9 +2,26 @@
 End-to-End Flow
 ***************
 
-The following image shows the end-to-end flow of FINN.
+The following image shows the end-to-end flow of FINN. As you can see in the picture, FINN has a high modularity and has the property that the flow can be stopped at any point and the intermediate result can be used for further processing or other purposes. This enables a wide range of users to benefit from FINN, even if they do not use the whole flow.
 
 .. image:: ../../notebooks/finn-design-flow-example.svg
    :scale: 50%
    :align: center
 
+Flow structure
+==============
+
+The cylinder-like fields show the state of the network representation in the respective step. The rectangular fields represent the transformations that are applied to the network to achieve a certain result. The diagram is divided into five blocks, each of it includes several flow steps. The flow starts in top left corner with Brevitas export (pink block), followed by the preparation of the network (grey block) for the Vivado HLS and Vivado IPI (yellow block). There is also a section for testing and verification in software (green block) and the hardware generation and deployment on the PYNQ board (red block). For more details about the different flow sections, please have a look at the corresponding pages on this website.
+
+* :ref:`brevitas_export`
+
+* :ref:`nw_prep`
+
+* :ref:`vivado_synth`
+
+* :ref:`pynq_deploy`
+
+* :ref:`verification`
+
+
+
diff --git a/docs/finn/nw_prep.rst b/docs/finn/nw_prep.rst
index ed625788c..f6911d84f 100644
--- a/docs/finn/nw_prep.rst
+++ b/docs/finn/nw_prep.rst
@@ -1,3 +1,5 @@
+.. _nw_prep:
+
 *******************
 Network Preparation
 *******************
diff --git a/docs/finn/pynq_deploy.rst b/docs/finn/pynq_deploy.rst
index afdc62460..030f8f5e8 100644
--- a/docs/finn/pynq_deploy.rst
+++ b/docs/finn/pynq_deploy.rst
@@ -1,3 +1,5 @@
+.. _pynq_deploy:
+
 ***************
 PYNQ Deployment
 ***************
diff --git a/docs/finn/verification.rst b/docs/finn/verification.rst
index df72d8eeb..b2d3d6746 100644
--- a/docs/finn/verification.rst
+++ b/docs/finn/verification.rst
@@ -1,3 +1,5 @@
+.. _verification:
+
 ***********************
 Functional Verification
 ***********************
diff --git a/docs/finn/vivado_synth.rst b/docs/finn/vivado_synth.rst
index 3dbdb1905..5e479c306 100644
--- a/docs/finn/vivado_synth.rst
+++ b/docs/finn/vivado_synth.rst
@@ -1,6 +1,8 @@
-*******************************
-Vivado HLS and Vivado Synthesis
-*******************************
+.. _vivado_synth:
+
+*************************
+Vivado HLS and Vivado IPI 
+*************************
 
 .. note:: **Here will be soon a detailed description of how Vivado is used in FINN.**
 
-- 
GitLab