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 — FINN documentation</title> + <title>Vivado HLS and Vivado IPI — 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> »</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