From 42e28e8ec9fa9eef580e84ded6b89841f3776045 Mon Sep 17 00:00:00 2001 From: tilk Date: Thu, 6 Mar 2025 19:59:25 +0000 Subject: [PATCH] Update docs (#62) --- .doctrees/api.doctree | Bin 2253707 -> 2253707 bytes .doctrees/development-environment.doctree | Bin 25737 -> 25673 bytes .doctrees/environment.pickle | Bin 2440799 -> 2440840 bytes .doctrees/transactions.doctree | Bin 56634 -> 57345 bytes _sources/development-environment.md.txt | 10 +-- _sources/transactions.md.txt | 41 ++++++---- api.html | 2 +- development-environment.html | 16 ++-- genindex.html | 2 +- index.html | 4 +- modules.html | 2 +- objects.inv | Bin 5333 -> 5329 bytes py-modindex.html | 2 +- search.html | 2 +- searchindex.js | 2 +- transactions.html | 43 ++++++----- transactron.cmd.html | 2 +- transactron.core.html | 28 +++---- transactron.html | 2 +- transactron.lib.html | 54 ++++++------- transactron.testing.html | 50 ++++++------ transactron.utils.amaranth_ext.html | 88 +++++++++++----------- transactron.utils.html | 18 ++--- 23 files changed, 193 insertions(+), 175 deletions(-) diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree index 08cea0a5c60b32d18b304ad750c2aaedc924aa8d..3ead1928e3569f7150cb42036344c7aebe9cad21 100644 GIT binary patch delta 437 zcmYk$y-Nad7zgk>@6=MSd`auf)NE^r7R47VJ4mY`a|j9|IA0*8Jn;-_h@c=59gI70 zX>6z=FdT%Up{d%Wrv8McpoXYG`d$z;e7--P7ao4qy9!x_X2q*fXY=XIj%4#qSq!Bj zpBMR5DJ$efxkmAYtn}h_NRroVGXBkqLVhA86f@Gjcg&{$*OhD9Eg`+VnGstnzB7_x zX@ZE&JiqOq#xKt$#vdeEY0f{1-1WzhxBdmBA;4Re&D;_~tkESQCCYnpj+G7qkC-n9 zUy-w+3zBWUhfYWo^)QEg3Xh}J4Sy@Gujxe;^O25H*f}>c#1+iHhga1EaU|!~@ZjnV z7r^ERw?R?$?!#d+T24kuPyq!rs6hi-=z(6)fgTLNKp*sj5lmnP3k-l2Y%mBzz=9oy u!2u)fWYl@3Q$EmeC7f|pKyDm=IwR#~!U-;L!)Uvi@VFR~ZFkl^*YpoyW0Pk9 delta 452 zcmYk$OG^S#90hR48MS=mqwHbjHQTj_HkuDin@Fog?nKlj0{wklK=>J?8|m*Z3Wduc%y&7~rj z7r11p$mge%xs)s#{x!0w$>dY%16ee7+YFxav6ZC-@EMNs2^uqwyVGxF3 z7)HPWqc8^J%|z6BqgOsqBXQ@NdRDGod^scKdfW*FTrknB$KAw4k!E|xearj-?jM)~ diff --git a/.doctrees/development-environment.doctree b/.doctrees/development-environment.doctree index 92e4a12f808202f778acad91e6a5ceed5cbec530..09bbe1ba45ec2fdb0530f27a40599e7d0519feb9 100644 GIT binary patch delta 1283 zcmb7DNlX(_818$tWdIX)Q)q@15kVHA5wI#2Dr-@OvV#V7ti@>+N=i{6s1PN}5{&$# z#0!d%qX9FXO^gYO2Mk6ecu)?8XbAD*!5hwd(_*B0@bcx&|1JMNZyB0L^RJP*Uvt;| zRK2J}kKu#vT)2mC@8s=XkGnmy!{ct1EOA9BEyBC4EDFIbqOfx`fRHBRS@u8luyo)Q zT7(?ajJDJ6advp64bvbF+fyev3`zkuOe|#O^8u~kVSeV{ipk-F;(&NXOcgYOR?xeQ zQsj|hgbOuLZQF$kq1RkNKBl7M;Ilaw+cbcQjFENAdb>It>_B7EJ(%CF+@ zip^|g&^nY^9e7=FeX=t6tKzEo?RpTiPpYVJ2H|Ke-I;|-BhrJh$q3;!3@O?Ql2A0* zYy_`!FSgdssZ&l)OCMwR|7S)i-AM<}wvt2Jy=YL!=Tcnt0iuhZS$ zX>hk1&TPMKpsUTs4m#PPfFu9sT@?Sk2W@nO=d}!Sz^mFsl1D~}ubV-)2^CW3+l~=X z*H_^YN^cc!fu%7$)Gry-(oeyr z!G$I}UZUFZW(K{ZEgF1DvRpnCxY*2^1AmzplH~W7+#&|PK#>8bn^+Q2PXIwG%Qziu*@6e>Q6pb zeK}aAf&o4j4MEx2v}-Z)rz?_xPHyjtB`}R;ctjwK5DbA~wG1~2d?c_;025+Ut5S81 zhP3l-4sTC~qmw*k7fI!4B1h9Wn#9o*jwW!_%^A9cL}DNl2s>zdAyetil2I6lu(Nnm JD`nYFpkHk&m=yp3 delta 1241 zcma)5TSydP6!!ePtFuy+w^%O|TeewwN%4-drIt5vv`yEHEJs@z7u?-+#SGGdqP!&0 znUXG22GK)=%0TrHba{w+=;A|mA*u%{sD}(9A~5>@e`l30L@#GJ-#Op+ojEh-!F}j| z0LBBRlf9G1DGQv#Y0GZG*WqnV^Yt|0;`jvo5hG}x*yRu>_;p-W!Wva&+0Z9eLy7O+k?+Eh7IgF&S$WmlgZ+tvC@Co;REc*d zoAC46bWAUZfdm{Y=v~^`($VJgcdif0N3uivFW%E8_c`pF&sm;KLVkNd)uS1NtR{IrKht=!zw|PCCR&T3y{^!AQM>^@|D(n9HpXp;( zW{3WM-RRl60=n_|*0(T5EBP>rS8A)tXkdVpIswk$#I|H?suRdaDF0B$>W1MSAGpdX zz+H4Y>&e|f{~HS2V*TNDx`EEwSU&(WQEY9a>W+tykfD|6X-EiV=jrRwPB%CWP^Hc8_+k)qgNJ0u z&d&YqhK3O292menc{vPXy_`g^A7l%T$X1Hpkh6{bVId({B*(y63~OH3x04U6 z)E&dZB|^hR7DQHvV`0EZ!x0uM5Ex67-JNoam9!WxC4Vi6huJ5sENvq8W1IlIY8ZL zykd3}1$3elY{DdWGqNyH-{BYSj4!`8{XO&8n*KYlA76pIueao=)A(+lN$Dc(U1WQuN1(1`g|1z@;SYZPQ_1tmJGSPobiR!%jLTit@>X{?x4h-;r$=&^JKs{e z&&yrqeA_Z|WbPBrw-*Cf=axF(&V1dNYt`OfcyMb*Zb?_?Ysr~IxfbW!&QF)+mO0-p zFFUVf_Zq-fC|i2-{H_so5&9v8)&FLaOpF!qj`*Xr*IgzYaBD1<+d00dO zs{Vg#THk*WgHHc$99*XK`d6{2=^dcdrno7CW_h%Y%PfhHO!fL7#b_9kQk7RW*}u(d z{2#>YV(x#s4*s9S?Coqhqy8xd<*n(x+pLv;6+;KVPgZu}%*>gyvwIdUuBy04u|CpC zv8DK%0Ic>L;*30sLbI1+K#Oy)Njqk7J@ZVXo z|6jr%!s11OT$H0u+QKvNQsW|{x3P6E*`siN!6VANmQFElFVmjjfGs~eQ# zi~8E$Tk~wVGVfFY;!v#koi^IcFArpR@K@@$o?xqNC9k~8)mOR_!rI#wZO;=#+i!J$ zmt0-W1=ZZkJQdGBjkZr33MI0~Z4(W8n7P}Ecg~Ug*KPBelD4nF5#l*YgXx5W*qfbWy{sw6h=OpvYec!T5}|3Qs>xN%}3QywZ+C%Q<9D2uf%`4DzSlo{!V z5EfbCth&gA%=<056P;ASL zw(%DhwaB@47;d_CQE~Fs9AO6Au}cUhbSf9$FxjU5BaLBhW^h=bumim9yazIM3X`+*IZ9oizy!pK>o-eKS%Cc-!5#A7@J5OR4VFo!YT> z?b<2qKm7*#GL z7S(z&H){HfyV(QW87u|fzQ==McIwj_FZQ~8O4YNya@4A3G0KA)49v?u(ub8weDh%` z&ED+Go|Gu$sJ+3+Y~qbJbYS83$^cd(iNDneepmZ|AePRQm+s7}31*ell8dOTNqSLK zlYB)*P4X7y6v#3P>&k}oQDvr8<;J_UYnLfRrlF*6bVo_ur2g5AKiNVDn6BU@Gj|nL zc4aZlLOZ*%?&5?k=#^sBI*eB9f2A1S@}|mZd8_x5Z|Yu9nY*LSo2|{;t~PJ>Hg7)u z?b^AjLM`^pyI3=eb<9OQ=EGXm3;^|D51{%7V3pn4odtHL7bmb-Q3vgZ$FU2{UEP5& zb4s7iVifZsSNlg3*zaAL)&Bkxc40g#vF|v+md9e!c<(@CdvSLws95!UsqhxvGq=bgeh@p*tzu18g3te1sgAn#vz^7nT$S z5xdCSQ*7$K? z-*T4+QNb1PpXkFP4B1(;va2*IWlZ9uA$!{-J|5uCBtB9KT-#dUpnLuzaD5QvZ&wYt zhsCzo`OReBSB|D2`f3gjqy7DuC!LrA$Bmi7JtS=d#;)U$PMQyOnF*(=9%P&7t7&i( zMubYg)k@!oq(Fq%m5%^o?^Hexz%Wh3ZQL|IOpe`21=D#vHBRF` zAfIvKUssjfLuu2w9{AkpdwiOidBXJ|e=@6Z+hAk$NVSyPi@=EER(qnVGAHeGVW zDPa)vqr@T1h1zHGU@88xR5~`3_r#czOg>7ufnN`zEv~xu^kXKEm7Kpw&K@&(FK}ke z;3FjdhU(xrikivYJzFyBhZ#Ic#D}*tQSBx*OCDmurk-=Ni)R;P6*(Ez#MIHeY^=P3 z+1w=k23a1YAI1!H5>llaH_4>sfG3%U!^6H=nln626gL%)7wDucZj{-PnZ*-e?v^b6 zkaUK>i5}bya|VutGs3dDL5dHO;y=hnPG)3_oXE@O!zD4?NxTcP{>avr?9fN}Ly{v_ za=?wInps>QFgJ5f%kom^*u_LK>AVYwA#y}FIim41L_2X7?_KOIVC!PGvV2TIaol62sESY(*S zyr?pj8R>8HxrvohMLr)0@LoP2Od0Q^)EEm8h*BC`fGiS{%jNL;0v-qa`2yshz^{|| zznz2FF@-z~#GFDt9AHNwA1QhMCVA=}Q>~haf*U`N8^AGW9!~@)nTHA`gl#dAPbz`~ z`vU3AROZz(NBw+07QAWmQA$gxemarp}LC)iR5h}iry~jkE zjc}c1Ii`1F29Bd#)?vPryfKQZ)-#1ZOow};cESg3>$^%uMkMdCfTOZ})h3cAxd<@=`7a~oC zwO^PhV*{*xGK=~9Y86RP&N^}tDd0*tU-{4<3sGLxsPQI84wp=nw15`>J-mpImZC2r z*VOWPU=fdn&Tkg+B!IZZe5j;f#R^gPmVyFJ!M4TRAZb52D%82fJQ9PN7i%H@Lx#cp z81@EX=1phJyUL+BxUR26Z0lyj^@hh$KSZK+d>pMqDb1C@{x~-KQgT@$(sA$-J{fNt zm+&+xG=OTC@IYF)3&|F>l>39&d#PY8T&g8%gyi{PDUSj9+EV@iK#ygbp`B=43GYh{ z%dmb+Y5y{86~f-`D*j&YoJX9_rqLyuOL_%6T@p$sO1Qh6Qr}=%GE{fhSVZoJTlg?Z zyg!%<3VBCL%ttZbXyHB*Jup}{P#;)$CmFQFVA^7azfWeu-T0}4@-KJDGq2*I5cJq8-j`Xaeid@TNf6%Z2wD9ZjzTV56$ydT3Qa<1XDGb)Ydd{1DcbBW$@t5avlIVzN?XPf@LE`u16mf zXMvb?t5H;}v}H9C*-AgIM%A)X!Wy0`rM=_`zi&C*+qg#Xo?nA*NC?{Qup4_dI(gNq z`sK_`o2+1I2&TQYnC#}|EQsnWgn+{ph=i4zE6}`IY4nqPniRJ$nAS~z>BpZG1~)y4 zV}+F>*7D(!ek7Rmn_+l-DN^*AwcJBa=NMgIrD4yk6&ikA%kP(CJ_weL^R3mWb!lbj zb28T9v|y##>$F*X>~O1K=~2n`w0*r`xw%dlm{iFVq^7eJvlg0g0pm^kD|wJq(Ii%z z1AV?6`-QI@AF>`bOnBiUX0}5csb2$EI8^LjkCK7dJcZWEO36=Q{aA^f;t$AizdDvf z?QZTuO;55gN>_ww;R;W36PJx==+vk1S#2G{EjZ$y#3ap4$X=oPrXxmoHz7ucj%i%= zP23Nv3{}{e1RtY$wdfp|RS8QDRAJw;l3z7EU?FogpNKbmH42+xHqgFmY`xQKup3*c zsD?iR@I?*QyOp8{Wk{HIBaC7cEL4$-wND{EYDs9_L42$f6d|=@n?~QEu<(|Q9{o3j zU5L?z%M`-wz*NP&Ofw7S&dAAkc7?*E4k47FF5b8*b{8dni-t;|J4pqiH%xz;ca%=) z8lskv7}a40DyT+xap-Ab*{P>R$YVC(Bx~X+vN?{vu zI?=1&wD#JV=F~I!v}-S{0z2EEbeF2l~%J!EW3v#*szHw zNePofWQ`SZ_j`r~>+x->R_U$O>+eE_D1S3{J}Xsh zM(GvC&4p-nJH53D_hNpvILaYpwZe?NS{(nZw5t}!V!^vO#92%9WZA+4TTN%|7Evm; zY~kaj*5x#JJN6I1=OB0g7P$1BSqs7ww0RTnu1fIn$;*B;JFjIbmCy2Va{L-;HOjPs zuGF$n>hK(TL1D*QNqQZ%O3GjK9QG$cS|1|%`I_f()zSEzmh@FlY-B)gQ9-^_pW5UT zW>ttxdH89Z^?rSx`L!h7oaZ$+ZGxNBj@WGHMqHk@n)ub{#UkzZ0-pe9t$9H#l(X`! z*Nft9#fxISeDNZm4wil|@u||-*O7LYp*istc5j<1xfg`ps1FU>;kVjXv4DHLtd+L| zv|cTG8p(qSUKXipc^T(&;e)rOd$dL5B6+WFWBOKR8@Gy_F>mFgYRELaHWp5 zj_uX0+LrTCh`bnSP*6C`ukg-tBA+6|ckpgCb?EjFzQRK!_H#$NRPJPYLGpVQTdOef zObCsw=iMlN2McIr)Vx>u1j+Dqi0Dug51`Ots(y5*0Y%nhn zYlud29r|M{O{x=xx}i>pZLZ@F139W5Rai)OqvU#izyCkwnx~5IMV2?1q1Ci|HfYoK z4W;HkkrDOkT+BOR))hOR8n$b*@+Vf0vMi24jdpb8kH7vGvx7qAC5oUf+`)~~q7XW@ zpLeXW;ZWANgX<+STuO891%hmNgSodXf%u)8Z84$rm3nt}?G4-#pWLaftyt)L0ihJu zM%Zxb7ar&$MT=J8$rmw)+I`I6(`Mmyqf>iiCVL1f)!Sr0U_%>aCH-rnqNKg1H6Qo3 z7@#M=1K2gq2e35myrwy)|6it~W{!vCOh(TQnQ6Ote*oI0Ro20wG+nR5k?j!ftMdF93JcDdMbT`6WZj=nmIz@QRDgKV|q^e6C>LWx!K7$xzdJ8iS$ zOfz7Q=KQI``GWH5TPS5|uZvy#k=I2M9ef?v1wzEkQ1$9giiqEXD+Mb(yho^Cy+_z| ze2-R(3qmQzqSg*|C7wLWeEsnK;mqQK`A!#8<{M&(H@uHRc_%rdGL#a2!3fK1So=UnQvLf_c+rpx)yMaX ztcX0oCrkFHVSzXg9>H{cK47i)*n-m90IEPrN;1IHq=W_>Mlb|^Z>YSL$vDQn$nRqa zE&P!A24`gCBcNA$_LiZg-Ls3E{M}>7~0Hn_AsyBwv z>t`_Ewa2gs#r%GeKB_;4r?`)VG9xMP@&HM{CFzIW z<+0MRc41V1NNtzj19Q-OJVNs6D5en$G3hdsEL?gPb z5}MYCqq!Iw>(t&A`0pCg7L-uj2YiAg_n>7bar|qz$h-r4&dkhnHa%i+d>9!oASBm* zKwGTxQ1A(S2~t8`PGGMSEca5(Y24j6e87Y0ofF(&PON{JyaT><0#}KG?*Ux96k*jA zUdHxt`x5hPnaJXke5_;|943o-{QGce?I|AVomJpWQ)+*Tr%I(G=+sB}`la$R4);En zTgn97a7yHC%!k?p$Eg!cpgkXolz!(!K@R_jPm_{R15bhM_c2!W!H)#b@sCiGgw5vG z=8XNAcfrgTeJt|rlaG0Zl#oMnj-%-wdlGl4SFf=!?W$Ht$a8q-d$gP9KG9OCpcU5e z6Vq!OycjYcN;kmgb8#gJeXBmj_Zyhkr!u^!aS{@2%Vb~!L-)FgcC_TM&JGn$5272 z3L`cTHLCD)9u7jq=QveZ=)KR8uojB^0^O#C<^jlK-*eK)Lti5B5B$k|w3u7S_$3ll zNZi_rC+r4p-Zp=UMJq_#oTT0oQSU@VQZsm4NvnaF{NBsYk@?7{40#yeeYQn}L zgk5m3o^IkjY2R8$^C)STupHGpnfUYY=U6wak#}F@e!{*V>5GqHU!^N9z;0J_ll0eh zC$=vcYS0@A6~Ba48+5VNl~}P55-ljO;pW%aJ_W-qvFu~1!JWsncxKZ#BD&YV!5yq% z^9+}ngll4)PrpT%gaCXi-S;gYrP@Wl7i0)7Abl-VcR_gd<^>#JgoyUxa-%-$qaK>R z!yetB=gvOQLX{WMbXn-ji$ZnWciL&YTe!MaMiOG@Mz!Ceg;XQjBV1OUWM3ZYo0UDY zAj^6BwvgW?ks8x4@iEdl_fqC1K9H_lLf0fgZUmTi!xkmsFvd*up1nmLGT+_eT z?hO(g7&N_V!rc0vr^q=CbrACYfeSJVZTW|o^N$h?xXd$w+;mx+NlNRPG+n`AZv7M< z#3rf6-9_df(9XfDKL{_L{6X`ZxkX2?%H&H^ui%hup`0t|3WUXvQ2rG@pv}Qj;B&%d ziw2i_QBeptYSl+j^AHfni4yI?kGSHp(8?cqf}GlXj8$-a&Im=gZvV)QBF2GN#oC*A zl}`e9-Bm4>mpNo%OYJYmTOFADeRcSeTO_v04c9PP3pHHhQvtlMWR&0M?tl z0O0yfG+1S1Zsx_3>+@z_2*jvc{850zw~$k1VJJ|oqs@-)n{M^KEk#I>Nf2vScy;xV^CS2l4Ot0%r(M;DtBJ_01M;A!bnQo*+ z_)5eTmxo^AahDyW(5|QSv8zvD660zT1H&7x5OT@d^V7`z& z$U_$_Nkb*6z(Y4gBGB6S==xIAP^`}1Jak5hO=^Wr^3)ks7kTQ`B-jBUc~YdP_FlUC zC1R2j(T$$*()odVyO%CS64N9x+*{WZ_)*?EHASEC7QSls)=k0NM7?ejK%HJU1Hfp| z4Fi~L(50$KgKoMMv`7lV^rNYE6x#oDN!(N0A4O6;E;&~E=!RqDaUY$!3}SqBsZzj7 zNv`zOB>;cYS2soCS4%wR6HR`}t%I@5Pn$)h}O{`TV7mct;+4zUi}un zv-&d~`L%KzYL6BwzOPj!mC^|bu1Me=Adq)SFdSf@_|7FNxV4sHQBEy_ILqBD;IagsK|)Ix z0I8)ew6&baIykk6?saDys);84g z7AksFh`>IuPJ-D<;bxzd!G>99>!MCl~7$YTVeMJ)A@4NUH$LA@Bx4Qg>{wq zxm=rn@DsnhZu>uf0!7mzbm457ePM*I$jx8WuUL@h>9tG zEQufd{g*!mgb1*xivmE+S^zbz0MvK^s4fF2vzt2UX6tm7x8Jo}yXwxK_N?}F>?+mi zE>X1Qg~%=xe?u3&tI_4TJD$}p8nMtdgnBOs>O$9;tBE!AO-7v{l`v=^2 z6c__EVTVt9LCq-dPE@$pOL_wxw0p-=rHc`V6`j$;t4ia+mu)&@r2R{7tb=9`O>>;9e<&^C{(7q8{+^WP z>OV}r-ne1(wnysxmx6nw#=U_D%(i>$0=@#Wy@rhO3Jjn-JWx*oI}JUl$ty4fok5_x zJyRFB^G>8wmu88+cyS^A{jcX3eBVP`Dm;5pVn=;IS+On%9}_;o_=MmSicc6m;rK-0 z6NyiIe4_A)wioMSj>f6EOoRHwB=i1N)bM3YV%dp4G5B=Arz1YG_7ivli4;88mEmL4J`kyK5x#rvX7afA5+q4~-;56wJv|E_dl~ugfURHgDPdf&=o0i$$oa%d+N?P82nQU5Ydvosft!b(4&1LFw(-PZT%FFjn#kRMJ zlj2OvZEq_FbTw7j-WvVJn98EH*DpJr_`_6gdrNKVXezb6RiE6UWX1MnmCEMWuB-%q z{gf-Q{(5!V)iu#o{gv50dMk}j>6H!xMk(D=A{4j2;YzO|QOcWxy_KDhc_>4Y2Ps88 z+bdW5hbg}dj#tV?KB`oYa8?fW^;CNGi&Ew#bybE=^j19jcqp$Y1}F_r8kKuJCV_8& z^2(6M6rU$Xzm(`<6E`?+*uRKWMa+M~M_H0?R5Hhgww(g1TuBdC<_{PlrmO84t~kWS zK~*2+)Wjs^kr4x+da}M+cnc;em&dlZDdhgd`2X9`jBuMtedT zHCU=L9)mkWZEvMI!Cq+?WK_C8?XA?$G759kd)Vu8vKA`w69a|!8hZ><{73pL4I|t! z#z!cg)k_57-+ArL!C=iYhyeU2?~Tj$R+?sbi-5K^L=Bj#(xdU7@NAlRJ}}rI{FXe@ zS9n_EX_w@w{Il1Kddl$=$GTc0FiN>KNX2<7`hot+hDnB2&M31wqj5}%^0(0=l$oiW z+Bn5Av$Ntb?NQ7koWnXRr&B|eMdP6xvI1_hhntF&#vV_-loTXfwR32yGIZ(yBwGJ} zby*}5M9on*T}IJdrFu$$QkU-2CIL12oUG|eeDbh1`K`Hi|CDIu!4v;EF*O-^S$WFQ z)W?aEKx%6%!L`@eXd#sw=ohI!b$KXhU=JTe{Xw)KAPl#XKg$_NZn(uNt8 zvPqGxBA}KBH68yK5l9JC9!&99<~`y2KaNBIGNEvaqf(GQQtsu1pkeUL9frTDxf6|DxyjGL&MrYW zZ=R_{sn3mP;}w<{z$(o_c~h9;JttCGm!F|Ln;&HkE8tAYDT-8XycMBj6;4(@1hMI~ zQEA*0piG+M253+sXAf0ADvVUBW|u1wfK8`6fR?Ug&yG~8FBp~3`%X&YO32x2N-Z=1uY8%vl*bcRjSdGuOLV?Y&IHps(n=Ok>q2 zwdXQTSD)0z$5g03slAqIvHGO;S*9xWN!_+h>(nQ8&oaHOKB=|Sv{!vnSC8ovJk6`J zpIb1!sOE*5Xp`Con!HvzPiR_RCUT^pOJ9wQ!-iaM_PcDLGvLXGSPLmJL(FzwuNG-$wgUzLS-h zS;a3*8B_`1a zGiUR{eYpZ-{`G_TOexw^pq$^oP)XezWnOpyBUAT!()|DyW=~p#tD)S`cn&-vgj?<_617X+fnAKFQIv(*=q9-XPy&p z=7O(xNpzNh`6}^O?3L=XF6Ob{zzi@eO_u_xVI_A~%!@tEk>?h-<)y+3=3+kk9W(*6 zdC~cI|{Q6xk4hGJ{Pl@i+@-r5sS_TQuAJJ6f;e`0`0By zuRRQ38UL=duz7sSjOK5zg9hA}j?j|g+I~Ze*y}e9* z@G>81{HuJ}bmz2uSbF!6cu(F|CzJ?8aQwM0n^m!{&FA6s}KDiKF8=CKQ_~;*4vKR+1b^0V9Th^pGECC&N?ym z$x}J_PB=w#wv&}x&T*E<1yOGm+%KlD!7GkOMX2n*{7+qU?IOJo@h&Z7EMiexs$SNx2HuH%yvtT zBO&aLeEOmt`$0Y(3TNl!6GnY2pK7Amdhw+E<-V`9zTQ)3v}8ZRiddpr>=L**>?Syg zQ*HtiWfnlKu?Zfcz=Eb$*93b}S`!SSt|qvPqMG0;Dk_kr)G3+`>Y>VqFIII`$g=^Xxf{? z+$<+fvUySTQ#f~{Ym2aC(qp+3HGG5YEV{?$cVVTL>*2gIW{|2!r3h1{(4tZ(Q7Lq& z6d|e<5vmjcsuc056yd29(Wyjm_KxCX*%C60=6wN%jpqFv#panrr$%#MsvFHa0e^Hf z9|Yi@!Usz71W9h*%8j&bH20v&6z&d=ms5CefYT{Fj=~zb1Nn~OPXLiPh7SR#8N=hG z0Fx>pdTkHpM($&|GiU*0`7k*qYb+n&B(x~UA51K75W98JD-Cx-{o@!m{NmnOn# zQzvp~Nn3}pt9hu6=0?4z!=bA8*ao^YiASp=0;SvPq~D{*Kty;d4}gw+Qu$!%x236k z7!XHO`6z(UNg`$$llV{yy9QyqsdzGvp$n6^8^||ReDzJ>-&ZGjobo1f16=}w7Eea> zc3#KR;mJInHeKZo{3Bm#S_=yg^kqKOcM3O1&=`ftv_?1ps7~VsQXkt0L-(e@+5$drt*mZ!D)Q5H1wP_bhw&eo6>j>i9N4k z+f!N=*Hc|Qb0xQQ&5f6=bHxu}21-iTrpZjVnn^p+1t2QhoKu^l#o-$2lXYx4MwkwklmSOVpqfvXI&dA~L zN2e@ql;VA*_={Oc&Vnp%z?el@{Ao!Hwh_3V7ZO-7^_p%qgU9&MfN>hS>j>s# z)E2QSyN8t2Wfp%z3h5;g@Ms^2=pzwlX7LbM&@_wp2k4&72TG?5^rM*du>3+c51?(? z+*P87SVISNM~NBcN2^cqFe*$!Nl!Fs!AX$f3r)PYFXiIWLBv$6|&d_&X4v%HUbR&oN7kiBXk@bT8}bkXfytwTIXpycPL!AjMa02rwjXUgiwc%J zhJ|PqZaJ;b<4KN!{;V{2{4(xEr^e!by<0x_k)-D&>BLXaD0C8Yp}Mimlir@g{n&DP zC7<^L_%5Fh1PCn`c!1TjQKp2j&3@EwEFuHteCTE>b7?U!WDZXTZ{8e~ z)a7(&4j(6FZzN%*$OXMuKv| znuLhG1L0`pM$QYkhaA;lP2SbxB+a|UcT*Pd5t8XDl1we0Cl>H1Onr9&PXLHp$cIRJ zBbJ7`xfB;@6YO8ejgs~cYjL{0kcX;jKc|KFHyMJ$=dd{lHUE?d#5-CJ#W{9!HR5`3 z7CayNyzqSY=lMv8dEt4q5X+32NbTI$OdA0|YM>OCWbCx-H@7 z(Gc)81YBIo9|PU96tzSUCiqk05oC~%?7k3-eDyr$+%}gc`O~QVh{=Ic-dT>C>QARf z!^^15M)Fw3yFg~YWqiD(W?HE`mhmS+xW0@}lpZwE$ud5KRxRf~k~7br*vC+7#{$-y z9xm6sR%jIvUWV;Xs9B^gqb*vTv!lwTMs!ZBq=B)X> zf>u^SH*qUf3nsNQOV?Lr&NVB%EMbPhHob2Z~z)F`HIkH&mt5o)zf* zD(K+~1gnCQUPOHn+;3UqA65w$Uw9E~pn@7-Minr>aiouyHq5v$a&H&tTxlTFJVIv&ivWBLU!)u_SCeJ z1yQ~tbnL9~1V?cPd7dtxh5vSLM*;|rxRtQBumSljMEq$D*;5S&*{RPou0svn1MUc| z!44((7?sq)u2nT?_A2N^4K}a}3a>@D%BirHkCVC{t;Kp0{6;!f%Lh{KT5QV|RJxYW z0Jy#uC7^=36H1fN?vEgfRj_8$)D}nAHClF0y{>wa4`XxF* zEi4hL&x}-Di#Frb%R;luFN+k7U5Art1!b?}Pf9U8srz~~pQqG4Pb{HEkigMtJgKZ1H_K?s52rz1_g-ZR$jQ|YTKbJsOu|eS}LgU6`m-^ef$b`l?w9MAixv}wrt=D zQqu_mvH*)D2!Dn78*&R~YWqM14cN#NF}ivqif{#;+^A_2w240@HJ>RRfU~)g7H`6~ zSV6CB;=`qmd62H|wZ@IikHYJ4)r+KvspvpU$#EjMd^R&I+Sb+7VKa_EavVbpLV zJ*Z=W^w?`?4n;6mNz!L(Arqo2Uc=TUNNWOQgYWS=Yfl$m(-uHY3p&)>R8){}n^Eoi z2__XHXQsT2W1zzu%%dg!o_`&Oc_DcNe55wXg%<9qUZ%D(yZLo&ffe-h8$3k@bJH7W z7%J!%5C8+-6zfQNQ(Hi{-$c&<{I*P@CFn}-okpdDWo5Quoso1ej9wZ^Ia_J zes62#?;vefi=swyrsB78fE7tt^EU2Wgw~%(S7{5&Ua~iDWrkMzN4%qD;oNulP&x3p z9C%y3G@7g{@i%xFJcne(D0}ciD!6wQ$xVJjucLBu4;tJgVDGi2Ztsjc z4*qLP0@+Jir}sch+m0T(f@W?P0j=MT9u@oB4iWv-9hzK6O54Go^!k^))2sMcs{Vi( zTiM)yr)INzAQ}EZS{zahDclW(9$4^HzfCjAi#&IrUW-%G1q-_N7vI+u_6?MmECOA= zi+f5F1L*PrEJzPCPHPu-af8GLOF1pugP@0gz?@oELi}!=DMYLy0_hGe*w%i?qN!oG zw#1?^;Twpc(6fsf7XpI0qZBQgg$-{)`qM9L$wYP*R61nVHuJB|d?-8` z@}8(GdGGPDvIzCEsbHY+gV<0D4`OY&@6jC7=bsHi$~a5TG&JTAnYTyO>9_W16?R}C zjiNh85E|5laNyTia6%N8 zj}IizY965^Uv;AW7A(z#eO9wrs)&N1eE2a+Ti*L(L!bY?)()I`A7^tRWqP1`(ARCS_cMp8;IDKxx9Gk;w_6OQx|KtOa zt{xxq@zSf$Lu2*k)OZ3tWXw@~y;1mC>lE1iAs;0@9w5c94762odrCimQ-~N*9Y{&{&`4Cj zhav!UC>=VAe2-D(3b!;I5PMeFgH}KCm!X6>M1Bg3+MQsnx8Rcp#h%&jkl5<;4{7c6 z8-dhq4VnVD&q%o^kvENpw8Cm%FDm_rdYob^sJI?ER7U&i`3Ohxt?(Y13Sl4No~4Wu zKEmlo;6DtM*Ej{AaTf~z3UZfxiJmlN9{1%3tqZm5m#hOlbr{=Y84W+o#{g_R%qIi< zd6-Wlk5V-3(>@k>%f~!j3O*G`-OCX%4ECpnzv9*``xCS#?(=X(dq%E-ji2yz2xiNXKhi32HCVSD-i!*-B!gGZh|z7vhc}Q_E=B5v^rTzlU9lqcpl21pm$FUYCeSsT1A=ptOP8>&> zRKGx^;}{@C=!4XgXL}XxXDh#D6nYeQ9A#8^6pe@w;YAV0cz=ri8*|sHVHt%S!`*Wk z%|FJo0L~vn4wX@t<7mIiDCam%@?vO|ZT4v3e?5-mDWkX(JVlbb(yCK9F4kXVu0GwS zXXM)YATc;5h$60_%-%x7tg=wYllZ!%jC!BMW+ym$QS3Lk>90S*{psvU?j`N&6C^K+ zji+$iDEOYj1x*oF%aR+|BHVsr`W8DXPw`~QG%!e1b&5Xu%sCpxup@@>K7TFp5rDoqK)xJ3T{7aG4XTKEW&S&@}DG62ZG|1s! zVKtvTBY4iA!5LoYoZecU^sjhFSYGj!NVh9r@iZwRo1Q<0c0BzQ3P*Dj3({_Lg@jzI zcYZ?edHZWElL}g4L;t}HTDv8N%)zAVunJzlttICB%UOII0=v%2=zfD^l3-gb!}`iM zJVYv6g6p~pth<%JwCbzM>Gn4`N0n2zZ*kuuPC_pR$!iPTKN(f#0N+7LBS$7BYJL_> ztE@~otHfZm+c_M(1)(O0JZGaYEjh=7L3rgHcBXRr?i}*9oVtF8UbCD^0OXnQHL2vO z?-BSBzcV*2=H(ReJ@QjXe5Vypr$2Bx2(QM5{ETD2abrEH} zoI)@033Bc;YNmwIrUo8bo6iken1!Ne)qsYP$Isl6>MrpxpQ5=L({tK*^qkeB=x_SU z=`SJBd2l5psy;r|z$Zw;6)WrC8+bQ5w#wQ-O4>CnNc9#c{t{f8?ucb_?oI9?HM~vN zzk(KZ4!i@o;W#X@cWl_66uK6jlF;~GP;IC#ssNRW3 zv^Zzm4Gelk(;x^xN)P^sYpQYzz9MoX{|XYgoDNW2~}+~65NZo8q` zGN!dHO}B8sd+cZK%f_qPJxYZ)(bU1KH$^fx+|)dm-ZF>3%H&R_TR1hB)52Tm1%$>k zXz?xHx6NTw;Io5eiw38=P-y`7)GCmm<{~84Qzn{(+qe%ar<&V5PMS6cV->XT1%U{d zTce10c%xWaGaC7L@E&Z`GI_C8686+Sa&(Cm^NhO=KaC5;KDng{rj}EE6Hf&QzJoh# zp~VV{`3LVymqNLrCI60t46e@q5ZO@t4?a*Nnd}Z3N5{Ix-YWx|;>{1%=3wGvGTK|iXdgm8xI;Ax9SC}S$q(|Xbc!#yW zW8K~U6}?O;{rW3fqEgEEjn4%*`x}22An|vc=t}9W-*L}dN{)ZPxurDq51s~a@DFVI zr4;oi&jncXCoceC_t8<6QsI3e<%$HU5BPi_Pd`BVlv4OZA#>qFbYi7+@gXv?l;WFt zw$#jy)^J@sH8x|fE3Ng{P4h5_Un${&LjH)Mw6;=LAbIuVY0y1JF-+H9A`EodP3J?o zOgCI2+$G{9)2UOp-4r(sgxGk>s0T2Z?BsU5a*!F0eIIzHw@sOgDz1D?;$lo_lIk{ zcHD7oJPKb`9JhVzQ%aj1bt#g$k7Rap(hZS_rz9fJNjFp?;w0j@ldhjc43vm-P25|E zPIT7!OUe*QDR$Nkk_hxJZn~b-Gz3e}QLpoq*o0QtNx(w;JiRUj;3ELZGe(N)=AwI2 zBF5VgooK6z&I8;BTy$e3af&2%cGYzQKGjvHCgxUGotixcgHFxQ83vu2QU?vXX#f#M z-B5s8MxDA84jOfnrJw~;5UdZUozI}Xzn#GK+V&^%`FY7v=iC-b{uqT|tlUm1Om4{|UwdBFN?k@)^Het~elgwSb=VZ^EHCNke zg*s~`%QjCPl9;~s)TzJhF?#7j0Xj=CT!NVZ{lu5YQ~m7hX1zM=)ylawB{il_?bL7L zA5nj`Bfna1L+#o^#n-l~q~&x;f(H@=dkbVA3C08T6W_sv`L~{BXqaslK^@+PIkS}h*&f(h&U5W;vxxR|cN=O+D=Mu~C6&<*364u}Ljt{@pmhZ3C*;fvYCTI?WZPLv z+E6Q7sAxh}N#(Rjf&&tKFTw8;`1@lPu{RV1x1MEhlx-G4UC@U5Q!6UXh6v=?Y6-SU za8!byBybAQg@%c|oP(c%wd7bgq?a|vN-cu|bo=mYY}{GuU~L~ z@e6GHD}eaHT$TKdHhz#@V|`TrOQ5`_%18XmV7I)?$X5Rth#&b`>Oyoyj$Z0d?o3}` z%CZ{MadqZO>JX_bXC;}inlaS4vUvDN42fZ_$aMVXpQH`T7_8)z+mu(hJKsOrj&^gj_hUu3yLr0f|`dV%0 zw0zB6wlovIv74r^oubLU&RjoirtQq|s+WyZ6ZQyUd-A0M?r*R>#|>kfDebPoK={Ybe;T4J?{i~nGmU;|45XgiZK}T3OEY=EPsTvYyWFj^ znY?6Ozqtile&z1ZG}E*v4c&1L4|oJl@X!

BN6$bi=ALQ#TCUl6k$ZmCOk1}EIa9iWmnU`CdAS>- zO|K&0wF3ncZGPa=nZh#-p%xHpn&}w#o~5s~(qJQ~sJtFXFk542%QI_9&bf|XuFTs?)-v9sr diff --git a/.doctrees/transactions.doctree b/.doctrees/transactions.doctree index 646cabab65e18d3b341c8ec12c46e8a8911c3488..d95621ffe3b5e75f7fa98929314325c15266f5ff 100644 GIT binary patch delta 9899 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 Qoo-ApNFo02H%rie17I=cjQ{`u delta 9737 zcma)CdstIfws&tJkN|~*2!aR!QF(`l;0Qty6`@E9g0;S?0fL9fGbCC>>jSN=Vx=yu zwmum@9H&;SO{$jd~pA*)c_8J)Q@>%V(O?&gGPc@DTL&Jtunek^2p>9~Z%SZ!>)D6%NyV;?Yb{;<018WF|wM#Z=$ZrRL1$mK?3Ny1`;-YcbTM z)-*S2dn{ZMR}OFcJc%m6TQ&)red4_qb%nzWuW*@gaic7YTs$qC3I(!wv#Q!zTrdn7ryd9-MOvq?;8VR(M`p~WkkP@m5=XbWH_N?z&)3dTCp7Y^k z+(=^@f`=7pa4_^bsw5OA;&KG(pT)tguu@b@7SdtC2tTYx(3=qw*igk8G;Q^bEe(b? zGyFOt8%~ax=xd)(LnfFKJ{zqdz+|OyIpq>n8o?WEG{N=oB$a6hL1PE}s!2gFxq+;X z7>!Mgqg<4uw|*1xFE4x$K}BN*$fHLFAD}X6azvFz5}Wka@zKYTYCu}khfbQZ1abqw z#Y~fed=Qg|uDXHb#CD?r>UJ{TkFB(QUp!hTCF|QK@lS7YIq}=D0r~KX^Dg z`7w@`fSv8%I6v$sT6|d^MEuWHY*PA!+?~rXdf)e%5s4VF~3USLd@;z z#$>0t>?aXeoSlSzkXH9ac0N@{E4*NWA0J8l<77Y+L&h~X88nNgHR!9GO?tDwy1}rB z-W4ou7JWlQyQW3o)@G>Hn46(|YUnD>(t5q7rn#xjY_imtn@!}hN#AHN8%%AfiXt*M zJgcW&Az5Q49b!>gdlgsTw0Mydq^8-@P^+mnXlf00^-V;!zD-lt+|baxjL3MhiRdH( zx#rq7O&cd}6N_*zZ!cdjCPrMNc6)}R!EcGOFRGTNKx-h3HqZz7< zP*Xa3ACw8|qM@6N9VFuugr48!E5wGmi{Nc@=i5RC;PdWs|0rs-4XerT;Yts)o%nlTnI?TdKY8+A~d970L3rg$_N`%6EueSdXEjVj68#g(@=H&iWg-|VGek@DRWWe9vJf4n#MOs~P$n&HHl$aj+jncp zPReDg%{zQ(7?-cATJcAoxoop>fy1*pR9A*5Bn|(}f)sqi$w#jWy2Q=WKDxqqiF=)V z*kle0oMIq&-qSe7hn<&V zVDr4mbVAB7THN92GzZquGQSjz^B3Y0&*To-$!Qm?R?U$nr*|Uvra*2EBtMge=kR>Q zMR$B!7oLJ83oqk#&wSqE`Ori8{zcF5)t||#KT1EwR^LMPx9ThLHa?KF`UeDFTYXsd zuY;Y{nJ~S2s#pmdt1Iz-=1TezT{RJ!t0SZM{Ls|Z8yaed)-c&dd>!+?O|ZRi9DLoC z5Bj=MaIgh*Di}jm0uU68_RD7H0)&7vPp5 z6<=U{VQ-CJ_*MZ;i`^*w}{58 zbn#4b7v8ft*A@sNOupP~>?5-^>CXhpSVqGHhq?8t5Se66jHDo2O_W3w4@oA@=Qr*P=94(YLC0M zpdkpMIaH$C$EoX7BJ?&Ii9Z6G@)V-Qfn!_3Zc1?{?64bQ@0tv#llf9qU~=?jZQG0JtVdsdPb@d_ zaji7(QC)Mj#ml0_H=We~r(nx9Xt5+pLCEtbzRw`y9oPo3u_Jdqmpkw^W{J4h$&%-n zUctV;9-oQ-K~1q9T9%7cVZJWuNkbCt>zJMo1T(^*zI}ldggj~CbOsTRKQ@RjJN|@0 z>+;bk47M$wOGf^?x}%YNU)!+?&!x~vh+d)bdz$hYX`BVqS2UqIIJP2HSxJ|oN}VO* zFkdiqrz>pBCX$qDs9u>v5_9)TtwKyal9;rD@2pHE7e+kSiMLZ_{F&;11iN~CX}Mbe z@!W8P`WU-Dh+AE(>T`7twe%e)=lmoH>4X1UU2KEbt;xfEzO=>0iyL|bX{2^{lM}4? z)JERa(T7`hevX9jwNIiBs9&3hzje~`NYHWv{$uSde1l0=h>O>K;qxhD#k0A%dd;qn zp3NiST4xE79lb6Ed4qn7?bQFXAbJ>VS~pcS%+DnuZWBbPG-B_T7%9Z+^;#4!jriyK zQRIDT`ip7)rJ~|ro#>0JF7yvPzm3qJv>_9fIg0*8pkD%%Oo;^j4S8sxG-AOEi*bn` z>$W9u=Y{F0gl8toEb^m{4HKS5#8r_Q9F2&KHvUXvY5au@^u?3#Xd;GyBoMvVdchLw4E^HpXGiR4C#Ti&&ELbrb_Z=id+lgg1D$MgoLYo(A%xH zzQ5^Nq&ntmYtiORbc)(4)M1&Ih&u+v^Y|EV>@j$>d8>VL^d+N|u+|-!=$0E{)YlUF zLw9AN|8@hRkv|5t-I>tPDMx+Q-tHExQpjD>ji|*cIqg595x$}k3fKmOT%64?D*oxG%&tdHyB1c+S!yU?!?p$PB$T_;+VV<<6z1($w7A+GCU*Nc zDa^d>N!aWTb9Q^2o#A+XbwB^))(qSfTZ|yMxcUhSzo=RljSz zNX+puC*c8Ny!v6|F0&Md#_K%8h`zUD?+mp z?dxGuBB0WB7vp=2clIsUq@4SW`{1 z?SkI-)R1zj6RF|osr2EgwhKZOSvvgdlm*8Icua>hO7k9*cIAU3eCwGD)d=6^ z-G3K~KRs!mBwn0LCoK8$#Sq_v(--qeR{wr+oWhp3G^>~6&_H^p4rXWPLUDgcAZy-_ zKHG%j*mZgW7(Ug0Su~RTwtVsP;Rt60dd%4(N;||l{)>|c7Y4GdDTL6=Z`&vLFZa+1 zp&d}Bv+H3ejVo8G2>1A_ll*N2d-yZR+N<;__T<%6T>3lw^Xd|$v(CMy$7qlB{lEUN zSM&t&jh1(MX7+?3@8)k(%AxSXjc9ZOWP?#?5XKCS!}s{*+QAsI{QO{+_um4C4TGS; z;pi@08%$iaj7*JYI+T)EYUI5W8M?^>q;WGHCXgRjjpOOiPM>y`(qR#KS8iNDhnL9v zIO8Td{6>eL>Ci-8Ul^CrVFMMgjt<@AdBwPy4oy_i5;_EuyM|GrSVhJ=Bx#I4&>@Ik z37~_44%K9^bjh3OkJ9ZehBo>iE=EdN$H?j!Q5_?xV+3`KoQ@IGF;Y54NXN*K{e%Nq zVG<|-opBXau49UIOsUSo#ZWcWC0qdW2baP-qn!GNIYUpsF=x;p5P4^;q`qO!ps$O0 zXV4dxyff(gJKh=eoel2{`d&cGd!vUsM?qcEN53&=(0AIoUL AVE_OC diff --git a/_sources/development-environment.md.txt b/_sources/development-environment.md.txt index d408810..b73314a 100644 --- a/_sources/development-environment.md.txt +++ b/_sources/development-environment.md.txt @@ -20,7 +20,7 @@ Tests are run using `pytest`. Useful things to know are: Custom options are: * `--transactron-traces` -- generates trace files readable by `gtkwave`. The trace files are saved in `test/__traces__`. -* `--transactron-profile` -- generates Transactron execution profiles, readable by the script named `tprof.py`. The profiles are saved in `test/__profiles__`. +* `--transactron-profile` -- generates Transactron execution profiles, readable by the script named `transactron-prof`. The profiles are saved in `test/__profiles__`. * `--transactron-log-filter` -- allows to filter test logs. ## Using scripts @@ -53,14 +53,14 @@ This way you may display the changes `black` would apply to `[filename]` if you Generates local documentation using [Sphinx](https://www.sphinx-doc.org/). The generated HTML files are located in `build/html`. -### tprof.py +### transactron-prof Processes Transactron profile files and presents them in a readable way. To generate a profile file, the `run_tests.py` script should be used with the `--profile` option. -The `tprof.py` can then be run as follows: +The script can then be run as follows: ``` -scripts/tprof.py test/__profile__/profile_file.json +transactron-prof test/__profile__/profile_file.json ``` This displays the profile information about transactions by default. @@ -79,7 +79,7 @@ Counters presented in the tree shows information about the calls from the transa When displaying method profiles, an inverted call graph is produced: the transactions are in the leaves, and the children nodes are the callers of the method in question. In this mode, the `locked` field in the tree shows how many cycles a given method or transaction was responsible for locking the method in the root. -Other options of `tprof.py` are: +Other options of `transactron-prof` are: * `--sort` -- selects which column is used for sorting rows. * `--filter-name` -- filters rows by name. Regular expressions can be used. diff --git a/_sources/transactions.md.txt b/_sources/transactions.md.txt index d42ae7f..8968c55 100644 --- a/_sources/transactions.md.txt +++ b/_sources/transactions.md.txt @@ -2,7 +2,7 @@ ## Introduction -Transactron is an Amaranth library for managing connections between modules in complex projects. +Transactron is an [Amaranth](https://amaranth-lang.org/) library for managing connections between modules in complex projects. It is inspired by the [Bluespec](http://bluespec.com/) programming language (see: [Bluespec wiki](http://wiki.bluespec.com/), [Bluespec compiler](https://github.com/B-Lang-org/bsc)). The basic idea is to interface hardware modules using _transactions_ and _methods_. @@ -17,13 +17,13 @@ If multiple transactions try to call the same method in the same clock cycle, th In this way, access to methods is coordinated via the transaction system to avoid conflicts. Methods can communicate with their callers in both directions: from caller to method and back. -The communication is structured using Amaranth records. +The communication is structured using Amaranth structures. ## Basic usage ### Implementing transactions -The simplest way to implement a transaction as a part of Amaranth `Elaboratable` is by using a `with` block: +The standard way to implement a transaction as a part of Amaranth `Elaboratable` is by using a `with` block: ```python class MyThing(Elaboratable): @@ -102,18 +102,27 @@ class MyOtherThing(Elaboratable): The `def_method` technique presented above is a convenience syntax, but it works just like other Amaranth `with` blocks. In particular, the *Python code* inside the unnamed `def` function is always executed once. -A method defined in one `Elaboratable` is usually passed to other `Elaboratable`s via constructor parameters. -For example, the `MyThing` constructor could be defined as follows. -Only methods should be passed around, not entire `Elaboratable`s! +If a given `Elaboratable` depends on a method defined in another `Elaboratable`, it should declare it in the constructor, but not define it. +The definition is then provided using `proxy` outside both `Elaboratable`s. ```python class MyThing(Elaboratable): - def __init__(self, method: Method): - self.method = method + def __init__(self): + self.method = Method(i=input_layout, o=output_layout) ... ... + +class LargerThing(Elaboratable): + def elaborate(self, platform): + m = TModule() + + m.submodules.thing = thing = MyThing() + m.submodules.other_thing = other_thing = MyOtherThing() + thing.method.proxy(m, other_thing.my_method) + + return m ``` ### Method or transaction? @@ -135,7 +144,7 @@ Such a transaction is included in the library -- it's named `AdapterTrans`. ### Method argument passing conventions -Even though method arguments are Amaranth records, their use can be avoided in many cases, which results in cleaner code. +Even though method arguments are Amaranth structures, their use can be avoided in many cases, which results in cleaner code. Suppose we have the following layout, which is an input layout for a method called `method`: ```python @@ -144,7 +153,7 @@ method = Method(i=layout) ``` The method can be called in multiple ways. -The cleanest and recommended way is to pass each record field using a keyword argument: +The cleanest and recommended way is to pass each field using a keyword argument: ```python method(m, foo=foo_expr, bar=bar_expr) @@ -156,10 +165,10 @@ Another way is to pass the arguments using a `dict`: method(m, {'foo': foo_expr, 'bar': bar_expr}) ``` -Finally, one can directly pass an Amaranth record: +Finally, one can directly pass an Amaranth structure: ```python -rec = Record(layout) +rec = Signal(layout) m.d.comb += rec.foo.eq(foo_expr) m.d.comb += rec.bar.eq(bar_expr) method(m, rec) @@ -186,7 +195,7 @@ method2(m, {'foobar': {'foo': foo_expr, 'bar': bar_expr}, 'baz': baz_expr}) ### Method definition conventions When defining methods, two conventions can be used. -The cleanest and recommended way is to create an argument for each record field: +The cleanest and recommended way is to create an argument for each field: ```python @def_method(m, method) @@ -194,11 +203,11 @@ def _(foo: Value, bar: Value): ... ``` -The other is to receive the argument record directly. The `arg` name is required: +The other is to receive the argument structure directly. The `arg` name is required: ```python -def_method(m, method) -def _(arg: Record): +@def_method(m, method) +def _(arg: data.View): ... ``` diff --git a/api.html b/api.html index d8ae557..9299d61 100644 --- a/api.html +++ b/api.html @@ -175,7 +175,7 @@

transactron

© Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

diff --git a/development-environment.html b/development-environment.html index e371081..02c91aa 100644 --- a/development-environment.html +++ b/development-environment.html @@ -48,7 +48,7 @@
  • Using scripts
  • @@ -107,7 +107,7 @@

    Running tests
  • --transactron-traces – generates trace files readable by gtkwave. The trace files are saved in test/__traces__.

  • -
  • --transactron-profile – generates Transactron execution profiles, readable by the script named tprof.py. The profiles are saved in test/__profiles__.

  • +
  • --transactron-profile – generates Transactron execution profiles, readable by the script named transactron-prof. The profiles are saved in test/__profiles__.

  • --transactron-log-filter – allows to filter test logs.

  • @@ -137,12 +137,12 @@

    lint.sh

    Generates local documentation using Sphinx. The generated HTML files are located in build/html.

    -
    -

    tprof.py

    +
    +

    transactron-prof

    Processes Transactron profile files and presents them in a readable way. To generate a profile file, the run_tests.py script should be used with the --profile option. -The tprof.py can then be run as follows:

    - diff --git a/modules.html b/modules.html index 22e9e18..caf0170 100644 --- a/modules.html +++ b/modules.html @@ -161,7 +161,7 @@

    transactron

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/objects.inv b/objects.inv index 1b9d3a8b758fa7e1b034aa332ec9c59e4770625b..9070bca3e7d00caf8b9dab044caa5fdc84184033 100644 GIT binary patch delta 5163 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 diff --git a/py-modindex.html b/py-modindex.html index e920ff2..7430f79 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -363,7 +363,7 @@

    Python Module Index

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/search.html b/search.html index 75bf093..3034216 100644 --- a/search.html +++ b/search.html @@ -91,7 +91,7 @@

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/searchindex.js b/searchindex.js index be5cc9a..3986e02 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api", "development-environment", "index", "modules", "transactions", "transactron", "transactron.cmd", "transactron.core", "transactron.lib", "transactron.testing", "transactron.utils", "transactron.utils.amaranth_ext"], "filenames": ["api.md", "development-environment.md", "index.md", "modules.rst", "transactions.md", "transactron.rst", "transactron.cmd.rst", "transactron.core.rst", "transactron.lib.rst", "transactron.testing.rst", "transactron.utils.rst", "transactron.utils.amaranth_ext.rst"], "titles": ["API", "Development environment", "Transactron", "transactron", "Documentation for Transactron", "transactron package", "transactron.cmd package", "transactron.core package", "transactron.lib package", "transactron.testing package", "transactron.utils package", "transactron.utils.amaranth_ext package"], "terms": {"packag": [0, 1, 2, 3], "subpackag": [0, 3], "cmd": [0, 3, 5], "submodul": [0, 3], "tprof": [0, 2, 3, 5], "modul": [0, 1, 3, 4], "content": [0, 3], "core": [0, 3, 5, 8, 9, 10], "bodi": [0, 3, 4, 5, 8, 9], "kei": [0, 3, 5, 6, 8, 10], "manag": [0, 1, 3, 4, 5, 8, 10], "method": [0, 1, 2, 3, 5, 8, 9, 10, 11], "schedul": [0, 2, 3, 5, 8, 11], "sugar": [0, 3, 5, 11], "tmodul": [0, 3, 4, 5, 8], "transact": [0, 1, 2, 3, 5, 8, 11], "transaction_bas": [0, 3, 5], "lib": [0, 3, 5, 7, 9, 10, 11], "adapt": [0, 3, 4, 5, 9], "alloc": [0, 3, 5], "button": [0, 3, 5], "connector": [0, 3, 5], "depend": [0, 3, 4, 5, 11], "fifo": [0, 3, 4, 5, 7], "log": [0, 1, 3, 5, 10], "metric": [0, 3, 5, 10], "reqr": [0, 3, 5], "simultan": [0, 3, 4, 5, 7], "storag": [0, 3, 5], "transform": [0, 3, 5], "test": [0, 2, 3, 5, 7, 8, 10, 11], "function": [0, 3, 4, 5, 7, 8, 10], "infrastructur": [0, 3, 5], "input_gener": [0, 3, 5], "method_mock": [0, 3, 5], "profil": [0, 1, 3, 6], "testbenchio": [0, 3, 5], "tick_count": [0, 3, 5], "util": [0, 3, 5, 8], "assign": [0, 3, 4, 5, 7], "data_repr": [0, 3, 5], "debug_sign": [0, 3, 5, 7, 8, 9], "depcach": [0, 3, 5], "gen": [0, 3, 5], "idgen": [0, 3, 5], "transactron_help": [0, 3, 5], "graph": [0, 1, 3, 7, 8], "trace": [0, 1, 3], "In": [1, 4, 5, 7, 8, 9, 10, 11], "order": [1, 2, 7, 8, 11], "prepar": [1, 5], "pleas": [1, 4], "follow": [1, 4, 8, 9, 10], "step": [1, 4], "below": [1, 8], "instal": 1, "python": [1, 4, 7, 8, 9, 10], "3": [1, 5, 7, 10], "11": 1, "interpret": [1, 8, 10], "pip": 1, "option": [1, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [1, 4, 7, 8, 9, 10, 11], "virtual": 1, "python3": 1, "m": [1, 4, 7, 8, 11], "venv": 1, "project": [1, 4, 7], "directori": 1, "activ": [1, 7, 8, 9, 11], "gener": [1, 5, 7, 8, 9, 10, 11], "bin": 1, "all": [1, 4, 5, 7, 8, 9, 10, 11], "requir": [1, 4, 5, 7], "librari": [1, 2, 8], "pip3": 1, "dev": 1, "precommit": 1, "hook": [1, 5, 8], "pre": 1, "commit": 1, "thi": [1, 4, 5, 7, 8, 9, 10, 11], "automat": [1, 9, 10, 11], "linter": 1, "befor": [1, 4, 7, 8], "ar": [1, 4, 5, 7, 8, 9, 10, 11], "pytest": 1, "thing": [1, 4, 8, 10], "know": 1, "To": [1, 8, 10], "speed": 1, "multipl": [1, 4, 7, 8, 9, 10, 11], "worker": 1, "thread": 1, "can": [1, 4, 5, 7, 8, 9, 10, 11], "n": [1, 7, 11], "auto": 1, "onli": [1, 4, 5, 7, 8, 9, 10, 11], "some": [1, 4, 7, 8], "k": [1, 8], "express": [1, 4, 8], "format": [1, 4, 5, 7, 8, 10, 11], "i": [1, 4, 5, 7, 8, 9, 10, 11], "describ": [1, 5, 7, 8, 9], "doc": 1, "abl": [1, 8], "read": [1, 4, 7, 8, 10, 11], "standard": [1, 8, 9, 11], "output": [1, 7, 8, 9, 11], "even": [1, 4, 7, 8], "success": [1, 9], "": [1, 4, 5, 7, 8, 10, 11], "custom": [1, 8, 11], "transactron": 1, "file": [1, 10], "readabl": [1, 8], "gtkwave": [1, 10], "The": [1, 2, 5, 7, 8, 9, 10, 11], "save": [1, 5, 8, 10], "__traces__": 1, "execut": [1, 4, 5, 7, 8, 9], "name": [1, 4, 5, 7, 8, 9, 10, 11], "__profiles__": 1, "filter": [1, 8], "allow": [1, 4, 7, 8, 9, 11], "contain": [1, 4, 7, 8, 10, 11], "number": [1, 5, 7, 8, 9, 10, 11], "which": [1, 4, 5, 7, 8, 9, 10, 11], "ci": 1, "also": [1, 4, 8, 9], "intend": [1, 7, 11], "local": 1, "thei": [1, 4, 7, 8], "check": [1, 7, 10], "code": [1, 4, 5, 8, 10], "type": [1, 7, 8, 9, 10, 11], "It": [1, 4, 5, 7, 8, 9, 10, 11], "should": [1, 4, 7, 8, 9, 10, 11], "subcommand": 1, "filenam": 1, "main": [1, 6], "avail": [1, 8], "reformat": 1, "black": 1, "check_format": 1, "verifi": 1, "flake8": 1, "check_typ": 1, "pyright": 1, "same": [1, 4, 7, 8, 9, 10, 11], "when": [1, 4, 7, 8, 9, 10, 11], "confront": 1, "would": [1, 4, 8, 10], "messag": [1, 8], "from": [1, 4, 5, 7, 8, 9, 10, 11], "you": [1, 7, 8, 11], "mai": [1, 8, 10], "diff": 1, "wai": [1, 4, 7, 8, 10, 11], "displai": 1, "chang": [1, 4, 8, 9, 10, 11], "appli": [1, 5, 7, 9, 11], "chose": 1, "help": [1, 8], "locat": [1, 5, 7, 8, 10], "issu": [1, 4, 8], "document": [1, 2], "sphinx": 1, "html": 1, "build": [1, 8], "process": [1, 8, 9], "present": [1, 4, 8, 10], "them": [1, 4, 7, 8, 10, 11], "run_test": 1, "__profile__": 1, "profile_fil": 1, "json": [1, 10], "inform": [1, 5, 8, 10], "about": [1, 5, 8, 10], "default": [1, 4, 5, 7, 8, 10, 11], "For": [1, 4, 5, 7, 8, 10, 11], "one": [1, 4, 7, 8, 9, 10, 11], "mode": 1, "column": 1, "have": [1, 4, 7, 8, 9, 10, 11], "mean": [1, 7, 8], "question": [1, 4], "togeth": [1, 4, 7], "differenti": 1, "between": [1, 4, 7, 8, 9, 10, 11], "ident": [1, 8, 11], "differ": [1, 7, 8, 9, 10, 11], "sourc": [1, 5, 7, 8], "line": 1, "where": [1, 4, 7, 8, 9, 10], "wa": [1, 4, 5, 7, 8, 9, 10], "declar": [1, 4, 8, 9], "further": [1, 8], "disambigu": 1, "lock": [1, 4, 5, 8], "show": 1, "cycl": [1, 4, 5, 7, 8, 9, 11], "caller": [1, 4, 5, 7, 8], "call": [1, 4, 5, 7, 8, 9, 10, 11], "fals": [1, 4, 5, 8, 10, 11], "condit": [1, 4, 5, 7, 8], "could": [1, 4, 8, 9], "forc": 1, "wait": [1, 7, 9], "anoth": [1, 4, 7, 8, 9], "conflict": [1, 2, 5, 7], "given": [1, 4, 5, 7, 8, 9, 10, 11], "produc": [1, 7], "each": [1, 4, 5, 7, 8, 9, 10, 11], "tree": [1, 5, 8], "counter": [1, 8], "root": [1, 5], "count": [1, 7, 8, 11], "an": [1, 4, 5, 7, 8, 9, 10, 11], "invert": 1, "leav": 1, "children": 1, "node": [1, 6], "field": [1, 4, 5, 7, 8, 10], "how": [1, 7, 8], "mani": [1, 4, 5, 7, 8, 9, 10], "respons": [1, 7, 8], "other": [1, 4, 5, 7, 8, 11], "sort": [1, 11], "select": [1, 8, 11], "row": 1, "regular": 1, "loc": 1, "develop": [2, 8], "environ": 2, "set": [2, 7, 8, 9, 10, 11], "up": [2, 8, 10], "run": [2, 4, 5, 7, 8, 9, 11], "us": [2, 4, 7, 8, 9, 10, 11], "script": 2, "lint": 2, "sh": 2, "build_doc": 2, "py": [2, 9], "introduct": 2, "basic": [2, 8], "usag": 2, "implement": [2, 8, 10, 11], "argument": [2, 7, 8, 9, 10, 11], "pass": [2, 7, 8, 9, 10], "convent": 2, "definit": [2, 7, 9], "return": [2, 7, 8, 10, 11], "valu": [2, 5, 7, 8, 9, 10, 11], "readi": [2, 5, 7, 8, 11], "signal": [2, 5, 7, 8, 9, 10, 11], "advanc": [2, 9], "concept": 2, "special": [2, 8], "combin": [2, 7, 8, 9, 10], "domain": [2, 7, 11], "nest": [2, 8, 11], "api": 2, "amaranth": [4, 5, 7, 8, 9, 10, 11], "connect": [4, 7, 8, 11], "complex": [4, 8, 11], "inspir": 4, "bluespec": 4, "program": 4, "languag": 4, "see": [4, 7, 8, 11], "wiki": 4, "compil": 4, "idea": 4, "interfac": [4, 7, 8, 11], "hardwar": [4, 8], "A": [4, 5, 7, 8, 9, 10, 11], "state": [4, 7, 8, 9], "oper": [4, 7, 8, 11], "perform": [4, 7, 8, 9, 10, 11], "singl": [4, 7, 8, 9, 10, 11], "clock": [4, 5, 7, 8, 9], "atom": 4, "either": [4, 7, 8, 9, 10, 11], "its": [4, 7, 8, 9, 10, 11], "entrieti": 4, "doe": [4, 11], "defin": [4, 7, 8, 9, 10, 11], "via": [4, 7, 8], "directli": [4, 7, 11], "link": 4, "indirectli": [4, 7], "If": [4, 5, 7, 8, 9, 10, 11], "try": 4, "access": [4, 8, 9, 10], "coordin": 4, "system": [4, 10], "avoid": [4, 11], "commun": 4, "both": [4, 7, 8, 10, 11], "direct": [4, 5, 7, 8, 11], "back": 4, "structur": [4, 5, 7, 8, 10], "record": [4, 7, 8, 10, 11], "simplest": 4, "part": [4, 7, 8], "elaborat": [4, 5, 7, 8, 9, 10], "block": [4, 7, 8, 11], "class": [4, 5, 7, 8, 9, 10, 11], "myth": 4, "def": [4, 7, 11], "elabor": 4, "self": [4, 9, 11], "platform": [4, 5], "includ": [4, 7, 8, 10, 11], "like": [4, 7, 8, 9], "d": [4, 7, 10, 11], "comb": [4, 7, 11], "sig1": 4, "eq": [4, 7, 11], "expr1": 4, "sync": [4, 7, 11], "sig2": 4, "expr2": 4, "result": [4, 8, 9, 10, 11], "arg_expr": 4, "work": [4, 7, 8, 9], "analog": 4, "multiplex": 4, "rememb": [4, 5], "statement": [4, 7, 10], "insid": [4, 7, 8], "alwai": [4, 7, 8, 9, 11], "onc": [4, 7, 8, 11], "As": [4, 8], "typic": [4, 7, 8], "constructor": [4, 7, 10, 11], "myotherth": 4, "__init__": [4, 5, 7, 8, 9, 10, 11], "o": [4, 7, 8, 11], "paramet": [4, 7, 8, 9, 10, 11], "layout": [4, 7, 8, 9, 10], "my_method": [4, 7], "input_layout": 4, "output_layout": 4, "need": [4, 7, 8, 9, 11], "instead": [4, 5, 7, 8, 9, 11], "def_method": [4, 7], "_": [4, 7], "arg": [4, 5, 7, 8, 9, 10, 11], "other_method": 4, "ret_expr": 4, "techniqu": 4, "abov": 4, "conveni": [4, 7, 8], "syntax": [4, 7, 11], "just": [4, 8], "particular": 4, "unnam": 4, "usual": [4, 8, 9], "exampl": [4, 7, 8, 9, 11], "around": [4, 8, 11], "entir": 4, "sometim": 4, "might": [4, 5, 8], "two": [4, 7, 8, 10, 11], "altern": [4, 7, 8], "decid": [4, 9], "best": 4, "easi": [4, 8], "import": 4, "ask": 4, "yourself": 4, "someth": [4, 11], "independ": [4, 8], "so": [4, 5, 7, 8, 11], "mayb": 4, "Or": 4, "extern": [4, 7, 8], "doubt": 4, "prefer": 4, "becaus": [4, 5, 7, 8, 9], "noth": 4, "els": [4, 7], "Such": [4, 8], "adaptertran": [4, 8], "though": 4, "case": [4, 7, 8, 9, 10, 11], "cleaner": 4, "suppos": 4, "we": [4, 9, 11], "input": [4, 7, 8, 9, 11], "foo": [4, 8], "1": [4, 5, 7, 8, 9, 10, 11], "bar": [4, 8], "32": [4, 8], "cleanest": 4, "recommend": 4, "keyword": [4, 7, 8, 9, 10], "foo_expr": 4, "bar_expr": 4, "dict": [4, 5, 7, 8, 9, 10, 11], "final": [4, 7, 11], "rec": 4, "recurs": [4, 5, 6, 10, 11], "take": [4, 7, 8, 9, 10, 11], "layout2": 4, "foobar": 4, "baz": 4, "42": 4, "method2": [4, 8], "One": [4, 8, 11], "baz_expr": 4, "receiv": [4, 7, 8, 9], "method3": 4, "resourc": [4, 7], "request": [4, 5, 7, 8, 9, 11], "bit": [4, 7, 8, 10, 11], "expr": 4, "similar": [4, 7, 8, 11], "mechan": [4, 8], "intern": [4, 7, 8, 11], "risk": [4, 8], "introduc": 4, "loop": [4, 7], "certain": 4, "occas": 4, "possibl": [4, 8, 9, 10], "relax": 4, "e": [4, 8, 9, 10, 11], "g": [4, 8, 9, 10, 11], "framework": 4, "design": [4, 5], "facilit": 4, "re": [4, 7], "provid": [4, 7, 8, 9, 10, 11], "most": [4, 7, 8], "ones": [4, 11], "connecttran": [4, 8], "queue": [4, 8], "write": [4, 7, 8, 11], "plain": [4, 7, 8], "These": 4, "veri": 4, "testbench": [4, 8, 9], "own": [4, 5, 7, 8], "variant": 4, "Its": 4, "role": 4, "improv": 4, "circuit": [4, 7, 8, 10, 11], "omit": [4, 7, 8], "unneed": 4, "done": [4, 7, 8, 9], "ad": [4, 7, 8, 9, 10, 11], "addit": [4, 10], "combinatori": 4, "av_comb": [4, 7], "top_comb": [4, 7, 11], "under": [4, 5, 7], "avoidedif": [4, 7], "guard": [4, 7, 8, 9], "grant": [4, 5, 7, 8, 11], "therefor": 4, "don": [4, 7, 9], "t": [4, 7, 8, 9, 10], "induc": 4, "often": 4, "safe": [4, 10], "do": [4, 7, 8, 9, 11], "switch": [4, 7, 8, 11], "etc": [4, 9], "logic": [4, 8], "belong": [4, 8], "aren": [4, 8], "actual": 4, "were": [4, 9], "manual": [4, 9, 11], "move": [4, 8], "top": [4, 7, 10], "level": [4, 7, 8, 9, 10, 11], "caveat": 4, "normal": [4, 8, 9], "cannot": [4, 7, 8, 9], "exist": [4, 8, 10], "forward": [4, 7, 8], "place": [4, 7, 8], "handl": [4, 7], "make": [4, 5, 9], "consid": [4, 7, 8], "object": [4, 5, 8, 9, 10], "schedule_befor": [4, 7], "after": [4, 8, 11], "first": [4, 7, 8, 9, 10, 11], "first_t_or_m": 4, "other_t_or_m": 4, "lift": 4, "first_m": 4, "other_t": 4, "t1": 4, "t2": 4, "made": 4, "situat": [4, 7], "mutual": [4, 7, 8], "exclus": [4, 7, 8, 11], "similarli": [4, 8], "add_conflict": [4, 7], "ha": [4, 5, 7, 8, 11], "prioriti": [4, 7, 8, 11], "left": [4, 7, 11], "right": [4, 7, 11], "undefin": [4, 7, 8, 11], "add": [4, 7, 8, 9, 10, 11], "other_m": 4, "come": 4, "cost": 4, "increas": [4, 8], "size": [4, 8, 10], "delai": [4, 9], "featur": 4, "consider": 4, "parent": 4, "convers": 4, "true": [4, 5, 7, 8, 9, 10, 11], "doesn": 4, "limit": [4, 8], "impli": 4, "amaranth_ext": [5, 10], "component_interfac": [5, 10], "memori": [5, 7, 8, 10], "shifter": [5, 10], "extract": 5, "base": [5, 7, 8, 9, 10, 11], "intflag": 5, "IN": 5, "inout": 5, "none": [5, 6, 7, 8, 9, 10, 11], "0": [5, 6, 7, 8, 9, 11], "out": [5, 7, 8, 11], "2": [5, 7, 8, 10, 11], "__new__": 5, "protocol": [5, 7, 8], "kwarg": [5, 7, 8, 9, 10, 11], "str": [5, 6, 7, 8, 9, 10, 11], "properti": [5, 7, 9, 11], "owned_nam": 5, "owner": [5, 7], "ownershipgraph": 5, "dump": 5, "fp": 5, "liter": [5, 11], "dot": [5, 8], "elk": 5, "mermaid": 5, "dump_dot": 5, "int": [5, 7, 8, 9, 10, 11], "indent": [5, 8, 10], "dump_elk": 5, "dump_mermaid": 5, "get_hier_nam": 5, "obj": [5, 10], "get": [5, 7, 8, 9, 10, 11], "hierarch": 5, "rais": [5, 8, 9, 10], "keyerror": [5, 8, 10], "yet": [5, 11], "get_nam": 5, "insert_edg": 5, "fr": 5, "insert_nod": 5, "mermaid_direct": 5, "prune": 5, "bool": [5, 6, 7, 8, 9, 10, 11], "mark": 5, "empti": [5, 8, 11], "subgraph": 5, "remember_field": 5, "owner_id": 5, "methodsampl": 5, "runtim": [5, 8, 11], "control": [5, 8, 9, 11], "attribut": [5, 7, 8, 10, 11], "simul": [5, 7, 8, 9], "restor": 5, "analysi": 5, "tool": 5, "data": [5, 7, 8, 9, 10, 11], "refer": [5, 10], "uniqu": [5, 8], "id": 5, "transactions_and_method": 5, "profileinfo": 5, "index": [5, 7, 8, 11], "list": [5, 6, 7, 8, 9, 10, 11], "cycleprofil": 5, "factori": [5, 8, 10], "analyze_method": 5, "runstatnod": [5, 6], "analyze_transact": 5, "static": [5, 7, 8, 9, 10, 11], "decod": [5, 10, 11], "file_nam": [5, 10], "encod": [5, 8, 10, 11], "classmethod": [5, 8, 10], "from_dict": [5, 8, 10], "kv": [5, 8, 10], "union": [5, 8, 9, 10, 11], "float": [5, 8, 9, 10], "infer_miss": [5, 8, 10], "from_json": [5, 8, 10], "byte": [5, 8, 10], "bytearrai": [5, 8, 10], "parse_float": [5, 8, 10], "parse_int": [5, 8, 10], "parse_const": [5, 8, 10], "kw": [5, 8, 10], "schema": [5, 8, 10], "exclud": [5, 8, 10], "context": [5, 7, 8, 9, 10], "load_onli": [5, 8, 10], "dump_onli": [5, 8, 10], "partial": [5, 8, 10], "unknown": [5, 8, 10], "schemaf": [5, 8, 10], "to_dict": [5, 8, 10], "encode_json": [5, 8, 10], "to_json": [5, 8, 10], "skipkei": [5, 8, 10], "ensure_ascii": [5, 8, 10], "check_circular": [5, 8, 10], "allow_nan": [5, 8, 10], "separ": [5, 7, 8, 10], "tupl": [5, 6, 7, 8, 9, 10, 11], "callabl": [5, 6, 7, 8, 9, 10, 11], "sort_kei": [5, 8, 10], "profiledata": [5, 10], "individu": 5, "method_par": 5, "transactions_by_method": 5, "transaction_conflict": 5, "transaction_manag": [5, 7, 9], "transactionmanag": [5, 7, 9], "src_loc": [5, 7, 8, 10], "srcloc": [5, 7, 8], "is_transact": 5, "profilesampl": 5, "transactionsampl": 5, "runstat": [5, 6], "collect": [5, 7, 8, 9, 10, 11], "statist": 5, "disabl": [5, 8, 9], "did": [5, 9], "info": [5, 8], "summar": 5, "stat": 5, "runnabl": [5, 7], "tracingenabl": 5, "tracingfrag": 5, "fragment": [5, 7], "haselabor": [5, 7, 8, 9, 11], "origin": [5, 8], "lose": 5, "too": [5, 8], "difficult": 5, "exact": 5, "copi": 5, "relev": 5, "copyright": 5, "subfrag": 5, "hdl": [5, 7, 8, 9, 10, 11], "_ir": [5, 10], "tracingfragmenttransform": 5, "fragmenttransform": 5, "on_frag": 5, "tracinginst": 5, "instanc": [5, 7, 8, 10, 11], "filter_nod": 6, "regex": 6, "process_stat_tre": 6, "x": [6, 10, 11], "iter": [6, 7, 8, 9, 10, 11], "ret": 6, "depth": [6, 8, 11], "sort_nod": 6, "sort_ord": 6, "adapterbodyparam": [7, 8, 9], "typeddict": 7, "notrequir": 7, "sequenc": [7, 10, 11], "view": [7, 8, 10, 11], "structlayout": [7, 8, 9, 10], "_ast": [7, 8, 9, 10, 11], "enum": [7, 8, 9, 10, 11], "valuecast": [7, 8, 9, 10, 11], "abc": [7, 8, 9, 10, 11], "map": [7, 8, 9, 10, 11], "assignarg": [7, 10], "nonexclus": [7, 8], "single_cal": [7, 8], "transactionbas": 7, "unpack": [7, 8, 9], "bodyparam": 7, "ctrl_path": 7, "ctrlpath": 7, "path": [7, 8], "def_count": 7, "classvar": 7, "def_ord": 7, "method_cal": 7, "defaultdict": 7, "method_us": 7, "peek": [7, 8], "stack": [7, 8, 10], "validate_argu": [7, 8, 9], "transactionmanagerkei": 7, "simplekei": [7, 8, 9, 10], "transactioncompon": 7, "transactionmodul": 7, "compon": [7, 8, 11], "transactroncompon": 7, "wrapper": [7, 8], "support": [7, 8, 11], "wrap": [7, 11], "synthesi": 7, "port": [7, 8, 10, 11], "extend": [7, 11], "abstractcompon": 7, "dependency_manag": [7, 9], "dependencymanag": [7, 8, 9, 10], "new": [7, 8, 10, 11], "care": [7, 8], "never": [7, 8], "cc_schedul": 7, "methodmap": [7, 8], "tbodi": 7, "_dsl": 7, "eager_deterministic_cc_schedul": 7, "_rec": [7, 8, 10, 11], "valuebundl": [7, 8, 10, 11], "print_info": 7, "cgr": 7, "porder": 7, "cc": 7, "method_map": 7, "visual_graph": 7, "store": [7, 8, 9, 10, 11], "dependencycontext": [7, 10], "serv": [7, 8], "simultena": 7, "rest": 7, "must": [7, 8, 10, 11], "non": [7, 8, 9], "except": [7, 9, 10], "behavior": [7, 8, 10, 11], "combination": 7, "transfer": [7, 8], "time": [7, 8, 9], "data_out": [7, 8, 11], "data_in": [7, 8, 11], "effect": [7, 8, 9], "current": [7, 11], "methodstruct": [7, 8], "shape": [7, 8, 10, 11], "rang": [7, 8, 9, 10, 11], "shapecast": [7, 8, 10, 11], "forwardref": [7, 9, 10], "layoutlistfield": [7, 8, 9, 10], "hint": [7, 11], "infer": 7, "variabl": [7, 11], "frame": [7, 8], "deep": [7, 8], "taken": [7, 8], "const": [7, 9, 10], "d1": 7, "d0": 7, "action": [7, 8, 10], "indic": [7, 8, 11], "By": [7, 8], "combinationi": 7, "valuelik": [7, 8, 9, 11], "whether": [7, 8, 11], "those": 7, "instanti": 7, "accept": [7, 8, 10], "third": [7, 8], "vector": [7, 11], "whose": 7, "th": [7, 8, 11], "happen": [7, 9], "still": [7, 8], "error": [7, 8, 10], "thrown": 7, "my_sum_method": 7, "arg1": 7, "8": [7, 8], "arg2": 7, "sum": [7, 8], "16": 7, "layout_in": [7, 8], "layout_out": [7, 8], "construct": [7, 8, 11], "blueprint": 7, "freshli": 7, "proxi": 7, "methoddir": 7, "gr": 7, "transactiongraph": 7, "transactiongraphcc": 7, "priorityord": 7, "eager": 7, "subsystem": [7, 11], "isn": 7, "fair": 7, "start": [7, 8, 11], "lowest": 7, "highest": [7, 11], "concurr": 7, "arbitr": [7, 11], "agent": [7, 11], "vertic": 7, "edg": [7, 8, 9], "linear": 7, "consist": 7, "constraint": 7, "trivial_roundrobin_cc_schedul": 7, "simpl": [7, 8, 10, 11], "round": [7, 10, 11], "robin": [7, 11], "mainli": 7, "purpos": [7, 8], "decor": [7, 9], "eleg": 7, "correspond": [7, 8, 9, 11], "dictionari": [7, 8], "go": 7, "detail": [7, 8], "lambda": [7, 9], "over": [7, 8, 9], "easili": [7, 8], "expect": 7, "least": [7, 9, 11], "equival": [7, 8, 9, 11], "len": [7, 8, 11], "form": [7, 8], "three": 7, "parametr": 7, "my_filter_read_method": 7, "ready_list": 7, "head": [7, 8], "modulelik": [7, 8, 11], "everi": [7, 8, 9], "reduc": 7, "amount": [7, 9, 11], "useless": 7, "multplex": 7, "due": [7, 8], "while": [7, 9], "unguard": 7, "length": [7, 8, 9, 10, 11], "keep": 7, "relat": [7, 8, 10], "synchron": [7, 8, 9], "cond": 7, "pattern": 7, "elif": 7, "fsm": 7, "init": [7, 8], "next": [7, 9, 11], "noreturn": 7, "repres": [7, 8, 11], "task": 7, "regularli": 7, "last": [7, 8, 11], "met": 7, "explicit": 7, "implicit": 7, "aris": 7, "pair": [7, 8, 11], "want": [7, 9, 11], "priorit": 7, "_t": 7, "end": [7, 8, 11], "regist": [7, 8, 10], "reason": [7, 8], "common": [7, 8, 10], "independent_list": 7, "relationbas": 7, "without": [7, 8, 10], "simultaneous_altern": 7, "howev": [7, 8], "simultaneous_list": 7, "adapterbas": [8, 9], "mock": [8, 9], "en": [8, 9], "valid": [8, 9, 10, 11], "descript": [8, 10], "with_validate_argu": [8, 9], "update_arg": 8, "ifac": 8, "expos": [8, 10], "priorityencoderalloc": 8, "superscalar": 8, "identifi": 8, "dealloc": 8, "continu": [8, 9], "fresh": 8, "littl": 8, "free": 8, "entri": [8, 10, 11], "total": 8, "mask": [8, 11], "treat": 8, "reset": 8, "clickin": 8, "click": 8, "interact": 8, "fpga": 8, "On": 8, "rise": 8, "btn": 8, "enabl": [8, 9, 10, 11], "dat": 8, "retriev": 8, "clickout": 8, "led": 8, "put": 8, "flow": [8, 11], "revers": 8, "possibli": 8, "rev_layout": 8, "second": [8, 11], "vice": 8, "versa": 8, "compat": 8, "method1": 8, "respect": 8, "full": 8, "fulfil": 8, "fifo_typ": 8, "syncfifo": 8, "fifotyp": 8, "conform": 8, "overflow": 8, "buffer": [8, 11], "No": 8, "until": [8, 9], "clear": [8, 10], "manytooneconnecttran": 8, "get_result": 8, "put_result": 8, "pipe": 8, "halfwai": 8, "locali": 8, "critic": [8, 9], "cut": 8, "comparison": 8, "clean": 8, "dependencykei": [8, 10], "u": [8, 10], "concret": [8, 10], "frozen": [8, 10], "lock_on_get": [8, 10], "specifi": [8, 10], "alreadi": [8, 10, 11], "get_depend": [8, 10], "cach": [8, 10], "subsequ": [8, 10], "empty_valid": [8, 10], "ani": [8, 9, 10, 11], "caus": [8, 10], "abstract": [8, 10], "add_depend": [8, 10], "give": [8, 10], "kind": [8, 10], "track": [8, 10], "across": [8, 10], "multpl": [8, 10], "get_optional_depend": [8, 10], "gettabl": [8, 10], "otherwis": [8, 10, 11], "listkei": [8, 10], "dependeci": [8, 10], "more": [8, 9, 10, 11], "than": [8, 10, 11], "default_valu": [8, 10], "unifierkei": 8, "unifi": 8, "wish": 8, "basicfifo": 8, "element": 8, "front": 8, "delet": 8, "semaphor": 8, "max_count": 8, "widefifo": 8, "per": 8, "denot": 8, "maximum": 8, "insert": 8, "remov": 8, "arraylayout": 8, "less": [8, 11], "enough": 8, "slot": 8, "read_width": 8, "write_width": 8, "shapelik": [8, 10, 11], "max": 8, "written": 8, "assum": [8, 10], "equal": [8, 11], "hardwarelogg": 8, "intuit": 8, "logger": 8, "softwar": 8, "anywher": 8, "parallel": 8, "natur": [8, 11], "trigger": [8, 9, 10], "shall": 8, "report": 8, "evalu": [8, 9], "print": 8, "dure": [8, 9], "arbitrari": 8, "exactli": 8, "string": [8, 9], "organ": 8, "namespac": 8, "hierarchi": 8, "period": 8, "much": 8, "frontend": 8, "upper": 8, "icach": 8, "bpu": 8, "sub": 8, "There": 8, "backend": 8, "fu": 8, "jumpbranch": 8, "assert": [8, 9, 11], "src_loc_at": [8, 11], "find": 8, "bug": 8, "hard": 8, "detect": 8, "termin": 8, "turn": 8, "warn": 8, "board": 8, "debug": [8, 10], "sever": 8, "semant": 8, "server": 8, "pep": 8, "3101": 8, "look": 8, "fail": 8, "logkei": 8, "logrecord": 8, "loglevel": 8, "alia": 8, "logrecordinfo": [8, 10], "event": 8, "being": [8, 10, 11], "logger_nam": [8, 10], "format_str": [8, 10], "agnost": 8, "serial": 8, "outsid": 8, "templat": 8, "get_log_record": 8, "namespace_regexp": [8, 9], "bigger": 8, "minimum": 8, "regexp": 8, "get_trigger_bit": 8, "high": [8, 11], "whenev": 8, "fifolatencymeasur": 8, "measur": 8, "durat": 8, "latenc": 8, "finish": 8, "exponenti": 8, "histogram": 8, "fully_qualified_nam": 8, "slots_numb": 8, "max_lat": 8, "fulli": 8, "qualifi": 8, "human": 8, "width": [8, 10, 11], "bucket": 8, "user": 8, "previou": 8, "stop": 8, "oldest": 8, "hardwaremetricsmanag": 8, "signalbundl": [8, 11], "compos": 8, "get_metr": 8, "hwmetric": 8, "get_register_valu": 8, "metric_nam": 8, "reg_nam": 8, "hold": 8, "load": [8, 10], "min": 8, "hwcounter": 8, "width_bit": 8, "incr": 8, "hwexphistogram": 8, "distribut": 8, "sampl": [8, 9], "through": 8, "observ": 8, "configur": 8, "5": [8, 9], "4": [8, 10], "inf": 8, "addition": 8, "bucket_count": 8, "sample_width": 8, "registers_width": 8, "max_valu": [8, 11], "calcul": 8, "metricmodel": 8, "add_regist": 8, "reg": [8, 10], "hwmetricregist": 8, "inherit": [8, 11], "initi": 8, "metrics_en": 8, "wrap_method": 8, "_t_method": 8, "hwmetricsenabledkei": 8, "theirs": 8, "synthes": 8, "compris": 8, "dedic": 8, "specif": 8, "determin": [8, 10], "join": 8, "metricregistermodel": 8, "associ": 8, "fundament": 8, "singular": 8, "among": 8, "reman": 8, "brief": 8, "taggedcount": 8, "tag": 8, "At": 8, "dynam": [8, 11], "integ": [8, 9, 10], "neg": [8, 9, 10], "ok": 8, "hot": [8, 11], "optim": 8, "tag_width": 8, "one_hot": 8, "underli": 8, "taggedlatencymeasur": 8, "argumentstoresultszipp": 8, "zip": 8, "calle": 8, "asymmetri": 8, "long": 8, "correctli": 8, "rate": 8, "reach": [8, 11], "capac": 8, "topologi": 8, "peek_arg": 8, "write_arg": 8, "args_layout": 8, "write_result": 8, "results_layout": 8, "latest": 8, "client": 8, "somethig": 8, "deseri": 8, "proper": 8, "serialize_in": 8, "serialized_req_method": 8, "serialize_out": 8, "serialized_resp_method": 8, "port_count": 8, "resist": 8, "pipelin": 8, "nonblock": 8, "overlap": 8, "branch": 8, "boolean": 8, "catch": 8, "negat": [8, 10], "influenc": 8, "cond1": 8, "cond2": 8, "asyncmemorybank": 8, "asynchron": 8, "granular": [8, 11], "addr": 8, "data_layout": [8, 10], "address": [8, 11], "appropri": 8, "read_port": 8, "write_port": [8, 11], "memory_typ": 8, "amaranth_typ": 8, "abstractmemoryconstructor": 8, "whole": 8, "split": 8, "accord": [8, 10], "contentaddressablememori": 8, "addres": 8, "short": 8, "cam": 8, "predefin": [8, 9], "fed": 8, "compar": 8, "hit": 8, "push": 8, "behaviour": 8, "nondestruct": 8, "updat": [8, 11], "address_layout": 8, "entries_numb": 8, "layoutlik": 8, "memorybank": 8, "read_req": 8, "read_resp": 8, "transpar": 8, "cattran": 8, "concaten": 8, "src1": 8, "src2": 8, "dst": 8, "collector": 8, "target": 8, "method_list": 8, "connectandmaptran": 8, "behav": 8, "modifi": 8, "i_fun": 8, "recorddict": 8, "o_fun": 8, "methodfilt": 8, "zero": [8, 11], "desir": [8, 11], "use_condit": 8, "drawback": 8, "simultaneu": 8, "bidirect": 8, "i_transform": 8, "o_transform": 8, "unmodifi": 8, "methodproduct": 8, "product": 8, "comput": [8, 10], "methodtryproduct": 8, "tri": 8, "succeed": [8, 9], "nonexclusivewrapp": 8, "data_const_to_dict": 9, "c": [9, 11], "pysimsimul": 9, "max_cycl": 9, "100000": 9, "add_transaction_modul": 9, "traces_fil": 9, "clk_period": 9, "1e": 9, "06": 9, "indefinit": 9, "simpletestcircuit": 9, "_t_haselabor": 9, "dut": 9, "testcasewithsimul": 9, "add_mock": 9, "sim": 9, "val": [9, 10], "methodmock": 9, "fixture_initialize_testing_env": 9, "async": 9, "random_wait": 9, "simulatorcontext": 9, "max_cycle_cnt": 9, "min_cycle_cnt": 9, "random": 9, "random_wait_geom": 9, "prob": 9, "65536": 9, "till": 9, "probabl": 9, "reinitialize_fixtur": 9, "run_simul": 9, "tick": 9, "cycle_cnt": 9, "opnop": 9, "generate_based_on_layout": 9, "searchstrategi": 9, "recordintdict": 9, "generate_method_input": 9, "generate_nops_in_list": 9, "max_nop": 9, "generate_list": 9, "generate_process_input": 9, "elem_count": 9, "generate_shrinkable_list": 9, "trick": 9, "http": 9, "github": 9, "com": 9, "hypothesiswork": 9, "hypothesi": 9, "blob": 9, "6867da71beae0e4ed004b54b92ef7c74d0722815": 9, "src": 9, "l143": 9, "insert_nop": 9, "draw": 9, "drawfn": 9, "lst": 9, "make_logging_process": 9, "on_error": 9, "parse_logging_level": 9, "pars": 9, "represent": [9, 10, 11], "effect_process": 9, "output_process": 9, "validate_arguments_process": 9, "def_method_mock": 9, "tb_getter": 9, "handler": 9, "invok": 9, "discov": 9, "side": 9, "modif": 9, "sure": 9, "defer": 9, "sinc": 9, "eagerli": 9, "profiler_process": 9, "calltrigg": 9, "call_tri": 9, "problem": 9, "But": 9, "_call": 9, "tbio": 9, "kwdata": 9, "succe": 9, "ticktrigg": 9, "until_all_don": 9, "until_don": 9, "act": 9, "await": 9, "focu": 9, "call_do": 9, "call_init": 9, "call_result": 9, "get_call_result": 9, "testbenchcontext": 9, "get_don": 9, "get_output": 9, "sample_output": 9, "sample_outputs_don": 9, "sample_outputs_until_don": 9, "set_en": 9, "set_input": 9, "tickskei": 9, "make_tick_count_process": 9, "assigntyp": 10, "lh": 10, "rh": 10, "assignfield": 10, "lhs_strict": 10, "rhs_strict": 10, "mismatch": 10, "explicitli": 10, "castabl": 10, "item": [10, 11], "subfield": 10, "valueerror": 10, "align_down_to_power_of_two": 10, "num": 10, "power": 10, "down": 10, "align": 10, "align_to_power_of_two": 10, "average_dict_of_list": 10, "bits_from_int": 10, "lower": 10, "int_to_sign": 10, "xlen": 10, "convert": 10, "u2": 10, "sign": 10, "layout_subset": 10, "make_hash": 10, "hashabl": 10, "signed_to_int": 10, "auto_debug_sign": 10, "arrai": 10, "gtkw": 10, "dependentcach": 10, "itself": 10, "posit": [10, 11], "cl": 10, "generatedlog": 10, "verilog": 10, "trigger_loc": 10, "signalhandl": 10, "fields_loc": 10, "generationinfo": 10, "variou": 10, "metrics_loc": 10, "metricinfo": 10, "metadata": 10, "metricloc": 10, "transaction_signals_loc": 10, "transactionsignalsloc": 10, "method_signals_loc": 10, "methodsignalsloc": 10, "profile_data": 10, "generate_verilog": 10, "top_nam": 10, "idgener": 10, "async_mock_def_help": 10, "tb": 10, "func": 10, "dataclass_asdict": 10, "def_help": 10, "tp": 10, "extend_layout": 10, "layoutlist": 10, "from_method_layout": 10, "get_caller_class_nam": 10, "get_src_loc": 10, "longest_common_prefix": 10, "seq": 10, "make_layout": 10, "method_def_help": 10, "mock_def_help": 10, "silence_mustus": 10, "binari": 11, "low": 11, "invalid": 11, "graydecod": 11, "grai": 11, "grayencod": 11, "prioritydecod": 11, "priorityencod": 11, "signific": 11, "abstractcomponentinterfac": 11, "abstractinterfac": 11, "abstractsignatur": 11, "flip": 11, "signatur": 11, "cin": 11, "_componentsign": 11, "cout": 11, "componentinterfac": 11, "syntact": 11, "wire": 11, "separetli": 11, "componentsign": 11, "later": 11, "exampleinterfac": 11, "data_width": 11, "subinterfac": 11, "examp": 11, "le": 11, "bu": 11, "super": 11, "flippedcomponentinterfac": 11, "member": 11, "_t_componentinterfac": 11, "moduleconnector": 11, "anonym": 11, "multipriorityencod": 11, "extens": 11, "word": 11, "multi": 11, "input_width": 11, "outputs_count": 11, "indici": 11, "ascend": 11, "begin": 11, "build_tre": 11, "in_sig": 11, "start_idx": 11, "prio_encod": 11, "cnt": 11, "one_hot_sing": 11, "idx": 11, "prio": 11, "been": 11, "create_simpl": 11, "hardcod": 11, "onehotswitch": 11, "match": 11, "style": 11, "benefit": 11, "sig": 11, "onehotcas": 11, "0b01": 11, "0b10": 11, "onehotswitchdynam": 11, "signifi": 11, "ringmultipriorityencod": 11, "flexibl": 11, "circular": 11, "inclus": 11, "roundrobin": 11, "greater": 11, "restart": 11, "enableinsert": 11, "deassert": 11, "stableselectingnetwork": 11, "network": 11, "group": 11, "consecut": 11, "preserv": 11, "divid": 11, "conquer": 11, "algorithm": 11, "properli": 11, "v1": 11, "b": 11, "v2": 11, "now": 11, "shift": 11, "merg": 11, "v": 11, "thu": 11, "log_2": 11, "and_valu": 11, "binary_tree_reduc": 11, "neutral": 11, "const_of": 11, "count_leading_zero": 11, "count_trailing_zero": 11, "cyclic_mask": 11, "wide": 11, "flatten_sign": 11, "flatten": 11, "generic_min_valu": 11, "min_valu": 11, "mod_incr": 11, "mod": 11, "or_valu": 11, "popcount": 11, "shape_of": 11, "sum_valu": 11, "multireadmemori": 11, "basemultiportmemori": 11, "multiportilvtmemori": 11, "multiport": 11, "live": 11, "tabl": 11, "built": 11, "ilvt": 11, "xor": 11, "bank": 11, "logarithm": 11, "multiportxormemori": 11, "correct": 11, "generic_shift_left": 11, "value1": 11, "value2": 11, "offset": 11, "fill": 11, "space": 11, "shift_left": 11, "rotate_left": 11, "generic_shift_right": 11, "shift_right": 11, "rotate_right": 11, "generic_shift_vec_left": 11, "data1": 11, "_t_valuecast": 11, "data2": 11, "shift_vec_left": 11, "rotate_vec_left": 11, "generic_shift_vec_right": 11, "shift_vec_right": 11, "rotate_vec_right": 11, "rotat": 11, "placehold": 11}, "objects": {"": [[5, 0, 0, "-", "transactron"]], "transactron": [[6, 0, 0, "-", "cmd"], [7, 0, 0, "-", "core"], [5, 0, 0, "-", "graph"], [8, 0, 0, "-", "lib"], [5, 0, 0, "-", "profiler"], [9, 0, 0, "-", "testing"], [5, 0, 0, "-", "tracing"], [10, 0, 0, "-", "utils"]], "transactron.cmd": [[6, 0, 0, "-", "tprof"]], "transactron.cmd.tprof": [[6, 1, 1, "", "filter_nodes"], [6, 1, 1, "", "main"], [6, 1, 1, "", "process_stat_tree"], [6, 1, 1, "", "sort_node"]], "transactron.core": [[7, 0, 0, "-", "body"], [7, 0, 0, "-", "keys"], [7, 0, 0, "-", "manager"], [7, 0, 0, "-", "method"], [7, 0, 0, "-", "schedulers"], [7, 0, 0, "-", "sugar"], [7, 0, 0, "-", "tmodule"], [7, 0, 0, "-", "transaction"], [7, 0, 0, "-", "transaction_base"]], "transactron.core.body": [[7, 2, 1, "", "AdapterBodyParams"], [7, 2, 1, "", "Body"], [7, 2, 1, "", "BodyParams"]], "transactron.core.body.AdapterBodyParams": [[7, 3, 1, "", "combiner"], [7, 3, 1, "", "nonexclusive"], [7, 3, 1, "", "single_caller"]], "transactron.core.body.Body": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "context"], [7, 3, 1, "", "ctrl_path"], [7, 3, 1, "", "def_counter"], [7, 3, 1, "", "def_order"], [7, 4, 1, "", "get"], [7, 3, 1, "", "method_calls"], [7, 3, 1, "", "method_uses"], [7, 4, 1, "", "peek"], [7, 3, 1, "", "stack"]], "transactron.core.body.BodyParams": [[7, 3, 1, "", "combiner"], [7, 3, 1, "", "nonexclusive"], [7, 3, 1, "", "single_caller"], [7, 3, 1, "", "validate_arguments"]], "transactron.core.keys": [[7, 2, 1, "", "TransactionManagerKey"]], "transactron.core.keys.TransactionManagerKey": [[7, 4, 1, "", "__init__"]], "transactron.core.manager": [[7, 2, 1, "", "TransactionComponent"], [7, 2, 1, "", "TransactionManager"], [7, 2, 1, "", "TransactionModule"]], "transactron.core.manager.TransactionComponent": [[7, 4, 1, "", "__init__"]], "transactron.core.manager.TransactionManager": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "debug_signals"], [7, 4, 1, "", "print_info"], [7, 4, 1, "", "visual_graph"]], "transactron.core.manager.TransactionModule": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "context"]], "transactron.core.method": [[7, 2, 1, "", "Method"], [7, 2, 1, "", "MethodDir"], [7, 2, 1, "", "Methods"]], "transactron.core.method.Method": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "body"], [7, 4, 1, "", "debug_signals"], [7, 5, 1, "", "layout_in"], [7, 5, 1, "", "layout_out"], [7, 4, 1, "", "like"], [7, 4, 1, "", "proxy"]], "transactron.core.method.MethodDir": [[7, 3, 1, "", "PROVIDED"], [7, 3, 1, "", "REQUIRED"]], "transactron.core.method.Methods": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "debug_signals"], [7, 5, 1, "", "layout_in"], [7, 5, 1, "", "layout_out"]], "transactron.core.schedulers": [[7, 1, 1, "", "eager_deterministic_cc_scheduler"], [7, 1, 1, "", "trivial_roundrobin_cc_scheduler"]], "transactron.core.sugar": [[7, 1, 1, "", "def_method"], [7, 1, 1, "", "def_methods"]], "transactron.core.tmodule": [[7, 2, 1, "", "TModule"]], "transactron.core.tmodule.TModule": [[7, 4, 1, "", "AvoidedIf"], [7, 4, 1, "", "Case"], [7, 4, 1, "", "Default"], [7, 4, 1, "", "Elif"], [7, 4, 1, "", "Else"], [7, 4, 1, "", "FSM"], [7, 4, 1, "", "If"], [7, 4, 1, "", "State"], [7, 4, 1, "", "Switch"], [7, 4, 1, "", "__init__"], [7, 5, 1, "", "ctrl_path"], [7, 5, 1, "", "next"]], "transactron.core.transaction": [[7, 2, 1, "", "Transaction"]], "transactron.core.transaction.Transaction": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "body"], [7, 4, 1, "", "debug_signals"]], "transactron.core.transaction_base": [[7, 2, 1, "", "Priority"], [7, 2, 1, "", "TransactionBase"]], "transactron.core.transaction_base.Priority": [[7, 3, 1, "", "LEFT"], [7, 3, 1, "", "RIGHT"], [7, 3, 1, "", "UNDEFINED"]], "transactron.core.transaction_base.TransactionBase": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "add_conflict"], [7, 3, 1, "", "independent_list"], [7, 3, 1, "", "relations"], [7, 4, 1, "", "schedule_before"], [7, 4, 1, "", "simultaneous"], [7, 4, 1, "", "simultaneous_alternatives"], [7, 3, 1, "", "simultaneous_list"], [7, 3, 1, "", "src_loc"]], "transactron.graph": [[5, 2, 1, "", "Direction"], [5, 2, 1, "", "Owned"], [5, 2, 1, "", "OwnershipGraph"]], "transactron.graph.Direction": [[5, 3, 1, "", "IN"], [5, 3, 1, "", "INOUT"], [5, 3, 1, "", "NONE"], [5, 3, 1, "", "OUT"], [5, 4, 1, "", "__new__"]], "transactron.graph.Owned": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "name"], [5, 5, 1, "", "owned_name"], [5, 3, 1, "", "owner"]], "transactron.graph.OwnershipGraph": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "dump"], [5, 4, 1, "", "dump_dot"], [5, 4, 1, "", "dump_elk"], [5, 4, 1, "", "dump_mermaid"], [5, 4, 1, "", "get_hier_name"], [5, 4, 1, "", "get_name"], [5, 4, 1, "", "insert_edge"], [5, 4, 1, "", "insert_node"], [5, 3, 1, "", "mermaid_direction"], [5, 4, 1, "", "prune"], [5, 4, 1, "", "remember"], [5, 4, 1, "", "remember_field"]], "transactron.lib": [[8, 0, 0, "-", "adapters"], [8, 0, 0, "-", "allocators"], [8, 0, 0, "-", "buttons"], [8, 0, 0, "-", "connectors"], [8, 0, 0, "-", "dependencies"], [8, 0, 0, "-", "fifo"], [8, 0, 0, "-", "logging"], [8, 0, 0, "-", "metrics"], [8, 0, 0, "-", "reqres"], [8, 0, 0, "-", "simultaneous"], [8, 0, 0, "-", "storage"], [8, 0, 0, "-", "transformers"]], "transactron.lib.adapters": [[8, 2, 1, "", "Adapter"], [8, 2, 1, "", "AdapterBase"], [8, 2, 1, "", "AdapterTrans"]], "transactron.lib.adapters.Adapter": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "create"], [8, 4, 1, "", "set"], [8, 4, 1, "", "update_args"]], "transactron.lib.adapters.AdapterBase": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "data_in"], [8, 3, 1, "", "data_out"], [8, 4, 1, "", "debug_signals"], [8, 3, 1, "", "done"], [8, 3, 1, "", "en"]], "transactron.lib.adapters.AdapterTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.allocators": [[8, 2, 1, "", "PriorityEncoderAllocator"]], "transactron.lib.allocators.PriorityEncoderAllocator": [[8, 4, 1, "", "__init__"]], "transactron.lib.buttons": [[8, 2, 1, "", "ClickIn"], [8, 2, 1, "", "ClickOut"]], "transactron.lib.buttons.ClickIn": [[8, 4, 1, "", "__init__"]], "transactron.lib.buttons.ClickOut": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors": [[8, 2, 1, "", "Connect"], [8, 2, 1, "", "ConnectTrans"], [8, 2, 1, "", "FIFO"], [8, 2, 1, "", "Forwarder"], [8, 2, 1, "", "ManyToOneConnectTrans"], [8, 2, 1, "", "Pipe"]], "transactron.lib.connectors.Connect": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.ConnectTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.FIFO": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.Forwarder": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.ManyToOneConnectTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.Pipe": [[8, 4, 1, "", "__init__"]], "transactron.lib.dependencies": [[8, 2, 1, "", "DependencyKey"], [8, 2, 1, "", "DependencyManager"], [8, 2, 1, "", "ListKey"], [8, 2, 1, "", "SimpleKey"], [8, 2, 1, "", "UnifierKey"]], "transactron.lib.dependencies.DependencyKey": [[8, 3, 1, "", "cache"], [8, 4, 1, "", "combine"], [8, 3, 1, "", "empty_valid"], [8, 3, 1, "", "lock_on_get"]], "transactron.lib.dependencies.DependencyManager": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "add_dependency"], [8, 4, 1, "", "get_dependency"], [8, 4, 1, "", "get_optional_dependency"]], "transactron.lib.dependencies.ListKey": [[8, 4, 1, "", "combine"], [8, 3, 1, "", "empty_valid"]], "transactron.lib.dependencies.SimpleKey": [[8, 4, 1, "", "combine"], [8, 3, 1, "", "default_value"]], "transactron.lib.dependencies.UnifierKey": [[8, 4, 1, "", "combine"], [8, 3, 1, "", "unifier"]], "transactron.lib.fifo": [[8, 2, 1, "", "BasicFifo"], [8, 2, 1, "", "Semaphore"], [8, 2, 1, "", "WideFifo"]], "transactron.lib.fifo.BasicFifo": [[8, 4, 1, "", "__init__"]], "transactron.lib.fifo.Semaphore": [[8, 4, 1, "", "__init__"]], "transactron.lib.fifo.WideFifo": [[8, 4, 1, "", "__init__"]], "transactron.lib.logging": [[8, 2, 1, "", "HardwareLogger"], [8, 2, 1, "", "LogKey"], [8, 3, 1, "", "LogLevel"], [8, 2, 1, "", "LogRecord"], [8, 2, 1, "", "LogRecordInfo"], [8, 1, 1, "", "get_log_records"], [8, 1, 1, "", "get_trigger_bit"]], "transactron.lib.logging.HardwareLogger": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "assertion"], [8, 4, 1, "", "debug"], [8, 4, 1, "", "error"], [8, 4, 1, "", "info"], [8, 4, 1, "", "log"], [8, 4, 1, "", "warning"]], "transactron.lib.logging.LogKey": [[8, 4, 1, "", "__init__"]], "transactron.lib.logging.LogRecord": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "fields"], [8, 3, 1, "", "trigger"]], "transactron.lib.logging.LogRecordInfo": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "format"], [8, 3, 1, "", "format_str"], [8, 4, 1, "", "from_dict"], [8, 4, 1, "", "from_json"], [8, 3, 1, "", "level"], [8, 3, 1, "", "location"], [8, 3, 1, "", "logger_name"], [8, 4, 1, "", "schema"], [8, 4, 1, "", "to_dict"], [8, 4, 1, "", "to_json"]], "transactron.lib.metrics": [[8, 2, 1, "", "FIFOLatencyMeasurer"], [8, 2, 1, "", "HardwareMetricsManager"], [8, 2, 1, "", "HwCounter"], [8, 2, 1, "", "HwExpHistogram"], [8, 2, 1, "", "HwMetric"], [8, 2, 1, "", "HwMetricsEnabledKey"], [8, 2, 1, "", "MetricModel"], [8, 2, 1, "", "MetricRegisterModel"], [8, 2, 1, "", "TaggedCounter"], [8, 2, 1, "", "TaggedLatencyMeasurer"]], "transactron.lib.metrics.FIFOLatencyMeasurer": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "start"], [8, 3, 1, "", "stop"]], "transactron.lib.metrics.HardwareMetricsManager": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "debug_signals"], [8, 4, 1, "", "get_metrics"], [8, 4, 1, "", "get_register_value"]], "transactron.lib.metrics.HwCounter": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "incr"]], "transactron.lib.metrics.HwExpHistogram": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "add"]], "transactron.lib.metrics.HwMetric": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "add_registers"], [8, 4, 1, "", "metrics_enabled"], [8, 4, 1, "", "wrap_method"]], "transactron.lib.metrics.HwMetricsEnabledKey": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "default_value"], [8, 3, 1, "", "empty_valid"], [8, 3, 1, "", "lock_on_get"]], "transactron.lib.metrics.MetricModel": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "description"], [8, 4, 1, "", "from_dict"], [8, 4, 1, "", "from_json"], [8, 3, 1, "", "fully_qualified_name"], [8, 3, 1, "", "regs"], [8, 4, 1, "", "schema"], [8, 4, 1, "", "to_dict"], [8, 4, 1, "", "to_json"]], "transactron.lib.metrics.MetricRegisterModel": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "description"], [8, 4, 1, "", "from_dict"], [8, 4, 1, "", "from_json"], [8, 3, 1, "", "name"], [8, 4, 1, "", "schema"], [8, 4, 1, "", "to_dict"], [8, 4, 1, "", "to_json"], [8, 3, 1, "", "width"]], "transactron.lib.metrics.TaggedCounter": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "incr"]], "transactron.lib.metrics.TaggedLatencyMeasurer": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "start"], [8, 3, 1, "", "stop"]], "transactron.lib.reqres": [[8, 2, 1, "", "ArgumentsToResultsZipper"], [8, 2, 1, "", "Serializer"]], "transactron.lib.reqres.ArgumentsToResultsZipper": [[8, 4, 1, "", "__init__"]], "transactron.lib.reqres.Serializer": [[8, 4, 1, "", "__init__"]], "transactron.lib.simultaneous": [[8, 1, 1, "", "condition"]], "transactron.lib.storage": [[8, 2, 1, "", "AsyncMemoryBank"], [8, 2, 1, "", "ContentAddressableMemory"], [8, 2, 1, "", "MemoryBank"]], "transactron.lib.storage.AsyncMemoryBank": [[8, 4, 1, "", "__init__"]], "transactron.lib.storage.ContentAddressableMemory": [[8, 4, 1, "", "__init__"]], "transactron.lib.storage.MemoryBank": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers": [[8, 2, 1, "", "CatTrans"], [8, 2, 1, "", "Collector"], [8, 2, 1, "", "ConnectAndMapTrans"], [8, 2, 1, "", "MethodFilter"], [8, 2, 1, "", "MethodMap"], [8, 2, 1, "", "MethodProduct"], [8, 2, 1, "", "MethodTryProduct"], [8, 2, 1, "", "NonexclusiveWrapper"], [8, 2, 1, "", "Transformer"], [8, 2, 1, "", "Unifier"]], "transactron.lib.transformers.CatTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.Collector": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.ConnectAndMapTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodFilter": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodMap": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodProduct": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodTryProduct": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.NonexclusiveWrapper": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.Transformer": [[8, 3, 1, "", "method"], [8, 4, 1, "", "use"]], "transactron.lib.transformers.Unifier": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "method"]], "transactron.profiler": [[5, 2, 1, "", "MethodSamples"], [5, 2, 1, "", "Profile"], [5, 2, 1, "", "ProfileData"], [5, 2, 1, "", "ProfileInfo"], [5, 2, 1, "", "ProfileSamples"], [5, 2, 1, "", "RunStat"], [5, 2, 1, "", "RunStatNode"], [5, 2, 1, "", "TransactionSamples"]], "transactron.profiler.MethodSamples": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "run"]], "transactron.profiler.Profile": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "analyze_methods"], [5, 4, 1, "", "analyze_transactions"], [5, 3, 1, "", "cycles"], [5, 4, 1, "", "decode"], [5, 4, 1, "", "encode"], [5, 4, 1, "", "from_dict"], [5, 4, 1, "", "from_json"], [5, 4, 1, "", "schema"], [5, 4, 1, "", "to_dict"], [5, 4, 1, "", "to_json"], [5, 3, 1, "", "transactions_and_methods"]], "transactron.profiler.ProfileData": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "make"], [5, 3, 1, "", "method_parents"], [5, 3, 1, "", "transaction_conflicts"], [5, 3, 1, "", "transactions_and_methods"], [5, 3, 1, "", "transactions_by_method"]], "transactron.profiler.ProfileInfo": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "from_dict"], [5, 4, 1, "", "from_json"], [5, 3, 1, "", "is_transaction"], [5, 3, 1, "", "name"], [5, 4, 1, "", "schema"], [5, 3, 1, "", "src_loc"], [5, 4, 1, "", "to_dict"], [5, 4, 1, "", "to_json"]], "transactron.profiler.ProfileSamples": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "methods"], [5, 3, 1, "", "transactions"]], "transactron.profiler.RunStat": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "locked"], [5, 4, 1, "", "make"], [5, 3, 1, "", "name"], [5, 3, 1, "", "run"], [5, 3, 1, "", "src_loc"]], "transactron.profiler.RunStatNode": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "callers"], [5, 4, 1, "", "make"], [5, 3, 1, "", "stat"]], "transactron.profiler.TransactionSamples": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "grant"], [5, 3, 1, "", "request"], [5, 3, 1, "", "runnable"]], "transactron.testing": [[9, 0, 0, "-", "functions"], [9, 0, 0, "-", "infrastructure"], [9, 0, 0, "-", "input_generation"], [9, 0, 0, "-", "logging"], [9, 0, 0, "-", "method_mock"], [9, 0, 0, "-", "profiler"], [9, 0, 0, "-", "testbenchio"], [9, 0, 0, "-", "tick_count"]], "transactron.testing.functions": [[9, 1, 1, "", "data_const_to_dict"]], "transactron.testing.infrastructure": [[9, 2, 1, "", "PysimSimulator"], [9, 2, 1, "", "SimpleTestCircuit"], [9, 2, 1, "", "TestCaseWithSimulator"]], "transactron.testing.infrastructure.PysimSimulator": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "run"]], "transactron.testing.infrastructure.SimpleTestCircuit": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "debug_signals"]], "transactron.testing.infrastructure.TestCaseWithSimulator": [[9, 4, 1, "", "add_mock"], [9, 3, 1, "", "dependency_manager"], [9, 4, 1, "", "fixture_initialize_testing_env"], [9, 4, 1, "", "random_wait"], [9, 4, 1, "", "random_wait_geom"], [9, 4, 1, "", "reinitialize_fixtures"], [9, 4, 1, "", "run_simulation"], [9, 4, 1, "", "tick"]], "transactron.testing.input_generation": [[9, 2, 1, "", "OpNOP"], [9, 1, 1, "", "generate_based_on_layout"], [9, 1, 1, "", "generate_method_input"], [9, 1, 1, "", "generate_nops_in_list"], [9, 1, 1, "", "generate_process_input"], [9, 1, 1, "", "generate_shrinkable_list"], [9, 1, 1, "", "insert_nops"]], "transactron.testing.logging": [[9, 1, 1, "", "make_logging_process"], [9, 1, 1, "", "parse_logging_level"]], "transactron.testing.method_mock": [[9, 2, 1, "", "MethodMock"], [9, 1, 1, "", "def_method_mock"]], "transactron.testing.method_mock.MethodMock": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "effect"], [9, 4, 1, "", "effect_process"], [9, 4, 1, "", "output_process"], [9, 4, 1, "", "validate_arguments_process"]], "transactron.testing.profiler": [[9, 1, 1, "", "profiler_process"]], "transactron.testing.testbenchio": [[9, 2, 1, "", "CallTrigger"], [9, 2, 1, "", "TestbenchIO"]], "transactron.testing.testbenchio.CallTrigger": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "call"], [9, 4, 1, "", "sample"], [9, 4, 1, "", "until_all_done"], [9, 4, 1, "", "until_done"]], "transactron.testing.testbenchio.TestbenchIO": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "call"], [9, 4, 1, "", "call_do"], [9, 4, 1, "", "call_init"], [9, 4, 1, "", "call_result"], [9, 4, 1, "", "call_try"], [9, 4, 1, "", "disable"], [9, 5, 1, "", "done"], [9, 4, 1, "", "enable"], [9, 4, 1, "", "get_call_result"], [9, 4, 1, "", "get_done"], [9, 4, 1, "", "get_outputs"], [9, 5, 1, "", "outputs"], [9, 4, 1, "", "sample_outputs"], [9, 4, 1, "", "sample_outputs_done"], [9, 4, 1, "", "sample_outputs_until_done"], [9, 4, 1, "", "set_enable"], [9, 4, 1, "", "set_inputs"]], "transactron.testing.tick_count": [[9, 2, 1, "", "TicksKey"], [9, 1, 1, "", "make_tick_count_process"]], "transactron.testing.tick_count.TicksKey": [[9, 4, 1, "", "__init__"]], "transactron.tracing": [[5, 2, 1, "", "TracingEnabler"], [5, 2, 1, "", "TracingFragment"], [5, 2, 1, "", "TracingFragmentTransformer"], [5, 2, 1, "", "TracingInstance"]], "transactron.tracing.TracingFragment": [[5, 4, 1, "", "get"], [5, 4, 1, "", "prepare"], [5, 3, 1, "", "subfragments"]], "transactron.tracing.TracingFragmentTransformer": [[5, 4, 1, "", "on_fragment"]], "transactron.tracing.TracingInstance": [[5, 4, 1, "", "get"]], "transactron.utils": [[11, 0, 0, "-", "amaranth_ext"], [10, 0, 0, "-", "assign"], [10, 0, 0, "-", "data_repr"], [10, 0, 0, "-", "debug_signals"], [10, 0, 0, "-", "depcache"], [10, 0, 0, "-", "dependencies"], [10, 0, 0, "-", "gen"], [10, 0, 0, "-", "idgen"], [10, 0, 0, "-", "transactron_helpers"]], "transactron.utils.amaranth_ext": [[11, 0, 0, "-", "coding"], [11, 0, 0, "-", "component_interface"], [11, 0, 0, "-", "elaboratables"], [11, 0, 0, "-", "functions"], [11, 0, 0, "-", "memory"], [11, 0, 0, "-", "shifter"]], "transactron.utils.amaranth_ext.coding": [[11, 2, 1, "", "Decoder"], [11, 2, 1, "", "Encoder"], [11, 2, 1, "", "GrayDecoder"], [11, 2, 1, "", "GrayEncoder"], [11, 2, 1, "", "PriorityDecoder"], [11, 2, 1, "", "PriorityEncoder"]], "transactron.utils.amaranth_ext.coding.Decoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.Encoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.GrayDecoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.GrayEncoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.PriorityEncoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.component_interface": [[11, 2, 1, "", "AbstractComponentInterface"], [11, 2, 1, "", "CIn"], [11, 2, 1, "", "COut"], [11, 2, 1, "", "ComponentInterface"], [11, 2, 1, "", "FlippedComponentInterface"]], "transactron.utils.amaranth_ext.component_interface.AbstractComponentInterface": [[11, 4, 1, "", "flipped"], [11, 5, 1, "", "signature"]], "transactron.utils.amaranth_ext.component_interface.CIn": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.component_interface.COut": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.component_interface.ComponentInterface": [[11, 4, 1, "", "flipped"], [11, 5, 1, "", "signature"]], "transactron.utils.amaranth_ext.component_interface.FlippedComponentInterface": [[11, 4, 1, "", "__init__"], [11, 4, 1, "", "flipped"], [11, 5, 1, "", "signature"]], "transactron.utils.amaranth_ext.elaboratables": [[11, 2, 1, "", "ModuleConnector"], [11, 2, 1, "", "MultiPriorityEncoder"], [11, 1, 1, "", "OneHotSwitch"], [11, 1, 1, "", "OneHotSwitchDynamic"], [11, 2, 1, "", "RingMultiPriorityEncoder"], [11, 2, 1, "", "RoundRobin"], [11, 2, 1, "", "Scheduler"], [11, 2, 1, "", "StableSelectingNetwork"]], "transactron.utils.amaranth_ext.elaboratables.ModuleConnector": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.MultiPriorityEncoder": [[11, 4, 1, "", "__init__"], [11, 4, 1, "", "build_tree"], [11, 4, 1, "", "create"], [11, 4, 1, "", "create_simple"]], "transactron.utils.amaranth_ext.elaboratables.RingMultiPriorityEncoder": [[11, 4, 1, "", "__init__"], [11, 4, 1, "", "create"], [11, 4, 1, "", "create_simple"]], "transactron.utils.amaranth_ext.elaboratables.RoundRobin": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.Scheduler": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.StableSelectingNetwork": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.functions": [[11, 1, 1, "", "and_value"], [11, 1, 1, "", "binary_tree_reduce"], [11, 1, 1, "", "const_of"], [11, 1, 1, "", "count_leading_zeros"], [11, 1, 1, "", "count_trailing_zeros"], [11, 1, 1, "", "cyclic_mask"], [11, 1, 1, "", "flatten_signals"], [11, 1, 1, "", "generic_min_value"], [11, 1, 1, "", "max_value"], [11, 1, 1, "", "min_value"], [11, 1, 1, "", "mod_incr"], [11, 1, 1, "", "or_value"], [11, 1, 1, "", "popcount"], [11, 1, 1, "", "shape_of"], [11, 1, 1, "", "sum_value"]], "transactron.utils.amaranth_ext.memory": [[11, 2, 1, "", "MultiReadMemory"], [11, 2, 1, "", "MultiportILVTMemory"], [11, 2, 1, "", "MultiportXORMemory"]], "transactron.utils.amaranth_ext.memory.MultiReadMemory": [[11, 4, 1, "", "write_port"]], "transactron.utils.amaranth_ext.memory.MultiportXORMemory": [[11, 4, 1, "", "write_port"]], "transactron.utils.amaranth_ext.shifter": [[11, 1, 1, "", "generic_shift_left"], [11, 1, 1, "", "generic_shift_right"], [11, 1, 1, "", "generic_shift_vec_left"], [11, 1, 1, "", "generic_shift_vec_right"], [11, 1, 1, "", "rotate_left"], [11, 1, 1, "", "rotate_right"], [11, 1, 1, "", "rotate_vec_left"], [11, 1, 1, "", "rotate_vec_right"], [11, 1, 1, "", "shift_left"], [11, 1, 1, "", "shift_right"], [11, 1, 1, "", "shift_vec_left"], [11, 1, 1, "", "shift_vec_right"]], "transactron.utils.assign": [[10, 2, 1, "", "AssignType"], [10, 1, 1, "", "assign"]], "transactron.utils.assign.AssignType": [[10, 3, 1, "", "ALL"], [10, 3, 1, "", "COMMON"], [10, 3, 1, "", "LHS"], [10, 3, 1, "", "RHS"]], "transactron.utils.data_repr": [[10, 1, 1, "", "align_down_to_power_of_two"], [10, 1, 1, "", "align_to_power_of_two"], [10, 1, 1, "", "average_dict_of_lists"], [10, 1, 1, "", "bits_from_int"], [10, 1, 1, "", "data_layout"], [10, 1, 1, "", "int_to_signed"], [10, 1, 1, "", "layout_subset"], [10, 1, 1, "", "make_hashable"], [10, 1, 1, "", "neg"], [10, 1, 1, "", "signed_to_int"]], "transactron.utils.debug_signals": [[10, 1, 1, "", "auto_debug_signals"]], "transactron.utils.depcache": [[10, 2, 1, "", "DependentCache"]], "transactron.utils.depcache.DependentCache": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "get"]], "transactron.utils.dependencies": [[10, 2, 1, "", "DependencyContext"], [10, 2, 1, "", "DependencyKey"], [10, 2, 1, "", "DependencyManager"], [10, 2, 1, "", "ListKey"], [10, 2, 1, "", "SimpleKey"]], "transactron.utils.dependencies.DependencyContext": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "get"], [10, 3, 1, "", "stack"]], "transactron.utils.dependencies.DependencyKey": [[10, 3, 1, "", "cache"], [10, 4, 1, "", "combine"], [10, 3, 1, "", "empty_valid"], [10, 3, 1, "", "lock_on_get"]], "transactron.utils.dependencies.DependencyManager": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "add_dependency"], [10, 4, 1, "", "get_dependency"], [10, 4, 1, "", "get_optional_dependency"]], "transactron.utils.dependencies.ListKey": [[10, 4, 1, "", "combine"], [10, 3, 1, "", "empty_valid"]], "transactron.utils.dependencies.SimpleKey": [[10, 4, 1, "", "combine"], [10, 3, 1, "", "default_value"]], "transactron.utils.gen": [[10, 2, 1, "", "GeneratedLog"], [10, 2, 1, "", "GenerationInfo"], [10, 2, 1, "", "MetricLocation"], [10, 1, 1, "", "generate_verilog"]], "transactron.utils.gen.GeneratedLog": [[10, 4, 1, "", "__init__"], [10, 3, 1, "", "fields_location"], [10, 4, 1, "", "from_dict"], [10, 4, 1, "", "from_json"], [10, 4, 1, "", "schema"], [10, 4, 1, "", "to_dict"], [10, 4, 1, "", "to_json"], [10, 3, 1, "", "trigger_location"]], "transactron.utils.gen.GenerationInfo": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "decode"], [10, 4, 1, "", "encode"], [10, 4, 1, "", "from_dict"], [10, 4, 1, "", "from_json"], [10, 3, 1, "", "logs"], [10, 3, 1, "", "method_signals_location"], [10, 3, 1, "", "metrics_location"], [10, 3, 1, "", "profile_data"], [10, 4, 1, "", "schema"], [10, 4, 1, "", "to_dict"], [10, 4, 1, "", "to_json"], [10, 3, 1, "", "transaction_signals_location"]], "transactron.utils.gen.MetricLocation": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "from_dict"], [10, 4, 1, "", "from_json"], [10, 3, 1, "", "regs"], [10, 4, 1, "", "schema"], [10, 4, 1, "", "to_dict"], [10, 4, 1, "", "to_json"]], "transactron.utils.idgen": [[10, 2, 1, "", "IdGenerator"]], "transactron.utils.idgen.IdGenerator": [[10, 4, 1, "", "__init__"]], "transactron.utils.transactron_helpers": [[10, 1, 1, "", "async_mock_def_helper"], [10, 1, 1, "", "dataclass_asdict"], [10, 1, 1, "", "def_helper"], [10, 1, 1, "", "extend_layout"], [10, 1, 1, "", "from_method_layout"], [10, 1, 1, "", "get_caller_class_name"], [10, 1, 1, "", "get_src_loc"], [10, 1, 1, "", "longest_common_prefix"], [10, 1, 1, "", "make_layout"], [10, 1, 1, "", "method_def_helper"], [10, 1, 1, "", "mock_def_helper"], [10, 1, 1, "", "silence_mustuse"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:property"}, "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"], "5": ["py", "property", "Python property"]}, "titleterms": {"api": 0, "transactron": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "develop": 1, "environ": 1, "set": 1, "up": 1, "run": 1, "test": [1, 9], "us": 1, "script": 1, "lint": 1, "sh": 1, "build_doc": 1, "tprof": [1, 6], "py": 1, "document": 4, "introduct": 4, "basic": 4, "usag": 4, "implement": 4, "transact": [4, 7], "method": [4, 7], "argument": 4, "pass": 4, "convent": 4, "definit": 4, "return": 4, "valu": 4, "readi": 4, "signal": 4, "The": 4, "librari": 4, "advanc": 4, "concept": 4, "special": 4, "combin": 4, "domain": 4, "schedul": [4, 7], "order": 4, "conflict": 4, "nest": 4, "packag": [5, 6, 7, 8, 9, 10, 11], "subpackag": [5, 10], "submodul": [5, 6, 7, 8, 9, 10, 11], "graph": 5, "modul": [5, 6, 7, 8, 9, 10, 11], "profil": [5, 9], "trace": 5, "content": [5, 6, 7, 8, 9, 10, 11], "cmd": 6, "core": 7, "bodi": 7, "kei": 7, "manag": 7, "sugar": 7, "tmodul": 7, "transaction_bas": 7, "lib": 8, "adapt": 8, "alloc": 8, "button": 8, "connector": 8, "depend": [8, 10], "fifo": 8, "log": [8, 9], "metric": 8, "reqr": 8, "simultan": 8, "storag": 8, "transform": 8, "function": [9, 11], "infrastructur": 9, "input_gener": 9, "method_mock": 9, "testbenchio": 9, "tick_count": 9, "util": [10, 11], "assign": 10, "data_repr": 10, "debug_sign": 10, "depcach": 10, "gen": 10, "idgen": 10, "transactron_help": 10, "amaranth_ext": 11, "code": 11, "component_interfac": 11, "elaborat": 11, "memori": 11, "shifter": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["api", "development-environment", "index", "modules", "transactions", "transactron", "transactron.cmd", "transactron.core", "transactron.lib", "transactron.testing", "transactron.utils", "transactron.utils.amaranth_ext"], "filenames": ["api.md", "development-environment.md", "index.md", "modules.rst", "transactions.md", "transactron.rst", "transactron.cmd.rst", "transactron.core.rst", "transactron.lib.rst", "transactron.testing.rst", "transactron.utils.rst", "transactron.utils.amaranth_ext.rst"], "titles": ["API", "Development environment", "Transactron", "transactron", "Documentation for Transactron", "transactron package", "transactron.cmd package", "transactron.core package", "transactron.lib package", "transactron.testing package", "transactron.utils package", "transactron.utils.amaranth_ext package"], "terms": {"packag": [0, 1, 2, 3], "subpackag": [0, 3], "cmd": [0, 3, 5], "submodul": [0, 3, 4], "tprof": [0, 3, 5], "modul": [0, 1, 3, 4], "content": [0, 3], "core": [0, 3, 5, 8, 9, 10], "bodi": [0, 3, 4, 5, 8, 9], "kei": [0, 3, 5, 6, 8, 10], "manag": [0, 1, 3, 4, 5, 8, 10], "method": [0, 1, 2, 3, 5, 8, 9, 10, 11], "schedul": [0, 2, 3, 5, 8, 11], "sugar": [0, 3, 5, 11], "tmodul": [0, 3, 4, 5, 8], "transact": [0, 1, 2, 3, 5, 8, 11], "transaction_bas": [0, 3, 5], "lib": [0, 3, 5, 7, 9, 10, 11], "adapt": [0, 3, 4, 5, 9], "alloc": [0, 3, 5], "button": [0, 3, 5], "connector": [0, 3, 5], "depend": [0, 3, 4, 5, 11], "fifo": [0, 3, 4, 5, 7], "log": [0, 1, 3, 5, 10], "metric": [0, 3, 5, 10], "reqr": [0, 3, 5], "simultan": [0, 3, 4, 5, 7], "storag": [0, 3, 5], "transform": [0, 3, 5], "test": [0, 2, 3, 5, 7, 8, 10, 11], "function": [0, 3, 4, 5, 7, 8, 10], "infrastructur": [0, 3, 5], "input_gener": [0, 3, 5], "method_mock": [0, 3, 5], "profil": [0, 1, 3, 6], "testbenchio": [0, 3, 5], "tick_count": [0, 3, 5], "util": [0, 3, 5, 8], "assign": [0, 3, 4, 5, 7], "data_repr": [0, 3, 5], "debug_sign": [0, 3, 5, 7, 8, 9], "depcach": [0, 3, 5], "gen": [0, 3, 5], "idgen": [0, 3, 5], "transactron_help": [0, 3, 5], "graph": [0, 1, 3, 7, 8], "trace": [0, 1, 3], "In": [1, 4, 5, 7, 8, 9, 10, 11], "order": [1, 2, 7, 8, 11], "prepar": [1, 5], "pleas": [1, 4], "follow": [1, 4, 8, 9, 10], "step": [1, 4], "below": [1, 8], "instal": 1, "python": [1, 4, 7, 8, 9, 10], "3": [1, 5, 7, 10], "11": 1, "interpret": [1, 8, 10], "pip": 1, "option": [1, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [1, 4, 7, 8, 9, 10, 11], "virtual": 1, "python3": 1, "m": [1, 4, 7, 8, 11], "venv": 1, "project": [1, 4, 7], "directori": 1, "activ": [1, 7, 8, 9, 11], "gener": [1, 5, 7, 8, 9, 10, 11], "bin": 1, "all": [1, 4, 5, 7, 8, 9, 10, 11], "requir": [1, 4, 5, 7], "librari": [1, 2, 8], "pip3": 1, "dev": 1, "precommit": 1, "hook": [1, 5, 8], "pre": 1, "commit": 1, "thi": [1, 4, 5, 7, 8, 9, 10, 11], "automat": [1, 9, 10, 11], "linter": 1, "befor": [1, 4, 7, 8], "ar": [1, 4, 5, 7, 8, 9, 10, 11], "pytest": 1, "thing": [1, 4, 8, 10], "know": 1, "To": [1, 8, 10], "speed": 1, "multipl": [1, 4, 7, 8, 9, 10, 11], "worker": 1, "thread": 1, "can": [1, 4, 5, 7, 8, 9, 10, 11], "n": [1, 7, 11], "auto": 1, "onli": [1, 4, 5, 7, 8, 9, 10, 11], "some": [1, 4, 7, 8], "k": [1, 8], "express": [1, 4, 8], "format": [1, 4, 5, 7, 8, 10, 11], "i": [1, 4, 5, 7, 8, 9, 10, 11], "describ": [1, 5, 7, 8, 9], "doc": 1, "abl": [1, 8], "read": [1, 4, 7, 8, 10, 11], "standard": [1, 4, 8, 9, 11], "output": [1, 7, 8, 9, 11], "even": [1, 4, 7, 8], "success": [1, 9], "": [1, 4, 5, 7, 8, 10, 11], "custom": [1, 8, 11], "file": [1, 10], "readabl": [1, 8], "gtkwave": [1, 10], "The": [1, 2, 5, 7, 8, 9, 10, 11], "save": [1, 5, 8, 10], "__traces__": 1, "execut": [1, 4, 5, 7, 8, 9], "name": [1, 4, 5, 7, 8, 9, 10, 11], "__profiles__": 1, "filter": [1, 8], "allow": [1, 4, 7, 8, 9, 11], "contain": [1, 4, 7, 8, 10, 11], "number": [1, 5, 7, 8, 9, 10, 11], "which": [1, 4, 5, 7, 8, 9, 10, 11], "ci": 1, "also": [1, 4, 8, 9], "intend": [1, 7, 11], "local": 1, "thei": [1, 4, 7, 8], "check": [1, 7, 10], "code": [1, 4, 5, 8, 10], "type": [1, 7, 8, 9, 10, 11], "It": [1, 4, 5, 7, 8, 9, 10, 11], "should": [1, 4, 7, 8, 9, 10, 11], "subcommand": 1, "filenam": 1, "main": [1, 6], "avail": [1, 8], "reformat": 1, "black": 1, "check_format": 1, "verifi": 1, "flake8": 1, "check_typ": 1, "pyright": 1, "same": [1, 4, 7, 8, 9, 10, 11], "when": [1, 4, 7, 8, 9, 10, 11], "confront": 1, "would": [1, 4, 8, 10], "messag": [1, 8], "from": [1, 4, 5, 7, 8, 9, 10, 11], "you": [1, 7, 8, 11], "mai": [1, 8, 10], "diff": 1, "wai": [1, 4, 7, 8, 10, 11], "displai": 1, "chang": [1, 4, 8, 9, 10, 11], "appli": [1, 5, 7, 9, 11], "chose": 1, "help": [1, 8], "locat": [1, 5, 7, 8, 10], "issu": [1, 4, 8], "document": [1, 2], "sphinx": 1, "html": 1, "build": [1, 8], "process": [1, 8, 9], "present": [1, 4, 8, 10], "them": [1, 4, 7, 8, 10, 11], "run_test": 1, "py": [1, 9], "__profile__": 1, "profile_fil": 1, "json": [1, 10], "inform": [1, 5, 8, 10], "about": [1, 5, 8, 10], "default": [1, 4, 5, 7, 8, 10, 11], "For": [1, 4, 5, 7, 8, 10, 11], "one": [1, 4, 7, 8, 9, 10, 11], "mode": 1, "column": 1, "have": [1, 4, 7, 8, 9, 10, 11], "mean": [1, 7, 8], "question": [1, 4], "togeth": [1, 4, 7], "differenti": 1, "between": [1, 4, 7, 8, 9, 10, 11], "ident": [1, 8, 11], "differ": [1, 7, 8, 9, 10, 11], "sourc": [1, 5, 7, 8], "line": 1, "where": [1, 4, 7, 8, 9, 10], "wa": [1, 4, 5, 7, 8, 9, 10], "declar": [1, 4, 8, 9], "further": [1, 8], "disambigu": 1, "lock": [1, 4, 5, 8], "show": 1, "cycl": [1, 4, 5, 7, 8, 9, 11], "caller": [1, 4, 5, 7, 8], "call": [1, 4, 5, 7, 8, 9, 10, 11], "fals": [1, 4, 5, 8, 10, 11], "condit": [1, 4, 5, 7, 8], "could": [1, 8, 9], "forc": 1, "wait": [1, 7, 9], "anoth": [1, 4, 7, 8, 9], "conflict": [1, 2, 5, 7], "given": [1, 4, 5, 7, 8, 9, 10, 11], "produc": [1, 7], "each": [1, 4, 5, 7, 8, 9, 10, 11], "tree": [1, 5, 8], "counter": [1, 8], "root": [1, 5], "count": [1, 7, 8, 11], "an": [1, 4, 5, 7, 8, 9, 10, 11], "invert": 1, "leav": 1, "children": 1, "node": [1, 6], "field": [1, 4, 5, 7, 8, 10], "how": [1, 7, 8], "mani": [1, 4, 5, 7, 8, 9, 10], "respons": [1, 7, 8], "other": [1, 4, 5, 7, 8, 11], "sort": [1, 11], "select": [1, 8, 11], "row": 1, "regular": 1, "loc": 1, "develop": [2, 8], "environ": 2, "set": [2, 7, 8, 9, 10, 11], "up": [2, 8, 10], "run": [2, 4, 5, 7, 8, 9, 11], "us": [2, 4, 7, 8, 9, 10, 11], "script": 2, "lint": 2, "sh": 2, "build_doc": 2, "prof": 2, "introduct": 2, "basic": [2, 8], "usag": 2, "implement": [2, 8, 10, 11], "argument": [2, 7, 8, 9, 10, 11], "pass": [2, 7, 8, 9, 10], "convent": 2, "definit": [2, 7, 9], "return": [2, 7, 8, 10, 11], "valu": [2, 5, 7, 8, 9, 10, 11], "readi": [2, 5, 7, 8, 11], "signal": [2, 5, 7, 8, 9, 10, 11], "advanc": [2, 9], "concept": 2, "special": [2, 8], "combin": [2, 7, 8, 9, 10], "domain": [2, 7, 11], "nest": [2, 8, 11], "api": 2, "amaranth": [4, 5, 7, 8, 9, 10, 11], "connect": [4, 7, 8, 11], "complex": [4, 8, 11], "inspir": 4, "bluespec": 4, "program": 4, "languag": 4, "see": [4, 7, 8, 11], "wiki": 4, "compil": 4, "idea": 4, "interfac": [4, 7, 8, 11], "hardwar": [4, 8], "A": [4, 5, 7, 8, 9, 10, 11], "state": [4, 7, 8, 9], "oper": [4, 7, 8, 11], "perform": [4, 7, 8, 9, 10, 11], "singl": [4, 7, 8, 9, 10, 11], "clock": [4, 5, 7, 8, 9], "atom": 4, "either": [4, 7, 8, 9, 10, 11], "its": [4, 7, 8, 9, 10, 11], "entrieti": 4, "doe": [4, 11], "defin": [4, 7, 8, 9, 10, 11], "via": [4, 7, 8], "directli": [4, 7, 11], "link": 4, "indirectli": [4, 7], "If": [4, 5, 7, 8, 9, 10, 11], "try": 4, "access": [4, 8, 9, 10], "coordin": 4, "system": [4, 10], "avoid": [4, 11], "commun": 4, "both": [4, 7, 8, 10, 11], "direct": [4, 5, 7, 8, 11], "back": 4, "structur": [4, 5, 7, 8, 10], "part": [4, 7, 8], "elaborat": [4, 5, 7, 8, 9, 10], "block": [4, 7, 8, 11], "class": [4, 5, 7, 8, 9, 10, 11], "myth": 4, "def": [4, 7, 11], "elabor": 4, "self": [4, 9, 11], "platform": [4, 5], "includ": [4, 7, 8, 10, 11], "like": [4, 7, 8, 9], "d": [4, 7, 10, 11], "comb": [4, 7, 11], "sig1": 4, "eq": [4, 7, 11], "expr1": 4, "sync": [4, 7, 11], "sig2": 4, "expr2": 4, "result": [4, 8, 9, 10, 11], "arg_expr": 4, "work": [4, 7, 8, 9], "analog": 4, "multiplex": 4, "rememb": [4, 5], "statement": [4, 7, 10], "insid": [4, 7, 8], "alwai": [4, 7, 8, 9, 11], "onc": [4, 7, 8, 11], "As": [4, 8], "typic": [4, 7, 8], "constructor": [4, 7, 10, 11], "myotherth": 4, "__init__": [4, 5, 7, 8, 9, 10, 11], "o": [4, 7, 8, 11], "paramet": [4, 7, 8, 9, 10, 11], "layout": [4, 7, 8, 9, 10], "my_method": [4, 7], "input_layout": 4, "output_layout": 4, "need": [4, 7, 8, 9, 11], "instead": [4, 5, 7, 8, 9, 11], "def_method": [4, 7], "_": [4, 7], "arg": [4, 5, 7, 8, 9, 10, 11], "other_method": 4, "ret_expr": 4, "techniqu": 4, "abov": 4, "conveni": [4, 7, 8], "syntax": [4, 7, 11], "just": [4, 8], "particular": 4, "unnam": 4, "provid": [4, 7, 8, 9, 10, 11], "proxi": [4, 7], "outsid": [4, 8], "largerth": 4, "other_th": 4, "sometim": 4, "might": [4, 5, 8], "two": [4, 7, 8, 10, 11], "altern": [4, 7, 8], "decid": [4, 9], "best": 4, "easi": [4, 8], "import": 4, "ask": 4, "yourself": 4, "someth": [4, 11], "independ": [4, 8], "so": [4, 5, 7, 8, 11], "mayb": 4, "Or": 4, "extern": [4, 7, 8], "doubt": 4, "prefer": 4, "becaus": [4, 5, 7, 8, 9], "noth": 4, "els": [4, 7], "Such": [4, 8], "adaptertran": [4, 8], "though": 4, "case": [4, 7, 8, 9, 10, 11], "cleaner": 4, "suppos": 4, "we": [4, 9, 11], "input": [4, 7, 8, 9, 11], "foo": [4, 8], "1": [4, 5, 7, 8, 9, 10, 11], "bar": [4, 8], "32": [4, 8], "cleanest": 4, "recommend": 4, "keyword": [4, 7, 8, 9, 10], "foo_expr": 4, "bar_expr": 4, "dict": [4, 5, 7, 8, 9, 10, 11], "final": [4, 7, 11], "rec": 4, "recurs": [4, 5, 6, 10, 11], "take": [4, 7, 8, 9, 10, 11], "layout2": 4, "foobar": 4, "baz": 4, "42": 4, "method2": [4, 8], "One": [4, 8, 11], "baz_expr": 4, "receiv": [4, 7, 8, 9], "data": [4, 5, 7, 8, 9, 10, 11], "view": [4, 7, 8, 10, 11], "method3": 4, "exampl": [4, 7, 8, 9, 11], "resourc": [4, 7], "request": [4, 5, 7, 8, 9, 11], "bit": [4, 7, 8, 10, 11], "expr": 4, "similar": [4, 7, 8, 11], "mechan": [4, 8], "intern": [4, 7, 8, 11], "risk": [4, 8], "introduc": 4, "loop": [4, 7], "certain": 4, "occas": 4, "possibl": [4, 8, 9, 10], "relax": 4, "e": [4, 8, 9, 10, 11], "g": [4, 8, 9, 10, 11], "framework": 4, "design": [4, 5], "facilit": 4, "re": [4, 7], "most": [4, 7, 8], "ones": [4, 11], "connecttran": [4, 8], "queue": [4, 8], "write": [4, 7, 8, 11], "plain": [4, 7, 8], "These": 4, "veri": 4, "testbench": [4, 8, 9], "own": [4, 5, 7, 8], "variant": 4, "Its": 4, "role": 4, "improv": 4, "circuit": [4, 7, 8, 10, 11], "omit": [4, 7, 8], "unneed": 4, "done": [4, 7, 8, 9], "ad": [4, 7, 8, 9, 10, 11], "addit": [4, 10], "combinatori": 4, "av_comb": [4, 7], "top_comb": [4, 7, 11], "under": [4, 5, 7], "avoidedif": [4, 7], "guard": [4, 7, 8, 9], "grant": [4, 5, 7, 8, 11], "therefor": 4, "usual": [4, 8, 9], "don": [4, 7, 9], "t": [4, 7, 8, 9, 10], "induc": 4, "often": 4, "safe": [4, 10], "do": [4, 7, 8, 9, 11], "switch": [4, 7, 8, 11], "etc": [4, 9], "logic": [4, 8], "belong": [4, 8], "aren": [4, 8], "actual": 4, "were": [4, 9], "manual": [4, 9, 11], "move": [4, 8], "top": [4, 7, 10], "level": [4, 7, 8, 9, 10, 11], "caveat": 4, "normal": [4, 8, 9], "cannot": [4, 7, 8, 9], "exist": [4, 8, 10], "forward": [4, 7, 8], "place": [4, 7, 8], "handl": [4, 7], "make": [4, 5, 9], "consid": [4, 7, 8], "object": [4, 5, 8, 9, 10], "schedule_befor": [4, 7], "after": [4, 8, 11], "first": [4, 7, 8, 9, 10, 11], "first_t_or_m": 4, "other_t_or_m": 4, "lift": 4, "first_m": 4, "other_t": 4, "t1": 4, "t2": 4, "made": 4, "situat": [4, 7], "mutual": [4, 7, 8], "exclus": [4, 7, 8, 11], "similarli": [4, 8], "add_conflict": [4, 7], "ha": [4, 5, 7, 8, 11], "prioriti": [4, 7, 8, 11], "left": [4, 7, 11], "right": [4, 7, 11], "undefin": [4, 7, 8, 11], "add": [4, 7, 8, 9, 10, 11], "other_m": 4, "come": 4, "cost": 4, "increas": [4, 8], "size": [4, 8, 10], "delai": [4, 9], "featur": 4, "consider": 4, "parent": 4, "convers": 4, "true": [4, 5, 7, 8, 9, 10, 11], "doesn": 4, "limit": [4, 8], "impli": 4, "amaranth_ext": [5, 10], "component_interfac": [5, 10], "memori": [5, 7, 8, 10], "shifter": [5, 10], "extract": 5, "base": [5, 7, 8, 9, 10, 11], "intflag": 5, "IN": 5, "inout": 5, "none": [5, 6, 7, 8, 9, 10, 11], "0": [5, 6, 7, 8, 9, 11], "out": [5, 7, 8, 11], "2": [5, 7, 8, 10, 11], "__new__": 5, "protocol": [5, 7, 8], "kwarg": [5, 7, 8, 9, 10, 11], "str": [5, 6, 7, 8, 9, 10, 11], "properti": [5, 7, 9, 11], "owned_nam": 5, "owner": [5, 7], "ownershipgraph": 5, "dump": 5, "fp": 5, "liter": [5, 11], "dot": [5, 8], "elk": 5, "mermaid": 5, "dump_dot": 5, "int": [5, 7, 8, 9, 10, 11], "indent": [5, 8, 10], "dump_elk": 5, "dump_mermaid": 5, "get_hier_nam": 5, "obj": [5, 10], "get": [5, 7, 8, 9, 10, 11], "hierarch": 5, "rais": [5, 8, 9, 10], "keyerror": [5, 8, 10], "yet": [5, 11], "get_nam": 5, "insert_edg": 5, "fr": 5, "insert_nod": 5, "mermaid_direct": 5, "prune": 5, "bool": [5, 6, 7, 8, 9, 10, 11], "mark": 5, "empti": [5, 8, 11], "subgraph": 5, "remember_field": 5, "owner_id": 5, "methodsampl": 5, "runtim": [5, 8, 11], "control": [5, 8, 9, 11], "attribut": [5, 7, 8, 10, 11], "simul": [5, 7, 8, 9], "restor": 5, "analysi": 5, "tool": 5, "refer": [5, 10], "uniqu": [5, 8], "id": 5, "transactions_and_method": 5, "profileinfo": 5, "index": [5, 7, 8, 11], "list": [5, 6, 7, 8, 9, 10, 11], "cycleprofil": 5, "factori": [5, 8, 10], "analyze_method": 5, "runstatnod": [5, 6], "analyze_transact": 5, "static": [5, 7, 8, 9, 10, 11], "decod": [5, 10, 11], "file_nam": [5, 10], "encod": [5, 8, 10, 11], "classmethod": [5, 8, 10], "from_dict": [5, 8, 10], "kv": [5, 8, 10], "union": [5, 8, 9, 10, 11], "float": [5, 8, 9, 10], "infer_miss": [5, 8, 10], "from_json": [5, 8, 10], "byte": [5, 8, 10], "bytearrai": [5, 8, 10], "parse_float": [5, 8, 10], "parse_int": [5, 8, 10], "parse_const": [5, 8, 10], "kw": [5, 8, 10], "schema": [5, 8, 10], "exclud": [5, 8, 10], "context": [5, 7, 8, 9, 10], "load_onli": [5, 8, 10], "dump_onli": [5, 8, 10], "partial": [5, 8, 10], "unknown": [5, 8, 10], "schemaf": [5, 8, 10], "to_dict": [5, 8, 10], "encode_json": [5, 8, 10], "to_json": [5, 8, 10], "skipkei": [5, 8, 10], "ensure_ascii": [5, 8, 10], "check_circular": [5, 8, 10], "allow_nan": [5, 8, 10], "separ": [5, 7, 8, 10], "tupl": [5, 6, 7, 8, 9, 10, 11], "callabl": [5, 6, 7, 8, 9, 10, 11], "sort_kei": [5, 8, 10], "profiledata": [5, 10], "individu": 5, "method_par": 5, "transactions_by_method": 5, "transaction_conflict": 5, "transaction_manag": [5, 7, 9], "transactionmanag": [5, 7, 9], "src_loc": [5, 7, 8, 10], "srcloc": [5, 7, 8], "is_transact": 5, "profilesampl": 5, "transactionsampl": 5, "runstat": [5, 6], "collect": [5, 7, 8, 9, 10, 11], "statist": 5, "disabl": [5, 8, 9], "did": [5, 9], "info": [5, 8], "summar": 5, "stat": 5, "runnabl": [5, 7], "tracingenabl": 5, "tracingfrag": 5, "fragment": [5, 7], "haselabor": [5, 7, 8, 9, 11], "origin": [5, 8], "lose": 5, "too": [5, 8], "difficult": 5, "exact": 5, "copi": 5, "relev": 5, "copyright": 5, "subfrag": 5, "hdl": [5, 7, 8, 9, 10, 11], "_ir": [5, 10], "tracingfragmenttransform": 5, "fragmenttransform": 5, "on_frag": 5, "tracinginst": 5, "instanc": [5, 7, 8, 10, 11], "filter_nod": 6, "regex": 6, "process_stat_tre": 6, "x": [6, 10, 11], "iter": [6, 7, 8, 9, 10, 11], "ret": 6, "depth": [6, 8, 11], "sort_nod": 6, "sort_ord": 6, "adapterbodyparam": [7, 8, 9], "typeddict": 7, "notrequir": 7, "sequenc": [7, 10, 11], "structlayout": [7, 8, 9, 10], "_ast": [7, 8, 9, 10, 11], "enum": [7, 8, 9, 10, 11], "valuecast": [7, 8, 9, 10, 11], "abc": [7, 8, 9, 10, 11], "map": [7, 8, 9, 10, 11], "assignarg": [7, 10], "nonexclus": [7, 8], "single_cal": [7, 8], "transactionbas": 7, "unpack": [7, 8, 9], "bodyparam": 7, "ctrl_path": 7, "ctrlpath": 7, "path": [7, 8], "def_count": 7, "classvar": 7, "def_ord": 7, "method_cal": 7, "defaultdict": 7, "method_us": 7, "peek": [7, 8], "stack": [7, 8, 10], "validate_argu": [7, 8, 9], "transactionmanagerkei": 7, "simplekei": [7, 8, 9, 10], "transactioncompon": 7, "transactionmodul": 7, "compon": [7, 8, 11], "transactroncompon": 7, "wrapper": [7, 8], "support": [7, 8, 11], "wrap": [7, 11], "synthesi": 7, "port": [7, 8, 10, 11], "extend": [7, 11], "abstractcompon": 7, "dependency_manag": [7, 9], "dependencymanag": [7, 8, 9, 10], "new": [7, 8, 10, 11], "care": [7, 8], "never": [7, 8], "cc_schedul": 7, "methodmap": [7, 8], "tbodi": 7, "_dsl": 7, "eager_deterministic_cc_schedul": 7, "_rec": [7, 8, 10, 11], "record": [7, 8, 10, 11], "valuebundl": [7, 8, 10, 11], "print_info": 7, "cgr": 7, "porder": 7, "cc": 7, "method_map": 7, "visual_graph": 7, "store": [7, 8, 9, 10, 11], "dependencycontext": [7, 10], "serv": [7, 8], "simultena": 7, "rest": 7, "must": [7, 8, 10, 11], "non": [7, 8, 9], "except": [7, 9, 10], "behavior": [7, 8, 10, 11], "combination": 7, "transfer": [7, 8], "time": [7, 8, 9], "data_out": [7, 8, 11], "data_in": [7, 8, 11], "effect": [7, 8, 9], "current": [7, 11], "methodstruct": [7, 8], "shape": [7, 8, 10, 11], "rang": [7, 8, 9, 10, 11], "shapecast": [7, 8, 10, 11], "forwardref": [7, 9, 10], "layoutlistfield": [7, 8, 9, 10], "hint": [7, 11], "infer": 7, "variabl": [7, 11], "frame": [7, 8], "deep": [7, 8], "taken": [7, 8], "const": [7, 9, 10], "d1": 7, "d0": 7, "action": [7, 8, 10], "indic": [7, 8, 11], "By": [7, 8], "combinationi": 7, "valuelik": [7, 8, 9, 11], "whether": [7, 8, 11], "those": 7, "instanti": 7, "accept": [7, 8, 10], "third": [7, 8], "vector": [7, 11], "whose": 7, "th": [7, 8, 11], "happen": [7, 9], "still": [7, 8], "error": [7, 8, 10], "thrown": 7, "my_sum_method": 7, "arg1": 7, "8": [7, 8], "arg2": 7, "sum": [7, 8], "16": 7, "layout_in": [7, 8], "layout_out": [7, 8], "construct": [7, 8, 11], "blueprint": 7, "freshli": 7, "methoddir": 7, "gr": 7, "transactiongraph": 7, "transactiongraphcc": 7, "priorityord": 7, "eager": 7, "subsystem": [7, 11], "isn": 7, "fair": 7, "start": [7, 8, 11], "lowest": 7, "highest": [7, 11], "concurr": 7, "arbitr": [7, 11], "agent": [7, 11], "vertic": 7, "edg": [7, 8, 9], "linear": 7, "consist": 7, "constraint": 7, "trivial_roundrobin_cc_schedul": 7, "simpl": [7, 8, 10, 11], "round": [7, 10, 11], "robin": [7, 11], "mainli": 7, "purpos": [7, 8], "decor": [7, 9], "eleg": 7, "correspond": [7, 8, 9, 11], "dictionari": [7, 8], "go": 7, "detail": [7, 8], "lambda": [7, 9], "over": [7, 8, 9], "easili": [7, 8], "expect": 7, "least": [7, 9, 11], "equival": [7, 8, 9, 11], "len": [7, 8, 11], "form": [7, 8], "three": 7, "parametr": 7, "my_filter_read_method": 7, "ready_list": 7, "head": [7, 8], "modulelik": [7, 8, 11], "everi": [7, 8, 9], "reduc": 7, "amount": [7, 9, 11], "useless": 7, "multplex": 7, "due": [7, 8], "while": [7, 9], "unguard": 7, "length": [7, 8, 9, 10, 11], "keep": 7, "relat": [7, 8, 10], "synchron": [7, 8, 9], "cond": 7, "pattern": 7, "elif": 7, "fsm": 7, "init": [7, 8], "next": [7, 9, 11], "noreturn": 7, "repres": [7, 8, 11], "task": 7, "regularli": 7, "last": [7, 8, 11], "met": 7, "explicit": 7, "implicit": 7, "aris": 7, "pair": [7, 8, 11], "want": [7, 9, 11], "priorit": 7, "_t": 7, "end": [7, 8, 11], "regist": [7, 8, 10], "reason": [7, 8], "common": [7, 8, 10], "independent_list": 7, "relationbas": 7, "without": [7, 8, 10], "simultaneous_altern": 7, "howev": [7, 8], "simultaneous_list": 7, "adapterbas": [8, 9], "mock": [8, 9], "en": [8, 9], "valid": [8, 9, 10, 11], "descript": [8, 10], "with_validate_argu": [8, 9], "update_arg": 8, "ifac": 8, "expos": [8, 10], "priorityencoderalloc": 8, "superscalar": 8, "identifi": 8, "dealloc": 8, "continu": [8, 9], "fresh": 8, "littl": 8, "free": 8, "entri": [8, 10, 11], "total": 8, "mask": [8, 11], "treat": 8, "reset": 8, "clickin": 8, "click": 8, "interact": 8, "fpga": 8, "On": 8, "rise": 8, "btn": 8, "enabl": [8, 9, 10, 11], "dat": 8, "retriev": 8, "clickout": 8, "led": 8, "put": 8, "flow": [8, 11], "revers": 8, "possibli": 8, "rev_layout": 8, "second": [8, 11], "vice": 8, "versa": 8, "compat": 8, "method1": 8, "respect": 8, "full": 8, "fulfil": 8, "fifo_typ": 8, "syncfifo": 8, "fifotyp": 8, "conform": 8, "overflow": 8, "buffer": [8, 11], "No": 8, "until": [8, 9], "clear": [8, 10], "manytooneconnecttran": 8, "get_result": 8, "put_result": 8, "pipe": 8, "halfwai": 8, "locali": 8, "critic": [8, 9], "cut": 8, "comparison": 8, "clean": 8, "dependencykei": [8, 10], "u": [8, 10], "concret": [8, 10], "frozen": [8, 10], "lock_on_get": [8, 10], "specifi": [8, 10], "alreadi": [8, 10, 11], "get_depend": [8, 10], "cach": [8, 10], "subsequ": [8, 10], "empty_valid": [8, 10], "ani": [8, 9, 10, 11], "caus": [8, 10], "abstract": [8, 10], "add_depend": [8, 10], "give": [8, 10], "kind": [8, 10], "track": [8, 10], "across": [8, 10], "multpl": [8, 10], "get_optional_depend": [8, 10], "gettabl": [8, 10], "otherwis": [8, 10, 11], "listkei": [8, 10], "dependeci": [8, 10], "more": [8, 9, 10, 11], "than": [8, 10, 11], "default_valu": [8, 10], "unifierkei": 8, "unifi": 8, "wish": 8, "basicfifo": 8, "element": 8, "front": 8, "delet": 8, "semaphor": 8, "max_count": 8, "widefifo": 8, "per": 8, "denot": 8, "maximum": 8, "insert": 8, "remov": 8, "arraylayout": 8, "less": [8, 11], "enough": 8, "slot": 8, "read_width": 8, "write_width": 8, "shapelik": [8, 10, 11], "max": 8, "written": 8, "assum": [8, 10], "equal": [8, 11], "hardwarelogg": 8, "intuit": 8, "logger": 8, "softwar": 8, "anywher": 8, "parallel": 8, "natur": [8, 11], "trigger": [8, 9, 10], "shall": 8, "report": 8, "evalu": [8, 9], "print": 8, "dure": [8, 9], "arbitrari": 8, "exactli": 8, "string": [8, 9], "organ": 8, "namespac": 8, "hierarchi": 8, "period": 8, "much": 8, "frontend": 8, "upper": 8, "icach": 8, "bpu": 8, "sub": 8, "There": 8, "backend": 8, "fu": 8, "jumpbranch": 8, "assert": [8, 9, 11], "src_loc_at": [8, 11], "find": 8, "bug": 8, "hard": 8, "detect": 8, "termin": 8, "turn": 8, "warn": 8, "board": 8, "debug": [8, 10], "sever": 8, "semant": 8, "server": 8, "pep": 8, "3101": 8, "look": 8, "fail": 8, "logkei": 8, "logrecord": 8, "loglevel": 8, "alia": 8, "logrecordinfo": [8, 10], "event": 8, "being": [8, 10, 11], "logger_nam": [8, 10], "format_str": [8, 10], "agnost": 8, "serial": 8, "templat": 8, "get_log_record": 8, "namespace_regexp": [8, 9], "bigger": 8, "minimum": 8, "regexp": 8, "get_trigger_bit": 8, "high": [8, 11], "whenev": 8, "fifolatencymeasur": 8, "measur": 8, "durat": 8, "latenc": 8, "finish": 8, "exponenti": 8, "histogram": 8, "fully_qualified_nam": 8, "slots_numb": 8, "max_lat": 8, "fulli": 8, "qualifi": 8, "human": 8, "width": [8, 10, 11], "bucket": 8, "user": 8, "previou": 8, "stop": 8, "oldest": 8, "hardwaremetricsmanag": 8, "signalbundl": [8, 11], "compos": 8, "get_metr": 8, "hwmetric": 8, "get_register_valu": 8, "metric_nam": 8, "reg_nam": 8, "hold": 8, "load": [8, 10], "min": 8, "hwcounter": 8, "width_bit": 8, "incr": 8, "hwexphistogram": 8, "distribut": 8, "sampl": [8, 9], "through": 8, "observ": 8, "configur": 8, "5": [8, 9], "4": [8, 10], "inf": 8, "addition": 8, "bucket_count": 8, "sample_width": 8, "registers_width": 8, "max_valu": [8, 11], "calcul": 8, "metricmodel": 8, "add_regist": 8, "reg": [8, 10], "hwmetricregist": 8, "inherit": [8, 11], "initi": 8, "metrics_en": 8, "wrap_method": 8, "_t_method": 8, "hwmetricsenabledkei": 8, "theirs": 8, "synthes": 8, "compris": 8, "dedic": 8, "specif": 8, "determin": [8, 10], "join": 8, "metricregistermodel": 8, "associ": 8, "fundament": 8, "singular": 8, "among": 8, "reman": 8, "brief": 8, "taggedcount": 8, "tag": 8, "At": 8, "dynam": [8, 11], "integ": [8, 9, 10], "neg": [8, 9, 10], "ok": 8, "hot": [8, 11], "optim": 8, "tag_width": 8, "one_hot": 8, "underli": 8, "taggedlatencymeasur": 8, "argumentstoresultszipp": 8, "zip": 8, "calle": 8, "asymmetri": 8, "long": 8, "correctli": 8, "rate": 8, "reach": [8, 11], "capac": 8, "topologi": 8, "peek_arg": 8, "write_arg": 8, "args_layout": 8, "write_result": 8, "results_layout": 8, "latest": 8, "client": 8, "somethig": 8, "deseri": 8, "proper": 8, "serialize_in": 8, "serialized_req_method": 8, "serialize_out": 8, "serialized_resp_method": 8, "port_count": 8, "resist": 8, "pipelin": 8, "nonblock": 8, "overlap": 8, "branch": 8, "boolean": 8, "catch": 8, "negat": [8, 10], "influenc": 8, "cond1": 8, "cond2": 8, "asyncmemorybank": 8, "asynchron": 8, "granular": [8, 11], "addr": 8, "data_layout": [8, 10], "address": [8, 11], "appropri": 8, "read_port": 8, "write_port": [8, 11], "memory_typ": 8, "amaranth_typ": 8, "abstractmemoryconstructor": 8, "whole": 8, "split": 8, "accord": [8, 10], "contentaddressablememori": 8, "addres": 8, "short": 8, "cam": 8, "predefin": [8, 9], "fed": 8, "compar": 8, "hit": 8, "push": 8, "behaviour": 8, "nondestruct": 8, "updat": [8, 11], "address_layout": 8, "entries_numb": 8, "layoutlik": 8, "memorybank": 8, "read_req": 8, "read_resp": 8, "transpar": 8, "cattran": 8, "concaten": 8, "src1": 8, "src2": 8, "dst": 8, "collector": 8, "target": 8, "method_list": 8, "connectandmaptran": 8, "behav": 8, "modifi": 8, "i_fun": 8, "recorddict": 8, "o_fun": 8, "methodfilt": 8, "zero": [8, 11], "desir": [8, 11], "use_condit": 8, "drawback": 8, "simultaneu": 8, "bidirect": 8, "i_transform": 8, "o_transform": 8, "unmodifi": 8, "methodproduct": 8, "product": 8, "comput": [8, 10], "methodtryproduct": 8, "tri": 8, "succeed": [8, 9], "nonexclusivewrapp": 8, "around": [8, 11], "data_const_to_dict": 9, "c": [9, 11], "pysimsimul": 9, "max_cycl": 9, "100000": 9, "add_transaction_modul": 9, "traces_fil": 9, "clk_period": 9, "1e": 9, "06": 9, "indefinit": 9, "simpletestcircuit": 9, "_t_haselabor": 9, "dut": 9, "testcasewithsimul": 9, "add_mock": 9, "sim": 9, "val": [9, 10], "methodmock": 9, "fixture_initialize_testing_env": 9, "async": 9, "random_wait": 9, "simulatorcontext": 9, "max_cycle_cnt": 9, "min_cycle_cnt": 9, "random": 9, "random_wait_geom": 9, "prob": 9, "65536": 9, "till": 9, "probabl": 9, "reinitialize_fixtur": 9, "run_simul": 9, "tick": 9, "cycle_cnt": 9, "opnop": 9, "generate_based_on_layout": 9, "searchstrategi": 9, "recordintdict": 9, "generate_method_input": 9, "generate_nops_in_list": 9, "max_nop": 9, "generate_list": 9, "generate_process_input": 9, "elem_count": 9, "generate_shrinkable_list": 9, "trick": 9, "http": 9, "github": 9, "com": 9, "hypothesiswork": 9, "hypothesi": 9, "blob": 9, "6867da71beae0e4ed004b54b92ef7c74d0722815": 9, "src": 9, "l143": 9, "insert_nop": 9, "draw": 9, "drawfn": 9, "lst": 9, "make_logging_process": 9, "on_error": 9, "parse_logging_level": 9, "pars": 9, "represent": [9, 10, 11], "effect_process": 9, "output_process": 9, "validate_arguments_process": 9, "def_method_mock": 9, "tb_getter": 9, "handler": 9, "invok": 9, "discov": 9, "side": 9, "modif": 9, "sure": 9, "defer": 9, "sinc": 9, "eagerli": 9, "profiler_process": 9, "calltrigg": 9, "call_tri": 9, "problem": 9, "But": 9, "_call": 9, "tbio": 9, "kwdata": 9, "succe": 9, "ticktrigg": 9, "until_all_don": 9, "until_don": 9, "act": 9, "await": 9, "focu": 9, "call_do": 9, "call_init": 9, "call_result": 9, "get_call_result": 9, "testbenchcontext": 9, "get_don": 9, "get_output": 9, "sample_output": 9, "sample_outputs_don": 9, "sample_outputs_until_don": 9, "set_en": 9, "set_input": 9, "tickskei": 9, "make_tick_count_process": 9, "assigntyp": 10, "lh": 10, "rh": 10, "assignfield": 10, "lhs_strict": 10, "rhs_strict": 10, "mismatch": 10, "explicitli": 10, "castabl": 10, "item": [10, 11], "subfield": 10, "valueerror": 10, "align_down_to_power_of_two": 10, "num": 10, "power": 10, "down": 10, "align": 10, "align_to_power_of_two": 10, "average_dict_of_list": 10, "bits_from_int": 10, "lower": 10, "int_to_sign": 10, "xlen": 10, "convert": 10, "u2": 10, "sign": 10, "layout_subset": 10, "make_hash": 10, "hashabl": 10, "signed_to_int": 10, "auto_debug_sign": 10, "arrai": 10, "gtkw": 10, "dependentcach": 10, "itself": 10, "posit": [10, 11], "cl": 10, "generatedlog": 10, "verilog": 10, "trigger_loc": 10, "signalhandl": 10, "fields_loc": 10, "generationinfo": 10, "variou": 10, "metrics_loc": 10, "metricinfo": 10, "metadata": 10, "metricloc": 10, "transaction_signals_loc": 10, "transactionsignalsloc": 10, "method_signals_loc": 10, "methodsignalsloc": 10, "profile_data": 10, "generate_verilog": 10, "top_nam": 10, "idgener": 10, "async_mock_def_help": 10, "tb": 10, "func": 10, "dataclass_asdict": 10, "def_help": 10, "tp": 10, "extend_layout": 10, "layoutlist": 10, "from_method_layout": 10, "get_caller_class_nam": 10, "get_src_loc": 10, "longest_common_prefix": 10, "seq": 10, "make_layout": 10, "method_def_help": 10, "mock_def_help": 10, "silence_mustus": 10, "binari": 11, "low": 11, "invalid": 11, "graydecod": 11, "grai": 11, "grayencod": 11, "prioritydecod": 11, "priorityencod": 11, "signific": 11, "abstractcomponentinterfac": 11, "abstractinterfac": 11, "abstractsignatur": 11, "flip": 11, "signatur": 11, "cin": 11, "_componentsign": 11, "cout": 11, "componentinterfac": 11, "syntact": 11, "wire": 11, "separetli": 11, "componentsign": 11, "later": 11, "exampleinterfac": 11, "data_width": 11, "subinterfac": 11, "examp": 11, "le": 11, "bu": 11, "super": 11, "flippedcomponentinterfac": 11, "member": 11, "_t_componentinterfac": 11, "moduleconnector": 11, "anonym": 11, "multipriorityencod": 11, "extens": 11, "word": 11, "multi": 11, "input_width": 11, "outputs_count": 11, "indici": 11, "ascend": 11, "begin": 11, "build_tre": 11, "in_sig": 11, "start_idx": 11, "prio_encod": 11, "cnt": 11, "one_hot_sing": 11, "idx": 11, "prio": 11, "been": 11, "create_simpl": 11, "hardcod": 11, "onehotswitch": 11, "match": 11, "style": 11, "benefit": 11, "sig": 11, "onehotcas": 11, "0b01": 11, "0b10": 11, "onehotswitchdynam": 11, "signifi": 11, "ringmultipriorityencod": 11, "flexibl": 11, "circular": 11, "inclus": 11, "roundrobin": 11, "greater": 11, "restart": 11, "enableinsert": 11, "deassert": 11, "stableselectingnetwork": 11, "network": 11, "group": 11, "consecut": 11, "preserv": 11, "divid": 11, "conquer": 11, "algorithm": 11, "properli": 11, "v1": 11, "b": 11, "v2": 11, "now": 11, "shift": 11, "merg": 11, "v": 11, "thu": 11, "log_2": 11, "and_valu": 11, "binary_tree_reduc": 11, "neutral": 11, "const_of": 11, "count_leading_zero": 11, "count_trailing_zero": 11, "cyclic_mask": 11, "wide": 11, "flatten_sign": 11, "flatten": 11, "generic_min_valu": 11, "min_valu": 11, "mod_incr": 11, "mod": 11, "or_valu": 11, "popcount": 11, "shape_of": 11, "sum_valu": 11, "multireadmemori": 11, "basemultiportmemori": 11, "multiportilvtmemori": 11, "multiport": 11, "live": 11, "tabl": 11, "built": 11, "ilvt": 11, "xor": 11, "bank": 11, "logarithm": 11, "multiportxormemori": 11, "correct": 11, "generic_shift_left": 11, "value1": 11, "value2": 11, "offset": 11, "fill": 11, "space": 11, "shift_left": 11, "rotate_left": 11, "generic_shift_right": 11, "shift_right": 11, "rotate_right": 11, "generic_shift_vec_left": 11, "data1": 11, "_t_valuecast": 11, "data2": 11, "shift_vec_left": 11, "rotate_vec_left": 11, "generic_shift_vec_right": 11, "shift_vec_right": 11, "rotate_vec_right": 11, "rotat": 11, "placehold": 11}, "objects": {"": [[5, 0, 0, "-", "transactron"]], "transactron": [[6, 0, 0, "-", "cmd"], [7, 0, 0, "-", "core"], [5, 0, 0, "-", "graph"], [8, 0, 0, "-", "lib"], [5, 0, 0, "-", "profiler"], [9, 0, 0, "-", "testing"], [5, 0, 0, "-", "tracing"], [10, 0, 0, "-", "utils"]], "transactron.cmd": [[6, 0, 0, "-", "tprof"]], "transactron.cmd.tprof": [[6, 1, 1, "", "filter_nodes"], [6, 1, 1, "", "main"], [6, 1, 1, "", "process_stat_tree"], [6, 1, 1, "", "sort_node"]], "transactron.core": [[7, 0, 0, "-", "body"], [7, 0, 0, "-", "keys"], [7, 0, 0, "-", "manager"], [7, 0, 0, "-", "method"], [7, 0, 0, "-", "schedulers"], [7, 0, 0, "-", "sugar"], [7, 0, 0, "-", "tmodule"], [7, 0, 0, "-", "transaction"], [7, 0, 0, "-", "transaction_base"]], "transactron.core.body": [[7, 2, 1, "", "AdapterBodyParams"], [7, 2, 1, "", "Body"], [7, 2, 1, "", "BodyParams"]], "transactron.core.body.AdapterBodyParams": [[7, 3, 1, "", "combiner"], [7, 3, 1, "", "nonexclusive"], [7, 3, 1, "", "single_caller"]], "transactron.core.body.Body": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "context"], [7, 3, 1, "", "ctrl_path"], [7, 3, 1, "", "def_counter"], [7, 3, 1, "", "def_order"], [7, 4, 1, "", "get"], [7, 3, 1, "", "method_calls"], [7, 3, 1, "", "method_uses"], [7, 4, 1, "", "peek"], [7, 3, 1, "", "stack"]], "transactron.core.body.BodyParams": [[7, 3, 1, "", "combiner"], [7, 3, 1, "", "nonexclusive"], [7, 3, 1, "", "single_caller"], [7, 3, 1, "", "validate_arguments"]], "transactron.core.keys": [[7, 2, 1, "", "TransactionManagerKey"]], "transactron.core.keys.TransactionManagerKey": [[7, 4, 1, "", "__init__"]], "transactron.core.manager": [[7, 2, 1, "", "TransactionComponent"], [7, 2, 1, "", "TransactionManager"], [7, 2, 1, "", "TransactionModule"]], "transactron.core.manager.TransactionComponent": [[7, 4, 1, "", "__init__"]], "transactron.core.manager.TransactionManager": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "debug_signals"], [7, 4, 1, "", "print_info"], [7, 4, 1, "", "visual_graph"]], "transactron.core.manager.TransactionModule": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "context"]], "transactron.core.method": [[7, 2, 1, "", "Method"], [7, 2, 1, "", "MethodDir"], [7, 2, 1, "", "Methods"]], "transactron.core.method.Method": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "body"], [7, 4, 1, "", "debug_signals"], [7, 5, 1, "", "layout_in"], [7, 5, 1, "", "layout_out"], [7, 4, 1, "", "like"], [7, 4, 1, "", "proxy"]], "transactron.core.method.MethodDir": [[7, 3, 1, "", "PROVIDED"], [7, 3, 1, "", "REQUIRED"]], "transactron.core.method.Methods": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "debug_signals"], [7, 5, 1, "", "layout_in"], [7, 5, 1, "", "layout_out"]], "transactron.core.schedulers": [[7, 1, 1, "", "eager_deterministic_cc_scheduler"], [7, 1, 1, "", "trivial_roundrobin_cc_scheduler"]], "transactron.core.sugar": [[7, 1, 1, "", "def_method"], [7, 1, 1, "", "def_methods"]], "transactron.core.tmodule": [[7, 2, 1, "", "TModule"]], "transactron.core.tmodule.TModule": [[7, 4, 1, "", "AvoidedIf"], [7, 4, 1, "", "Case"], [7, 4, 1, "", "Default"], [7, 4, 1, "", "Elif"], [7, 4, 1, "", "Else"], [7, 4, 1, "", "FSM"], [7, 4, 1, "", "If"], [7, 4, 1, "", "State"], [7, 4, 1, "", "Switch"], [7, 4, 1, "", "__init__"], [7, 5, 1, "", "ctrl_path"], [7, 5, 1, "", "next"]], "transactron.core.transaction": [[7, 2, 1, "", "Transaction"]], "transactron.core.transaction.Transaction": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "body"], [7, 4, 1, "", "debug_signals"]], "transactron.core.transaction_base": [[7, 2, 1, "", "Priority"], [7, 2, 1, "", "TransactionBase"]], "transactron.core.transaction_base.Priority": [[7, 3, 1, "", "LEFT"], [7, 3, 1, "", "RIGHT"], [7, 3, 1, "", "UNDEFINED"]], "transactron.core.transaction_base.TransactionBase": [[7, 4, 1, "", "__init__"], [7, 4, 1, "", "add_conflict"], [7, 3, 1, "", "independent_list"], [7, 3, 1, "", "relations"], [7, 4, 1, "", "schedule_before"], [7, 4, 1, "", "simultaneous"], [7, 4, 1, "", "simultaneous_alternatives"], [7, 3, 1, "", "simultaneous_list"], [7, 3, 1, "", "src_loc"]], "transactron.graph": [[5, 2, 1, "", "Direction"], [5, 2, 1, "", "Owned"], [5, 2, 1, "", "OwnershipGraph"]], "transactron.graph.Direction": [[5, 3, 1, "", "IN"], [5, 3, 1, "", "INOUT"], [5, 3, 1, "", "NONE"], [5, 3, 1, "", "OUT"], [5, 4, 1, "", "__new__"]], "transactron.graph.Owned": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "name"], [5, 5, 1, "", "owned_name"], [5, 3, 1, "", "owner"]], "transactron.graph.OwnershipGraph": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "dump"], [5, 4, 1, "", "dump_dot"], [5, 4, 1, "", "dump_elk"], [5, 4, 1, "", "dump_mermaid"], [5, 4, 1, "", "get_hier_name"], [5, 4, 1, "", "get_name"], [5, 4, 1, "", "insert_edge"], [5, 4, 1, "", "insert_node"], [5, 3, 1, "", "mermaid_direction"], [5, 4, 1, "", "prune"], [5, 4, 1, "", "remember"], [5, 4, 1, "", "remember_field"]], "transactron.lib": [[8, 0, 0, "-", "adapters"], [8, 0, 0, "-", "allocators"], [8, 0, 0, "-", "buttons"], [8, 0, 0, "-", "connectors"], [8, 0, 0, "-", "dependencies"], [8, 0, 0, "-", "fifo"], [8, 0, 0, "-", "logging"], [8, 0, 0, "-", "metrics"], [8, 0, 0, "-", "reqres"], [8, 0, 0, "-", "simultaneous"], [8, 0, 0, "-", "storage"], [8, 0, 0, "-", "transformers"]], "transactron.lib.adapters": [[8, 2, 1, "", "Adapter"], [8, 2, 1, "", "AdapterBase"], [8, 2, 1, "", "AdapterTrans"]], "transactron.lib.adapters.Adapter": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "create"], [8, 4, 1, "", "set"], [8, 4, 1, "", "update_args"]], "transactron.lib.adapters.AdapterBase": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "data_in"], [8, 3, 1, "", "data_out"], [8, 4, 1, "", "debug_signals"], [8, 3, 1, "", "done"], [8, 3, 1, "", "en"]], "transactron.lib.adapters.AdapterTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.allocators": [[8, 2, 1, "", "PriorityEncoderAllocator"]], "transactron.lib.allocators.PriorityEncoderAllocator": [[8, 4, 1, "", "__init__"]], "transactron.lib.buttons": [[8, 2, 1, "", "ClickIn"], [8, 2, 1, "", "ClickOut"]], "transactron.lib.buttons.ClickIn": [[8, 4, 1, "", "__init__"]], "transactron.lib.buttons.ClickOut": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors": [[8, 2, 1, "", "Connect"], [8, 2, 1, "", "ConnectTrans"], [8, 2, 1, "", "FIFO"], [8, 2, 1, "", "Forwarder"], [8, 2, 1, "", "ManyToOneConnectTrans"], [8, 2, 1, "", "Pipe"]], "transactron.lib.connectors.Connect": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.ConnectTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.FIFO": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.Forwarder": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.ManyToOneConnectTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.connectors.Pipe": [[8, 4, 1, "", "__init__"]], "transactron.lib.dependencies": [[8, 2, 1, "", "DependencyKey"], [8, 2, 1, "", "DependencyManager"], [8, 2, 1, "", "ListKey"], [8, 2, 1, "", "SimpleKey"], [8, 2, 1, "", "UnifierKey"]], "transactron.lib.dependencies.DependencyKey": [[8, 3, 1, "", "cache"], [8, 4, 1, "", "combine"], [8, 3, 1, "", "empty_valid"], [8, 3, 1, "", "lock_on_get"]], "transactron.lib.dependencies.DependencyManager": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "add_dependency"], [8, 4, 1, "", "get_dependency"], [8, 4, 1, "", "get_optional_dependency"]], "transactron.lib.dependencies.ListKey": [[8, 4, 1, "", "combine"], [8, 3, 1, "", "empty_valid"]], "transactron.lib.dependencies.SimpleKey": [[8, 4, 1, "", "combine"], [8, 3, 1, "", "default_value"]], "transactron.lib.dependencies.UnifierKey": [[8, 4, 1, "", "combine"], [8, 3, 1, "", "unifier"]], "transactron.lib.fifo": [[8, 2, 1, "", "BasicFifo"], [8, 2, 1, "", "Semaphore"], [8, 2, 1, "", "WideFifo"]], "transactron.lib.fifo.BasicFifo": [[8, 4, 1, "", "__init__"]], "transactron.lib.fifo.Semaphore": [[8, 4, 1, "", "__init__"]], "transactron.lib.fifo.WideFifo": [[8, 4, 1, "", "__init__"]], "transactron.lib.logging": [[8, 2, 1, "", "HardwareLogger"], [8, 2, 1, "", "LogKey"], [8, 3, 1, "", "LogLevel"], [8, 2, 1, "", "LogRecord"], [8, 2, 1, "", "LogRecordInfo"], [8, 1, 1, "", "get_log_records"], [8, 1, 1, "", "get_trigger_bit"]], "transactron.lib.logging.HardwareLogger": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "assertion"], [8, 4, 1, "", "debug"], [8, 4, 1, "", "error"], [8, 4, 1, "", "info"], [8, 4, 1, "", "log"], [8, 4, 1, "", "warning"]], "transactron.lib.logging.LogKey": [[8, 4, 1, "", "__init__"]], "transactron.lib.logging.LogRecord": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "fields"], [8, 3, 1, "", "trigger"]], "transactron.lib.logging.LogRecordInfo": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "format"], [8, 3, 1, "", "format_str"], [8, 4, 1, "", "from_dict"], [8, 4, 1, "", "from_json"], [8, 3, 1, "", "level"], [8, 3, 1, "", "location"], [8, 3, 1, "", "logger_name"], [8, 4, 1, "", "schema"], [8, 4, 1, "", "to_dict"], [8, 4, 1, "", "to_json"]], "transactron.lib.metrics": [[8, 2, 1, "", "FIFOLatencyMeasurer"], [8, 2, 1, "", "HardwareMetricsManager"], [8, 2, 1, "", "HwCounter"], [8, 2, 1, "", "HwExpHistogram"], [8, 2, 1, "", "HwMetric"], [8, 2, 1, "", "HwMetricsEnabledKey"], [8, 2, 1, "", "MetricModel"], [8, 2, 1, "", "MetricRegisterModel"], [8, 2, 1, "", "TaggedCounter"], [8, 2, 1, "", "TaggedLatencyMeasurer"]], "transactron.lib.metrics.FIFOLatencyMeasurer": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "start"], [8, 3, 1, "", "stop"]], "transactron.lib.metrics.HardwareMetricsManager": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "debug_signals"], [8, 4, 1, "", "get_metrics"], [8, 4, 1, "", "get_register_value"]], "transactron.lib.metrics.HwCounter": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "incr"]], "transactron.lib.metrics.HwExpHistogram": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "add"]], "transactron.lib.metrics.HwMetric": [[8, 4, 1, "", "__init__"], [8, 4, 1, "", "add_registers"], [8, 4, 1, "", "metrics_enabled"], [8, 4, 1, "", "wrap_method"]], "transactron.lib.metrics.HwMetricsEnabledKey": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "default_value"], [8, 3, 1, "", "empty_valid"], [8, 3, 1, "", "lock_on_get"]], "transactron.lib.metrics.MetricModel": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "description"], [8, 4, 1, "", "from_dict"], [8, 4, 1, "", "from_json"], [8, 3, 1, "", "fully_qualified_name"], [8, 3, 1, "", "regs"], [8, 4, 1, "", "schema"], [8, 4, 1, "", "to_dict"], [8, 4, 1, "", "to_json"]], "transactron.lib.metrics.MetricRegisterModel": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "description"], [8, 4, 1, "", "from_dict"], [8, 4, 1, "", "from_json"], [8, 3, 1, "", "name"], [8, 4, 1, "", "schema"], [8, 4, 1, "", "to_dict"], [8, 4, 1, "", "to_json"], [8, 3, 1, "", "width"]], "transactron.lib.metrics.TaggedCounter": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "incr"]], "transactron.lib.metrics.TaggedLatencyMeasurer": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "start"], [8, 3, 1, "", "stop"]], "transactron.lib.reqres": [[8, 2, 1, "", "ArgumentsToResultsZipper"], [8, 2, 1, "", "Serializer"]], "transactron.lib.reqres.ArgumentsToResultsZipper": [[8, 4, 1, "", "__init__"]], "transactron.lib.reqres.Serializer": [[8, 4, 1, "", "__init__"]], "transactron.lib.simultaneous": [[8, 1, 1, "", "condition"]], "transactron.lib.storage": [[8, 2, 1, "", "AsyncMemoryBank"], [8, 2, 1, "", "ContentAddressableMemory"], [8, 2, 1, "", "MemoryBank"]], "transactron.lib.storage.AsyncMemoryBank": [[8, 4, 1, "", "__init__"]], "transactron.lib.storage.ContentAddressableMemory": [[8, 4, 1, "", "__init__"]], "transactron.lib.storage.MemoryBank": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers": [[8, 2, 1, "", "CatTrans"], [8, 2, 1, "", "Collector"], [8, 2, 1, "", "ConnectAndMapTrans"], [8, 2, 1, "", "MethodFilter"], [8, 2, 1, "", "MethodMap"], [8, 2, 1, "", "MethodProduct"], [8, 2, 1, "", "MethodTryProduct"], [8, 2, 1, "", "NonexclusiveWrapper"], [8, 2, 1, "", "Transformer"], [8, 2, 1, "", "Unifier"]], "transactron.lib.transformers.CatTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.Collector": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.ConnectAndMapTrans": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodFilter": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodMap": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodProduct": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.MethodTryProduct": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.NonexclusiveWrapper": [[8, 4, 1, "", "__init__"]], "transactron.lib.transformers.Transformer": [[8, 3, 1, "", "method"], [8, 4, 1, "", "use"]], "transactron.lib.transformers.Unifier": [[8, 4, 1, "", "__init__"], [8, 3, 1, "", "method"]], "transactron.profiler": [[5, 2, 1, "", "MethodSamples"], [5, 2, 1, "", "Profile"], [5, 2, 1, "", "ProfileData"], [5, 2, 1, "", "ProfileInfo"], [5, 2, 1, "", "ProfileSamples"], [5, 2, 1, "", "RunStat"], [5, 2, 1, "", "RunStatNode"], [5, 2, 1, "", "TransactionSamples"]], "transactron.profiler.MethodSamples": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "run"]], "transactron.profiler.Profile": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "analyze_methods"], [5, 4, 1, "", "analyze_transactions"], [5, 3, 1, "", "cycles"], [5, 4, 1, "", "decode"], [5, 4, 1, "", "encode"], [5, 4, 1, "", "from_dict"], [5, 4, 1, "", "from_json"], [5, 4, 1, "", "schema"], [5, 4, 1, "", "to_dict"], [5, 4, 1, "", "to_json"], [5, 3, 1, "", "transactions_and_methods"]], "transactron.profiler.ProfileData": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "make"], [5, 3, 1, "", "method_parents"], [5, 3, 1, "", "transaction_conflicts"], [5, 3, 1, "", "transactions_and_methods"], [5, 3, 1, "", "transactions_by_method"]], "transactron.profiler.ProfileInfo": [[5, 4, 1, "", "__init__"], [5, 4, 1, "", "from_dict"], [5, 4, 1, "", "from_json"], [5, 3, 1, "", "is_transaction"], [5, 3, 1, "", "name"], [5, 4, 1, "", "schema"], [5, 3, 1, "", "src_loc"], [5, 4, 1, "", "to_dict"], [5, 4, 1, "", "to_json"]], "transactron.profiler.ProfileSamples": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "methods"], [5, 3, 1, "", "transactions"]], "transactron.profiler.RunStat": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "locked"], [5, 4, 1, "", "make"], [5, 3, 1, "", "name"], [5, 3, 1, "", "run"], [5, 3, 1, "", "src_loc"]], "transactron.profiler.RunStatNode": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "callers"], [5, 4, 1, "", "make"], [5, 3, 1, "", "stat"]], "transactron.profiler.TransactionSamples": [[5, 4, 1, "", "__init__"], [5, 3, 1, "", "grant"], [5, 3, 1, "", "request"], [5, 3, 1, "", "runnable"]], "transactron.testing": [[9, 0, 0, "-", "functions"], [9, 0, 0, "-", "infrastructure"], [9, 0, 0, "-", "input_generation"], [9, 0, 0, "-", "logging"], [9, 0, 0, "-", "method_mock"], [9, 0, 0, "-", "profiler"], [9, 0, 0, "-", "testbenchio"], [9, 0, 0, "-", "tick_count"]], "transactron.testing.functions": [[9, 1, 1, "", "data_const_to_dict"]], "transactron.testing.infrastructure": [[9, 2, 1, "", "PysimSimulator"], [9, 2, 1, "", "SimpleTestCircuit"], [9, 2, 1, "", "TestCaseWithSimulator"]], "transactron.testing.infrastructure.PysimSimulator": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "run"]], "transactron.testing.infrastructure.SimpleTestCircuit": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "debug_signals"]], "transactron.testing.infrastructure.TestCaseWithSimulator": [[9, 4, 1, "", "add_mock"], [9, 3, 1, "", "dependency_manager"], [9, 4, 1, "", "fixture_initialize_testing_env"], [9, 4, 1, "", "random_wait"], [9, 4, 1, "", "random_wait_geom"], [9, 4, 1, "", "reinitialize_fixtures"], [9, 4, 1, "", "run_simulation"], [9, 4, 1, "", "tick"]], "transactron.testing.input_generation": [[9, 2, 1, "", "OpNOP"], [9, 1, 1, "", "generate_based_on_layout"], [9, 1, 1, "", "generate_method_input"], [9, 1, 1, "", "generate_nops_in_list"], [9, 1, 1, "", "generate_process_input"], [9, 1, 1, "", "generate_shrinkable_list"], [9, 1, 1, "", "insert_nops"]], "transactron.testing.logging": [[9, 1, 1, "", "make_logging_process"], [9, 1, 1, "", "parse_logging_level"]], "transactron.testing.method_mock": [[9, 2, 1, "", "MethodMock"], [9, 1, 1, "", "def_method_mock"]], "transactron.testing.method_mock.MethodMock": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "effect"], [9, 4, 1, "", "effect_process"], [9, 4, 1, "", "output_process"], [9, 4, 1, "", "validate_arguments_process"]], "transactron.testing.profiler": [[9, 1, 1, "", "profiler_process"]], "transactron.testing.testbenchio": [[9, 2, 1, "", "CallTrigger"], [9, 2, 1, "", "TestbenchIO"]], "transactron.testing.testbenchio.CallTrigger": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "call"], [9, 4, 1, "", "sample"], [9, 4, 1, "", "until_all_done"], [9, 4, 1, "", "until_done"]], "transactron.testing.testbenchio.TestbenchIO": [[9, 4, 1, "", "__init__"], [9, 4, 1, "", "call"], [9, 4, 1, "", "call_do"], [9, 4, 1, "", "call_init"], [9, 4, 1, "", "call_result"], [9, 4, 1, "", "call_try"], [9, 4, 1, "", "disable"], [9, 5, 1, "", "done"], [9, 4, 1, "", "enable"], [9, 4, 1, "", "get_call_result"], [9, 4, 1, "", "get_done"], [9, 4, 1, "", "get_outputs"], [9, 5, 1, "", "outputs"], [9, 4, 1, "", "sample_outputs"], [9, 4, 1, "", "sample_outputs_done"], [9, 4, 1, "", "sample_outputs_until_done"], [9, 4, 1, "", "set_enable"], [9, 4, 1, "", "set_inputs"]], "transactron.testing.tick_count": [[9, 2, 1, "", "TicksKey"], [9, 1, 1, "", "make_tick_count_process"]], "transactron.testing.tick_count.TicksKey": [[9, 4, 1, "", "__init__"]], "transactron.tracing": [[5, 2, 1, "", "TracingEnabler"], [5, 2, 1, "", "TracingFragment"], [5, 2, 1, "", "TracingFragmentTransformer"], [5, 2, 1, "", "TracingInstance"]], "transactron.tracing.TracingFragment": [[5, 4, 1, "", "get"], [5, 4, 1, "", "prepare"], [5, 3, 1, "", "subfragments"]], "transactron.tracing.TracingFragmentTransformer": [[5, 4, 1, "", "on_fragment"]], "transactron.tracing.TracingInstance": [[5, 4, 1, "", "get"]], "transactron.utils": [[11, 0, 0, "-", "amaranth_ext"], [10, 0, 0, "-", "assign"], [10, 0, 0, "-", "data_repr"], [10, 0, 0, "-", "debug_signals"], [10, 0, 0, "-", "depcache"], [10, 0, 0, "-", "dependencies"], [10, 0, 0, "-", "gen"], [10, 0, 0, "-", "idgen"], [10, 0, 0, "-", "transactron_helpers"]], "transactron.utils.amaranth_ext": [[11, 0, 0, "-", "coding"], [11, 0, 0, "-", "component_interface"], [11, 0, 0, "-", "elaboratables"], [11, 0, 0, "-", "functions"], [11, 0, 0, "-", "memory"], [11, 0, 0, "-", "shifter"]], "transactron.utils.amaranth_ext.coding": [[11, 2, 1, "", "Decoder"], [11, 2, 1, "", "Encoder"], [11, 2, 1, "", "GrayDecoder"], [11, 2, 1, "", "GrayEncoder"], [11, 2, 1, "", "PriorityDecoder"], [11, 2, 1, "", "PriorityEncoder"]], "transactron.utils.amaranth_ext.coding.Decoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.Encoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.GrayDecoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.GrayEncoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.coding.PriorityEncoder": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.component_interface": [[11, 2, 1, "", "AbstractComponentInterface"], [11, 2, 1, "", "CIn"], [11, 2, 1, "", "COut"], [11, 2, 1, "", "ComponentInterface"], [11, 2, 1, "", "FlippedComponentInterface"]], "transactron.utils.amaranth_ext.component_interface.AbstractComponentInterface": [[11, 4, 1, "", "flipped"], [11, 5, 1, "", "signature"]], "transactron.utils.amaranth_ext.component_interface.CIn": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.component_interface.COut": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.component_interface.ComponentInterface": [[11, 4, 1, "", "flipped"], [11, 5, 1, "", "signature"]], "transactron.utils.amaranth_ext.component_interface.FlippedComponentInterface": [[11, 4, 1, "", "__init__"], [11, 4, 1, "", "flipped"], [11, 5, 1, "", "signature"]], "transactron.utils.amaranth_ext.elaboratables": [[11, 2, 1, "", "ModuleConnector"], [11, 2, 1, "", "MultiPriorityEncoder"], [11, 1, 1, "", "OneHotSwitch"], [11, 1, 1, "", "OneHotSwitchDynamic"], [11, 2, 1, "", "RingMultiPriorityEncoder"], [11, 2, 1, "", "RoundRobin"], [11, 2, 1, "", "Scheduler"], [11, 2, 1, "", "StableSelectingNetwork"]], "transactron.utils.amaranth_ext.elaboratables.ModuleConnector": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.MultiPriorityEncoder": [[11, 4, 1, "", "__init__"], [11, 4, 1, "", "build_tree"], [11, 4, 1, "", "create"], [11, 4, 1, "", "create_simple"]], "transactron.utils.amaranth_ext.elaboratables.RingMultiPriorityEncoder": [[11, 4, 1, "", "__init__"], [11, 4, 1, "", "create"], [11, 4, 1, "", "create_simple"]], "transactron.utils.amaranth_ext.elaboratables.RoundRobin": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.Scheduler": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.StableSelectingNetwork": [[11, 4, 1, "", "__init__"]], "transactron.utils.amaranth_ext.functions": [[11, 1, 1, "", "and_value"], [11, 1, 1, "", "binary_tree_reduce"], [11, 1, 1, "", "const_of"], [11, 1, 1, "", "count_leading_zeros"], [11, 1, 1, "", "count_trailing_zeros"], [11, 1, 1, "", "cyclic_mask"], [11, 1, 1, "", "flatten_signals"], [11, 1, 1, "", "generic_min_value"], [11, 1, 1, "", "max_value"], [11, 1, 1, "", "min_value"], [11, 1, 1, "", "mod_incr"], [11, 1, 1, "", "or_value"], [11, 1, 1, "", "popcount"], [11, 1, 1, "", "shape_of"], [11, 1, 1, "", "sum_value"]], "transactron.utils.amaranth_ext.memory": [[11, 2, 1, "", "MultiReadMemory"], [11, 2, 1, "", "MultiportILVTMemory"], [11, 2, 1, "", "MultiportXORMemory"]], "transactron.utils.amaranth_ext.memory.MultiReadMemory": [[11, 4, 1, "", "write_port"]], "transactron.utils.amaranth_ext.memory.MultiportXORMemory": [[11, 4, 1, "", "write_port"]], "transactron.utils.amaranth_ext.shifter": [[11, 1, 1, "", "generic_shift_left"], [11, 1, 1, "", "generic_shift_right"], [11, 1, 1, "", "generic_shift_vec_left"], [11, 1, 1, "", "generic_shift_vec_right"], [11, 1, 1, "", "rotate_left"], [11, 1, 1, "", "rotate_right"], [11, 1, 1, "", "rotate_vec_left"], [11, 1, 1, "", "rotate_vec_right"], [11, 1, 1, "", "shift_left"], [11, 1, 1, "", "shift_right"], [11, 1, 1, "", "shift_vec_left"], [11, 1, 1, "", "shift_vec_right"]], "transactron.utils.assign": [[10, 2, 1, "", "AssignType"], [10, 1, 1, "", "assign"]], "transactron.utils.assign.AssignType": [[10, 3, 1, "", "ALL"], [10, 3, 1, "", "COMMON"], [10, 3, 1, "", "LHS"], [10, 3, 1, "", "RHS"]], "transactron.utils.data_repr": [[10, 1, 1, "", "align_down_to_power_of_two"], [10, 1, 1, "", "align_to_power_of_two"], [10, 1, 1, "", "average_dict_of_lists"], [10, 1, 1, "", "bits_from_int"], [10, 1, 1, "", "data_layout"], [10, 1, 1, "", "int_to_signed"], [10, 1, 1, "", "layout_subset"], [10, 1, 1, "", "make_hashable"], [10, 1, 1, "", "neg"], [10, 1, 1, "", "signed_to_int"]], "transactron.utils.debug_signals": [[10, 1, 1, "", "auto_debug_signals"]], "transactron.utils.depcache": [[10, 2, 1, "", "DependentCache"]], "transactron.utils.depcache.DependentCache": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "get"]], "transactron.utils.dependencies": [[10, 2, 1, "", "DependencyContext"], [10, 2, 1, "", "DependencyKey"], [10, 2, 1, "", "DependencyManager"], [10, 2, 1, "", "ListKey"], [10, 2, 1, "", "SimpleKey"]], "transactron.utils.dependencies.DependencyContext": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "get"], [10, 3, 1, "", "stack"]], "transactron.utils.dependencies.DependencyKey": [[10, 3, 1, "", "cache"], [10, 4, 1, "", "combine"], [10, 3, 1, "", "empty_valid"], [10, 3, 1, "", "lock_on_get"]], "transactron.utils.dependencies.DependencyManager": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "add_dependency"], [10, 4, 1, "", "get_dependency"], [10, 4, 1, "", "get_optional_dependency"]], "transactron.utils.dependencies.ListKey": [[10, 4, 1, "", "combine"], [10, 3, 1, "", "empty_valid"]], "transactron.utils.dependencies.SimpleKey": [[10, 4, 1, "", "combine"], [10, 3, 1, "", "default_value"]], "transactron.utils.gen": [[10, 2, 1, "", "GeneratedLog"], [10, 2, 1, "", "GenerationInfo"], [10, 2, 1, "", "MetricLocation"], [10, 1, 1, "", "generate_verilog"]], "transactron.utils.gen.GeneratedLog": [[10, 4, 1, "", "__init__"], [10, 3, 1, "", "fields_location"], [10, 4, 1, "", "from_dict"], [10, 4, 1, "", "from_json"], [10, 4, 1, "", "schema"], [10, 4, 1, "", "to_dict"], [10, 4, 1, "", "to_json"], [10, 3, 1, "", "trigger_location"]], "transactron.utils.gen.GenerationInfo": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "decode"], [10, 4, 1, "", "encode"], [10, 4, 1, "", "from_dict"], [10, 4, 1, "", "from_json"], [10, 3, 1, "", "logs"], [10, 3, 1, "", "method_signals_location"], [10, 3, 1, "", "metrics_location"], [10, 3, 1, "", "profile_data"], [10, 4, 1, "", "schema"], [10, 4, 1, "", "to_dict"], [10, 4, 1, "", "to_json"], [10, 3, 1, "", "transaction_signals_location"]], "transactron.utils.gen.MetricLocation": [[10, 4, 1, "", "__init__"], [10, 4, 1, "", "from_dict"], [10, 4, 1, "", "from_json"], [10, 3, 1, "", "regs"], [10, 4, 1, "", "schema"], [10, 4, 1, "", "to_dict"], [10, 4, 1, "", "to_json"]], "transactron.utils.idgen": [[10, 2, 1, "", "IdGenerator"]], "transactron.utils.idgen.IdGenerator": [[10, 4, 1, "", "__init__"]], "transactron.utils.transactron_helpers": [[10, 1, 1, "", "async_mock_def_helper"], [10, 1, 1, "", "dataclass_asdict"], [10, 1, 1, "", "def_helper"], [10, 1, 1, "", "extend_layout"], [10, 1, 1, "", "from_method_layout"], [10, 1, 1, "", "get_caller_class_name"], [10, 1, 1, "", "get_src_loc"], [10, 1, 1, "", "longest_common_prefix"], [10, 1, 1, "", "make_layout"], [10, 1, 1, "", "method_def_helper"], [10, 1, 1, "", "mock_def_helper"], [10, 1, 1, "", "silence_mustuse"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:property"}, "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"], "5": ["py", "property", "Python property"]}, "titleterms": {"api": 0, "transactron": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "develop": 1, "environ": 1, "set": 1, "up": 1, "run": 1, "test": [1, 9], "us": 1, "script": 1, "lint": 1, "sh": 1, "build_doc": 1, "prof": 1, "document": 4, "introduct": 4, "basic": 4, "usag": 4, "implement": 4, "transact": [4, 7], "method": [4, 7], "argument": 4, "pass": 4, "convent": 4, "definit": 4, "return": 4, "valu": 4, "readi": 4, "signal": 4, "The": 4, "librari": 4, "advanc": 4, "concept": 4, "special": 4, "combin": 4, "domain": 4, "schedul": [4, 7], "order": 4, "conflict": 4, "nest": 4, "packag": [5, 6, 7, 8, 9, 10, 11], "subpackag": [5, 10], "submodul": [5, 6, 7, 8, 9, 10, 11], "graph": 5, "modul": [5, 6, 7, 8, 9, 10, 11], "profil": [5, 9], "trace": 5, "content": [5, 6, 7, 8, 9, 10, 11], "cmd": 6, "tprof": 6, "core": 7, "bodi": 7, "kei": 7, "manag": 7, "sugar": 7, "tmodul": 7, "transaction_bas": 7, "lib": 8, "adapt": 8, "alloc": 8, "button": 8, "connector": 8, "depend": [8, 10], "fifo": 8, "log": [8, 9], "metric": 8, "reqr": 8, "simultan": 8, "storag": 8, "transform": 8, "function": [9, 11], "infrastructur": 9, "input_gener": 9, "method_mock": 9, "testbenchio": 9, "tick_count": 9, "util": [10, 11], "assign": 10, "data_repr": 10, "debug_sign": 10, "depcach": 10, "gen": 10, "idgen": 10, "transactron_help": 10, "amaranth_ext": 11, "code": 11, "component_interfac": 11, "elaborat": 11, "memori": 11, "shifter": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/transactions.html b/transactions.html index a168911..7e67d05 100644 --- a/transactions.html +++ b/transactions.html @@ -96,7 +96,7 @@

    Documentation for Transactron

    Introduction

    -

    Transactron is an Amaranth library for managing connections between modules in complex projects. +

    Transactron is an Amaranth library for managing connections between modules in complex projects. It is inspired by the Bluespec programming language (see: Bluespec wiki, Bluespec compiler).

    The basic idea is to interface hardware modules using transactions and methods. A transaction is a state-changing operation performed by the hardware in a single clock cycle. @@ -108,13 +108,13 @@

    Introduction

    Basic usage

    Implementing transactions

    -

    The simplest way to implement a transaction as a part of Amaranth Elaboratable is by using a with block:

    +

    The standard way to implement a transaction as a part of Amaranth Elaboratable is by using a with block:

    @@ -219,14 +228,14 @@

    Method or transaction?

    Method argument passing conventions

    -

    Even though method arguments are Amaranth records, their use can be avoided in many cases, which results in cleaner code. +

    Even though method arguments are Amaranth structures, their use can be avoided in many cases, which results in cleaner code. Suppose we have the following layout, which is an input layout for a method called method:

    layout = [("foo", 1), ("bar", 32)]
     method = Method(i=layout)
     

    The method can be called in multiple ways. -The cleanest and recommended way is to pass each record field using a keyword argument:

    +The cleanest and recommended way is to pass each field using a keyword argument:

    method(m, foo=foo_expr, bar=bar_expr)
     
    @@ -234,8 +243,8 @@

    Method argument passing conventions
    method(m, {'foo': foo_expr, 'bar': bar_expr})
     
    -

    Finally, one can directly pass an Amaranth record:

    -
    rec = Record(layout)
    +

    Finally, one can directly pass an Amaranth structure:

    +
    rec = Signal(layout)
     m.d.comb += rec.foo.eq(foo_expr)
     m.d.comb += rec.bar.eq(bar_expr)
     method(m, rec)
    @@ -259,15 +268,15 @@ 

    Method argument passing conventions

    Method definition conventions

    When defining methods, two conventions can be used. -The cleanest and recommended way is to create an argument for each record field:

    +The cleanest and recommended way is to create an argument for each field:

    @def_method(m, method)
     def _(foo: Value, bar: Value):
         ...
     
    -

    The other is to receive the argument record directly. The arg name is required:

    - diff --git a/transactron.core.html b/transactron.core.html index 2850ef8..a379678 100644 --- a/transactron.core.html +++ b/transactron.core.html @@ -86,7 +86,7 @@

    SubmodulesTypedDict

    -combiner: NotRequired[Callable[[Module, Sequence[View[StructLayout]], Value], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg]]]
    +combiner: NotRequired[Callable[[Module, Sequence[View[StructLayout]], Value], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg]]]
    @@ -107,7 +107,7 @@

    SubmodulesTransactionBase[Body]

    -__init__(*, name: str, owner: Optional[Elaboratable], i: StructLayout, o: StructLayout, src_loc: tuple[str, int], **kwargs: Unpack[BodyParams])
    +__init__(*, name: str, owner: Optional[Elaboratable], i: StructLayout, o: StructLayout, src_loc: tuple[str, int], **kwargs: Unpack[BodyParams])
    @@ -137,7 +137,7 @@

    Submodules
    -method_calls: defaultdict[Method, list[tuple[transactron.core.tmodule.CtrlPath, 'View[StructLayout]', amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable]]]
    +method_calls: defaultdict[Method, list[tuple[transactron.core.tmodule.CtrlPath, 'View[StructLayout]', amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable]]]

    @@ -163,7 +163,7 @@

    Submodulesdict

    -combiner: NotRequired[Callable[[Module, Sequence[View[StructLayout]], Value], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg]]]
    +combiner: NotRequired[Callable[[Module, Sequence[View[StructLayout]], Value], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg]]]
    @@ -178,7 +178,7 @@

    Submodules
    -validate_arguments: NotRequired[Callable[[...], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable]]
    +validate_arguments: NotRequired[Callable[[...], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable]]

    @@ -203,7 +203,7 @@

    Submodules
    class transactron.core.manager.TransactionComponent
    -

    Bases: TransactionModule, Component

    +

    Bases: TransactionModule, Component

    Top-level component for Transactron projects.

    The TransactronComponent is a wrapper on Component classes, which adds Transactron support for the wrapped class. The use @@ -248,7 +248,7 @@

    Submodules
    -debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    @@ -430,7 +430,7 @@

    Submodules
    -debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    @@ -514,7 +514,7 @@

    Submodules
    -debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    @@ -721,7 +721,7 @@

    Submodules
    -AvoidedIf(cond: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable)
    +AvoidedIf(cond: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable)

    @@ -751,7 +751,7 @@

    Submodules
    -If(cond: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable)
    +If(cond: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable)

    @@ -761,7 +761,7 @@

    Submodules
    -Switch(test: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable)
    +Switch(test: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable)

    @@ -867,7 +867,7 @@

    Submodules
    -debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    @@ -1020,7 +1020,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/transactron.html b/transactron.html index 3fe65fd..14f6116 100644 --- a/transactron.html +++ b/transactron.html @@ -762,7 +762,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/transactron.lib.html b/transactron.lib.html index 68f5277..8976ff8 100644 --- a/transactron.lib.html +++ b/transactron.lib.html @@ -119,7 +119,7 @@

    Submodules
    -static create(name: Optional[str] = None, i: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = [], o: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = [], src_loc: int | tuple[str, int] = 0, **kwargs: Unpack[AdapterBodyParams])
    +static create(name: Optional[str] = None, i: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = [], o: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = [], src_loc: int | tuple[str, int] = 0, **kwargs: Unpack[AdapterBodyParams])
    @@ -137,10 +137,10 @@

    Submodules
    class transactron.lib.adapters.AdapterBase
    -

    Bases: Component

    +

    Bases: Component

    -__init__(iface: Method, layout_in: StructLayout, layout_out: StructLayout)
    +__init__(iface: Method, layout_in: StructLayout, layout_out: StructLayout)
    @@ -155,7 +155,7 @@

    Submodules
    -debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    @@ -279,7 +279,7 @@

    Submodules
    -__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], src_loc: int | tuple[str, int] = 0)
    +__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -318,7 +318,7 @@

    Submodules
    -__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], *, src_loc: int | tuple[str, int] = 0)
    +__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], *, src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -361,7 +361,7 @@

    Submodules
    -__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = (), rev_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = (), *, src_loc: int | tuple[str, int] = 0)
    +__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = (), rev_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField] = (), *, src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -475,7 +475,7 @@

    Submodules
    -__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], *, src_loc: int | tuple[str, int] = 0)
    +__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], *, src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -546,7 +546,7 @@

    Submodules
    -__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField])
    +__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField])
    Parameters
    @@ -761,7 +761,7 @@

    Submodules
    -__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], depth: int, *, src_loc: int | tuple[str, int] = 0) None
    +__init__(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], depth: int, *, src_loc: int | tuple[str, int] = 0) None
    Parameters
    @@ -828,7 +828,7 @@

    Submodules
    -__init__(shape: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable, depth: int, read_width: int, write_width: Optional[int], *, src_loc: int | tuple[str, int] = 0) None
    +__init__(shape: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable, depth: int, read_width: int, write_width: Optional[int], *, src_loc: int | tuple[str, int] = 0) None
    Parameters
    @@ -899,7 +899,7 @@

    Submodules
    -assertion(m: ModuleLike, value: Value, format: str = '', *args, src_loc_at: int = 0, **kwargs)
    +assertion(m: ModuleLike, value: Value, format: str = '', *args, src_loc_at: int = 0, **kwargs)

    Define an assertion.

    This function might help find some hardware bugs which might otherwise be hard to detect. If value is false, it will terminate the simulation or @@ -910,14 +910,14 @@

    Submodules
    -debug(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)
    +debug(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)

    Log a message with severity ‘DEBUG’.

    See HardwareLogger.log function for more details.

    -error(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)
    +error(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)

    Log a message with severity ‘ERROR’.

    This severity level has special semantics. If a log with this serverity level is triggered, the simulation will be terminated.

    @@ -926,14 +926,14 @@

    Submodules
    -info(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)
    +info(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)

    Log a message with severity ‘INFO’.

    See HardwareLogger.log function for more details.

    -log(m: ModuleLike, level: int, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, src_loc_at: int = 0)
    +log(m: ModuleLike, level: int, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, src_loc_at: int = 0)

    Registers a hardware log record with the given severity.

    Parameters
    @@ -957,7 +957,7 @@

    Submodules
    -warning(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)
    +warning(m: ModuleLike, trigger: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, format: str, *args, **kwargs)

    Log a message with severity ‘WARNING’.

    See HardwareLogger.log function for more details.

    @@ -1112,7 +1112,7 @@

    Submodules
    -transactron.lib.logging.get_trigger_bit(level: int, namespace_regexp: str = '.*') Value
    +transactron.lib.logging.get_trigger_bit(level: int, namespace_regexp: str = '.*') Value

    Get a trigger bit for logs of the given severity level and in the specified namespace.

    The signal returned by this function is high whenever the trigger signal @@ -1214,7 +1214,7 @@

    Submodules
    -debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +debug_signals() amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    Returns tree-like SignalBundle composed of all metric registers.

    @@ -1731,7 +1731,7 @@

    Submodules
    -__init__(args_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], results_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], src_loc: int | tuple[str, int] = 0)
    +__init__(args_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], results_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -1925,7 +1925,7 @@

    Submodules
    -__init__(address_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], data_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], entries_number: int)
    +__init__(address_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], data_layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField], entries_number: int)
    Parameters
    @@ -2072,7 +2072,7 @@

    Submodules
    -__init__(method1: Method, method2: Method, *, i_fun: Optional[Callable[[TModule, View[StructLayout]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]] = None, o_fun: Optional[Callable[[TModule, View[StructLayout]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]] = None, src_loc: int | tuple[str, int] = 0)
    +__init__(method1: Method, method2: Method, *, i_fun: Optional[Callable[[TModule, View[StructLayout]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]] = None, o_fun: Optional[Callable[[TModule, View[StructLayout]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]] = None, src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -2118,7 +2118,7 @@

    Submodules
    -__init__(target: Method, condition: Callable[[TModule, View[StructLayout]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable], default: Optional[Union[Value, int, Enum, ValueCastable, Mapping[str, RecordDict]]] = None, *, use_condition: bool = False, src_loc: int | tuple[str, int] = 0)
    +__init__(target: Method, condition: Callable[[TModule, View[StructLayout]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable], default: Optional[Union[Value, int, Enum, ValueCastable, Mapping[str, RecordDict]]] = None, *, use_condition: bool = False, src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -2164,7 +2164,7 @@

    Submodules
    -__init__(target: Method, *, i_transform: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, 'View[StructLayout]'], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, o_transform: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, 'View[StructLayout]'], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, src_loc: int | tuple[str, int] = 0)
    +__init__(target: Method, *, i_transform: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, 'View[StructLayout]'], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, o_transform: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, 'View[StructLayout]'], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, src_loc: int | tuple[str, int] = 0)
    Parameters
    @@ -2194,7 +2194,7 @@

    SubmodulesElaboratable, Unifier

    -__init__(targets: list[transactron.core.method.Method], combiner: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, list['View[StructLayout]']], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, *, src_loc: int | tuple[str, int] = 0)
    +__init__(targets: list[transactron.core.method.Method], combiner: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, list['View[StructLayout]']], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, *, src_loc: int | tuple[str, int] = 0)

    Method product.

    Takes arbitrary, non-zero number of target methods, and constructs a method which calls all of the target methods using the same @@ -2233,7 +2233,7 @@

    SubmodulesElaboratable, Unifier

    -__init__(targets: list[transactron.core.method.Method], combiner: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, list[tuple[amaranth.hdl._ast.Value, 'View[StructLayout]']]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, *, src_loc: int | tuple[str, int] = 0)
    +__init__(targets: list[transactron.core.method.Method], combiner: Optional[tuple[amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField'], collections.abc.Callable[[transactron.core.tmodule.TModule, list[tuple[amaranth.hdl._ast.Value, 'View[StructLayout]']]], amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, 'RecordDict']]]] = None, *, src_loc: int | tuple[str, int] = 0)

    Method product with optional calling.

    Takes arbitrary, non-zero number of target methods, and constructs a method which tries to call all of the target methods using the same @@ -2352,7 +2352,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/transactron.testing.html b/transactron.testing.html index e173164..4744689 100644 --- a/transactron.testing.html +++ b/transactron.testing.html @@ -91,7 +91,7 @@

    Submodules
    class transactron.testing.infrastructure.PysimSimulator
    -

    Bases: Simulator

    +

    Bases: Simulator

    __init__(module: HasElaborate, max_cycles: float = 100000.0, add_transaction_module=True, traces_file=None, clk_period=1e-06)
    @@ -148,13 +148,13 @@

    Submodules
    -async random_wait(sim: SimulatorContext, max_cycle_cnt: int, *, min_cycle_cnt: int = 0)
    +async random_wait(sim: SimulatorContext, max_cycle_cnt: int, *, min_cycle_cnt: int = 0)

    Wait for a random amount of cycles in range [min_cycle_cnt, max_cycle_cnt]

    -async random_wait_geom(sim: SimulatorContext, prob: float = 0.5, max_cycle_cnt: int = 65536)
    +async random_wait_geom(sim: SimulatorContext, prob: float = 0.5, max_cycle_cnt: int = 65536)

    Wait till the first success, where there is prob probability for success in each cycle.

    @@ -170,7 +170,7 @@

    Submodules
    -async tick(sim: SimulatorContext, cycle_cnt: int = 1)
    +async tick(sim: SimulatorContext, cycle_cnt: int = 1)

    Waits for the given number of cycles.

    @@ -187,12 +187,12 @@

    Submodules
    -transactron.testing.input_generation.generate_based_on_layout(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField]) SearchStrategy[Mapping[str, Union[int, RecordIntDict]]]
    +transactron.testing.input_generation.generate_based_on_layout(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField]) SearchStrategy[Mapping[str, Union[int, RecordIntDict]]]
    -transactron.testing.input_generation.generate_method_input(args: list[tuple[str, amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField']]]) Union[int, ForwardRef('RecordIntDict')]]]]
    +transactron.testing.input_generation.generate_method_input(args: list[tuple[str, amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField']]]) Union[int, ForwardRef('RecordIntDict')]]]]
    @@ -202,7 +202,7 @@

    Submodules
    -transactron.testing.input_generation.generate_process_input(elem_count: int, max_nops: int, layouts: list[tuple[str, amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField']]]) OpNOP]]
    +transactron.testing.input_generation.generate_process_input(elem_count: int, max_nops: int, layouts: list[tuple[str, amaranth.lib.data.StructLayout | collections.abc.Iterable['LayoutListField']]]) OpNOP]]

    @@ -253,17 +253,17 @@

    Submodules
    -async effect_process(sim: SimulatorContext) None
    +async effect_process(sim: SimulatorContext) None

    -async output_process(sim: SimulatorContext) None
    +async output_process(sim: SimulatorContext) None
    -async validate_arguments_process(sim: SimulatorContext) None
    +async validate_arguments_process(sim: SimulatorContext) None

    @@ -328,7 +328,7 @@

    Submodules
    -__init__(sim: SimulatorContext, _calls: Iterable[amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | tuple[transactron.testing.testbenchio.TestbenchIO, Optional[dict[str, Any]]]] = ())
    +__init__(sim: SimulatorContext, _calls: Iterable[amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | tuple[transactron.testing.testbenchio.TestbenchIO, Optional[dict[str, Any]]]] = ())
    Parameters
    @@ -362,7 +362,7 @@

    Submodules
    -sample(*values: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | transactron.testing.testbenchio.TestbenchIO)
    +sample(*values: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | transactron.testing.testbenchio.TestbenchIO)

    Sample a signal or a method result on a clock edge.

    Values are sampled like in standard Amaranth TickTrigger. Sampling a method result works like call(), but the method is not called - another process can do that instead. If the method was not called, the @@ -406,32 +406,32 @@

    Submodules
    -async call(sim: SimulatorContext, data={}, /, **kwdata) data.Const[data.StructLayout]
    +async call(sim: SimulatorContext, data={}, /, **kwdata) data.Const[data.StructLayout]

    -async call_do(sim: SimulatorContext) data.Const[data.StructLayout]
    +async call_do(sim: SimulatorContext) data.Const[data.StructLayout]
    -call_init(sim: SimulatorContext, data={}, /, **kwdata)
    +call_init(sim: SimulatorContext, data={}, /, **kwdata)
    -async call_result(sim: SimulatorContext) Optional[data.Const[data.StructLayout]]
    +async call_result(sim: SimulatorContext) Optional[data.Const[data.StructLayout]]
    -async call_try(sim: SimulatorContext, data={}, /, **kwdata) Optional[data.Const[data.StructLayout]]
    +async call_try(sim: SimulatorContext, data={}, /, **kwdata) Optional[data.Const[data.StructLayout]]
    -disable(sim: SimulatorContext)
    +disable(sim: SimulatorContext)
    @@ -441,7 +441,7 @@

    Submodules
    -enable(sim: SimulatorContext)
    +enable(sim: SimulatorContext)

    @@ -466,27 +466,27 @@

    Submodules
    -sample_outputs(sim: SimulatorContext)
    +sample_outputs(sim: SimulatorContext)

    -sample_outputs_done(sim: SimulatorContext)
    +sample_outputs_done(sim: SimulatorContext)
    -sample_outputs_until_done(sim: SimulatorContext)
    +sample_outputs_until_done(sim: SimulatorContext)
    -set_enable(sim: SimulatorContext, en)
    +set_enable(sim: SimulatorContext, en)
    -set_inputs(sim: SimulatorContext, data)
    +set_inputs(sim: SimulatorContext, data)
    @@ -528,7 +528,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/transactron.utils.amaranth_ext.html b/transactron.utils.amaranth_ext.html index 5487ba7..2783a3b 100644 --- a/transactron.utils.amaranth_ext.html +++ b/transactron.utils.amaranth_ext.html @@ -267,7 +267,7 @@

    Submodules
    -__init__(shape: ShapeLike)
    +__init__(shape: ShapeLike)
    @@ -279,7 +279,7 @@

    Submodules
    -__init__(shape: ShapeLike)
    +__init__(shape: ShapeLike)
    @@ -416,7 +416,7 @@

    Submodules
    -static create(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, outputs_count: int = 1, name: Optional[str] = None) list[tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]]
    +static create(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, outputs_count: int = 1, name: Optional[str] = None) list[tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]]

    Syntax sugar for creating MultiPriorityEncoder

    This static method allows to use MultiPriorityEncoder in a more functional way. Instead of creating the instance manually, connecting all the signals and @@ -458,7 +458,7 @@

    Submodules
    -static create_simple(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, name: Optional[str] = None) tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]
    +static create_simple(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, name: Optional[str] = None) tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]

    Syntax sugar for creating MultiPriorityEncoder

    This is the same as create function, but with outputs_count hardcoded to 1.

    @@ -467,7 +467,7 @@

    Submodules
    -transactron.utils.amaranth_ext.elaboratables.OneHotSwitch(m: ModuleLike, test: Value)
    +transactron.utils.amaranth_ext.elaboratables.OneHotSwitch(m: ModuleLike, test: Value)

    One-hot switch.

    This function allows one-hot matching in the style similar to the standard Amaranth Switch. This allows to get the performance benefit of using @@ -497,9 +497,9 @@

    Submodules
    -transactron.utils.amaranth_ext.elaboratables.OneHotSwitchDynamic(m: ModuleLike, test: Value, *, default: Literal[True]) Iterable[Optional[int]]
    +transactron.utils.amaranth_ext.elaboratables.OneHotSwitchDynamic(m: ModuleLike, test: Value, *, default: Literal[True]) Iterable[Optional[int]]
    -transactron.utils.amaranth_ext.elaboratables.OneHotSwitchDynamic(m: ModuleLike, test: Value, *, default: Literal[False] = False) Iterable[int]
    +transactron.utils.amaranth_ext.elaboratables.OneHotSwitchDynamic(m: ModuleLike, test: Value, *, default: Literal[False] = False) Iterable[int]

    Dynamic one-hot switch.

    This function allows simple one-hot matching on signals which can have variable bit widths.

    @@ -565,7 +565,7 @@

    Submodules
    -static create(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, first: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, last: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, outputs_count: int = 1, name: Optional[str] = None) list[tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]]
    +static create(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, first: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, last: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, outputs_count: int = 1, name: Optional[str] = None) list[tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]]

    Syntax sugar for creating RingMultiPriorityEncoder

    This static method allows to use RingMultiPriorityEncoder in a more functional way. Instead of creating the instance manually, connecting all the signals and @@ -613,7 +613,7 @@

    Submodules
    -static create_simple(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, first: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, last: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, name: Optional[str] = None) tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]
    +static create_simple(m: Module, input_width: int, input: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, first: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, last: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, name: Optional[str] = None) tuple[amaranth.hdl._ast.Value, amaranth.hdl._ast.Value]

    Syntax sugar for creating RingMultiPriorityEncoder

    This is the same as create function, but with outputs_count hardcoded to 1.

    @@ -717,7 +717,7 @@

    Submodules
    -__init__(n: int, shape: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable)
    +__init__(n: int, shape: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable)

    @@ -727,81 +727,81 @@

    Submodules

    transactron.utils.amaranth_ext.functions module

    -transactron.utils.amaranth_ext.functions.and_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]])
    +transactron.utils.amaranth_ext.functions.and_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]])
    -transactron.utils.amaranth_ext.functions.binary_tree_reduce(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]], neutral: Value, operator: Callable[[Value, Value], Value]) Value
    +transactron.utils.amaranth_ext.functions.binary_tree_reduce(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]], neutral: Value, operator: Callable[[Value, Value], Value]) Value
    -transactron.utils.amaranth_ext.functions.const_of(value: int, shape: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable) Any
    +transactron.utils.amaranth_ext.functions.const_of(value: int, shape: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable) Any
    -transactron.utils.amaranth_ext.functions.count_leading_zeros(s: Value) Value
    +transactron.utils.amaranth_ext.functions.count_leading_zeros(s: Value) Value
    -transactron.utils.amaranth_ext.functions.count_trailing_zeros(s: Value) Value
    +transactron.utils.amaranth_ext.functions.count_trailing_zeros(s: Value) Value
    -transactron.utils.amaranth_ext.functions.cyclic_mask(bits: int, start: Value, end: Value)
    +transactron.utils.amaranth_ext.functions.cyclic_mask(bits: int, start: Value, end: Value)

    Generate bits bit-wide mask with ones from start to end position, including both ends. If end value is < than start the mask wraps around.

    -transactron.utils.amaranth_ext.functions.flatten_signals(signals: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]) Iterable[Value]
    +transactron.utils.amaranth_ext.functions.flatten_signals(signals: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]) Iterable[Value]

    Flattens input data, which can be either a signal, a record, a list (or a dict) of SignalBundle items.

    -transactron.utils.amaranth_ext.functions.generic_min_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]], operator: Callable[[Value, Value], Value]) Value
    +transactron.utils.amaranth_ext.functions.generic_min_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]], operator: Callable[[Value, Value], Value]) Value
    -transactron.utils.amaranth_ext.functions.max_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]) Value
    +transactron.utils.amaranth_ext.functions.max_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]) Value
    -transactron.utils.amaranth_ext.functions.min_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]) Value
    +transactron.utils.amaranth_ext.functions.min_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]) Value
    -transactron.utils.amaranth_ext.functions.mod_incr(sig: Value, mod: int) Value
    +transactron.utils.amaranth_ext.functions.mod_incr(sig: Value, mod: int) Value

    Perform (sig+1) % mod operation.

    -transactron.utils.amaranth_ext.functions.or_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]])
    +transactron.utils.amaranth_ext.functions.or_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]])
    -transactron.utils.amaranth_ext.functions.popcount(s: Value)
    +transactron.utils.amaranth_ext.functions.popcount(s: Value)
    -transactron.utils.amaranth_ext.functions.shape_of(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) amaranth.hdl._ast.Shape | amaranth.hdl._ast.ShapeCastable
    +transactron.utils.amaranth_ext.functions.shape_of(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) amaranth.hdl._ast.Shape | amaranth.hdl._ast.ShapeCastable
    -transactron.utils.amaranth_ext.functions.sum_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]])
    +transactron.utils.amaranth_ext.functions.sum_value(*values: amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]])

    @@ -856,7 +856,7 @@

    Submodules

    transactron.utils.amaranth_ext.shifter module

    -transactron.utils.amaranth_ext.shifter.generic_shift_left(value1: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, value2: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value
    +transactron.utils.amaranth_ext.shifter.generic_shift_left(value1: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, value2: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value

    Generic left shift function.

    Shift value1 left by offset bits, fill the empty space with bits from value2. The bit vectors value1 and value2 need to be of the @@ -884,7 +884,7 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.generic_shift_right(value1: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, value2: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value
    +transactron.utils.amaranth_ext.shifter.generic_shift_right(value1: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, value2: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value

    Generic right shift function.

    Shift value1 right by offset bits, fill the empty space with bits from value2. The bit vectors value1 and value2 need to be of the @@ -912,9 +912,9 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.generic_shift_vec_left(data1: Sequence[_T_ValueCastable], data2: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    +transactron.utils.amaranth_ext.shifter.generic_shift_vec_left(data1: Sequence[_T_ValueCastable], data2: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    -transactron.utils.amaranth_ext.shifter.generic_shift_vec_left(data1: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], data2: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]
    +transactron.utils.amaranth_ext.shifter.generic_shift_vec_left(data1: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], data2: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]

    Generic left shift function for bit vectors and complex data.

    Given data1 and data2 which are sequences of ValueLike or ValueCastable, shift data1 left by offset bits, fill the empty @@ -944,9 +944,9 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.generic_shift_vec_right(data1: Sequence[_T_ValueCastable], data2: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    +transactron.utils.amaranth_ext.shifter.generic_shift_vec_right(data1: Sequence[_T_ValueCastable], data2: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    -transactron.utils.amaranth_ext.shifter.generic_shift_vec_right(data1: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], data2: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]
    +transactron.utils.amaranth_ext.shifter.generic_shift_vec_right(data1: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], data2: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]

    Generic right shift function for bit vectors and complex data.

    Given data1 and data2 which are sequences of ValueLike or ValueCastable, shift data1 right by offset bits, fill the empty @@ -976,7 +976,7 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.rotate_left(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value
    +transactron.utils.amaranth_ext.shifter.rotate_left(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value

    Left rotate function.

    Rotate value left by offset bits.

    Differs from value.rotate_left(offset) in that the shift amount is @@ -1001,7 +1001,7 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.rotate_right(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value
    +transactron.utils.amaranth_ext.shifter.rotate_right(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Value

    Right rotate function.

    Rotate value right by offset bits.

    Differs from value.rotate_right(offset) in that the shift amount is @@ -1026,9 +1026,9 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.rotate_vec_left(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    +transactron.utils.amaranth_ext.shifter.rotate_vec_left(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    -transactron.utils.amaranth_ext.shifter.rotate_vec_left(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]
    +transactron.utils.amaranth_ext.shifter.rotate_vec_left(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]

    Left rotate function for bit vectors and complex data.

    Given data which is a sequence of ValueLike or ValueCastable, rotate data left by offset bits. The entries of data must be of the same @@ -1053,9 +1053,9 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.rotate_vec_right(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    +transactron.utils.amaranth_ext.shifter.rotate_vec_right(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[_T_ValueCastable]
    -transactron.utils.amaranth_ext.shifter.rotate_vec_right(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]
    +transactron.utils.amaranth_ext.shifter.rotate_vec_right(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable) Sequence[Value]

    Right rotate function for bit vectors and complex data.

    Given data which is a sequence of ValueLike or ValueCastable, rotate data right by offset bits. The entries of data must be of the same @@ -1080,7 +1080,7 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.shift_left(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable = 0) Value
    +transactron.utils.amaranth_ext.shifter.shift_left(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable = 0) Value

    Left shift function.

    Shift value left by offset bits, fill the empty space with the placeholder bit (0 by default).

    @@ -1110,7 +1110,7 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.shift_right(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable = 0) Value
    +transactron.utils.amaranth_ext.shifter.shift_right(value: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable = 0) Value

    Right shift function.

    Shift value right by offset bits, fill the empty space with the placeholder bit (0 by default).

    @@ -1139,9 +1139,9 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.shift_vec_left(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[_T_ValueCastable]) Sequence[_T_ValueCastable]
    +transactron.utils.amaranth_ext.shifter.shift_vec_left(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[_T_ValueCastable]) Sequence[_T_ValueCastable]
    -transactron.utils.amaranth_ext.shifter.shift_vec_left(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[Union[Value, int, Enum]]) Sequence[Value]
    +transactron.utils.amaranth_ext.shifter.shift_vec_left(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[Union[Value, int, Enum]]) Sequence[Value]

    Left shift function for bit vectors and complex data.

    Given data which is a sequence of ValueLike or ValueCastable, shift data left by offset bits, fill the empty space with placeholder. @@ -1168,9 +1168,9 @@

    Submodules
    -transactron.utils.amaranth_ext.shifter.shift_vec_right(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[_T_ValueCastable]) Sequence[_T_ValueCastable]
    +transactron.utils.amaranth_ext.shifter.shift_vec_right(data: Sequence[_T_ValueCastable], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[_T_ValueCastable]) Sequence[_T_ValueCastable]
    -transactron.utils.amaranth_ext.shifter.shift_vec_right(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[Union[Value, int, Enum, ValueCastable]]) Sequence[Value]
    +transactron.utils.amaranth_ext.shifter.shift_vec_right(data: Sequence[amaranth.hdl._ast.Value | int | enum.Enum], offset: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable, placeholder: Optional[Union[Value, int, Enum, ValueCastable]]) Sequence[Value]

    Right shift function for bit vectors and complex data.

    Given data which is a sequence of ValueLike or ValueCastable, shift data right by offset bits, fill the empty space with placeholder. @@ -1212,7 +1212,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.

    diff --git a/transactron.utils.html b/transactron.utils.html index f5a4c91..ff9f46c 100644 --- a/transactron.utils.html +++ b/transactron.utils.html @@ -126,7 +126,7 @@

    Submodules
    -transactron.utils.assign.assign(lhs: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg], rhs: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg], *, fields: transactron.utils.assign.AssignType | collections.abc.Iterable[str | int] | collections.abc.Mapping[str | int, AssignFields] = AssignType.RHS, lhs_strict=False, rhs_strict=False) Iterable[Assign]
    +transactron.utils.assign.assign(lhs: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg], rhs: amaranth.hdl._ast.Value | int | enum.Enum | amaranth.hdl._ast.ValueCastable | collections.abc.Mapping[str, AssignArg] | collections.abc.Mapping[int, AssignArg] | collections.abc.Sequence[AssignArg], *, fields: transactron.utils.assign.AssignType | collections.abc.Iterable[str | int] | collections.abc.Mapping[str | int, AssignFields] = AssignType.RHS, lhs_strict=False, rhs_strict=False) Iterable[Assign]

    Safe structured assignment.

    This function recursively generates assignment statements for field-containing structures. This includes: @@ -245,7 +245,7 @@

    Submodules
    -transactron.utils.data_repr.data_layout(val: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable) amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField]
    +transactron.utils.data_repr.data_layout(val: amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable) amaranth.lib.data.StructLayout | collections.abc.Iterable[LayoutListField]

    @@ -272,7 +272,7 @@

    Submodules
    -transactron.utils.data_repr.layout_subset(layout: StructLayout, *, fields: set[str]) StructLayout
    +transactron.utils.data_repr.layout_subset(layout: StructLayout, *, fields: set[str]) StructLayout

    @@ -329,7 +329,7 @@

    Submodules

    transactron.utils.debug_signals module

    -transactron.utils.debug_signals.auto_debug_signals(thing) amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]
    +transactron.utils.debug_signals.auto_debug_signals(thing) amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]] | collections.abc.Mapping[str, amaranth.hdl._ast.Value | amaranth.hdl._rec.Record | amaranth.lib.data.View | collections.abc.Iterable[ValueBundle] | collections.abc.Mapping[str, ValueBundle]]

    Automatic debug signal generation.

    Exposes class attributes with debug signals (Amaranth Signals, Records, Arrays and Elaboratables, Methods, classes @@ -738,7 +738,7 @@

    Submodules
    -transactron.utils.gen.generate_verilog(elaboratable: Elaboratable, ports: Optional[list[amaranth.hdl._ast.Value]] = None, top_name: str = 'top') tuple[str, transactron.utils.gen.GenerationInfo]
    +transactron.utils.gen.generate_verilog(elaboratable: Elaboratable, ports: Optional[list[amaranth.hdl._ast.Value]] = None, top_name: str = 'top') tuple[str, transactron.utils.gen.GenerationInfo]

    @@ -775,12 +775,12 @@

    Submodules
    -transactron.utils.transactron_helpers.extend_layout(layout: StructLayout, *fields: tuple[str, amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable | list[tuple[str, ForwardRef('ShapeLike | LayoutList')]]]) StructLayout
    +transactron.utils.transactron_helpers.extend_layout(layout: StructLayout, *fields: tuple[str, amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable | list[tuple[str, ForwardRef('ShapeLike | LayoutList')]]]) StructLayout
    -transactron.utils.transactron_helpers.from_method_layout(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[tuple[str, amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable | list[ForwardRef('LayoutListField')]]]) StructLayout
    +transactron.utils.transactron_helpers.from_method_layout(layout: amaranth.lib.data.StructLayout | collections.abc.Iterable[tuple[str, amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable | list[ForwardRef('LayoutListField')]]]) StructLayout
    @@ -800,7 +800,7 @@

    Submodules
    -transactron.utils.transactron_helpers.make_layout(*fields: tuple[str, amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable | list[tuple[str, ForwardRef('ShapeLike | LayoutList')]]]) StructLayout
    +transactron.utils.transactron_helpers.make_layout(*fields: tuple[str, amaranth.hdl._ast.Shape | int | range | type[enum.Enum] | amaranth.hdl._ast.ShapeCastable | list[tuple[str, ForwardRef('ShapeLike | LayoutList')]]]) StructLayout

    @@ -836,7 +836,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2025. - Last updated on 21:23 2025-03-04. + Last updated on 19:59 2025-03-06.