From b81e71eede2ffd4e0cae67333c598d44094abc0b Mon Sep 17 00:00:00 2001 From: tilk Date: Sun, 31 Mar 2024 10:11:57 +0000 Subject: [PATCH] Support for superscalarity in the instruction cache (#624) --- .doctrees/api.doctree | Bin 21253 -> 21253 bytes .doctrees/auto_graph.doctree | Bin 44178 -> 44476 bytes .doctrees/coreblocks.cache.doctree | Bin 56813 -> 56862 bytes .doctrees/coreblocks.params.doctree | Bin 294694 -> 297585 bytes .doctrees/current-graph.doctree | Bin 45399 -> 45697 bytes .doctrees/environment.pickle | Bin 505707 -> 505985 bytes _sources/auto_graph.rst.txt | 332 ++++++++--------- api.html | 2 +- assumptions.html | 2 +- auto_graph.html | 334 +++++++++--------- components/icache.html | 2 +- coreblocks.backend.html | 2 +- coreblocks.cache.html | 12 +- coreblocks.core_structs.html | 2 +- coreblocks.frontend.decoder.html | 2 +- coreblocks.frontend.fetch.html | 2 +- coreblocks.frontend.html | 2 +- coreblocks.func_blocks.fu.html | 2 +- ...unc_blocks.fu.unsigned_multiplication.html | 2 +- coreblocks.func_blocks.html | 2 +- coreblocks.func_blocks.interface.html | 2 +- coreblocks.func_blocks.lsu.html | 2 +- coreblocks.html | 2 +- coreblocks.params.html | 25 +- coreblocks.peripherals.html | 2 +- coreblocks.priv.csr.html | 2 +- coreblocks.priv.html | 2 +- coreblocks.priv.traps.html | 2 +- coreblocks.scheduler.html | 2 +- current-graph.html | 334 +++++++++--------- development-environment.html | 2 +- genindex.html | 8 +- home.html | 2 +- index.html | 2 +- miscellany/exceptions-summary.html | 2 +- modules-coreblocks.html | 2 +- modules-transactron.html | 2 +- objects.inv | Bin 10540 -> 10555 bytes problem-checklist.html | 2 +- py-modindex.html | 2 +- scheduler/overview.html | 2 +- search.html | 2 +- searchindex.js | 2 +- shared-structs/implementation/rs-impl.html | 2 +- shared-structs/rs.html | 2 +- synthesis/synthesis.html | 2 +- transactions.html | 2 +- transactron.core.html | 2 +- transactron.html | 2 +- transactron.lib.html | 2 +- transactron.testing.html | 2 +- transactron.utils.amaranth_ext.html | 2 +- transactron.utils.html | 2 +- 53 files changed, 567 insertions(+), 558 deletions(-) diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree index a5710750360bd5724f455fff5f874787eeef2b9e..da29cf1a2dc0fbaa371d01934fea8cad75ad7164 100644 GIT binary patch delta 562 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 diff --git a/.doctrees/coreblocks.cache.doctree b/.doctrees/coreblocks.cache.doctree index 2d501f1eab72f278bf950ed12bc24277bdbcb7ba..e517a79ad58418d2ef5c16035119fc3279e34a5e 100644 GIT binary patch delta 336 zcmaF6n|a!Bp){`~Gly&P0x9{;-NO5s7?UR-6mvk+tBh4tankowugczN=ic~X=2l*>*&KTmz~kGU=^AV*Jj zTq3_YZC)rdW5MJ-3+>@zlhfu2Z?;&}#K`DAd1AE!M}A(a0#v;MM+STBlnk*RRGH0= IOYT|%07emNB>(^b diff --git a/.doctrees/coreblocks.params.doctree b/.doctrees/coreblocks.params.doctree index 47500e28a8236d0658a3e5055259afa3f7d1ab9a..27fb7cf9ccd635663884d6b5d6e32f30c655b581 100644 GIT binary patch literal 297585 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

s@Q_k*3(q$>7 z(8(8B@@;!fpKb>4J>?*RVWIH^UYAFv_UQ*57u79HIomD$kuIEl>3&n{-3IE}! z3rZF8@ujuN9D3Ak4RqidO0MF+#ZPP*#CH`%9j+h4mrQbFXeZIJ&}I~YvM7DLF$HCo z!w#{}RCM^$aFfbdu{@5(RuNz&#e`bpm@gmB0fv{BDml^Z7Vz)`=fDoDJo@S>s8Fyl z|8?44J%(JzvljLam$Gt?6j%Ff;!Jf=vr6M4ex0_L3J#oo4W;K>M>qw~yft3K8(8*APih&{JUkiP#`O={>0He7^hJ~? zuDe+$dN*4IQrJp_+hxegCyY!{Kg2jH=1i7Y2h zOF$ZSJ4v98(ru{jl(QV=>_$1OQO;(xQOHn1uGiASRfS8qQiWXw ztI%#Ql+%vRZecmgsoz<#G#;vFJiDz}11eA7Pg4MQk-6*aQ^_A+d^?(Fe2Bs8iS8}X z{Fw$%oV&!hr*MDaEo_KhEV`1&-w=6%$f<=OZy?gW2&9L|b40#I�&+W%^Ok~KMC40Eo+a|eWgvGGxd_wk>|!Dh6Zr^{8&-haOk^Q> z#S$XiD?US4&l7nQYEwNJ`x=60FlviR^0pXn$oGq8ewOUjd1VVQGD9>1dx?xW<7|+( z5_yP7eI>{#B7Lhs28cXO7?r2kToAtE0q z@)(hk%^(MeyqCzsM3!s;Ig7}fiM*A_E4PAdB=VjCkoOWu5f z5cwpLPZQab1=&aBc_QB;QaK7zCqf5=Gde|_(J`%z&T?gRTppt{^%xz8#OTZ|qTMz=lu|B%L;CNPqwh1V{)NmVgNa6rri^u5{I-yQ`_HCJ7=U zB7!^xwG~l8R9r@J8644Z8AnFv=kj;?F$&`{uAq)ODlUkQjQ?}Dcb9kWefKR@srmom z^U=J1b?>?7p7XuuoV%TOSh zntsFdikDBnbhlo+no#zq>IiRmk*!@WuIR&A`=&+E@?R)$-( z`b1Q{I;T3fI`4|<-s*yIPOH`$t0+H(hYZ&nm7%fv@YT)!$#SDS-YiX)hp#S=R;EcM zs5ATG%1*+JtLQ7IDW}lX{^498L)fqGSDjhiBb>`Q-yF^!t4&m}meU)TI1l2-s^>wv#eb;k;IPl>9VZ-KW}9 z-IKIfJv2P;m}-5za!g}tVxrPGW=Fko^)a%W>f_K9Nb(rQVN>~mi=w~Lgnk@$-mIyi z>LR8LA`DhOxN0dKeKzbt&||S^_yA3I96^ z{&zI|uNQh&?V~+f$%2VBfiD})Q1vemMvZoE~9EtKLB#LO=BDt%fmT%Xup z8=Y#D3A&mk)??9O@A6U_=K@F1PbZCyiZtefPG*F2Y7--soeH2C)~#|4=K(YuHHxd= zaQ0-m)|d`^Szk^mC3Si_T+WKFN-SBOySX)8CTiRU{p5^?yL^Eu=^w*JC4f^EfB)pJ z0T}sB=*z@tslGj#bpX&z5ZMA4WA$;(zEtOgJx3f-nrzgED=_#*N<+I!6I0`pyP$#6 z5l09WJIhG5&V}vEjJIBWcnqXzXoXwwXRGO8>wH1o^sv@e}cblmCH-Jgp zpo*K=03y6g#h6cpvbjyr5m?>uv>4%1FEx0j+C-uPS4@X%Br5PhiE)nMkXauXKC{8) z497-KFZ{AM`DL(K1MAwFYG^KFzgRaYL`bcDXsz4LghD!8bNQ*uTHs0sO3P`d zm#Z55Z{ zT;LzP<#f1TYz$39_)dNtFV`lfgM|?Hhx6b?Yu6-r1g^Sp5xlAFoE)nS*ILuJ(E>Zl zjR|;M0Kyib)=vnNO!U*$H&D8*a$~g8nhwZ(g0T7&M892Uc8KO(wv#aa%j%)Q;m`>( znxXv9Ia+@uJZ`v@cpVrGN)!Y$6_~J801nN5VVaVPMVJVBNozg9(c~XGZSaZ7fz7Uy z?<_@L3&MrlYn8E)!Lb@lU8Hg60Sn9k>CdrW$f)Nv4Fei3yeN{g5VHCz5-2p$6P!tK z=$_XEr!&EyO8z-CIG+4-*m+P(vM^L1*`=^}*^W6gX7u IH$WK&aH}>swfY|JK)9 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

Rs6adR6ZCV1 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%0D$8S0FYl)0QlK|sruk)Lcp~DKZ2Kq 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 jDn@8{$}VAiAQB7BEng zSX4!LTA7ZPpb@`P?!+PGA-=0A3qK@lk5U(}S?X@e3I)PJU;EKETo4q}S5-<1e^swX zt;U85O%htvLfla2v2U}+%#?wV^|OYBvT?0U59dJ% zyz8X&A9EHd{N6$?i@V}^Vpr6a(wprC?4 zS2^GDBvF`h+wtm#GEzed+$F_0UlJn+N>-DV8zmHOyKOjGs)DgJ950%_Q)(2!S9J%y z)mGfEN<~ez1OKgTB7~T>uT@vz-F-H+7{s_+%@m!B;8yQMZ9mLaNw~Z9SuEC+Vqt4J zPSliRTa9(XzY%ZOmScR|B9UYg8ny|Lxh;t0+FZ7$zbuo`{o4=oU?8F5{rvM+taL?P zn2*0T9A^77+u&j~IpI~&FL=E?T-jTKTRSUJ|IBHe+m%Z~%dvM?1=f<^y|fnG*rR}O z_lM9n?q_|!-t9okPA7e-(IUj>&CJ&+!eVny>|Xc(9kmA-sfnOHU}3S510Q0@7vnYf z;yelcW1muh9f5<82P*MVTPcPE64Xx!@q?}u)V90uqd4=63I%!+2~bBeq3caULqv`*d&TI8sMz;$@}7(o zlf1VgS>(AKF_5PIdw2WxzpJza6mP-~DFv3}!<&n2+ZMtyB?xW-yaaUf&*a@TelB zjBcP!qc4+LJEFvWkBol*n2v|e<4QDdl;QnjDUcm+q7NO9@{<$Q1I3t|Tyq*sV>yg~ z$O&SIgybcbFh<5GqlB?kI`^e10ks~jr}TL3q=s-f3x-o3P7OwTOACc)?4tsUl!C5Wmw0O`ig?OfzLC`;K<~+~O z)IEZTX5-&O{cL``@&B02B8rn@a9+U{@bMM$KYrPgsKAwWGYZraEstMbrNI>fSK(&b JfAur*{{Vok{GI>+ delta 3310 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 cvLLtbk0o*&-+sV@r6(%J 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 QtmAaZ6LjL BasicFifo2_write Retirement_Retirement --> BasicFifo2_write - TransactionManager_Retirement_cond0_Retirement --> BasicFifo2_write + TransactionManager_Retirement_Retirement_cond0 --> BasicFifo2_write TransactionManager_Retirement_Retirement_cond1 --> BasicFifo2_write FIFO6_read --> Core_DiscardBranchVerify WishboneMaster_WishboneMaster --> Forwarder_write WishboneMaster1_WishboneMaster --> Forwarder1_write - Forwarder2_read --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> WishboneMasterAdapter_request_read - SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> Serializer_Serializer + SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> Serializer_Serializer1 SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> BasicFifo_write SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> WishboneMaster_request + WishboneMasterAdapter_get_read_response --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 + Serializer_Serializer --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 + BasicFifo_read --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 + WishboneMaster_result --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 + Forwarder_read --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 + SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 --> Forwarder2_write ICache_ICache2 <--> HwCounter4__incr ICache_ICache1 <--> HwCounter3__incr ICache_ICache1 <--> HwCounter2__incr ICache_ICache1 <--> HwCounter1__incr ICache_ICache1 --> Forwarder3_write - ICache_ICache --> SimpleCommonBusCacheRefiller_start_refill - ICache_ICache --> Forwarder2_write - ICache_ICache3 --> Forwarder2_write - SimpleCommonBusCacheRefiller_accept_refill --> ICache_ICache3 - WishboneMasterAdapter_get_read_response --> ICache_ICache3 - Serializer_Serializer1 --> ICache_ICache3 - BasicFifo_read --> ICache_ICache3 - WishboneMaster_result --> ICache_ICache3 - Forwarder_read --> ICache_ICache3 - Fetch_Fetch1 --> ICache_issue_req - Fetch_Fetch1 <--> HwCounter__incr - Fetch_Fetch1 <--> LatencyMeasurer__start - Fetch_Fetch1 --> FIFO1_write - Fetch_Fetch1 --> FIFO2_write - Fetch_Fetch1 --> BasicFifo3_write - BasicFifo3_read --> Fetch_Fetch - ICache_accept_res --> Fetch_Fetch - FIFO2_read --> Fetch_Fetch - Fetch_Fetch <--> LatencyMeasurer__stop - FIFO1_read --> Fetch_Fetch - Fetch_Fetch --> HwExpHistogram__add - Forwarder3_read --> Fetch_Fetch - Fetch_Fetch --> MethodProduct_method + ICache_ICache3 --> SimpleCommonBusCacheRefiller_start_refill + SimpleCommonBusCacheRefiller_accept_refill --> ICache_ICache + Forwarder2_read --> ICache_ICache + Fetch_Fetch --> ICache_issue_req + Fetch_Fetch <--> HwCounter__incr + Fetch_Fetch <--> LatencyMeasurer__start + Fetch_Fetch --> FIFO1_write + Fetch_Fetch --> FIFO2_write + Fetch_Fetch --> BasicFifo3_write + BasicFifo3_read --> Fetch_Fetch1 + ICache_accept_res --> Fetch_Fetch1 + FIFO2_read --> Fetch_Fetch1 + Fetch_Fetch1 <--> LatencyMeasurer__stop + FIFO1_read --> Fetch_Fetch1 + Fetch_Fetch1 --> HwExpHistogram__add + Forwarder3_read --> Fetch_Fetch1 + Fetch_Fetch1 --> MethodProduct_method AdapterTrans_AdapterTrans_method --> MethodProduct_method - Fetch_Fetch --> FIFO_write + Fetch_Fetch1 --> FIFO_write AdapterTrans_AdapterTrans_method --> FIFO_write - Fetch_Fetch --> MethodMap_method + Fetch_Fetch1 --> MethodMap_method AdapterTrans_AdapterTrans_method --> MethodMap_method - Fetch_Fetch <--> CoreInstructionCounter_increment + Fetch_Fetch1 <--> CoreInstructionCounter_increment AdapterTrans_AdapterTrans_method <--> CoreInstructionCounter_increment FIFO_read --> DecodeStage_DecodeStage DecodeStage_DecodeStage <--> HwCounter8__incr @@ -579,17 +579,17 @@ ROBAllocation_ROBAllocation <--> LatencyMeasurer1__start ROBAllocation_ROBAllocation --> FIFO3_write ROBAllocation_ROBAllocation --> FIFO12_write - FIFO12_read --> RSSelection_RSSelection1 - RSSelection_RSSelection1 --> Forwarder8_write + FIFO12_read --> RSSelection_RSSelection2 + RSSelection_RSSelection2 --> Forwarder8_write + Forwarder8_read --> RSSelection_RSSelection1 Forwarder8_read --> RSSelection_RSSelection3 - Forwarder8_read --> RSSelection_RSSelection2 Forwarder8_read --> RSSelection_RSSelection - RSFuncBlock_select --> RSSelection_RSSelection3 - RS_select --> RSSelection_RSSelection3 + RSFuncBlock_select --> RSSelection_RSSelection1 + RS_select --> RSSelection_RSSelection1 + RSSelection_RSSelection1 --> FIFO13_write RSSelection_RSSelection3 --> FIFO13_write - RSSelection_RSSelection2 --> FIFO13_write RSSelection_RSSelection --> FIFO13_write - RSSelection_RSSelection2 <--> LSUDummy_select + RSSelection_RSSelection3 <--> LSUDummy_select RSSelection_RSSelection <--> CSRUnit_select FIFO13_read --> RSInsertion_RSInsertion RegisterFile_read1 --> RSInsertion_RSInsertion @@ -606,7 +606,7 @@ Collector2_method --> ConnectTrans11_ConnectTrans Forwarder7_read --> ConnectTrans11_ConnectTrans ConnectTrans11_ConnectTrans --> Fetch_resume - Retirement_Retirement4 --> Fetch_resume + Retirement_Retirement3 --> Fetch_resume Collector_method --> ResultAnnouncement_ResultAnnouncement Forwarder4_read --> ResultAnnouncement_ResultAnnouncement ResultAnnouncement_ResultAnnouncement --> ReorderBuffer_mark_done @@ -616,7 +616,7 @@ ResultAnnouncement_ResultAnnouncement --> RS_update ResultAnnouncement_ResultAnnouncement --> LSUDummy_update ResultAnnouncement_ResultAnnouncement --> CSRUnit_update - RS_RS2 --> WakeupSelect_WakeupSelect + RS_RS3 --> WakeupSelect_WakeupSelect RS_take --> WakeupSelect_WakeupSelect RS_take --> WakeupSelect1_WakeupSelect RS_take --> WakeupSelect2_WakeupSelect @@ -627,7 +627,7 @@ RS_RS4 --> WakeupSelect1_WakeupSelect WakeupSelect1_WakeupSelect --> ShiftFuncUnit_issue WakeupSelect1_WakeupSelect --> FIFO5_write - RS_RS3 --> WakeupSelect2_WakeupSelect + RS_RS2 --> WakeupSelect2_WakeupSelect WakeupSelect2_WakeupSelect --> JumpBranchFuncUnit_issue WakeupSelect2_WakeupSelect <--> HwCounter5__incr WakeupSelect2_WakeupSelect <--> HwCounter6__incr @@ -639,10 +639,10 @@ ConnectTrans3_ConnectTrans --> BasicFifo4_write WakeupSelect2_WakeupSelect --> FIFO7_write WakeupSelect2_WakeupSelect --> FIFO6_write - RS_RS --> WakeupSelect3_WakeupSelect + RS_RS1 --> WakeupSelect3_WakeupSelect WakeupSelect3_WakeupSelect --> ExceptionFuncUnit_issue WakeupSelect3_WakeupSelect --> FIFO8_write - RS_RS1 --> WakeupSelect4_WakeupSelect + RS_RS --> WakeupSelect4_WakeupSelect WakeupSelect4_WakeupSelect --> PrivilegedFuncUnit_issue ConnectTrans4_ConnectTrans --> Forwarder5_write ConnectTrans5_ConnectTrans --> Forwarder5_write @@ -661,11 +661,11 @@ CSRRegister2_read --> ConnectTrans8_ConnectTrans ConnectTrans8_ConnectTrans --> BasicFifo5_write LSUDummy_LSUDummy --> Forwarder6_write + TransactionManager_accept_cond1_LSUDummy --> Forwarder6_write TransactionManager_issue_cond0_LSUDummy --> Forwarder6_write - TransactionManager_LSUDummy_issue_cond1 --> Forwarder6_write - TransactionManager_LSUDummy_accept_cond0 --> Forwarder6_write - TransactionManager_LSUDummy_issue_cond2 --> Forwarder6_write - TransactionManager_LSUDummy_accept_cond1 --> Forwarder6_write + TransactionManager_issue_cond2_LSUDummy --> Forwarder6_write + TransactionManager_issue_cond1_LSUDummy --> Forwarder6_write + TransactionManager_accept_cond0_LSUDummy --> Forwarder6_write CSRRegister__fu_read --> CSRUnit_CSRUnit CSRUnit_CSRUnit --> CSRRegister__fu_write CSRRegister1__fu_read --> CSRUnit_CSRUnit @@ -695,37 +695,37 @@ ConnectTrans10_ConnectTrans --> Forwarder7_write BasicFifo5_read --> ConnectTrans9_ConnectTrans CSRUnit_fetch_resume --> ConnectTrans10_ConnectTrans - ReorderBuffer_peek --> Retirement_Retirement2 - ReorderBuffer_peek --> Retirement_Retirement3 + ReorderBuffer_peek --> Retirement_Retirement4 + ReorderBuffer_peek --> Retirement_Retirement1 ReorderBuffer_peek --> Retirement_Retirement - ReorderBuffer_peek --> TransactionManager_Retirement_cond0_Retirement + ReorderBuffer_peek --> TransactionManager_Retirement_Retirement_cond0 ReorderBuffer_peek --> TransactionManager_Retirement_Retirement_cond1 - Retirement_Retirement2 --> MethodTryProduct_method - ExceptionCauseRegister_get --> Retirement_Retirement3 - ExceptionCauseRegister_get --> TransactionManager_Retirement_cond0_Retirement + Retirement_Retirement4 --> MethodTryProduct_method + ExceptionCauseRegister_get --> Retirement_Retirement1 + ExceptionCauseRegister_get --> TransactionManager_Retirement_Retirement_cond0 ExceptionCauseRegister_get --> TransactionManager_Retirement_Retirement_cond1 Retirement_Retirement <--> ReorderBuffer_retire - TransactionManager_Retirement_cond0_Retirement <--> ReorderBuffer_retire + TransactionManager_Retirement_Retirement_cond0 <--> ReorderBuffer_retire TransactionManager_Retirement_Retirement_cond1 <--> ReorderBuffer_retire Retirement_Retirement <--> LatencyMeasurer1__stop - TransactionManager_Retirement_cond0_Retirement <--> LatencyMeasurer1__stop + TransactionManager_Retirement_Retirement_cond0 <--> LatencyMeasurer1__stop TransactionManager_Retirement_Retirement_cond1 <--> LatencyMeasurer1__stop FIFO3_read --> Retirement_Retirement - FIFO3_read --> TransactionManager_Retirement_cond0_Retirement + FIFO3_read --> TransactionManager_Retirement_Retirement_cond0 FIFO3_read --> TransactionManager_Retirement_Retirement_cond1 Retirement_Retirement --> HwExpHistogram1__add - TransactionManager_Retirement_cond0_Retirement --> HwExpHistogram1__add + TransactionManager_Retirement_Retirement_cond0 --> HwExpHistogram1__add TransactionManager_Retirement_Retirement_cond1 --> HwExpHistogram1__add CoreInstructionCounter_decrement --> Retirement_Retirement - CoreInstructionCounter_decrement --> TransactionManager_Retirement_cond0_Retirement + CoreInstructionCounter_decrement --> TransactionManager_Retirement_Retirement_cond0 CoreInstructionCounter_decrement --> TransactionManager_Retirement_Retirement_cond1 RRAT_peek --> Retirement_Retirement RRAT_peek --> TransactionManager_Retirement_Retirement_cond1 Retirement_Retirement --> RegisterFile_free - TransactionManager_Retirement_cond0_Retirement --> RegisterFile_free + TransactionManager_Retirement_Retirement_cond0 --> RegisterFile_free TransactionManager_Retirement_Retirement_cond1 --> RegisterFile_free - CSRRegister1_read --> Retirement_Retirement4 - Retirement_Retirement4 <--> ExceptionCauseRegister_clear + CSRRegister1_read --> Retirement_Retirement3 + Retirement_Retirement3 <--> ExceptionCauseRegister_clear GenericCSRRegisters_GenericCSRRegisters <--> DoubleCounterCSR_increment CSRRegister3_read --> GenericCSRRegisters_GenericCSRRegisters GenericCSRRegisters_GenericCSRRegisters --> CSRRegister3_write @@ -737,53 +737,53 @@ CSRRegister6_read --> GenericCSRRegisters_GenericCSRRegisters GenericCSRRegisters_GenericCSRRegisters --> CSRRegister6_write AdapterTrans1_AdapterTrans_report_interrupt <--> InterruptController_report_interrupt + TransactionManager_accept_cond1_LSUDummy <--> LSURequester_accept_cond1 + WishboneMasterAdapter1_get_read_response --> TransactionManager_accept_cond1_LSUDummy + Serializer1_Serializer2 --> TransactionManager_accept_cond1_LSUDummy + BasicFifo1_read --> TransactionManager_accept_cond1_LSUDummy + BasicFifo1_read --> TransactionManager_accept_cond0_LSUDummy + WishboneMaster1_result --> TransactionManager_accept_cond1_LSUDummy + WishboneMaster1_result --> TransactionManager_accept_cond0_LSUDummy + Forwarder1_read --> TransactionManager_accept_cond1_LSUDummy + Forwarder1_read --> TransactionManager_accept_cond0_LSUDummy + TransactionManager_accept_cond1_LSUDummy <--> LSUDummy_LSUDummy2 + TransactionManager_accept_cond0_LSUDummy <--> LSUDummy_LSUDummy2 + LSURequester_accept --> TransactionManager_accept_cond1_LSUDummy + LSURequester_accept --> TransactionManager_accept_cond0_LSUDummy TransactionManager_issue_cond0_LSUDummy <--> LSURequester_issue_cond0 TransactionManager_issue_cond0_LSUDummy --> WishboneMasterAdapter1_request_write - TransactionManager_issue_cond0_LSUDummy --> Serializer1_Serializer + TransactionManager_issue_cond0_LSUDummy --> Serializer1_Serializer1 TransactionManager_issue_cond0_LSUDummy --> BasicFifo1_write - TransactionManager_LSUDummy_issue_cond1 --> BasicFifo1_write + TransactionManager_issue_cond1_LSUDummy --> BasicFifo1_write TransactionManager_issue_cond0_LSUDummy --> WishboneMaster1_request - TransactionManager_LSUDummy_issue_cond1 --> WishboneMaster1_request + TransactionManager_issue_cond1_LSUDummy --> WishboneMaster1_request TransactionManager_issue_cond0_LSUDummy <--> LSUDummy_LSUDummy1 - TransactionManager_LSUDummy_issue_cond1 <--> LSUDummy_LSUDummy1 - TransactionManager_LSUDummy_issue_cond2 <--> LSUDummy_LSUDummy1 + TransactionManager_issue_cond2_LSUDummy <--> LSUDummy_LSUDummy1 + TransactionManager_issue_cond1_LSUDummy <--> LSUDummy_LSUDummy1 TransactionManager_issue_cond0_LSUDummy --> LSURequester_issue - TransactionManager_LSUDummy_issue_cond1 --> LSURequester_issue - TransactionManager_LSUDummy_issue_cond2 --> LSURequester_issue - TransactionManager_Retirement_cond0_Retirement <--> Retirement_Retirement_cond0 - TransactionManager_Retirement_cond0_Retirement --> RRAT_commit - TransactionManager_Retirement_cond0_Retirement <--> DoubleCounterCSR2_increment - CSRRegister7_read --> TransactionManager_Retirement_cond0_Retirement - TransactionManager_Retirement_cond0_Retirement --> CSRRegister7_write - CSRRegister8_read --> TransactionManager_Retirement_cond0_Retirement - TransactionManager_Retirement_cond0_Retirement --> CSRRegister8_write - TransactionManager_Retirement_cond0_Retirement <--> HwCounter9__incr - TransactionManager_Retirement_cond0_Retirement <--> Retirement_Retirement1 - TransactionManager_Retirement_Retirement_cond1 <--> Retirement_Retirement1 - TransactionManager_Retirement_cond0_Retirement --> CSRRegister_write + TransactionManager_issue_cond2_LSUDummy --> LSURequester_issue + TransactionManager_issue_cond1_LSUDummy --> LSURequester_issue + TransactionManager_issue_cond2_LSUDummy <--> LSURequester_issue_cond2 + TransactionManager_issue_cond1_LSUDummy <--> LSURequester_issue_cond1 + TransactionManager_issue_cond1_LSUDummy --> WishboneMasterAdapter1_request_read + TransactionManager_issue_cond1_LSUDummy --> Serializer1_Serializer + TransactionManager_Retirement_Retirement_cond0 <--> Retirement_Retirement2 + TransactionManager_Retirement_Retirement_cond1 <--> Retirement_Retirement2 + TransactionManager_Retirement_Retirement_cond0 --> CSRRegister_write TransactionManager_Retirement_Retirement_cond1 --> CSRRegister_write - TransactionManager_Retirement_cond0_Retirement --> CSRRegister2_write + TransactionManager_Retirement_Retirement_cond0 --> CSRRegister2_write TransactionManager_Retirement_Retirement_cond1 --> CSRRegister2_write - TransactionManager_Retirement_cond0_Retirement <--> InterruptController_entry + TransactionManager_Retirement_Retirement_cond0 <--> InterruptController_entry TransactionManager_Retirement_Retirement_cond1 <--> InterruptController_entry + TransactionManager_Retirement_Retirement_cond0 <--> Retirement_Retirement_cond0 + TransactionManager_Retirement_Retirement_cond0 --> RRAT_commit + TransactionManager_Retirement_Retirement_cond0 <--> DoubleCounterCSR2_increment + CSRRegister7_read --> TransactionManager_Retirement_Retirement_cond0 + TransactionManager_Retirement_Retirement_cond0 --> CSRRegister7_write + CSRRegister8_read --> TransactionManager_Retirement_Retirement_cond0 + TransactionManager_Retirement_Retirement_cond0 --> CSRRegister8_write + TransactionManager_Retirement_Retirement_cond0 <--> HwCounter9__incr + TransactionManager_accept_cond0_LSUDummy <--> LSURequester_accept_cond0 + WishboneMasterAdapter1_get_write_response --> TransactionManager_accept_cond0_LSUDummy + Serializer1_Serializer3 --> TransactionManager_accept_cond0_LSUDummy TransactionManager_Retirement_Retirement_cond1 <--> Retirement_Retirement_cond1 - TransactionManager_LSUDummy_issue_cond1 <--> LSURequester_issue_cond1 - TransactionManager_LSUDummy_issue_cond1 --> WishboneMasterAdapter1_request_read - TransactionManager_LSUDummy_issue_cond1 --> Serializer1_Serializer3 - TransactionManager_LSUDummy_accept_cond0 <--> LSUDummy_LSUDummy2 - TransactionManager_LSUDummy_accept_cond1 <--> LSUDummy_LSUDummy2 - LSURequester_accept --> TransactionManager_LSUDummy_accept_cond0 - LSURequester_accept --> TransactionManager_LSUDummy_accept_cond1 - TransactionManager_LSUDummy_accept_cond0 <--> LSURequester_accept_cond0 - WishboneMasterAdapter1_get_write_response --> TransactionManager_LSUDummy_accept_cond0 - Serializer1_Serializer1 --> TransactionManager_LSUDummy_accept_cond0 - BasicFifo1_read --> TransactionManager_LSUDummy_accept_cond0 - BasicFifo1_read --> TransactionManager_LSUDummy_accept_cond1 - WishboneMaster1_result --> TransactionManager_LSUDummy_accept_cond0 - WishboneMaster1_result --> TransactionManager_LSUDummy_accept_cond1 - Forwarder1_read --> TransactionManager_LSUDummy_accept_cond0 - Forwarder1_read --> TransactionManager_LSUDummy_accept_cond1 - TransactionManager_LSUDummy_issue_cond2 <--> LSURequester_issue_cond2 - TransactionManager_LSUDummy_accept_cond1 <--> LSURequester_accept_cond1 - WishboneMasterAdapter1_get_read_response --> TransactionManager_LSUDummy_accept_cond1 - Serializer1_Serializer2 --> TransactionManager_LSUDummy_accept_cond1 diff --git a/api.html b/api.html index 1ec2633bd..8ab3aed4b 100644 --- a/api.html +++ b/api.html @@ -259,7 +259,7 @@

transactron

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/assumptions.html b/assumptions.html index 5d9fa255d..46da0f858 100644 --- a/assumptions.html +++ b/assumptions.html @@ -104,7 +104,7 @@

List of assumptions made during development

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/auto_graph.html b/auto_graph.html index 8052d5f8d..bd241f8d2 100644 --- a/auto_graph.html +++ b/auto_graph.html @@ -86,12 +86,12 @@ Core_DiscardBranchVerify["DiscardBranchVerify"] Core_InitFreeRFFifo["InitFreeRFFifo"] subgraph WishboneMaster["wb_master_instr WishboneMaster"] - WishboneMaster_WishboneMaster["WishboneMaster"] - WishboneMaster_request["request"] WishboneMaster_result["result"] + WishboneMaster_request["request"] + WishboneMaster_WishboneMaster["WishboneMaster"] subgraph Forwarder["result Forwarder"] - Forwarder_read["read"] Forwarder_write["write"] + Forwarder_read["read"] end end subgraph WishboneMaster1["wb_master_data WishboneMaster"] @@ -104,40 +104,40 @@ end end subgraph WishboneMasterAdapter["bus_master_instr_adapter WishboneMasterAdapter"] - WishboneMasterAdapter_request_read["request_read"] WishboneMasterAdapter_get_read_response["get_read_response"] + WishboneMasterAdapter_request_read["request_read"] subgraph Serializer["bus_serializer Serializer"] Serializer_Serializer["Serializer"] Serializer_Serializer1["Serializer"] subgraph BasicFifo["pending_requests BasicFifo"] - BasicFifo_read["read"] BasicFifo_write["write"] + BasicFifo_read["read"] end end end subgraph WishboneMasterAdapter1["bus_master_data_adapter WishboneMasterAdapter"] + WishboneMasterAdapter1_request_read["request_read"] WishboneMasterAdapter1_request_write["request_write"] WishboneMasterAdapter1_get_read_response["get_read_response"] WishboneMasterAdapter1_get_write_response["get_write_response"] - WishboneMasterAdapter1_request_read["request_read"] subgraph Serializer1["bus_serializer Serializer"] Serializer1_Serializer["Serializer"] Serializer1_Serializer1["Serializer"] Serializer1_Serializer2["Serializer"] Serializer1_Serializer3["Serializer"] subgraph BasicFifo1["pending_requests BasicFifo"] - BasicFifo1_write["write"] BasicFifo1_read["read"] + BasicFifo1_write["write"] end end end subgraph CoreInstructionCounter["core_counter CoreInstructionCounter"] - CoreInstructionCounter_increment["increment"] CoreInstructionCounter_decrement["decrement"] + CoreInstructionCounter_increment["increment"] end subgraph FIFO["fifo_fetch FIFO"] - FIFO_read["read"] FIFO_write["write"] + FIFO_read["read"] end subgraph MethodMap["core_counter_increment_discard_map MethodMap"] MethodMap_method["method"] @@ -146,14 +146,15 @@ MethodProduct_method["method"] end subgraph BasicFifo2["free_rf_fifo BasicFifo"] - BasicFifo2_read["read"] BasicFifo2_write["write"] + BasicFifo2_read["read"] end subgraph SimpleCommonBusCacheRefiller["icache_refiller SimpleCommonBusCacheRefiller"] - SimpleCommonBusCacheRefiller_start_refill["start_refill"] - SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller["SimpleCommonBusCacheRefiller"] SimpleCommonBusCacheRefiller_accept_refill["accept_refill"] - subgraph Forwarder2["address_fwd Forwarder"] + SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller["SimpleCommonBusCacheRefiller"] + SimpleCommonBusCacheRefiller_start_refill["start_refill"] + SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1["SimpleCommonBusCacheRefiller"] + subgraph Forwarder2["resp_fwd Forwarder"] Forwarder2_read["read"] Forwarder2_write["write"] end @@ -161,10 +162,10 @@ subgraph ICache["icache ICache"] ICache_ICache["ICache"] ICache_ICache1["ICache"] - ICache_ICache2["ICache"] ICache_accept_res["accept_res"] - ICache_ICache3["ICache"] ICache_issue_req["issue_req"] + ICache_ICache2["ICache"] + ICache_ICache3["ICache"] subgraph HwCounter["perf_loads HwCounter"] HwCounter__incr["_incr"] end @@ -181,8 +182,8 @@ HwCounter4__incr["_incr"] end subgraph LatencyMeasurer["req_latency LatencyMeasurer"] - LatencyMeasurer__start["_start"] LatencyMeasurer__stop["_stop"] + LatencyMeasurer__start["_start"] subgraph HwExpHistogram["histogram HwExpHistogram"] HwExpHistogram__add["_add"] end @@ -196,16 +197,16 @@ FIFO2_read["read"] end subgraph Forwarder3["res_fwd Forwarder"] - Forwarder3_write["write"] Forwarder3_read["read"] + Forwarder3_write["write"] end end subgraph FRAT["FRAT FRAT"] FRAT_rename["rename"] end subgraph RRAT["RRAT RRAT"] - RRAT_peek["peek"] RRAT_commit["commit"] + RRAT_peek["peek"] end subgraph RegisterFile["RF RegisterFile"] RegisterFile_read1["read1"] @@ -214,14 +215,14 @@ RegisterFile_free["free"] end subgraph ReorderBuffer["ROB ReorderBuffer"] + ReorderBuffer_put["put"] + ReorderBuffer_get_indices["get_indices"] ReorderBuffer_mark_done["mark_done"] ReorderBuffer_peek["peek"] ReorderBuffer_retire["retire"] - ReorderBuffer_put["put"] - ReorderBuffer_get_indices["get_indices"] subgraph LatencyMeasurer1["perf_rob_wait_time LatencyMeasurer"] - LatencyMeasurer1__start["_start"] LatencyMeasurer1__stop["_stop"] + LatencyMeasurer1__start["_start"] subgraph HwExpHistogram1["histogram HwExpHistogram"] HwExpHistogram1__add["_add"] end @@ -233,8 +234,8 @@ end subgraph Fetch["fetch Fetch"] Fetch_Fetch["Fetch"] - Fetch_Fetch1["Fetch"] Fetch_resume["resume"] + Fetch_Fetch1["Fetch"] Fetch_stall_exception["stall_exception"] subgraph BasicFifo3["fetch_target_queue BasicFifo"] BasicFifo3_read["read"] @@ -242,12 +243,12 @@ end end subgraph ExceptionCauseRegister["exception_cause_register ExceptionCauseRegister"] + ExceptionCauseRegister_report["report"] ExceptionCauseRegister_get["get"] ExceptionCauseRegister_clear["clear"] - ExceptionCauseRegister_report["report"] subgraph BasicFifo4["fu_report_fifo BasicFifo"] - BasicFifo4_read["read"] BasicFifo4_write["write"] + BasicFifo4_read["read"] end subgraph ConnectTrans["report_connector ConnectTrans"] ConnectTrans_ConnectTrans["ConnectTrans"] @@ -257,8 +258,8 @@ subgraph Collector["result_collector Collector"] Collector_method["method"] subgraph Forwarder4["forwarder Forwarder"] - Forwarder4_read["read"] Forwarder4_write["write"] + Forwarder4_read["read"] end subgraph ManyToOneConnectTrans["connect ManyToOneConnectTrans"] subgraph ConnectTrans1["ManyToOneConnectTrans_input_0 ConnectTrans"] @@ -276,27 +277,27 @@ MethodProduct1_method["method"] end subgraph RSFuncBlock["rs_block_0 RSFuncBlock"] - RSFuncBlock_insert["insert"] RSFuncBlock_select["select"] RSFuncBlock_update["update"] RSFuncBlock_get_result["get_result"] + RSFuncBlock_insert["insert"] subgraph RS["rs RS"] - RS_update["update"] RS_RS["RS"] + RS_update["update"] + RS_take["take"] RS_RS1["RS"] - RS_select["select"] RS_RS2["RS"] + RS_select["select"] RS_RS3["RS"] - RS_take["take"] - RS_insert["insert"] RS_RS4["RS"] + RS_insert["insert"] end subgraph AluFuncUnit["func_unit_0 AluFuncUnit"] AluFuncUnit_accept["accept"] AluFuncUnit_issue["issue"] subgraph FIFO4["fifo FIFO"] - FIFO4_read["read"] FIFO4_write["write"] + FIFO4_read["read"] end end subgraph WakeupSelect["wakeup_select_0 WakeupSelect"] @@ -330,28 +331,28 @@ HwCounter7__incr["_incr"] end subgraph FIFO7["fifo_res FIFO"] - FIFO7_write["write"] FIFO7_read["read"] + FIFO7_write["write"] end end subgraph WakeupSelect2["wakeup_select_2 WakeupSelect"] WakeupSelect2_WakeupSelect["WakeupSelect"] end subgraph ExceptionFuncUnit["func_unit_3 ExceptionFuncUnit"] - ExceptionFuncUnit_issue["issue"] ExceptionFuncUnit_accept["accept"] + ExceptionFuncUnit_issue["issue"] subgraph FIFO8["fifo FIFO"] - FIFO8_write["write"] FIFO8_read["read"] + FIFO8_write["write"] end end subgraph WakeupSelect3["wakeup_select_3 WakeupSelect"] WakeupSelect3_WakeupSelect["WakeupSelect"] end subgraph PrivilegedFuncUnit["func_unit_4 PrivilegedFuncUnit"] + PrivilegedFuncUnit_issue["issue"] PrivilegedFuncUnit_accept["accept"] PrivilegedFuncUnit_precommit["precommit"] - PrivilegedFuncUnit_issue["issue"] subgraph BasicFifo5["fetch_resume_fifo BasicFifo"] BasicFifo5_write["write"] BasicFifo5_read["read"] @@ -386,36 +387,36 @@ end end subgraph LSUDummy["rs_block_1 LSUDummy"] - LSUDummy_select["select"] - LSUDummy_update["update"] LSUDummy_LSUDummy["LSUDummy"] LSUDummy_precommit["precommit"] LSUDummy_get_result["get_result"] LSUDummy_LSUDummy1["LSUDummy"] - LSUDummy_LSUDummy2["LSUDummy"] LSUDummy_insert["insert"] + LSUDummy_LSUDummy2["LSUDummy"] + LSUDummy_select["select"] + LSUDummy_update["update"] subgraph Forwarder6["forwarder Forwarder"] - Forwarder6_read["read"] Forwarder6_write["write"] + Forwarder6_read["read"] end subgraph LSURequester["requester LSURequester"] - LSURequester_issue["issue"] - LSURequester_accept_cond0["accept_cond0"] - LSURequester_issue_cond1["issue_cond1"] - LSURequester_accept["accept"] - LSURequester_issue_cond2["issue_cond2"] LSURequester_accept_cond1["accept_cond1"] LSURequester_issue_cond0["issue_cond0"] + LSURequester_accept_cond0["accept_cond0"] + LSURequester_issue_cond2["issue_cond2"] + LSURequester_issue["issue"] + LSURequester_accept["accept"] + LSURequester_issue_cond1["issue_cond1"] end end subgraph CSRUnit["rs_block_2 CSRUnit"] - CSRUnit_insert["insert"] - CSRUnit_CSRUnit["CSRUnit"] - CSRUnit_fetch_resume["fetch_resume"] CSRUnit_select["select"] CSRUnit_update["update"] CSRUnit_precommit["precommit"] CSRUnit_get_result["get_result"] + CSRUnit_CSRUnit["CSRUnit"] + CSRUnit_fetch_resume["fetch_resume"] + CSRUnit_insert["insert"] end subgraph MethodTryProduct["InstructionPrecommitKey_unifier MethodTryProduct"] MethodTryProduct_MethodTryProduct["MethodTryProduct"] @@ -426,8 +427,8 @@ subgraph Collector2["FetchResumeKey_unifier Collector"] Collector2_method["method"] subgraph Forwarder7["forwarder Forwarder"] - Forwarder7_write["write"] Forwarder7_read["read"] + Forwarder7_write["write"] end subgraph ManyToOneConnectTrans2["connect ManyToOneConnectTrans"] subgraph ConnectTrans9["ManyToOneConnectTrans_input_0 ConnectTrans"] @@ -443,9 +444,9 @@ ResultAnnouncement_ResultAnnouncement["ResultAnnouncement"] end subgraph InterruptController["interrupt_controller InterruptController"] - InterruptController_mret["mret"] InterruptController_report_interrupt["report_interrupt"] InterruptController_entry["entry"] + InterruptController_mret["mret"] end subgraph GenericCSRRegisters["csr_generic GenericCSRRegisters"] GenericCSRRegisters_GenericCSRRegisters["GenericCSRRegisters"] @@ -456,23 +457,23 @@ CSRRegister_write["write"] end subgraph CSRRegister1["mtvec CSRRegister"] - CSRRegister1__fu_write["_fu_write"] CSRRegister1__fu_read["_fu_read"] + CSRRegister1__fu_write["_fu_write"] CSRRegister1_read["read"] end subgraph CSRRegister2["mepc CSRRegister"] - CSRRegister2_write["write"] - CSRRegister2__fu_write["_fu_write"] - CSRRegister2__fu_read["_fu_read"] CSRRegister2_read["read"] + CSRRegister2__fu_read["_fu_read"] + CSRRegister2__fu_write["_fu_write"] + CSRRegister2_write["write"] end end subgraph DoubleCounterCSR["csr_cycle DoubleCounterCSR"] DoubleCounterCSR_increment["increment"] subgraph CSRRegister3["register_low CSRRegister"] - CSRRegister3__fu_read["_fu_read"] CSRRegister3_read["read"] CSRRegister3_write["write"] + CSRRegister3__fu_read["_fu_read"] end subgraph CSRRegister4["register_high CSRRegister"] CSRRegister4__fu_read["_fu_read"] @@ -506,22 +507,22 @@ end subgraph Scheduler["scheduler Scheduler"] subgraph FIFO10["alloc_rename_buf FIFO"] - FIFO10_read["read"] FIFO10_write["write"] + FIFO10_read["read"] end subgraph RegAllocation["reg_alloc RegAllocation"] RegAllocation_RegAllocation["RegAllocation"] end subgraph FIFO11["rename_out_buf FIFO"] - FIFO11_write["write"] FIFO11_read["read"] + FIFO11_write["write"] end subgraph Renaming["renaming Renaming"] Renaming_Renaming["Renaming"] end subgraph FIFO12["reg_alloc_out_buf FIFO"] - FIFO12_read["read"] FIFO12_write["write"] + FIFO12_read["read"] end subgraph ROBAllocation["rob_alloc ROBAllocation"] ROBAllocation_ROBAllocation["ROBAllocation"] @@ -548,20 +549,20 @@ ConnectTrans11_ConnectTrans["ConnectTrans"] end subgraph Retirement["retirement Retirement"] - Retirement_Retirement_cond0["Retirement_cond0"] - Retirement_core_state["core_state"] Retirement_Retirement["Retirement"] Retirement_Retirement1["Retirement"] + Retirement_core_state["core_state"] + Retirement_Retirement_cond0["Retirement_cond0"] + Retirement_Retirement_cond1["Retirement_cond1"] Retirement_Retirement2["Retirement"] Retirement_Retirement3["Retirement"] - Retirement_Retirement_cond1["Retirement_cond1"] Retirement_Retirement4["Retirement"] subgraph DoubleCounterCSR2["instret_csr DoubleCounterCSR"] DoubleCounterCSR2_increment["increment"] subgraph CSRRegister7["register_low CSRRegister"] - CSRRegister7__fu_read["_fu_read"] CSRRegister7_read["read"] CSRRegister7_write["write"] + CSRRegister7__fu_read["_fu_read"] end subgraph CSRRegister8["register_high CSRRegister"] CSRRegister8_read["read"] @@ -586,61 +587,60 @@ end end subgraph TransactionManager["transactionManager TransactionManager"] - TransactionManager_Retirement_cond0_Retirement["Retirement_cond0_Retirement"] - TransactionManager_LSUDummy_accept_cond0["LSUDummy_accept_cond0"] - TransactionManager_issue_cond0_LSUDummy["issue_cond0_LSUDummy"] - TransactionManager_LSUDummy_issue_cond2["LSUDummy_issue_cond2"] + TransactionManager_issue_cond2_LSUDummy["issue_cond2_LSUDummy"] + TransactionManager_accept_cond1_LSUDummy["accept_cond1_LSUDummy"] + TransactionManager_issue_cond1_LSUDummy["issue_cond1_LSUDummy"] + TransactionManager_accept_cond0_LSUDummy["accept_cond0_LSUDummy"] TransactionManager_Retirement_Retirement_cond1["Retirement_Retirement_cond1"] - TransactionManager_LSUDummy_issue_cond1["LSUDummy_issue_cond1"] - TransactionManager_LSUDummy_accept_cond1["LSUDummy_accept_cond1"] + TransactionManager_issue_cond0_LSUDummy["issue_cond0_LSUDummy"] + TransactionManager_Retirement_Retirement_cond0["Retirement_Retirement_cond0"] end end Core_InitFreeRFFifo --> BasicFifo2_write Retirement_Retirement --> BasicFifo2_write -TransactionManager_Retirement_cond0_Retirement --> BasicFifo2_write +TransactionManager_Retirement_Retirement_cond0 --> BasicFifo2_write TransactionManager_Retirement_Retirement_cond1 --> BasicFifo2_write FIFO6_read --> Core_DiscardBranchVerify WishboneMaster_WishboneMaster --> Forwarder_write WishboneMaster1_WishboneMaster --> Forwarder1_write -Forwarder2_read --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> WishboneMasterAdapter_request_read -SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> Serializer_Serializer +SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> Serializer_Serializer1 SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> BasicFifo_write SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller --> WishboneMaster_request +WishboneMasterAdapter_get_read_response --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 +Serializer_Serializer --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 +BasicFifo_read --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 +WishboneMaster_result --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 +Forwarder_read --> SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 +SimpleCommonBusCacheRefiller_SimpleCommonBusCacheRefiller1 --> Forwarder2_write ICache_ICache2 <--> HwCounter4__incr ICache_ICache1 <--> HwCounter3__incr ICache_ICache1 <--> HwCounter2__incr ICache_ICache1 <--> HwCounter1__incr ICache_ICache1 --> Forwarder3_write -ICache_ICache --> SimpleCommonBusCacheRefiller_start_refill -ICache_ICache --> Forwarder2_write -ICache_ICache3 --> Forwarder2_write -SimpleCommonBusCacheRefiller_accept_refill --> ICache_ICache3 -WishboneMasterAdapter_get_read_response --> ICache_ICache3 -Serializer_Serializer1 --> ICache_ICache3 -BasicFifo_read --> ICache_ICache3 -WishboneMaster_result --> ICache_ICache3 -Forwarder_read --> ICache_ICache3 -Fetch_Fetch1 --> ICache_issue_req -Fetch_Fetch1 <--> HwCounter__incr -Fetch_Fetch1 <--> LatencyMeasurer__start -Fetch_Fetch1 --> FIFO1_write -Fetch_Fetch1 --> FIFO2_write -Fetch_Fetch1 --> BasicFifo3_write -BasicFifo3_read --> Fetch_Fetch -ICache_accept_res --> Fetch_Fetch -FIFO2_read --> Fetch_Fetch -Fetch_Fetch <--> LatencyMeasurer__stop -FIFO1_read --> Fetch_Fetch -Fetch_Fetch --> HwExpHistogram__add -Forwarder3_read --> Fetch_Fetch -Fetch_Fetch --> MethodProduct_method +ICache_ICache3 --> SimpleCommonBusCacheRefiller_start_refill +SimpleCommonBusCacheRefiller_accept_refill --> ICache_ICache +Forwarder2_read --> ICache_ICache +Fetch_Fetch --> ICache_issue_req +Fetch_Fetch <--> HwCounter__incr +Fetch_Fetch <--> LatencyMeasurer__start +Fetch_Fetch --> FIFO1_write +Fetch_Fetch --> FIFO2_write +Fetch_Fetch --> BasicFifo3_write +BasicFifo3_read --> Fetch_Fetch1 +ICache_accept_res --> Fetch_Fetch1 +FIFO2_read --> Fetch_Fetch1 +Fetch_Fetch1 <--> LatencyMeasurer__stop +FIFO1_read --> Fetch_Fetch1 +Fetch_Fetch1 --> HwExpHistogram__add +Forwarder3_read --> Fetch_Fetch1 +Fetch_Fetch1 --> MethodProduct_method AdapterTrans_AdapterTrans_method --> MethodProduct_method -Fetch_Fetch --> FIFO_write +Fetch_Fetch1 --> FIFO_write AdapterTrans_AdapterTrans_method --> FIFO_write -Fetch_Fetch --> MethodMap_method +Fetch_Fetch1 --> MethodMap_method AdapterTrans_AdapterTrans_method --> MethodMap_method -Fetch_Fetch <--> CoreInstructionCounter_increment +Fetch_Fetch1 <--> CoreInstructionCounter_increment AdapterTrans_AdapterTrans_method <--> CoreInstructionCounter_increment FIFO_read --> DecodeStage_DecodeStage DecodeStage_DecodeStage <--> HwCounter8__incr @@ -658,17 +658,17 @@ ROBAllocation_ROBAllocation <--> LatencyMeasurer1__start ROBAllocation_ROBAllocation --> FIFO3_write ROBAllocation_ROBAllocation --> FIFO12_write -FIFO12_read --> RSSelection_RSSelection1 -RSSelection_RSSelection1 --> Forwarder8_write +FIFO12_read --> RSSelection_RSSelection2 +RSSelection_RSSelection2 --> Forwarder8_write +Forwarder8_read --> RSSelection_RSSelection1 Forwarder8_read --> RSSelection_RSSelection3 -Forwarder8_read --> RSSelection_RSSelection2 Forwarder8_read --> RSSelection_RSSelection -RSFuncBlock_select --> RSSelection_RSSelection3 -RS_select --> RSSelection_RSSelection3 +RSFuncBlock_select --> RSSelection_RSSelection1 +RS_select --> RSSelection_RSSelection1 +RSSelection_RSSelection1 --> FIFO13_write RSSelection_RSSelection3 --> FIFO13_write -RSSelection_RSSelection2 --> FIFO13_write RSSelection_RSSelection --> FIFO13_write -RSSelection_RSSelection2 <--> LSUDummy_select +RSSelection_RSSelection3 <--> LSUDummy_select RSSelection_RSSelection <--> CSRUnit_select FIFO13_read --> RSInsertion_RSInsertion RegisterFile_read1 --> RSInsertion_RSInsertion @@ -685,7 +685,7 @@ Collector2_method --> ConnectTrans11_ConnectTrans Forwarder7_read --> ConnectTrans11_ConnectTrans ConnectTrans11_ConnectTrans --> Fetch_resume -Retirement_Retirement4 --> Fetch_resume +Retirement_Retirement3 --> Fetch_resume Collector_method --> ResultAnnouncement_ResultAnnouncement Forwarder4_read --> ResultAnnouncement_ResultAnnouncement ResultAnnouncement_ResultAnnouncement --> ReorderBuffer_mark_done @@ -695,7 +695,7 @@ ResultAnnouncement_ResultAnnouncement --> RS_update ResultAnnouncement_ResultAnnouncement --> LSUDummy_update ResultAnnouncement_ResultAnnouncement --> CSRUnit_update -RS_RS2 --> WakeupSelect_WakeupSelect +RS_RS3 --> WakeupSelect_WakeupSelect RS_take --> WakeupSelect_WakeupSelect RS_take --> WakeupSelect1_WakeupSelect RS_take --> WakeupSelect2_WakeupSelect @@ -706,7 +706,7 @@ RS_RS4 --> WakeupSelect1_WakeupSelect WakeupSelect1_WakeupSelect --> ShiftFuncUnit_issue WakeupSelect1_WakeupSelect --> FIFO5_write -RS_RS3 --> WakeupSelect2_WakeupSelect +RS_RS2 --> WakeupSelect2_WakeupSelect WakeupSelect2_WakeupSelect --> JumpBranchFuncUnit_issue WakeupSelect2_WakeupSelect <--> HwCounter5__incr WakeupSelect2_WakeupSelect <--> HwCounter6__incr @@ -718,10 +718,10 @@ ConnectTrans3_ConnectTrans --> BasicFifo4_write WakeupSelect2_WakeupSelect --> FIFO7_write WakeupSelect2_WakeupSelect --> FIFO6_write -RS_RS --> WakeupSelect3_WakeupSelect +RS_RS1 --> WakeupSelect3_WakeupSelect WakeupSelect3_WakeupSelect --> ExceptionFuncUnit_issue WakeupSelect3_WakeupSelect --> FIFO8_write -RS_RS1 --> WakeupSelect4_WakeupSelect +RS_RS --> WakeupSelect4_WakeupSelect WakeupSelect4_WakeupSelect --> PrivilegedFuncUnit_issue ConnectTrans4_ConnectTrans --> Forwarder5_write ConnectTrans5_ConnectTrans --> Forwarder5_write @@ -740,11 +740,11 @@ CSRRegister2_read --> ConnectTrans8_ConnectTrans ConnectTrans8_ConnectTrans --> BasicFifo5_write LSUDummy_LSUDummy --> Forwarder6_write +TransactionManager_accept_cond1_LSUDummy --> Forwarder6_write TransactionManager_issue_cond0_LSUDummy --> Forwarder6_write -TransactionManager_LSUDummy_issue_cond1 --> Forwarder6_write -TransactionManager_LSUDummy_accept_cond0 --> Forwarder6_write -TransactionManager_LSUDummy_issue_cond2 --> Forwarder6_write -TransactionManager_LSUDummy_accept_cond1 --> Forwarder6_write +TransactionManager_issue_cond2_LSUDummy --> Forwarder6_write +TransactionManager_issue_cond1_LSUDummy --> Forwarder6_write +TransactionManager_accept_cond0_LSUDummy --> Forwarder6_write CSRRegister__fu_read --> CSRUnit_CSRUnit CSRUnit_CSRUnit --> CSRRegister__fu_write CSRRegister1__fu_read --> CSRUnit_CSRUnit @@ -774,37 +774,37 @@ ConnectTrans10_ConnectTrans --> Forwarder7_write BasicFifo5_read --> ConnectTrans9_ConnectTrans CSRUnit_fetch_resume --> ConnectTrans10_ConnectTrans -ReorderBuffer_peek --> Retirement_Retirement2 -ReorderBuffer_peek --> Retirement_Retirement3 +ReorderBuffer_peek --> Retirement_Retirement4 +ReorderBuffer_peek --> Retirement_Retirement1 ReorderBuffer_peek --> Retirement_Retirement -ReorderBuffer_peek --> TransactionManager_Retirement_cond0_Retirement +ReorderBuffer_peek --> TransactionManager_Retirement_Retirement_cond0 ReorderBuffer_peek --> TransactionManager_Retirement_Retirement_cond1 -Retirement_Retirement2 --> MethodTryProduct_method -ExceptionCauseRegister_get --> Retirement_Retirement3 -ExceptionCauseRegister_get --> TransactionManager_Retirement_cond0_Retirement +Retirement_Retirement4 --> MethodTryProduct_method +ExceptionCauseRegister_get --> Retirement_Retirement1 +ExceptionCauseRegister_get --> TransactionManager_Retirement_Retirement_cond0 ExceptionCauseRegister_get --> TransactionManager_Retirement_Retirement_cond1 Retirement_Retirement <--> ReorderBuffer_retire -TransactionManager_Retirement_cond0_Retirement <--> ReorderBuffer_retire +TransactionManager_Retirement_Retirement_cond0 <--> ReorderBuffer_retire TransactionManager_Retirement_Retirement_cond1 <--> ReorderBuffer_retire Retirement_Retirement <--> LatencyMeasurer1__stop -TransactionManager_Retirement_cond0_Retirement <--> LatencyMeasurer1__stop +TransactionManager_Retirement_Retirement_cond0 <--> LatencyMeasurer1__stop TransactionManager_Retirement_Retirement_cond1 <--> LatencyMeasurer1__stop FIFO3_read --> Retirement_Retirement -FIFO3_read --> TransactionManager_Retirement_cond0_Retirement +FIFO3_read --> TransactionManager_Retirement_Retirement_cond0 FIFO3_read --> TransactionManager_Retirement_Retirement_cond1 Retirement_Retirement --> HwExpHistogram1__add -TransactionManager_Retirement_cond0_Retirement --> HwExpHistogram1__add +TransactionManager_Retirement_Retirement_cond0 --> HwExpHistogram1__add TransactionManager_Retirement_Retirement_cond1 --> HwExpHistogram1__add CoreInstructionCounter_decrement --> Retirement_Retirement -CoreInstructionCounter_decrement --> TransactionManager_Retirement_cond0_Retirement +CoreInstructionCounter_decrement --> TransactionManager_Retirement_Retirement_cond0 CoreInstructionCounter_decrement --> TransactionManager_Retirement_Retirement_cond1 RRAT_peek --> Retirement_Retirement RRAT_peek --> TransactionManager_Retirement_Retirement_cond1 Retirement_Retirement --> RegisterFile_free -TransactionManager_Retirement_cond0_Retirement --> RegisterFile_free +TransactionManager_Retirement_Retirement_cond0 --> RegisterFile_free TransactionManager_Retirement_Retirement_cond1 --> RegisterFile_free -CSRRegister1_read --> Retirement_Retirement4 -Retirement_Retirement4 <--> ExceptionCauseRegister_clear +CSRRegister1_read --> Retirement_Retirement3 +Retirement_Retirement3 <--> ExceptionCauseRegister_clear GenericCSRRegisters_GenericCSRRegisters <--> DoubleCounterCSR_increment CSRRegister3_read --> GenericCSRRegisters_GenericCSRRegisters GenericCSRRegisters_GenericCSRRegisters --> CSRRegister3_write @@ -816,56 +816,56 @@ CSRRegister6_read --> GenericCSRRegisters_GenericCSRRegisters GenericCSRRegisters_GenericCSRRegisters --> CSRRegister6_write AdapterTrans1_AdapterTrans_report_interrupt <--> InterruptController_report_interrupt +TransactionManager_accept_cond1_LSUDummy <--> LSURequester_accept_cond1 +WishboneMasterAdapter1_get_read_response --> TransactionManager_accept_cond1_LSUDummy +Serializer1_Serializer2 --> TransactionManager_accept_cond1_LSUDummy +BasicFifo1_read --> TransactionManager_accept_cond1_LSUDummy +BasicFifo1_read --> TransactionManager_accept_cond0_LSUDummy +WishboneMaster1_result --> TransactionManager_accept_cond1_LSUDummy +WishboneMaster1_result --> TransactionManager_accept_cond0_LSUDummy +Forwarder1_read --> TransactionManager_accept_cond1_LSUDummy +Forwarder1_read --> TransactionManager_accept_cond0_LSUDummy +TransactionManager_accept_cond1_LSUDummy <--> LSUDummy_LSUDummy2 +TransactionManager_accept_cond0_LSUDummy <--> LSUDummy_LSUDummy2 +LSURequester_accept --> TransactionManager_accept_cond1_LSUDummy +LSURequester_accept --> TransactionManager_accept_cond0_LSUDummy TransactionManager_issue_cond0_LSUDummy <--> LSURequester_issue_cond0 TransactionManager_issue_cond0_LSUDummy --> WishboneMasterAdapter1_request_write -TransactionManager_issue_cond0_LSUDummy --> Serializer1_Serializer +TransactionManager_issue_cond0_LSUDummy --> Serializer1_Serializer1 TransactionManager_issue_cond0_LSUDummy --> BasicFifo1_write -TransactionManager_LSUDummy_issue_cond1 --> BasicFifo1_write +TransactionManager_issue_cond1_LSUDummy --> BasicFifo1_write TransactionManager_issue_cond0_LSUDummy --> WishboneMaster1_request -TransactionManager_LSUDummy_issue_cond1 --> WishboneMaster1_request +TransactionManager_issue_cond1_LSUDummy --> WishboneMaster1_request TransactionManager_issue_cond0_LSUDummy <--> LSUDummy_LSUDummy1 -TransactionManager_LSUDummy_issue_cond1 <--> LSUDummy_LSUDummy1 -TransactionManager_LSUDummy_issue_cond2 <--> LSUDummy_LSUDummy1 +TransactionManager_issue_cond2_LSUDummy <--> LSUDummy_LSUDummy1 +TransactionManager_issue_cond1_LSUDummy <--> LSUDummy_LSUDummy1 TransactionManager_issue_cond0_LSUDummy --> LSURequester_issue -TransactionManager_LSUDummy_issue_cond1 --> LSURequester_issue -TransactionManager_LSUDummy_issue_cond2 --> LSURequester_issue -TransactionManager_Retirement_cond0_Retirement <--> Retirement_Retirement_cond0 -TransactionManager_Retirement_cond0_Retirement --> RRAT_commit -TransactionManager_Retirement_cond0_Retirement <--> DoubleCounterCSR2_increment -CSRRegister7_read --> TransactionManager_Retirement_cond0_Retirement -TransactionManager_Retirement_cond0_Retirement --> CSRRegister7_write -CSRRegister8_read --> TransactionManager_Retirement_cond0_Retirement -TransactionManager_Retirement_cond0_Retirement --> CSRRegister8_write -TransactionManager_Retirement_cond0_Retirement <--> HwCounter9__incr -TransactionManager_Retirement_cond0_Retirement <--> Retirement_Retirement1 -TransactionManager_Retirement_Retirement_cond1 <--> Retirement_Retirement1 -TransactionManager_Retirement_cond0_Retirement --> CSRRegister_write +TransactionManager_issue_cond2_LSUDummy --> LSURequester_issue +TransactionManager_issue_cond1_LSUDummy --> LSURequester_issue +TransactionManager_issue_cond2_LSUDummy <--> LSURequester_issue_cond2 +TransactionManager_issue_cond1_LSUDummy <--> LSURequester_issue_cond1 +TransactionManager_issue_cond1_LSUDummy --> WishboneMasterAdapter1_request_read +TransactionManager_issue_cond1_LSUDummy --> Serializer1_Serializer +TransactionManager_Retirement_Retirement_cond0 <--> Retirement_Retirement2 +TransactionManager_Retirement_Retirement_cond1 <--> Retirement_Retirement2 +TransactionManager_Retirement_Retirement_cond0 --> CSRRegister_write TransactionManager_Retirement_Retirement_cond1 --> CSRRegister_write -TransactionManager_Retirement_cond0_Retirement --> CSRRegister2_write +TransactionManager_Retirement_Retirement_cond0 --> CSRRegister2_write TransactionManager_Retirement_Retirement_cond1 --> CSRRegister2_write -TransactionManager_Retirement_cond0_Retirement <--> InterruptController_entry +TransactionManager_Retirement_Retirement_cond0 <--> InterruptController_entry TransactionManager_Retirement_Retirement_cond1 <--> InterruptController_entry +TransactionManager_Retirement_Retirement_cond0 <--> Retirement_Retirement_cond0 +TransactionManager_Retirement_Retirement_cond0 --> RRAT_commit +TransactionManager_Retirement_Retirement_cond0 <--> DoubleCounterCSR2_increment +CSRRegister7_read --> TransactionManager_Retirement_Retirement_cond0 +TransactionManager_Retirement_Retirement_cond0 --> CSRRegister7_write +CSRRegister8_read --> TransactionManager_Retirement_Retirement_cond0 +TransactionManager_Retirement_Retirement_cond0 --> CSRRegister8_write +TransactionManager_Retirement_Retirement_cond0 <--> HwCounter9__incr +TransactionManager_accept_cond0_LSUDummy <--> LSURequester_accept_cond0 +WishboneMasterAdapter1_get_write_response --> TransactionManager_accept_cond0_LSUDummy +Serializer1_Serializer3 --> TransactionManager_accept_cond0_LSUDummy TransactionManager_Retirement_Retirement_cond1 <--> Retirement_Retirement_cond1 -TransactionManager_LSUDummy_issue_cond1 <--> LSURequester_issue_cond1 -TransactionManager_LSUDummy_issue_cond1 --> WishboneMasterAdapter1_request_read -TransactionManager_LSUDummy_issue_cond1 --> Serializer1_Serializer3 -TransactionManager_LSUDummy_accept_cond0 <--> LSUDummy_LSUDummy2 -TransactionManager_LSUDummy_accept_cond1 <--> LSUDummy_LSUDummy2 -LSURequester_accept --> TransactionManager_LSUDummy_accept_cond0 -LSURequester_accept --> TransactionManager_LSUDummy_accept_cond1 -TransactionManager_LSUDummy_accept_cond0 <--> LSURequester_accept_cond0 -WishboneMasterAdapter1_get_write_response --> TransactionManager_LSUDummy_accept_cond0 -Serializer1_Serializer1 --> TransactionManager_LSUDummy_accept_cond0 -BasicFifo1_read --> TransactionManager_LSUDummy_accept_cond0 -BasicFifo1_read --> TransactionManager_LSUDummy_accept_cond1 -WishboneMaster1_result --> TransactionManager_LSUDummy_accept_cond0 -WishboneMaster1_result --> TransactionManager_LSUDummy_accept_cond1 -Forwarder1_read --> TransactionManager_LSUDummy_accept_cond0 -Forwarder1_read --> TransactionManager_LSUDummy_accept_cond1 -TransactionManager_LSUDummy_issue_cond2 <--> LSURequester_issue_cond2 -TransactionManager_LSUDummy_accept_cond1 <--> LSURequester_accept_cond1 -WishboneMasterAdapter1_get_read_response --> TransactionManager_LSUDummy_accept_cond1 -Serializer1_Serializer2 --> TransactionManager_LSUDummy_accept_cond1 @@ -876,7 +876,7 @@

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/components/icache.html b/components/icache.html index ac317507a..4a49c5544 100644 --- a/components/icache.html +++ b/components/icache.html @@ -131,7 +131,7 @@

Address mapping example

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.backend.html b/coreblocks.backend.html index 06f0df0e7..97783cc64 100644 --- a/coreblocks.backend.html +++ b/coreblocks.backend.html @@ -165,7 +165,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.cache.html b/coreblocks.cache.html index 0ac546a51..b830418b3 100644 --- a/coreblocks.cache.html +++ b/coreblocks.cache.html @@ -98,10 +98,10 @@

Submodules
__init__(layouts: ICacheLayouts, params: ICacheParameters, refiller: CacheRefillerInterface) None
@@ -192,7 +192,7 @@

Submodules
start_refillMethod

A method that is used to start a refill for a given cache line.

-
accept_refillMethod

A method that is used to accept one word from the requested cache line.

+
accept_refillMethod

A method that is used to accept one fetch block from the requested cache line.

@@ -241,7 +241,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.core_structs.html b/coreblocks.core_structs.html index 0d9a38f8d..ec3cae5c2 100644 --- a/coreblocks.core_structs.html +++ b/coreblocks.core_structs.html @@ -157,7 +157,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.frontend.decoder.html b/coreblocks.frontend.decoder.html index e7dfe04c2..0bf181124 100644 --- a/coreblocks.frontend.decoder.html +++ b/coreblocks.frontend.decoder.html @@ -1721,7 +1721,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.frontend.fetch.html b/coreblocks.frontend.fetch.html index 9a495fcb5..15d16af82 100644 --- a/coreblocks.frontend.fetch.html +++ b/coreblocks.frontend.fetch.html @@ -161,7 +161,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.frontend.html b/coreblocks.frontend.html index 95cd0b698..cc3d008ad 100644 --- a/coreblocks.frontend.html +++ b/coreblocks.frontend.html @@ -125,7 +125,7 @@

Subpackages

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.func_blocks.fu.html b/coreblocks.func_blocks.fu.html index d9d9c50f6..269d7481f 100644 --- a/coreblocks.func_blocks.fu.html +++ b/coreblocks.func_blocks.fu.html @@ -867,7 +867,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.func_blocks.fu.unsigned_multiplication.html b/coreblocks.func_blocks.fu.unsigned_multiplication.html index 257d81169..49ae16f3b 100644 --- a/coreblocks.func_blocks.fu.unsigned_multiplication.html +++ b/coreblocks.func_blocks.fu.unsigned_multiplication.html @@ -238,7 +238,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.func_blocks.html b/coreblocks.func_blocks.html index 51741f02d..30f4c48f1 100644 --- a/coreblocks.func_blocks.html +++ b/coreblocks.func_blocks.html @@ -148,7 +148,7 @@

Subpackages

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.func_blocks.interface.html b/coreblocks.func_blocks.interface.html index b48dee4c0..f3cabe485 100644 --- a/coreblocks.func_blocks.interface.html +++ b/coreblocks.func_blocks.interface.html @@ -169,7 +169,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.func_blocks.lsu.html b/coreblocks.func_blocks.lsu.html index 1b052dee5..3fe2759f1 100644 --- a/coreblocks.func_blocks.lsu.html +++ b/coreblocks.func_blocks.lsu.html @@ -248,7 +248,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.html b/coreblocks.html index b42f87fc2..db9ee097d 100644 --- a/coreblocks.html +++ b/coreblocks.html @@ -255,7 +255,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.params.html b/coreblocks.params.html index 157f79dbe..693db6b54 100644 --- a/coreblocks.params.html +++ b/coreblocks.params.html @@ -120,7 +120,9 @@

Submodules
-__init__(*, xlen: int = 32, func_units_config: ~collections.abc.Collection[~coreblocks.params.fu_params.BlockComponentParams] = (RSBlockComponent(func_units=[<coreblocks.func_blocks.fu.alu.ALUComponent object>, <coreblocks.func_blocks.fu.shift_unit.ShiftUnitComponent object>, <coreblocks.func_blocks.fu.jumpbranch.JumpComponent object>, <coreblocks.func_blocks.fu.exception.ExceptionUnitComponent object>, <coreblocks.func_blocks.fu.priv.PrivilegedUnitComponent object>], rs_entries=4), <coreblocks.func_blocks.lsu.dummyLsu.LSUBlockComponent object>, <coreblocks.func_blocks.csr.csr.CSRBlockComponent object>), compressed: bool = False, embedded: bool = False, debug_signals: bool = True, phys_regs_bits: int = 6, rob_entries_bits: int = 7, start_pc: int = 0, icache_enable: bool = True, icache_ways: int = 2, icache_sets_bits: int = 7, icache_block_size_bits: int = 5, allow_partial_extensions: bool = False, _implied_extensions: ~coreblocks.params.isa_params.Extension = Extension.None, pma: list[coreblocks.func_blocks.lsu.pma.PMARegion] = <factory>) None
+__init__(*, xlen: int = 32, func_units_config: ~collections.abc.Collection[~coreblocks.params.fu_params.BlockComponentParams] = (RSBlockComponent(func_units=[<coreblocks.func_blocks.fu.alu.ALUComponent object>, <coreblocks.func_blocks.fu.shift_unit.ShiftUnitComponent object>, <coreblocks.func_blocks.fu.jumpbranch.JumpComponent object>, <coreblocks.func_blocks.fu.exception.ExceptionUnitComponent object>, <coreblocks.func_blocks.fu.priv.PrivilegedUnitComponent object>], rs_entries=4), <coreblocks.func_blocks.lsu.dummyLsu.LSUBlockComponent object>, <coreblocks.func_blocks.csr.csr.CSRBlockComponent object>), compressed: bool = False, embedded: bool = False, debug_signals: bool = True, phys_regs_bits: int = 6, rob_entries_bits: int = 7, start_pc: int = 0, icache_enable: bool = True, icache_ways: int = 2, icache_sets_bits: int = 7, icache_line_bytes_log: int = 5, fetch_block_bytes_log: int = 2, allow_partial_extensions: bool = False, _implied_extensions: ~coreblocks.params.isa_params.Extension = Extension.None, pma: list[coreblocks.func_blocks.lsu.pma.PMARegion] = <factory>) None
@@ -157,13 +159,13 @@

Submodules -
-func_units_config: Collection[BlockComponentParams] = (RSBlockComponent(func_units=[<coreblocks.func_blocks.fu.alu.ALUComponent object>, <coreblocks.func_blocks.fu.shift_unit.ShiftUnitComponent object>, <coreblocks.func_blocks.fu.jumpbranch.JumpComponent object>, <coreblocks.func_blocks.fu.exception.ExceptionUnitComponent object>, <coreblocks.func_blocks.fu.priv.PrivilegedUnitComponent object>], rs_entries=4), <coreblocks.func_blocks.lsu.dummyLsu.LSUBlockComponent object>, <coreblocks.func_blocks.csr.csr.CSRBlockComponent object>)
+
+fetch_block_bytes_log: int = 2

-
-icache_block_size_bits: int = 5
+
+func_units_config: Collection[BlockComponentParams] = (RSBlockComponent(func_units=[<coreblocks.func_blocks.fu.alu.ALUComponent object>, <coreblocks.func_blocks.fu.shift_unit.ShiftUnitComponent object>, <coreblocks.func_blocks.fu.jumpbranch.JumpComponent object>, <coreblocks.func_blocks.fu.exception.ExceptionUnitComponent object>, <coreblocks.func_blocks.fu.priv.PrivilegedUnitComponent object>], rs_entries=4), <coreblocks.func_blocks.lsu.dummyLsu.LSUBlockComponent object>, <coreblocks.func_blocks.csr.csr.CSRBlockComponent object>)
@@ -171,6 +173,11 @@

Submodulesicache_enable: bool = True

+
+
+icache_line_bytes_log: int = 5
+
+
icache_sets_bits: int = 7
@@ -291,7 +298,7 @@

Submodulesint

Log of the number of cache sets.

-
block_size_bitsint

Log of the size of a single cache block in bytes.

+
line_bytes_logint

Log of the size of a single cache line in bytes.

enablebool

Enable the instruction cache. If disabled, requestes are bypassed to the bus.

@@ -300,7 +307,7 @@

Submodules
-__init__(*, addr_width, word_width, num_of_ways, num_of_sets_bits, block_size_bits, enable=True)
+__init__(*, addr_width, word_width, fetch_block_bytes_log, num_of_ways, num_of_sets_bits, line_bytes_log, enable=True)

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

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.peripherals.html b/coreblocks.peripherals.html index 4fcfee8e8..728532bee 100644 --- a/coreblocks.peripherals.html +++ b/coreblocks.peripherals.html @@ -746,7 +746,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.priv.csr.html b/coreblocks.priv.csr.html index 01a657398..af2333f5b 100644 --- a/coreblocks.priv.csr.html +++ b/coreblocks.priv.csr.html @@ -327,7 +327,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.priv.html b/coreblocks.priv.html index 7a8cd4f99..6b8207fad 100644 --- a/coreblocks.priv.html +++ b/coreblocks.priv.html @@ -123,7 +123,7 @@

Subpackages

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.priv.traps.html b/coreblocks.priv.traps.html index 06f5871d9..5faa0d2e3 100644 --- a/coreblocks.priv.traps.html +++ b/coreblocks.priv.traps.html @@ -171,7 +171,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/coreblocks.scheduler.html b/coreblocks.scheduler.html index 78d55ae6f..84a18b3cc 100644 --- a/coreblocks.scheduler.html +++ b/coreblocks.scheduler.html @@ -191,7 +191,7 @@

Submodules

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/current-graph.html b/current-graph.html index ba6956829..bc0e1328f 100644 --- a/current-graph.html +++ b/current-graph.html @@ -92,12 +92,12 @@

Full transaction-method graph

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/development-environment.html b/development-environment.html index c40b811d6..32e3ec008 100644 --- a/development-environment.html +++ b/development-environment.html @@ -209,7 +209,7 @@

tprof.py

© Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

diff --git a/genindex.html b/genindex.html index 9fce309da..abcead821 100644 --- a/genindex.html +++ b/genindex.html @@ -1593,6 +1593,8 @@

F

  • FenceTarget (class in coreblocks.frontend.decoder.isa)
  • Fetch (class in coreblocks.frontend.fetch.fetch) +
  • +
  • fetch_block_bytes_log (coreblocks.params.configurations.CoreConfiguration attribute)
  • fields (transactron.lib.logging.LogRecord attribute)
  • @@ -1865,10 +1867,10 @@

    I

  • ICache (class in coreblocks.cache.icache) -
  • -
  • icache_block_size_bits (coreblocks.params.configurations.CoreConfiguration attribute)
  • icache_enable (coreblocks.params.configurations.CoreConfiguration attribute) +
  • +
  • icache_line_bytes_log (coreblocks.params.configurations.CoreConfiguration attribute)
  • icache_sets_bits (coreblocks.params.configurations.CoreConfiguration attribute)
  • @@ -3755,7 +3757,7 @@

    Z

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/home.html b/home.html index 4acda82f8..787f9c3fc 100644 --- a/home.html +++ b/home.html @@ -129,7 +129,7 @@

    Documentation

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/index.html b/index.html index 4fb282ef5..9ce77deed 100644 --- a/index.html +++ b/index.html @@ -229,7 +229,7 @@

    Coreblocks

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/miscellany/exceptions-summary.html b/miscellany/exceptions-summary.html index f53ea3e05..cba86e40f 100644 --- a/miscellany/exceptions-summary.html +++ b/miscellany/exceptions-summary.html @@ -271,7 +271,7 @@

    Summary

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/modules-coreblocks.html b/modules-coreblocks.html index ff5d7ab16..4435944c8 100644 --- a/modules-coreblocks.html +++ b/modules-coreblocks.html @@ -168,7 +168,7 @@

    coreblocks

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/modules-transactron.html b/modules-transactron.html index 2faebcaf1..e5332c1c5 100644 --- a/modules-transactron.html +++ b/modules-transactron.html @@ -161,7 +161,7 @@

    transactron

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/objects.inv b/objects.inv index 2424575e460ea4f947cf9df275f6099c575e679a..b4da706005bc163ad5071d4697bb87c955738b83 100644 GIT binary patch delta 9709 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 delta 9671 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 J{r@3_?%Problem checklist

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/py-modindex.html b/py-modindex.html index eb9813b16..a5ea369db 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -668,7 +668,7 @@

    Python Module Index

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/scheduler/overview.html b/scheduler/overview.html index a448d98aa..6d978c3ff 100644 --- a/scheduler/overview.html +++ b/scheduler/overview.html @@ -146,7 +146,7 @@

    More detailed description of each block

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/search.html b/search.html index 055ef4c33..85936d231 100644 --- a/search.html +++ b/search.html @@ -101,7 +101,7 @@

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/searchindex.js b/searchindex.js index b0c412b51..af57c723e 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api", "assumptions", "auto_graph", "components/icache", "coreblocks", "coreblocks.backend", "coreblocks.cache", "coreblocks.core_structs", "coreblocks.frontend", "coreblocks.frontend.decoder", "coreblocks.frontend.fetch", "coreblocks.func_blocks", "coreblocks.func_blocks.fu", "coreblocks.func_blocks.fu.unsigned_multiplication", "coreblocks.func_blocks.interface", "coreblocks.func_blocks.lsu", "coreblocks.params", "coreblocks.peripherals", "coreblocks.priv", "coreblocks.priv.csr", "coreblocks.priv.traps", "coreblocks.scheduler", "current-graph", "development-environment", "home", "index", "miscellany/exceptions-summary", "modules-coreblocks", "modules-transactron", "problem-checklist", "scheduler/overview", "shared-structs/implementation/rs-impl", "shared-structs/rs", "synthesis/synthesis", "transactions", "transactron", "transactron.core", "transactron.lib", "transactron.testing", "transactron.utils", "transactron.utils.amaranth_ext"], "filenames": ["api.md", "assumptions.md", "auto_graph.rst", "components/icache.md", "coreblocks.rst", "coreblocks.backend.rst", "coreblocks.cache.rst", "coreblocks.core_structs.rst", "coreblocks.frontend.rst", "coreblocks.frontend.decoder.rst", "coreblocks.frontend.fetch.rst", "coreblocks.func_blocks.rst", "coreblocks.func_blocks.fu.rst", "coreblocks.func_blocks.fu.unsigned_multiplication.rst", "coreblocks.func_blocks.interface.rst", "coreblocks.func_blocks.lsu.rst", "coreblocks.params.rst", "coreblocks.peripherals.rst", "coreblocks.priv.rst", "coreblocks.priv.csr.rst", "coreblocks.priv.traps.rst", "coreblocks.scheduler.rst", "current-graph.md", "development-environment.md", "home.md", "index.md", "miscellany/exceptions-summary.md", "modules-coreblocks.rst", "modules-transactron.rst", "problem-checklist.md", "scheduler/overview.md", "shared-structs/implementation/rs-impl.md", "shared-structs/rs.md", "synthesis/synthesis.md", "transactions.md", "transactron.rst", "transactron.core.rst", "transactron.lib.rst", "transactron.testing.rst", "transactron.utils.rst", "transactron.utils.amaranth_ext.rst"], "titles": ["API", "List of assumptions made during development", "<no title>", "Instruction Cache", "coreblocks package", "coreblocks.backend package", "coreblocks.cache package", "coreblocks.core_structs package", "coreblocks.frontend package", "coreblocks.frontend.decoder package", "coreblocks.frontend.fetch package", "coreblocks.func_blocks package", "coreblocks.func_blocks.fu package", "coreblocks.func_blocks.fu.unsigned_multiplication package", "coreblocks.func_blocks.interface package", "coreblocks.func_blocks.lsu package", "coreblocks.params package", "coreblocks.peripherals package", "coreblocks.priv package", "coreblocks.priv.csr package", "coreblocks.priv.traps package", "coreblocks.scheduler package", "Full transaction-method graph", "Development environment", "Introduction", "Coreblocks", "Summary of papers about interrupts", "coreblocks", "transactron", "Problem checklist", "Scheduler overview", "Proposition of Reservation Station implementation", "Reservation Station", "Core verification", "Documentation for Coreblocks transaction framework", "transactron package", "transactron.core package", "transactron.lib package", "transactron.testing package", "transactron.utils package", "transactron.utils.amaranth_ext package"], "terms": {"packag": [0, 23, 25, 27, 28], "subpackag": [0, 27, 28], "backend": [0, 4, 27, 37], "submodul": [0, 8, 11, 18, 27, 28, 33], "annouc": [0, 4, 27], "modul": [0, 23, 27, 28, 33, 34], "retir": [0, 4, 15, 20, 27], "content": [0, 27, 28], "cach": [0, 4, 10, 16, 25, 27, 39], "icach": [0, 4, 10, 27, 37], "ifac": [0, 4, 27, 37], "refil": [0, 3, 4, 27], "core_struct": [0, 4, 27], "rat": [0, 1, 4, 21, 26, 27], "rf": [0, 1, 4, 5, 26, 27, 31, 32], "rob": [0, 1, 4, 5, 20, 21, 26, 27, 30, 31, 32], "frontend": [0, 4, 12, 15, 21, 27, 30, 37], "func_block": [0, 4, 16, 21, 27], "param": [0, 4, 6, 12, 17, 27], "configur": [0, 4, 17, 21, 27, 33, 37], "fu_param": [0, 4, 27], "genparam": [0, 4, 5, 7, 9, 10, 12, 13, 14, 15, 19, 20, 21, 27], "icache_param": [0, 4, 27], "instr": [0, 4, 9, 27], "isa_param": [0, 4, 27], "peripher": [0, 4, 27], "axi_lit": [0, 4, 27], "bus_adapt": [0, 4, 27], "wishbon": [0, 4, 27], "priv": [0, 4, 9, 11, 16, 27], "schedul": [0, 4, 25, 26, 27, 28, 35, 37, 40], "wakeup_select": [0, 4, 27], "core": [0, 5, 9, 12, 13, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 35, 37, 39], "kei": [0, 19, 28, 35, 37, 39], "manag": [0, 12, 23, 25, 28, 35, 37, 39], "method": [0, 3, 5, 6, 9, 10, 12, 13, 14, 15, 17, 19, 20, 21, 23, 25, 28, 35, 37, 38, 39], "sugar": [0, 28, 35], "tmodul": [0, 17, 20, 28, 34, 35, 37], "transact": [0, 9, 16, 17, 19, 23, 25, 28, 31, 35, 37, 40], "transaction_bas": [0, 28, 35], "lib": [0, 28, 35, 36, 38, 39, 40], "adapt": [0, 17, 28, 34, 35, 38], "button": [0, 28, 35], "connector": [0, 28, 35], "depend": [0, 16, 19, 25, 28, 34, 35, 40], "fifo": [0, 5, 26, 28, 34, 35], "log": [0, 16, 17, 26, 28, 35, 39], "metric": [0, 16, 28, 35, 39], "reqr": [0, 28, 35], "simultan": [0, 19, 28, 34, 35, 36], "storag": [0, 28, 35], "transform": [0, 28, 35], "test": [0, 16, 23, 25, 28, 29, 35, 36, 37, 39, 40], "function": [0, 9, 12, 16, 21, 26, 28, 29, 34, 35, 36, 37, 39], "gtkw_extens": [0, 28, 35], "infrastructur": [0, 28, 35], "profil": [0, 23, 28], "testbenchio": [0, 28, 29, 35], "util": [0, 28, 29, 34, 35, 37], "assign": [0, 19, 28, 29, 34, 35, 36], "data_repr": [0, 28, 35], "debug_sign": [0, 5, 16, 28, 35, 36, 37, 38], "depcach": [0, 28, 35], "gen": [0, 9, 12, 13, 28, 35], "idgen": [0, 28, 35], "transactron_help": [0, 28, 35], "graph": [0, 23, 25, 28, 33, 36], "trace": [0, 23, 28, 38], "ha": [1, 6, 9, 10, 19, 21, 23, 26, 29, 31, 34, 35, 36, 37], "data": [1, 9, 10, 15, 17, 19, 20, 25, 32, 33, 35, 36, 37, 38, 39, 40], "forward": [1, 17, 34, 36, 37], "from": [1, 5, 6, 9, 15, 17, 19, 20, 21, 23, 24, 26, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "tomasulo": 1, "announc": [1, 5, 15], "bu": [1, 9, 15, 16, 17], "read": [1, 15, 17, 19, 23, 25, 29, 34, 37, 39], "x0": [1, 9], "rf0": 1, "return": [1, 3, 12, 15, 17, 20, 25, 26, 36, 37, 38, 39], "0": [1, 9, 12, 16, 17, 19, 21, 31, 32, 33, 35, 36, 37, 38], "write": [1, 6, 9, 17, 19, 26, 32, 34, 36, 37], "i": [1, 3, 5, 6, 9, 12, 13, 15, 16, 17, 19, 20, 21, 23, 24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "noop": 1, "separ": [1, 30, 35, 36, 37, 39], "r": [1, 5, 9, 15, 21, 23, 26, 30, 31, 32, 33], "each": [1, 10, 12, 16, 17, 19, 23, 25, 26, 31, 32, 34, 35, 36, 37, 38, 39], "fu": [1, 4, 5, 9, 11, 16, 20, 31, 32, 37], "writeback": 1, "stage": [1, 15, 20], "save": [1, 5, 16, 20, 23, 26, 31, 32, 35, 37, 39], "after": [1, 3, 6, 10, 17, 20, 26, 30, 33, 34, 37], "get": [1, 5, 9, 12, 13, 21, 23, 25, 35, 36, 37, 38, 39, 40], "output": [1, 5, 6, 15, 17, 23, 26, 31, 32, 36, 37, 40], "commit": [1, 23, 26, 33], "updat": [1, 14, 15, 19, 33, 40], "The": [3, 5, 6, 12, 17, 23, 24, 25, 26, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40], "should": [3, 5, 6, 9, 10, 17, 20, 21, 23, 24, 26, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40], "expos": [3, 37, 39], "three": [3, 9, 26, 33, 36], "issue_req": [3, 6], "thi": [3, 5, 6, 9, 12, 13, 15, 17, 19, 20, 21, 23, 26, 29, 31, 32, 33, 34, 35, 36, 37, 39, 40], "issu": [3, 6, 12, 13, 14, 21, 23, 34, 37], "an": [3, 5, 6, 15, 17, 21, 23, 24, 26, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "lookup": [3, 6], "request": [3, 6, 12, 13, 15, 16, 17, 34, 35, 36, 37, 40], "accept_resp": 3, "result": [3, 5, 6, 9, 12, 13, 15, 17, 20, 26, 33, 34, 37, 39], "flush": [3, 6, 20, 26], "entir": [3, 33, 34], "oper": [3, 9, 12, 16, 26, 34, 36, 37, 40], "under": [3, 34, 35, 36], "follow": [3, 12, 21, 23, 31, 33, 34, 37, 39], "ar": [3, 5, 9, 15, 16, 17, 19, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "alwai": [3, 9, 19, 33, 34, 36, 37, 38], "multipl": [3, 12, 13, 16, 17, 21, 34, 36, 37, 39], "4": [3, 9, 12, 16, 37], "byte": [3, 16, 35, 37, 39], "risc": [3, 9, 16, 24, 33], "v": [3, 9, 16, 23, 24, 26, 31, 33, 37], "specif": [3, 9, 16, 17, 23, 26, 33, 37], "requir": [3, 19, 23, 26, 33, 34, 35, 36], "align": [3, 15, 39], "c": [3, 16, 26, 33, 37], "extens": [3, 9, 16, 33], "introduc": [3, 26, 34], "16": [3, 9, 16, 26, 36], "bit": [3, 6, 9, 12, 13, 16, 17, 19, 20, 26, 31, 32, 34, 37, 39, 40], "relax": [3, 34], "fetch": [3, 4, 5, 8, 9, 16, 20, 26], "unit": [3, 5, 9, 10, 12, 13, 16, 17, 21, 23, 30, 33], "handl": [3, 12, 20, 25, 34, 36], "case": [3, 5, 17, 21, 26, 29, 34, 36, 37, 39, 40], "fulli": [3, 15, 37], "pipelin": [3, 15, 17, 21, 26, 31, 37], "process": [3, 20, 23, 25, 33, 37, 38], "order": [3, 16, 20, 21, 23, 24, 25, 33, 36, 37], "As": [3, 26, 34, 37], "can": [3, 5, 15, 17, 19, 20, 23, 24, 26, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "invok": [3, 5, 9, 10, 21, 26, 31, 38], "independ": [3, 34, 37], "accept_r": [3, 6], "If": [3, 9, 16, 17, 19, 20, 26, 29, 31, 34, 35, 36, 37, 39], "space": [3, 26], "anoth": [3, 6, 23, 34, 36, 37], "simpli": 3, "block": [3, 13, 14, 16, 17, 21, 25, 26, 34, 36, 37], "latenc": [3, 26, 33, 37], "least": 3, "one": [3, 5, 6, 12, 17, 20, 23, 26, 30, 31, 32, 34, 36, 37, 38, 39, 40], "cycl": [3, 12, 13, 17, 19, 20, 23, 26, 30, 33, 34, 35, 36, 37, 38], "miss": [3, 26], "occur": [3, 6], "arbitrarili": 3, "long": [3, 32, 33, 37], "ensur": [3, 33], "ani": [3, 9, 17, 21, 26, 29, 37, 38, 39, 40], "refetch": 3, "howev": [3, 36, 37], "guarante": [3, 26], "have": [3, 5, 15, 17, 23, 26, 29, 33, 34, 36, 37, 38, 39, 40], "alreadi": [3, 5, 26, 37, 39], "been": 3, "still": [3, 26, 32, 36], "wait": [3, 5, 17, 20, 23, 26, 31, 32, 36, 38], "accept": [3, 6, 12, 13, 14, 33, 36, 37, 39], "inform": [3, 15, 21, 23, 35, 37, 39], "regard": 3, "error": [3, 6, 17, 36, 37, 39], "mean": [3, 21, 23, 32, 36, 37], "dure": [3, 15, 25, 30, 37, 38], "line": [3, 6, 16, 23, 25], "subsequ": 3, "access": [3, 16, 17, 19, 26, 34, 37, 38, 39], "trigger": [3, 19, 37, 39], "which": [3, 5, 6, 9, 10, 12, 15, 17, 21, 23, 24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "most": [3, 26, 34, 36, 37], "like": [3, 9, 26, 34, 36, 37], "For": [3, 16, 23, 31, 32, 34, 35, 37, 39, 40], "32": [3, 9, 12, 13, 16, 17, 26, 34, 37], "128": [3, 9, 16], "set": [3, 6, 9, 12, 15, 16, 19, 20, 21, 25, 31, 33, 36, 37, 39, 40], "size": [3, 16, 17, 26, 34, 37, 39], "equal": [3, 20, 37], "31": [3, 9], "15": [3, 9], "14": [3, 9], "13": [3, 9], "12": [3, 9], "11": [3, 9, 23, 33], "10": [3, 9, 26], "09": 3, "08": 3, "07": 3, "06": [3, 38], "05": 3, "04": 3, "03": 3, "02": 3, "01": 3, "00": 3, "tag": [3, 17, 26, 31, 32], "index": [3, 35, 36, 40], "offset": 3, "decod": [4, 8, 12, 15, 21, 35, 39], "decode_stag": [4, 8], "instr_decod": [4, 8], "instr_descript": [4, 8], "isa": [4, 8, 10, 16, 19], "optyp": [4, 8, 12, 15, 16, 21], "rvc": [4, 8, 10], "alu": [4, 11, 16], "div_unit": [4, 11], "except": [4, 5, 9, 11, 16, 18, 25, 29, 36, 38, 39], "jumpbranch": [4, 11, 16, 37], "mul_unit": [4, 11], "shift_unit": [4, 11, 16], "zbc": [4, 11, 16], "zb": [4, 11, 16], "interfac": [4, 6, 9, 11, 13, 15, 17, 21, 25, 33, 34, 36, 37], "func_blocks_unifi": [4, 11], "func_protocol": [4, 11, 21], "lsu": [4, 11, 16], "dummylsu": [4, 11, 16], "pma": [4, 11, 16], "csr": [4, 9, 16, 18], "csr_instanc": [4, 18], "csr_regist": [4, 18], "trap": [4, 18], "instr_count": [4, 18], "interrupt_control": [4, 18], "class": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 34, 35, 36, 37, 38, 39, 40], "base": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 26, 35, 36, 37, 38, 39, 40], "elaborat": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 19, 20, 21, 34, 35, 36, 37, 38, 39], "__init__": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 34, 35, 36, 37, 38, 39, 40], "gen_param": [4, 5, 7, 9, 10, 12, 13, 14, 15, 16, 19, 20, 21], "wb_instr_bu": 4, "wishboneinterfac": [4, 17], "wb_data_bu": 4, "resultannounc": 5, "simpl": [5, 6, 9, 10, 15, 21, 36, 37, 39, 40], "It": [5, 9, 10, 12, 13, 15, 17, 21, 23, 26, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "take": [5, 9, 17, 30, 31, 34, 36, 37, 38, 39], "execut": [5, 9, 12, 17, 21, 23, 25, 30, 32, 34, 35, 36, 37, 38], "instruct": [5, 6, 9, 10, 12, 15, 16, 19, 20, 21, 25, 26, 30, 31, 33], "send": [5, 9, 10, 16, 17, 21], "its": [5, 9, 19, 21, 26, 33, 34, 36, 37, 39, 40], "mark": [5, 25, 26, 35], "complet": [5, 17, 26], "store": [5, 9, 15, 16, 20, 26, 31, 32, 36, 37, 39], "valu": [5, 6, 9, 12, 15, 16, 17, 19, 20, 21, 25, 29, 31, 32, 35, 36, 37, 38, 39, 40], "also": [5, 23, 33, 34, 37, 38], "sent": [5, 17, 38], "get_result": [5, 14, 15, 37], "serial": [5, 15, 37], "so": [5, 17, 26, 33, 34, 35, 36, 37], "we": [5, 6, 15, 17, 26, 30, 31, 32, 33, 34, 37, 38], "more": [5, 23, 25, 26, 37, 39], "than": [5, 26, 37, 39], "connect": [5, 9, 17, 19, 26, 34, 36, 37], "manytooneconnecttran": [5, 37], "rob_mark_don": 5, "rs_updat": 5, "rf_write": 5, "paramet": [5, 6, 9, 10, 12, 13, 15, 16, 17, 19, 20, 21, 34, 36, 37, 38, 39, 40], "instanc": [5, 6, 9, 10, 15, 21, 33, 35, 36, 37, 38, 39], "us": [5, 6, 9, 10, 12, 13, 15, 16, 17, 19, 20, 21, 25, 26, 29, 33, 34, 36, 37, 38, 39, 40], "gener": [5, 6, 9, 10, 12, 13, 15, 16, 17, 19, 21, 23, 24, 26, 29, 33, 35, 36, 37, 38, 39], "next": [5, 6, 9, 10, 15, 21, 26, 36, 40], "readi": [5, 6, 15, 17, 19, 21, 25, 31, 35, 36, 37], "assum": [5, 12, 26, 37, 39], "differ": [5, 12, 17, 23, 24, 26, 29, 33, 36, 37, 39], "end": [5, 15, 26, 36, 37], "without": [5, 21, 26, 36, 37, 39], "pass": [5, 23, 25, 33, 36, 37, 38, 39], "finish": [5, 17, 20, 37], "rob_peek": 5, "rob_retir": 5, "r_rat_commit": 5, "r_rat_peek": 5, "free_rf_put": 5, "rf_free": 5, "precommit": [5, 15, 23], "exception_cause_get": 5, "exception_cause_clear": 5, "frat_renam": 5, "fetch_continu": 5, "instr_decr": 5, "trap_entri": 5, "cacheinterfac": [6, 10], "A": [6, 16, 17, 33, 34, 35, 36, 37, 39], "associ": [6, 16, 37], "replac": [6, 13, 16, 31], "polici": 6, "pseudo": 6, "random": [6, 38], "scheme": 6, "everi": [6, 12, 17, 23, 33, 36, 37], "time": [6, 17, 19, 26, 36, 37], "trash": 6, "select": [6, 9, 12, 14, 15, 17, 21, 23], "wai": [6, 12, 17, 23, 26, 33, 34, 36, 37, 39], "keep": [6, 36], "global": [6, 19, 26], "counter": [6, 16, 19, 20, 23, 37], "abstract": [6, 13, 16, 33, 37, 39], "awai": 6, "need": [6, 17, 23, 26, 31, 34, 36], "two": [6, 19, 26, 29, 33, 34, 36, 37, 38, 39], "refiller_start": 6, "call": [6, 19, 20, 21, 23, 29, 31, 34, 35, 36, 37, 38, 39], "whenev": [6, 37], "refiller_accept": 6, "word": [6, 16], "written": [6, 19, 32, 33, 37], "last": [6, 20, 21, 36, 37], "when": [6, 17, 20, 23, 26, 29, 31, 32, 34, 36, 37, 38, 39, 40], "either": [6, 17, 34, 36, 37, 38, 39, 40], "transfer": [6, 17, 36, 37], "over": [6, 19, 36, 37], "shouldn": [6, 33], "t": [6, 9, 15, 16, 23, 26, 29, 31, 33, 34, 36, 37, 38, 39], "until": [6, 26, 37], "start": [6, 12, 15, 17, 26, 36, 37], "layout": [6, 9, 10, 17, 21, 23, 29, 34, 36, 37, 39], "icachelayout": 6, "icacheparamet": [6, 16], "cacherefillerinterfac": 6, "none": [6, 7, 9, 10, 12, 15, 16, 19, 35, 36, 37, 38, 39, 40], "creat": [6, 13, 17, 23, 33, 34, 36, 37, 38, 39, 40], "input": [6, 9, 12, 17, 26, 31, 32, 34, 36, 37, 40], "start_refil": 6, "accept_refil": 6, "deserialize_addr": 6, "raw_addr": 6, "dict": [6, 17, 34, 35, 36, 37, 38, 39, 40], "str": [6, 16, 17, 35, 36, 37, 38, 39, 40], "amaranth": [6, 9, 12, 16, 17, 29, 33, 34, 35, 36, 37, 38, 39, 40], "hdl": [6, 9, 12, 16, 35, 36, 37, 38, 39, 40], "_ast": [6, 9, 12, 16, 36, 37, 38, 39, 40], "serialize_addr": 6, "addr": [6, 15, 17, 37], "view": [6, 12, 15, 36, 37, 38, 39, 40], "icachebypass": 6, "bus_mast": 6, "busmasterinterfac": [6, 15, 17], "haselabor": [6, 14, 17, 35, 36, 37, 38, 40], "protocol": [6, 14, 17, 35, 36, 37], "whole": [6, 24, 26, 37], "given": [6, 15, 23, 31, 34, 35, 36, 37, 38, 39, 40], "simplecommonbuscacherefil": 6, "frat": 7, "rrat": 7, "registerfil": 7, "reorderbuff": [7, 20], "decodestag": 9, "instanti": [9, 36], "instrdecod": 9, "make": [9, 12, 23, 24, 26, 29, 33, 34, 35, 38], "actual": [9, 23, 25, 34], "combinatori": [9, 34], "manner": [9, 17], "get_raw": 9, "push_decod": 9, "raw": 9, "previou": [9, 17, 26, 37], "step": [9, 10, 21, 23, 26, 33, 34], "e": [9, 16, 23, 26, 29, 34, 37, 39, 40], "g": [9, 16, 23, 26, 29, 34, 37, 39, 40], "fetchlayout": [9, 10], "describ": [9, 10, 21, 26, 33, 35, 36, 37, 38], "decodelayout": [9, 21], "perform": [9, 12, 13, 16, 21, 23, 33, 34, 36, 37, 39, 40], "elementari": 9, "compon": [9, 16, 17, 24, 36, 37], "opcod": [9, 16, 31, 32], "funct3": [9, 12, 16], "etc": [9, 16, 34], "via": [9, 34, 36], "attribut": [9, 12, 13, 15, 16, 17, 19, 20, 35, 36, 37, 39, 40], "signal": [9, 12, 15, 16, 17, 25, 29, 35, 36, 37, 38, 39, 40], "ilen": [9, 16], "out": [9, 12, 13, 17, 24, 25, 35, 36, 37, 40], "identifi": [9, 16, 31, 37], "funct3_v": 9, "1": [9, 12, 13, 16, 19, 21, 26, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "funct7": [9, 12, 16], "seven": 9, "funct7_v": 9, "funct12": 9, "twelv": 9, "funct12_v": 9, "rd": [9, 16], "reg_cnt_log": 9, "address": [9, 15, 16, 17, 19, 25, 26], "regist": [9, 16, 19, 21, 26, 30, 36, 37, 39], "rd_v": 9, "rs1": [9, 16], "hold": [9, 17, 37], "first": [9, 12, 21, 26, 31, 32, 33, 34, 37, 38, 39], "rs1_v": 9, "form": [9, 16, 19, 26, 33, 37], "rs2": [9, 16], "second": [9, 12, 21, 31, 32, 33, 37], "rs2_v": 9, "imm": [9, 16], "xlen": [9, 12, 16, 19, 39], "immedi": [9, 17], "provid": [9, 12, 16, 19, 21, 33, 34, 37, 38, 39], "were": [9, 26, 34], "succ": 9, "fencetarget": 9, "successor": 9, "fenc": [9, 16], "pred": 9, "predecessor": 9, "fm": 9, "fencefm": 9, "mode": [9, 16, 23, 26], "csr_alen": [9, 16], "control": [9, 16, 17, 33, 35, 36, 37, 40], "sourc": [9, 21, 23, 31, 35, 36, 37], "type": [9, 12, 23, 36, 37, 38, 39], "defin": [9, 15, 19, 34, 36, 37, 39, 40], "kind": [9, 12, 21, 37, 39], "illeg": 9, "wa": [9, 19, 20, 23, 26, 34, 35, 36, 37, 39], "success": [9, 17, 38], "do": [9, 26, 29, 34, 36], "fit": 9, "support": [9, 15, 16, 21, 23, 25, 36, 37], "constructor": [9, 34, 36, 39], "encod": [9, 16, 26, 35, 39, 40], "object": [9, 12, 15, 16, 17, 33, 34, 35, 37, 38, 39], "repres": [9, 19, 36, 37], "singl": [9, 12, 13, 16, 20, 21, 34, 36, 37, 39], "option": [9, 12, 16, 17, 19, 23, 34, 35, 36, 37, 38, 39, 40], "exist": [9, 34], "instr_type_overrid": 9, "instrtyp": 9, "specifi": [9, 16, 17, 19, 32, 37, 38, 39], "determin": [9, 26, 33, 37, 39], "instrust": 9, "almost": 9, "correct": [9, 15, 26, 31, 32, 33], "rd_zero": 9, "bool": [9, 15, 16, 19, 35, 36, 37, 38, 39, 40], "field": [9, 15, 16, 19, 23, 31, 32, 34, 35, 36, 37, 38, 39], "constant": 9, "zero": [9, 20, 31, 37, 40], "other": [9, 19, 23, 25, 34, 35, 36, 37, 40], "accordingli": 9, "default": [9, 17, 23, 34, 35, 36, 37, 39, 40], "fals": [9, 12, 15, 16, 23, 34, 35, 36, 37, 39, 40], "rs1_zero": 9, "exceptioncaus": 9, "intenum": [9, 12, 19], "breakpoint": 9, "3": [9, 12, 19, 23, 35, 36, 39], "environment_call_from_m": 9, "environment_call_from_": 9, "9": 9, "environment_call_from_u": 9, "8": [9, 12, 13, 16, 17, 36, 37], "illegal_instruct": 9, "2": [9, 12, 13, 16, 17, 19, 33, 35, 36, 37, 39], "instruction_access_fault": 9, "instruction_address_misalign": 9, "instruction_page_fault": 9, "load_access_fault": 9, "5": [9, 12, 16, 30, 37, 38], "load_address_misalign": 9, "load_page_fault": 9, "store_access_fault": 9, "7": [9, 16], "store_address_misalign": 9, "6": [9, 16, 26], "store_page_fault": 9, "__new__": [9, 12, 16, 19, 35], "tso": 9, "intflag": [9, 12, 16, 35], "dev_i": 9, "dev_o": 9, "mem_r": 9, "mem_w": 9, "clz": 9, "1536": 9, "cpop": 9, "1538": 9, "ctz": 9, "1537": 9, "ebreak": 9, "ecal": 9, "mret": [9, 12], "770": 9, "orcb": 9, "647": 9, "rev8_32": 9, "1688": 9, "rev8_64": 9, "1720": 9, "sextb": 9, "1540": 9, "sexth": 9, "1541": 9, "sret": 9, "258": 9, "wfi": 9, "261": 9, "zexth": 9, "add": [9, 34, 36, 37, 39], "AND": 9, "andn": 9, "b": [9, 16, 37], "bclr": [9, 12], "beq": 9, "bext": [9, 12], "bge": 9, "bgeu": 9, "binv": [9, 12], "blt": 9, "bltu": 9, "bne": 9, "bset": [9, 12], "clmul": [9, 12], "clmulh": [9, 12], "clmulr": [9, 12], "csrrc": 9, "csrrci": 9, "csrr": 9, "csrrsi": 9, "csrrw": 9, "csrrwi": 9, "d": [9, 16, 34, 36, 37, 39], "div": [9, 12], "divu": [9, 12], "divuw": 9, "divw": 9, "fencei": 9, "h": [9, 26], "hu": 9, "jalr": 9, "max": [9, 33], "maxu": 9, "min": [9, 37], "minu": 9, "mul": [9, 12], "mulh": [9, 12], "mulhsu": [9, 12], "mulhu": [9, 12], "mulw": 9, "OR": 9, "orn": 9, "rem": [9, 12], "remu": [9, 12], "remuw": 9, "remw": 9, "rev8": 9, "rol": 9, "ror": 9, "sh1add": 9, "sh2add": 9, "sh3add": 9, "sll": 9, "slt": 9, "sltu": 9, "sr": 9, "sub": [9, 37], "w": [9, 26], "xnor": 9, "xor": 9, "36": 9, "52": 9, "20": 9, "48": 9, "muldiv": 9, "sa": 9, "sfencevma": 9, "sl": 9, "enum": [9, 12, 16, 36, 37, 38, 39], "j": [9, 16], "": [9, 16, 17, 26, 34, 35, 36, 37, 39, 40], "u": [9, 26, 33, 37, 39], "auipc": 9, "branch": [9, 26, 33, 37], "24": 9, "jal": 9, "27": 9, "25": 9, "load": [9, 15, 26, 37, 39], "load_fp": 9, "lui": 9, "misc_mem": 9, "op": 9, "op32": 9, "op_imm": 9, "op_imm_32": 9, "store_fp": 9, "system": [9, 33, 34, 39], "28": [9, 26], "a0": 9, "a1": 9, "a2": 9, "a3": 9, "a4": 9, "a5": 9, "a6": 9, "a7": 9, "17": 9, "fp": [9, 35], "gp": [9, 12, 20], "ra": 9, "s0": 9, "s1": 9, "s10": 9, "26": 9, "s11": 9, "s2": 9, "18": 9, "s3": 9, "19": 9, "s4": 9, "s5": 9, "21": 9, "s6": 9, "22": 9, "s7": 9, "23": 9, "s8": 9, "s9": 9, "sp": 9, "t0": 9, "t1": [9, 34], "t2": [9, 34], "t3": 9, "t4": 9, "29": 9, "t5": 9, "30": [9, 26], "t6": 9, "tp": [9, 39], "x1": 9, "x10": 9, "x11": 9, "x12": 9, "x13": 9, "x14": 9, "x15": 9, "x16": 9, "x17": 9, "x18": 9, "x19": 9, "x2": 9, "x20": 9, "x21": 9, "x22": 9, "x23": 9, "x24": 9, "x25": 9, "x26": 9, "x27": 9, "x28": 9, "x29": 9, "x3": 9, "x30": 9, "x31": 9, "x4": 9, "x5": 9, "x6": 9, "x7": 9, "x8": 9, "x9": 9, "confus": 9, "address_gener": 9, "arithmet": 9, "bit_manipul": 9, "bit_rot": 9, "compar": [9, 25], "csr_imm": 9, "csr_reg": 9, "div_rem": 9, "34": 9, "intern": [9, 16, 25, 34, 36, 37], "caus": [9, 26, 37, 39], "befor": [9, 17, 20, 23, 29, 30, 34, 36, 37], "logic": [9, 26, 32, 33, 34], "33": 9, "shift": [9, 11, 12, 16, 37], "single_bit_manipul": 9, "unary_bit_manipulation_1": 9, "unary_bit_manipulation_2": 9, "unary_bit_manipulation_3": 9, "unary_bit_manipulation_4": 9, "unary_bit_manipulation_5": 9, "unknown": [9, 23, 35, 37, 39], "optypes_required_by_extens": 9, "resolve_impl": 9, "true": [9, 15, 16, 17, 34, 35, 36, 37, 38, 39, 40], "ignore_unsupport": 9, "instrdecompress": 9, "decompr_reg": 9, "rvc_reg": 9, "instr_mux": 9, "sel": [9, 17], "list": [9, 12, 16, 17, 19, 23, 25, 29, 33, 35, 36, 37, 38, 39, 40], "int": [9, 12, 13, 15, 16, 17, 19, 35, 36, 37, 38, 39, 40], "valuecast": [9, 16, 36, 37, 38, 39], "tupl": [9, 12, 17, 19, 21, 35, 36, 37, 39], "is_instr_compress": 9, "pc": [10, 25], "insid": [10, 33, 34, 36, 37], "increment": [10, 19, 20], "ilen_byt": 10, "cont": [10, 38], "unalignedfetch": 10, "work": [10, 21, 26, 29, 33, 34, 36, 37], "unalign": 10, "unsigned_multipl": [11, 12], "common": [11, 12, 17, 36, 37, 39], "fast_recurs": [11, 12], "sequenc": [11, 12, 21, 37], "alucompon": [12, 16], "functionalcomponentparam": [12, 16], "zba_en": 12, "zbb_enabl": 12, "get_modul": [12, 15, 16], "funcunit": [12, 14, 16], "get_optyp": [12, 15, 16], "alufuncunit": 12, "alu_fn": 12, "alufn": 12, "divcompon": 12, "ipc": [12, 33], "div_fn": 12, "divfn": 12, "decodermanag": 12, "fn": 12, "get_instruct": 12, "valid": [12, 17, 21, 31, 37, 39, 40], "implement": [12, 15, 17, 24, 25, 26, 30, 37, 39, 40], "format": [12, 23, 33, 34, 35, 36, 37, 39], "divunit": 12, "get_input": 12, "arg": [12, 17, 34, 35, 36, 37, 38, 39, 40], "exceptionfuncunit": 12, "unit_fn": 12, "exceptionunitfn": 12, "exceptionunitcompon": [12, 16], "jumpbranchfuncunit": 12, "jb_fn": 12, "jumpbranchfn": 12, "jumpcompon": [12, 16], "mulcompon": 12, "mul_unit_typ": 12, "multyp": 12, "dsp_width": [12, 13], "mul_fn": 12, "mulfn": 12, "hot": [12, 26, 40], "wire": 12, "recursive_mul": 12, "fastest": 12, "multipli": [12, 13], "onli": [12, 17, 19, 20, 26, 33, 34, 35, 36, 37, 38, 39], "costli": [12, 26], "term": 12, "resourc": [12, 20, 26, 33, 34, 36], "sequence_mul": 12, "dsp": [12, 13], "balanc": 12, "between": [12, 23, 26, 34, 36, 37, 39, 40], "cost": [12, 25, 34], "shift_mul": 12, "cheapest": 12, "russian": [12, 13], "peasant": [12, 13], "algorithm": [12, 13, 37], "mulunit": 12, "respons": [12, 17, 21, 23, 36, 37, 38], "unsign": [12, 13], "integ": [12, 16, 38, 39], "standard": [12, 26, 33, 37, 40], "funcunitlayout": [12, 21], "comput": [12, 13, 15, 20, 26, 37, 39], "mul_typ": 12, "privilegedfn": 12, "classmethod": [12, 35, 36, 37, 39], "privilegedfuncunit": 12, "privilegedunitcompon": [12, 16], "shiftfuncunit": 12, "shift_unit_fn": 12, "shiftunitfn": 12, "shiftunitcompon": [12, 16], "clmultipli": 12, "carri": [12, 16, 33], "less": [12, 16], "product": [12, 37], "i1": [12, 13], "n": [12, 13, 16, 37], "factor": 12, "i2": [12, 13], "reset": [12, 19, 25, 36], "new": [12, 15, 17, 20, 25, 26, 36, 37, 39, 40], "busi": 12, "while": [12, 36, 38], "progress": 12, "bit_width": 12, "recursion_depth": 12, "width": [12, 13, 16, 17, 19, 37, 39, 40], "depth": [12, 17, 33, 37], "recurs": [12, 13, 33, 34, 35, 37, 39], "parallel": [12, 37], "power": [12, 39], "iterative_modul": 12, "recursive_modul": 12, "zbccompon": 12, "zbc_fn": 12, "zbcfn": 12, "zbcunit": 12, "zbsfunction": 12, "in1": 12, "in2": 12, "zbscompon": 12, "zbsunit": 12, "zbs_fn": 12, "dspmulunit": 13, "clock": [13, 30, 33, 34, 35, 36, 37], "design": [13, 26, 34, 35], "synthesi": [13, 25], "tool": [13, 23, 33, 35], "o": [13, 26, 34, 36], "same": [13, 15, 23, 34, 36, 37, 39], "number": [13, 16, 17, 23, 26, 33, 35, 36, 37, 38, 39, 40], "mulbaseunsign": 13, "unsignedmulunitlayout": 13, "recursiveunsignedmul": 13, "see": [13, 29, 33, 34, 37], "fast": 13, "within": [13, 23], "sequentialunsignedmul": 13, "sequenti": [13, 17], "classic": [13, 26], "shiftunsignedmul": 13, "cheap": 13, "multi": 13, "funcblocksunifi": 14, "iter": [14, 16, 36, 37, 38, 39, 40], "blockcomponentparam": [14, 15, 16], "extra_methods_requir": 14, "unifierkei": [14, 37], "get_extra_method": 14, "item": [14, 39, 40], "funcblock": [14, 15, 16, 21], "insert": [14, 15, 21, 25, 26, 30, 31], "lsublockcompon": [15, 16], "get_rs_entry_count": [15, 16], "lsudummi": 15, "veri": [15, 26, 34], "all": [15, 16, 17, 20, 23, 25, 26, 29, 34, 35, 36, 37, 39, 40], "isn": [15, 33, 36], "compliant": [15, 33], "riscv": [15, 33], "spec": 15, "doesn": [15, 26, 29, 34, 37], "check": [15, 23, 26, 29, 31, 32, 33, 36, 39], "rang": [15, 36, 37, 38, 39, 40], "reserv": [15, 16, 25, 26], "place": [15, 17, 26, 31, 33, 34, 36, 37], "intruct": 15, "put": [15, 31, 33, 37], "receiv": [15, 17, 34, 36, 37], "calcul": [15, 37], "further": [15, 23, 37], "To": [15, 23, 26, 33, 37, 39], "processor": [15, 24, 25, 30], "master": [15, 17, 33], "pmacheck": 15, "physic": [15, 16, 21, 26], "memori": [15, 16, 17, 26, 36, 37], "checker": 15, "mai": [15, 23, 37, 38, 39], "part": [15, 19, 26, 30, 34, 36, 37], "combin": [15, 25, 29, 36, 37, 39], "circuit": [15, 33, 34, 36, 37, 39], "pmalayout": 15, "structlayout": [15, 36, 37, 39], "pmaregion": [15, 16], "contigu": [15, 16], "region": [15, 26], "includ": [15, 33, 34, 36, 37, 39, 40], "both": [15, 31, 34, 36, 37, 39], "begin": [15, 26], "mmio": 15, "indic": [15, 26, 32, 36, 37], "coreconfigur": 16, "func_units_config": 16, "collect": [16, 19, 24, 33, 35, 36, 37, 38, 39, 40], "station": [16, 25], "exampl": [16, 19, 23, 25, 31, 34, 36, 37, 40], "rsblockcompon": 16, "rs_entri": 16, "compress": 16, "enabl": [16, 37, 38, 39], "embed": 16, "reduc": [16, 26, 36], "debug": [16, 23, 37, 39], "hardwar": [16, 25, 30, 34, 37], "disabl": [16, 35, 37, 38], "them": [16, 23, 26, 33, 34, 36, 37, 39], "synthes": [16, 33, 37], "phys_regs_bit": 16, "file": [16, 23, 26, 33, 39], "rob_entries_bit": 16, "reorder": [16, 26, 37], "buffer": [16, 17, 26, 31, 37], "start_pc": 16, "initi": [16, 17, 25, 37, 38], "program": [16, 26, 33, 34], "icache_en": 16, "bypass": 16, "directli": [16, 34, 36], "icache_wai": 16, "icache_sets_bit": 16, "icache_block_size_bit": 16, "allow_partial_extens": 16, "allow": [16, 24, 26, 33, 34, 36, 37, 40], "partial": [16, 35, 37, 39], "_implied_extens": 16, "extenst": 16, "flag": 16, "definit": [16, 25, 36], "per": [16, 33], "segment": 16, "abc": [16, 36, 37, 38, 39, 40], "func_unit": 16, "csrblockcompon": 16, "factori": [16, 35, 37, 39], "kwarg": [16, 17, 35, 36, 37, 38, 39, 40], "optypes_support": 16, "dependentcach": [16, 39], "cfg": 16, "addr_width": [16, 17], "length": [16, 26, 36, 39], "word_width": 16, "machin": [16, 19], "num_of_wai": 16, "num_of_sets_bit": 16, "block_size_bit": 16, "btypeinstr": 16, "riscvinstr": 16, "static": [16, 35, 36, 39], "pack": 16, "ebreakinstr": 16, "itypeinstr": 16, "illegalinstr": 16, "jtypeinstr": 16, "rtypeinstr": 16, "stypeinstr": 16, "utypeinstr": 16, "avail": [16, 17, 19, 21, 23, 24, 33, 37], "atom": [16, 31, 34], "512": 16, "manipul": 16, "256": 16, "doubl": [16, 19, 26], "precis": [16, 26, 33], "float": [16, 35, 37, 38, 39], "point": [16, 26, 29, 33], "64": [16, 17], "f": [16, 21, 23, 33, 38], "98366": 16, "contain": [16, 23, 33, 34, 36, 37, 39], "basic": [16, 25, 33, 37], "full": [16, 23, 25, 26, 33, 37], "1024": 16, "dynam": [16, 26, 40], "languag": [16, 34], "l": [16, 23], "decim": 16, "m": [16, 17, 19, 20, 23, 26, 33, 34, 36, 37, 40], "divis": 16, "16384": 16, "user": [16, 19, 26, 33, 37], "level": [16, 17, 24, 26, 33, 34, 37, 38, 39], "interrupt": [16, 25], "p": [16, 23], "4096": 16, "simd": 16, "q": 16, "quad": 16, "2048": 16, "8192": 16, "vector": [16, 21, 25, 26, 37], "xintmachinemod": 16, "8589934592": 16, "categor": 16, "privilieg": 16, "xintsupervisor": 16, "17179869184": 16, "supervisor": [16, 19], "zam": 16, "2097152": 16, "misalign": 16, "zba": 16, "268435456": 16, "extend": [16, 29, 36], "zbb": 16, "536870912": 16, "1073741824": 16, "2147483648": 16, "zdinx": 16, "33554432": 16, "zfh": 16, "4194304": 16, "half": 16, "zfhmin": 16, "8388608": 16, "minim": 16, "zfinx": 16, "16777216": 16, "zhinx": 16, "67108864": 16, "zicntr": 16, "524288": 16, "timer": [16, 19], "zicsr": 16, "32768": 16, "statu": [16, 19, 38], "zifencei": 16, "65536": 16, "zihintntl": 16, "262144": 16, "non": [16, 31, 36, 37, 38], "tempor": 16, "local": [16, 20, 23], "hint": [16, 36], "zihintpaus": 16, "131072": 16, "paus": 16, "energi": 16, "zihpm": 16, "1048576": 16, "zmmul": 16, "134217728": 16, "ztso": 16, "4294967296": 16, "total": 16, "gather": 16, "numer": 16, "val": [16, 39], "correspond": [16, 31, 36, 40], "val_log": 16, "relev": [16, 35], "nativ": 16, "reg_cnt": 16, "maximum": [16, 33, 37], "bitwis": 16, "isa_str": 16, "string": [16, 37, 38], "pleas": [16, 23, 29, 34], "refer": [16, 35, 39], "gcc": 16, "arch": [16, 23, 33], "detail": [16, 20, 25, 37], "axiliteinterfac": 17, "abstractinterfac": 17, "abstractsignatur": 17, "read_address": 17, "axilitereadaddressinterfac": 17, "read_data": 17, "axilitereaddatainterfac": 17, "write_address": 17, "axilitewriteaddressinterfac": 17, "write_data": 17, "axilitewritedatainterfac": 17, "write_respons": 17, "axilitewriteresponseinterfac": 17, "axilitemast": 17, "axi": 17, "lite": 17, "axil_param": 17, "axiliteparamet": 17, "ra_request": 17, "channel": 17, "being": [17, 23, 37, 39, 40], "ra_request_layout": 17, "argument": [17, 21, 23, 25, 32, 33, 36, 37, 38, 39, 40], "rd_respons": 17, "availab": 17, "state": [17, 25, 26, 34, 36, 37, 38], "rd_response_layout": 17, "wa_request": 17, "wa_request_layout": 17, "wd_request": 17, "wd_request_layout": 17, "wr_respons": 17, "wr_response_layout": 17, "axil_mast": 17, "result_handl": 17, "start_request_transact": 17, "is_address_channel": 17, "state_machine_request": 17, "request_sign": 17, "data_width": 17, "must": [17, 36, 37, 39], "axilitesignatur": 17, "signatur": 17, "patamet": 17, "axilitemasteradapt": 17, "where": [17, 21, 23, 26, 31, 32, 34, 36, 37, 38, 39], "expect": 17, "busparametersinterfac": 17, "method_layout": 17, "commonbusmastermethodlayout": 17, "request_read": 17, "underli": 17, "request_read_layout": 17, "request_writ": 17, "request_write_layout": 17, "get_read_respons": 17, "action": [17, 19, 36, 37, 39], "read_response_layout": 17, "get_write_respons": 17, "write_response_layout": 17, "prefer": [17, 34], "gain": 17, "simplifi": 17, "interchang": 17, "buse": 17, "previous": 17, "wishbonemasteradapt": 17, "wishbonemast": 17, "pipelinedwishbonemast": 17, "wb_param": 17, "wishboneparamet": 17, "max_req": 17, "limit": [17, 34, 37], "pend": 17, "wb": 17, "request_layout": 17, "result_layout": 17, "requests_finish": 17, "generate_method_layout": 17, "wishbonearbit": 17, "arbit": 17, "slave": 17, "assert": [17, 37, 40], "cyc": 17, "grant": [17, 34, 35, 36, 37, 40], "round": [17, 36, 39, 40], "robin": [17, 36, 40], "num_slav": 17, "devic": 17, "slave_wb": 17, "intefac": 17, "num_mast": 17, "ack": 17, "adr": 17, "dat_r": 17, "dat_w": 17, "err": 17, "lock": [17, 23, 26, 34, 35, 37], "rst": 17, "rty": 17, "stall": [17, 26], "stb": 17, "name": [17, 23, 34, 35, 36, 37, 38, 39, 40], "wb_master": 17, "becom": 17, "wishbonemastermethodlayout": 17, "wishbonememoryslav": 17, "underneath": 17, "keyword": [17, 34, 36, 37, 38, 39], "thei": [17, 19, 23, 26, 30, 33, 34, 36, 37], "re": [17, 26, 29, 34, 36], "infer": [17, 36], "wishbonemux": 17, "muxer": 17, "multiplex": [17, 34], "ssel_tga": 17, "corespond": 17, "tga": 17, "note": [17, 19, 37], "stare": 17, "clear": [17, 31, 32, 37], "delai": [17, 34], "deassert": [17, 40], "master_wb": 17, "singal": 17, "granular": [17, 37], "smallest": 17, "port": [17, 36, 37, 39, 40], "capabl": 17, "wishbonesignatur": 17, "path": [17, 36, 37], "src_loc_at": [17, 37], "csraddress": 19, "3072": 19, "cycleh": 19, "3200": 19, "instret": 19, "3074": 19, "instreth": 19, "3202": 19, "mcaus": 19, "834": 19, "mepc": 19, "833": 19, "mtvec": 19, "773": 19, "3073": 19, "timeh": 19, "3201": 19, "doublecountercsr": 19, "group": [19, 37], "csrregist": 19, "At": 19, "overflow": [19, 37], "low_addr": 19, "high_addr": 19, "lower": [19, 39], "higher": 19, "synthetis": 19, "genericcsrregist": 19, "machinemodecsrregist": 19, "csrlistkei": 19, "listkei": [19, 37, 39], "dependencymanag": [19, 36, 37, 38, 39], "behaviour": [19, 33], "automat": [19, 23, 33, 39], "csrunit": 19, "bodi": [19, 34, 36, 37], "csr_val": 19, "els": [19, 26, 34, 36], "side": [19, 26, 31, 32], "effect": [19, 26, 31, 32, 36, 37], "_fu_read": 19, "_fu_writ": 19, "current": [19, 20, 21, 26, 36], "ignor": 19, "prioriti": [19, 20, 34, 36, 37], "csr_number": 19, "ro_bit": 19, "mask": [19, 37], "those": [19, 26, 36], "some": [19, 26, 29, 34, 36, 37], "upper": [19, 37], "0b11": 19, "discard": 19, "privilegelevel": 19, "csr_access_privileg": 19, "csr_addr": 19, "exceptioncauseregist": 20, "earliest": 20, "report": [20, 37], "rob_get_indic": 20, "fetch_stall_except": 20, "should_update_priorii": 20, "current_caus": 20, "new_caus": 20, "coreinstructioncount": 20, "count": [20, 23, 36, 37, 40], "leav": [20, 23], "decrement": 20, "interruptcontrol": 20, "prepar": [21, 23, 26, 35], "In": [21, 23, 24, 25, 32, 33, 34, 35, 36, 39], "alloc": [21, 30, 31, 32], "renam": [21, 30], "entri": [21, 26, 30, 31, 32, 37, 39], "stuck": 21, "get_instr": 21, "get_free_reg": 21, "rat_renam": 21, "rob_put": 21, "rf_read1": 21, "rf_read2": 21, "reservation_st": 21, "decoded_instr": 21, "id": [21, 31, 32, 35], "free": [21, 25, 26, 32], "ratlayout": 21, "rat_rename_in": 21, "rat_rename_out": 21, "roblayout": 21, "data_layout": [21, 37, 39], "rflayout": 21, "rf_read_out": 21, "rf_read_in": 21, "wakeupselect": 21, "wakeup": [21, 32], "firstli": 21, "get_readi": 21, "binari": [21, 33, 40], "th": [21, 37, 40], "posit": [21, 31, 32, 39], "row": [21, 23, 25], "taken": [21, 33, 36, 37], "take_row": 21, "rslayout": 21, "get_ready_list_out": 21, "take_out": 21, "push": 21, "down": [21, 39], "below": [23, 37], "instal": [23, 33], "python": [23, 34, 36, 37, 39], "interpret": [23, 37, 39], "pip": [23, 33], "virtual": 23, "python3": [23, 33], "venv": [23, 33], "project": [23, 24, 26], "directori": [23, 24, 33], "activ": [23, 33, 37, 38, 40], "bin": [23, 33], "librari": [23, 25, 37], "pip3": [23, 33], "dev": [23, 33], "txt": [23, 33], "riscv64": 23, "elf": 23, "binutil": 23, "your": [23, 29], "favourit": 23, "On": [23, 37], "debian": 23, "distro": 23, "hook": [23, 35], "pre": [23, 33], "run": [23, 33, 34, 35, 36, 37, 38, 40], "linter": 23, "ci": [23, 33], "intend": [23, 36], "By": [23, 36, 37], "test_transact": 23, "One": [23, 26, 34, 37, 40], "even": [23, 26, 34, 36, 37], "testschedul": 23, "Or": [23, 34], "test_singl": 23, "search": 23, "match": [23, 31, 32, 40], "queri": 23, "thank": 23, "uniqu": [23, 35, 37], "just": [23, 34, 37], "help": [23, 26, 37], "find": [23, 26, 37], "parameter": 23, "waveform": 23, "vcd": 23, "gtkw": [23, 39], "gtkwave": [23, 39], "__traces__": 23, "driven": 23, "transactron": [23, 25, 34], "__profile__": 23, "analyz": 23, "verbos": [23, 33], "runner": 23, "print": [23, 37], "code": [23, 24, 26, 29, 33, 34, 35, 37, 39, 40], "subcommand": 23, "filenam": 23, "main": [23, 26, 30, 33], "reformat": 23, "black": 23, "check_format": 23, "verifi": [23, 33], "flake8": 23, "check_typ": 23, "pyright": 23, "confront": 23, "would": [23, 26, 34, 37, 39], "messag": [23, 37], "you": [23, 29, 31, 33, 37], "diff": 23, "displai": 23, "chang": [23, 31, 34, 37, 38, 39, 40], "appli": [23, 26, 29, 35, 38], "chose": 23, "locat": [23, 24, 30, 35, 36, 37, 39], "visual": 23, "architectur": [23, 26, 33], "appropri": [23, 31, 37, 38], "prune": [23, 35], "remov": [23, 26], "disconnect": 23, "node": 23, "elk": [23, 35], "eclips": 23, "kernel": [23, 26], "dot": [23, 35, 37], "graphviz": 23, "mermaid": [23, 35], "document": [23, 25], "sphinx": 23, "html": [23, 24], "build": [23, 33, 37], "present": [23, 26, 34, 37, 39], "readabl": [23, 37], "profile_fil": 23, "json": [23, 33, 39], "about": [23, 25, 35, 37, 39], "column": 23, "question": [23, 34], "togeth": [23, 34, 36], "differenti": 23, "ident": [23, 37], "declar": [23, 34, 37, 38], "disambigu": 23, "show": 23, "caller": [23, 34, 35, 36, 37], "condit": [23, 34, 35, 36, 37], "could": [23, 34, 37], "forc": 23, "conflict": [23, 25, 35, 36], "produc": 23, "tree": [23, 35, 37], "root": [23, 35], "invert": 23, "children": 23, "how": [23, 26, 31, 33, 36, 37], "mani": [23, 26, 33, 34, 35, 36, 37, 39], "sort": [23, 37], "filter": [23, 37], "regular": 23, "express": [23, 34, 37], "loc": 23, "coreblock": [24, 29, 33], "go": [24, 26, 29, 36], "microarchitectur": 24, "focu": 24, "flexibl": [24, 30], "easili": [24, 37], "experi": 24, "doc": 24, "descript": [24, 25, 33, 37, 39], "overview": [24, 25, 26], "high": [24, 37, 40], "found": [24, 33], "version": [24, 33], "page": [24, 26, 33], "api": [24, 25], "kuznia": [24, 33], "rdzeni": [24, 33], "github": [24, 33], "io": [24, 33], "introduct": 25, "assumpt": [25, 26], "made": [25, 26, 34], "develop": [25, 37], "environ": 25, "up": [25, 32, 33, 37, 39], "script": [25, 33], "run_test": [25, 33], "py": [25, 33], "lint": 25, "sh": 25, "core_graph": 25, "build_doc": 25, "tprof": 25, "framework": [25, 31], "usag": 25, "convent": 25, "advanc": 25, "concept": 25, "special": [25, 37], "domain": [25, 29, 36], "nest": [25, 37], "schema": [25, 35, 37, 39], "structur": [25, 26, 31, 34, 35, 36, 37, 39], "proposit": [25, 26], "slot": [25, 37], "tabl": 25, "substitut": 25, "clean": 25, "extern": [25, 33, 34, 36], "problem": [25, 26], "checklist": 25, "verif": 25, "manual": [25, 34], "reproduct": 25, "benchmark": 25, "regress": 25, "map": [25, 26, 36, 37, 38, 39, 40], "summari": 25, "paper": 25, "old": 25, "softwar": [25, 37], "tlb": 25, "analysi": [25, 35], "strategi": 25, "igpu": 25, "specul": 25, "gpu": 25, "effici": 25, "journal": 26, "articl": 26, "look": [26, 37], "choic": 26, "primari": 26, "relat": [26, 36, 37, 39], "procedur": 26, "chosen": 26, "basi": 26, "improv": [26, 34], "pretti": 26, "1993": 26, "2001": 26, "much": [26, 37], "research": 26, "cpu": 26, "consid": [26, 34, 36, 37], "solv": 26, "instead": [26, 29, 34, 35, 36, 37, 38, 40], "try": [26, 29, 34], "due": [26, 36, 37], "characterist": 26, "easi": [26, 29, 34, 37], "our": [26, 30, 33], "decid": [26, 30, 34], "what": 26, "peopl": 26, "probabl": [26, 38], "lot": 26, "worth": 26, "walker": 26, "cragon": 26, "concurr": [26, 36], "ieee": 26, "vol": 26, "june": 26, "1995": 26, "moudgil": 26, "vassiliadi": 26, "micro": 26, "pp": 26, "58": 26, "67": 26, "februari": 26, "1996": 26, "These": [26, 33, 34], "survei": 26, "topic": 26, "cdc": 26, "6600": 26, "done": [26, 33, 34, 36, 37, 38], "jump": 26, "handler": [26, 38], "ibm360": 26, "stop": [26, 37], "crai": 26, "similar": [26, 33, 34, 37, 40], "here": [26, 31], "bigger": [26, 37], "torng": 26, "martin": 26, "dai": 26, "probe": 26, "idea": [26, 34], "author": 26, "window": 26, "iw": 26, "dispatch": [26, 30, 31, 32], "didn": 26, "context": [26, 35, 36, 37, 39], "copi": [26, 35], "restor": [26, 35], "restart": [26, 40], "few": 26, "big": 26, "overhead": 26, "origin": [26, 35, 37], "unfeas": 26, "becaus": [26, 34, 35, 36, 37], "job": 26, "addition": [26, 37], "But": 26, "mayb": [26, 34], "possibl": [26, 33, 34, 37, 39], "cooper": 26, "smaller": 26, "interest": 26, "propos": 26, "nrp": 26, "No": [26, 37], "itself": [26, 39], "don": [26, 29, 31, 34, 36], "wast": 26, "rememb": [26, 34, 35], "element": [26, 37], "left": [26, 34, 36, 37], "middl": [26, 30], "aamer": 26, "jaleel": 26, "bruce": 26, "jacob": 26, "cours": 26, "switch": [26, 31, 34, 36, 37, 40], "penalti": 26, "alpha": 26, "mip": 26, "concentr": 26, "properti": [26, 33, 36], "short": 26, "inlin": 26, "observ": [26, 37], "import": [26, 34], "enough": 26, "live": 26, "known": 26, "fly": 26, "swap": 26, "nop": 26, "reexecut": 26, "privileg": 26, "contrast": 26, "tendenc": 26, "longer": 26, "hard": [26, 37], "risk": [26, 34, 37], "linux": [26, 33], "purpos": [26, 36, 37], "addit": [26, 33, 34, 39], "hw": 26, "bore": 26, "treat": [26, 30], "mansur": 26, "samadzadeh": 26, "loai": 26, "garalnabi": 26, "checkpoint": 26, "repair": 26, "histori": 26, "futur": [26, 30, 31], "jaikrishnan": 26, "menon": 26, "marc": 26, "de": 26, "kruijf": 26, "karthikeyan": 26, "sankaralingam": 26, "2012": 26, "low": 26, "boundari": 26, "safe": [26, 34, 39], "rewritten": 26, "recompil": 26, "runtim": [26, 35], "subregion": 26, "small": 26, "overrid": 26, "barrier": 26, "warp": 26, "wrong": 26, "split": [26, 30, 37, 38], "prevent": 26, "ivan": 26, "tanas": 26, "isaac": 26, "gelado": 26, "jorda": 26, "eduard": 26, "ayguad": 26, "nacho": 26, "navarro": 26, "2017": 26, "analys": 26, "problemat": 26, "successfulli": 26, "kill": 26, "modif": 26, "usual": [26, 34, 37], "fail": [26, 37], "repli": 26, "modifi": [26, 37], "claim": 26, "operand": [26, 31, 32], "replai": 26, "queue": [26, 34, 37], "marker": 26, "jerom": 26, "hampton": 26, "2008": 26, "mention": 26, "alli": 26, "bailei": 26, "ab04": 26, "ag": 26, "rais": [26, 35, 37, 38, 39], "younger": 26, "repeat": 26, "commun": [26, 31, 34], "canon": 26, "eventu": 26, "aren": [26, 34, 37], "someth": [29, 34, 40], "puzzl": 29, "why": 29, "through": [29, 37], "sure": [29, 38], "yield": [29, 38], "notabl": 29, "settl": 29, "unexpect": 29, "ad": [29, 34, 36, 37, 38, 39, 40], "right": [29, 34, 36], "eq": [29, 34, 36], "record": [29, 34, 36, 37, 38, 39, 40], "statement": [29, 34, 36, 38, 39], "loop": [29, 34], "especi": 29, "simul": [29, 33, 35, 37, 38], "hang": 29, "spot": 29, "yourself": [29, 34], "fix": 29, "mistak": 29, "Its": [30, 34], "task": [30, 36], "rss": 30, "phase": 30, "choos": [30, 33], "potenti": 30, "merg": [30, 37], "optim": 30, "todo": 30, "want": [31, 33, 36, 38, 40], "feel": 31, "anyth": 31, "id_out": [31, 32], "id_rob": [31, 32], "id_rs1": [31, 32], "val_rs1": [31, 32], "id_rs2": [31, 32], "val_rs2": [31, 32], "fill": 31, "id_rsx": 31, "val_rsx": 31, "releas": 31, "comparison": 31, "null": [31, 32], "woken": 32, "invalid": [32, 37], "src1": [32, 37], "src2": [32, 37], "inst_readi": 32, "sever": [33, 37], "besid": 33, "synthesis": 33, "ecp5": 33, "fpga": [33, 37], "target": [33, 37], "realiti": 33, "cocotb": 33, "assembl": 33, "deliv": 33, "histor": 33, "dedic": [33, 37], "subpag": 33, "built": 33, "docker": 33, "publicli": 33, "subsect": 33, "recreat": 33, "command": [33, 38], "platform": [33, 34, 35], "amd64": 33, "synth": 33, "latest": [33, 37], "amaranthsynthecp5": 33, "dockerfil": 33, "complex": [33, 37], "although": 33, "educ": 33, "practic": 33, "frequenc": 33, "too": [33, 35], "met": [33, 36], "whether": [33, 36, 40], "cell": 33, "ram": 33, "dff": 33, "repo": 33, "sudo": 33, "pull": 33, "ghcr": 33, "rm": 33, "git": 33, "clone": 33, "http": 33, "com": 33, "cd": 33, "apt": 33, "upgrad": 33, "pythonhashse": 33, "config": 33, "parse_benchmark_info": 33, "cat": 33, "abov": [33, 34], "verilog": [33, 39], "yosi": 33, "nextpnr": 33, "bitstream": 33, "strength": 33, "modular": [33, 34], "littl": 33, "effort": 33, "gate": 33, "rout": 33, "prjtrelli": 33, "measur": [33, 37], "theori": 33, "increas": [33, 34, 37], "fmax": 33, "avoid": [33, 34], "pitfal": 33, "affect": 33, "throughput": [33, 37], "monitor": 33, "accuraci": 33, "embench": 33, "compil": [33, 34, 38], "gnu": 33, "toolchain": 33, "glibc": 33, "subset": 33, "exact": [33, 35], "onc": [33, 34, 36, 37, 40], "veril": 33, "featur": [33, 34], "stub": 33, "compat": [33, 37], "host": 33, "init": [33, 37], "mount": 33, "subdirectori": 33, "share": 33, "surviv": 33, "close": 33, "exit": 33, "gen_verilog": 33, "run_benchmark": 33, "inspir": 34, "bluespec": 34, "wiki": 34, "entrieti": 34, "doe": [34, 38, 40], "link": 34, "indirectli": [34, 36], "coordin": 34, "direct": [34, 35, 36, 37], "back": 34, "simplest": 34, "myth": 34, "def": [34, 36], "elabor": 34, "self": [34, 36, 38], "comb": [34, 36], "sig1": 34, "expr1": 34, "sync": [34, 36], "sig2": 34, "expr2": 34, "arg_expr": 34, "analog": 34, "typic": [34, 36, 37], "myotherth": 34, "my_method": 34, "input_layout": 34, "output_layout": 34, "def_method": [34, 36], "_": [34, 36], "other_method": 34, "ret_expr": 34, "techniqu": 34, "conveni": [34, 36, 37], "syntax": [34, 36], "particular": 34, "unnam": 34, "around": 34, "sometim": 34, "might": [34, 35, 37], "altern": [34, 36, 37], "best": 34, "ask": 34, "thing": [34, 37, 39], "doubt": 34, "noth": 34, "Such": [34, 38], "adaptertran": [34, 37], "though": 34, "cleaner": 34, "suppos": 34, "foo": [34, 37], "bar": [34, 37], "cleanest": 34, "recommend": 34, "foo_expr": 34, "bar_expr": 34, "final": 34, "rec": 34, "layout2": 34, "foobar": 34, "baz": 34, "42": 34, "method2": [34, 37], "baz_expr": 34, "method3": 34, "expr": 34, "mechan": [34, 37], "certain": 34, "occas": 34, "facilit": 34, "ones": 34, "connecttran": [34, 37], "plain": [34, 36, 37], "testbench": [34, 37], "own": [34, 35, 36], "variant": 34, "role": 34, "omit": [34, 36, 37], "unneed": 34, "av_comb": [34, 36], "top_comb": [34, 36], "avoidedif": [34, 36], "guard": [34, 36, 37], "therefor": 34, "induc": 34, "often": 34, "belong": [34, 37], "move": [34, 37], "top": [34, 39], "caveat": 34, "normal": [34, 37], "cannot": [34, 36, 37, 38], "schedule_befor": [34, 36], "first_t_or_m": 34, "other_t_or_m": 34, "lift": 34, "first_m": 34, "other_t": 34, "situat": [34, 36], "mutual": [34, 36, 37], "exclus": [34, 36, 37], "similarli": [34, 37], "add_conflict": [34, 36], "undefin": [34, 36], "other_m": 34, "come": 34, "consider": 34, "parent": 34, "convers": 34, "impli": 34, "amaranth_ext": [35, 39], "extract": 35, "IN": 35, "inout": 35, "owner": 35, "ownershipgraph": 35, "dump": 35, "liter": [35, 40], "dump_dot": 35, "indent": [35, 37, 39], "dump_elk": 35, "dump_mermaid": 35, "get_hier_nam": 35, "obj": 35, "hierarch": 35, "keyerror": [35, 37, 39], "yet": 35, "get_nam": 35, "insert_edg": 35, "fr": 35, "insert_nod": 35, "mermaid_direct": 35, "empti": [35, 37], "subgraph": 35, "remember_field": 35, "owner_id": 35, "methodsampl": 35, "transactions_and_method": 35, "profileinfo": 35, "cycleprofil": 35, "analyze_method": 35, "runstatnod": 35, "analyze_transact": 35, "file_nam": [35, 39], "from_dict": [35, 37, 39], "kv": [35, 37, 39], "union": [35, 36, 37, 38, 39], "infer_miss": [35, 37, 39], "from_json": [35, 37, 39], "bytearrai": [35, 37, 39], "parse_float": [35, 37, 39], "parse_int": [35, 37, 39], "parse_const": [35, 37, 39], "kw": [35, 37, 39], "exclud": [35, 37, 39], "load_onli": [35, 37, 39], "dump_onli": [35, 37, 39], "schemaf": [35, 37, 39], "to_dict": [35, 37, 39], "encode_json": [35, 37, 39], "to_json": [35, 37, 39], "skipkei": [35, 37, 39], "ensure_ascii": [35, 37, 39], "check_circular": [35, 37, 39], "allow_nan": [35, 37, 39], "callabl": [35, 36, 37, 38, 39], "sort_kei": [35, 37, 39], "profiledata": [35, 39], "individu": 35, "method_par": 35, "transactions_by_method": 35, "transaction_conflict": 35, "transaction_manag": [35, 36, 38], "transactionmanag": [35, 36, 38], "src_loc": [35, 36, 37, 39], "srcloc": [35, 36, 37], "is_transact": 35, "profilesampl": 35, "transactionsampl": 35, "runstat": 35, "statist": 35, "did": 35, "info": [35, 37], "summar": 35, "stat": 35, "runnabl": [35, 36], "tracingenabl": 35, "tracingfrag": 35, "fragment": [35, 36], "lose": 35, "difficult": 35, "copyright": 35, "subfrag": 35, "_ir": [35, 39], "tracingfragmenttransform": 35, "fragmenttransform": 35, "on_frag": 35, "tracinginst": 35, "transactionmanagerkei": 36, "simplekei": [36, 37, 39], "care": [36, 37], "never": 36, "cc_schedul": 36, "methodmap": [36, 37], "_dsl": 36, "eager_deterministic_cc_schedul": 36, "add_transact": 36, "_rec": [36, 37, 38, 39, 40], "signalbundl": [36, 37, 38, 39, 40], "print_info": 36, "cgr": 36, "porder": 36, "cc": 36, "method_map": 36, "visual_graph": 36, "transactionmodul": 36, "wrapper": [36, 37], "dependency_manag": [36, 38], "wrap": [36, 38], "dependencycontext": [36, 39], "transactionbas": 36, "serv": [36, 37], "simultena": 36, "rest": 36, "behavior": [36, 37, 39], "combination": 36, "data_out": [36, 37], "data_in": [36, 37], "methodstruct": [36, 37], "shape": [36, 39], "shapecast": [36, 39], "forwardref": [36, 38, 39], "shapelik": [36, 37, 39], "layoutlist": [36, 37, 39], "nonexclus": 36, "single_cal": [36, 37], "variabl": [36, 40], "happen": 36, "thrown": 36, "stack": [36, 37, 39], "frame": [36, 37], "deep": [36, 37], "const": [36, 37], "d1": [36, 37], "d0": 36, "validate_argu": 36, "combinationi": 36, "valuelik": [36, 37], "my_sum_method": 36, "arg1": 36, "arg2": 36, "sum": [36, 37], "layout_in": 36, "layout_out": 36, "construct": [36, 37], "blueprint": 36, "freshli": 36, "proxi": 36, "gr": 36, "transactiongraph": 36, "transactiongraphcc": 36, "priorityord": 36, "eager": 36, "subsystem": [36, 40], "fair": 36, "lowest": 36, "highest": [36, 40], "arbitr": [36, 40], "agent": [36, 40], "vertic": 36, "edg": [36, 37], "linear": 36, "consist": 36, "constraint": 36, "trivial_roundrobin_cc_schedul": 36, "mainli": 36, "decor": [36, 38], "eleg": 36, "dictionari": 36, "whose": 36, "modulelik": [36, 37, 40], "amount": [36, 38], "useless": 36, "multplex": 36, "unguard": 36, "synchron": [36, 37], "cond": [36, 37], "pattern": 36, "elif": 36, "fsm": 36, "ctrl_path": 36, "noreturn": 36, "regularli": 36, "explicit": 36, "implicit": 36, "aris": 36, "pair": [36, 37], "transactioncontext": 36, "priorit": 36, "reason": [36, 37], "transactionormethodbound": 36, "ctrlpath": 36, "def_count": 36, "classvar": 36, "def_ord": 36, "independent_list": 36, "method_cal": 36, "defaultdict": 36, "method_us": 36, "owned_nam": 36, "peek": 36, "relationbas": 36, "simultaneous_altern": 36, "simultaneous_list": 36, "adapterbas": [37, 38], "mock": [37, 38], "en": [37, 38], "clickin": 37, "click": 37, "interact": 37, "rise": 37, "btn": 37, "dat": 37, "retriev": 37, "clickout": 37, "led": 37, "flow": 37, "revers": 37, "possibli": 37, "rev_layout": 37, "vice": 37, "versa": 37, "method1": 37, "respect": 37, "fulfil": 37, "fifo_typ": 37, "syncfifo": 37, "fifotyp": 37, "conform": 37, "equival": 37, "put_result": 37, "stableselectingnetwork": 37, "network": 37, "consecut": 37, "preserv": 37, "divid": 37, "conquer": 37, "properli": 37, "v1": 37, "v2": 37, "now": [37, 38], "thu": 37, "log_2": 37, "dependencykei": [37, 39], "concret": [37, 39], "frozen": [37, 39], "lock_on_get": [37, 39], "get_depend": [37, 39], "empty_valid": [37, 39], "add_depend": [37, 39], "give": [37, 39], "track": [37, 39], "across": [37, 39], "multpl": [37, 39], "dependeci": [37, 39], "default_valu": [37, 39], "unifi": 37, "wish": 37, "custom": 37, "basicfifo": 37, "reiniti": 37, "semaphor": 37, "max_count": 37, "hardwarelogg": 37, "intuit": 37, "logger": 37, "anywher": 37, "natur": 37, "shall": 37, "evalu": [37, 38], "arbitrari": 37, "exactli": 37, "organ": 37, "namespac": 37, "hierarchi": 37, "period": 37, "bpu": 37, "There": 37, "bug": 37, "otherwis": [37, 40], "detect": 37, "termin": 37, "turn": 37, "warn": 37, "board": 37, "semant": 37, "server": 37, "pep": 37, "3101": 37, "logkei": 37, "logrecord": 37, "logrecordinfo": [37, 39], "event": 37, "logger_nam": [37, 39], "format_str": [37, 39], "agnost": 37, "outsid": 37, "loglevel": 37, "templat": 37, "get_log_record": 37, "namespace_regexp": [37, 38], "minimum": 37, "regexp": 37, "get_trigger_bit": 37, "hardwaremetricsmanag": 37, "compos": 37, "get_metr": 37, "hwmetric": 37, "get_register_valu": 37, "metric_nam": 37, "reg_nam": 37, "qualifi": 37, "histogram": 37, "bucket": 37, "hwcounter": 37, "fully_qualified_nam": 37, "width_bit": 37, "human": 37, "incr": 37, "hwexphistogram": 37, "exponenti": 37, "distribut": 37, "sampl": 37, "durat": 37, "inf": 37, "bucket_count": 37, "sample_width": 37, "registers_width": 37, "max_valu": 37, "abl": 37, "metricmodel": 37, "add_regist": 37, "reg": [37, 39], "hwmetricregist": 37, "inherit": 37, "metrics_en": 37, "hwmetricsenabledkei": 37, "theirs": 37, "latencymeasur": 37, "slots_numb": 37, "max_lat": 37, "oldest": 37, "compris": 37, "join": 37, "metricregistermodel": 37, "fundament": 37, "singular": 37, "among": 37, "reman": 37, "brief": 37, "argumentstoresultszipp": 37, "zip": 37, "cut": 37, "critic": 37, "calle": 37, "asymmetri": 37, "correctli": 37, "rate": 37, "reach": [37, 40], "capac": 37, "topologi": 37, "write_arg": 37, "args_layout": 37, "write_result": 37, "results_layout": 37, "client": 37, "somethig": 37, "deseri": 37, "proper": 37, "serialize_in": 37, "serialized_req_method": 37, "serialize_out": 37, "serialized_resp_method": 37, "port_count": 37, "len": 37, "resist": 37, "nonblock": 37, "overlap": 37, "boolean": 37, "catch": 37, "influenc": 37, "cond1": 37, "cond2": 37, "memorybank": 37, "read_req": 37, "read_resp": 37, "elem_count": 37, "safe_writ": 37, "optimis": 37, "eg": 37, "x": [37, 39], "later": 37, "cattran": 37, "concaten": 37, "third": 37, "dst": 37, "collector": 37, "method_list": 37, "connectandmaptran": 37, "behav": 37, "i_fun": 37, "recorddict": 37, "o_fun": 37, "methodfilt": 37, "desir": 37, "use_condit": 37, "drawback": 37, "simultaneu": 37, "bidirect": 37, "i_transform": 37, "o_transform": 37, "unmodifi": 37, "methodproduct": 37, "methodtryproduct": 37, "tri": 37, "succeed": 37, "get_output": 38, "coreblockscommand": 38, "recordintdict": 38, "set_input": 38, "recordvaluedict": 38, "write_vcd_ext": 38, "engin": 38, "vcd_file": 38, "gtkw_file": 38, "pysimsimul": 38, "max_cycl": 38, "100000": 38, "add_transaction_modul": 38, "traces_fil": 38, "clk_period": 38, "1e": 38, "add_sync_process": 38, "add_process": 38, "passiv": 38, "add_clock": 38, "simpletestcircuit": 38, "_t_haselabor": 38, "dut": 38, "syncprocesswrapp": 38, "testcasewithsimul": 38, "testcas": 38, "valueerror": [38, 39], "add_all_mock": 38, "sim": 38, "frame_loc": 38, "add_class_mock": 38, "add_local_mock": 38, "random_wait": 38, "max_cycle_cnt": 38, "min_cycle_cnt": 38, "random_wait_geom": 38, "prob": 38, "till": 38, "run_simul": 38, "tick": 38, "cycle_cnt": 38, "guard_nested_collect": 38, "_t_nested_collect": 38, "make_logging_process": 38, "on_error": 38, "parse_logging_level": 38, "pars": 38, "neg": [38, 39], "represent": [38, 39, 40], "predefin": 38, "profiler_process": 38, "def_method_mock": 38, "tb_getter": 38, "sched_prio": 38, "method_handle_loop": 38, "invoc": 38, "defer": 38, "sinc": 38, "eagerli": 38, "kwdata": 38, "call_do": 38, "call_init": 38, "call_result": 38, "call_tri": 38, "method_argu": 38, "method_handl": 38, "extra_settle_count": 38, "method_return": 38, "set_en": 38, "wait_until_don": 38, "assigntyp": 39, "rh": 39, "lh": 39, "assignarg": 39, "assignfield": 39, "lhs_strict": 39, "rhs_strict": 39, "mismatch": 39, "accord": 39, "explicitli": 39, "castabl": 39, "subfield": 39, "align_down_to_power_of_two": 39, "num": 39, "align_to_power_of_two": 39, "average_dict_of_list": 39, "bits_from_int": 39, "int_to_sign": 39, "convert": 39, "u2": 39, "sign": 39, "layout_subset": 39, "make_hash": 39, "negat": 39, "signed_to_int": 39, "auto_debug_sign": 39, "arrai": 39, "cl": 39, "generatedlog": 39, "trigger_loc": 39, "signalhandl": 39, "fields_loc": 39, "generationinfo": 39, "variou": 39, "metrics_loc": 39, "metricinfo": 39, "metadata": 39, "metricloc": 39, "transaction_signals_loc": 39, "transactionsignalsloc": 39, "method_signals_loc": 39, "methodsignalsloc": 39, "profile_data": 39, "generate_verilog": 39, "top_modul": 39, "top_nam": 39, "idgener": 39, "def_help": 39, "func": 39, "from_method_layout": 39, "get_caller_class_nam": 39, "get_src_loc": 39, "method_def_help": 39, "mock_def_help": 39, "tb": 39, "silence_mustus": 39, "moduleconnector": 40, "anonym": 40, "onehotswitch": 40, "style": 40, "benefit": 40, "sig": 40, "onehotcas": 40, "0b01": 40, "0b10": 40, "onehotswitchdynam": 40, "signifi": 40, "roundrobin": 40, "greater": 40, "enableinsert": 40, "count_leading_zero": 40, "count_trailing_zero": 40, "flatten_sign": 40, "flatten": 40, "mod_incr": 40, "mod": 40, "popcount": 40}, "objects": {"": [[4, 0, 0, "-", "coreblocks"], [35, 0, 0, "-", "transactron"]], "coreblocks": [[5, 0, 0, "-", "backend"], [6, 0, 0, "-", "cache"], [4, 0, 0, "-", "core"], [7, 0, 0, "-", "core_structs"], [8, 0, 0, "-", "frontend"], [11, 0, 0, "-", "func_blocks"], [16, 0, 0, "-", "params"], [17, 0, 0, "-", "peripherals"], [18, 0, 0, "-", "priv"], [21, 0, 0, "-", "scheduler"]], "coreblocks.backend": [[5, 0, 0, "-", "annoucement"], [5, 0, 0, "-", "retirement"]], "coreblocks.backend.annoucement": [[5, 1, 1, "", "ResultAnnouncement"]], "coreblocks.backend.annoucement.ResultAnnouncement": [[5, 2, 1, "", "__init__"], [5, 2, 1, "", "debug_signals"]], "coreblocks.backend.retirement": [[5, 1, 1, "", "Retirement"]], "coreblocks.backend.retirement.Retirement": [[5, 2, 1, "", "__init__"]], "coreblocks.cache": [[6, 0, 0, "-", "icache"], [6, 0, 0, "-", "iface"], [6, 0, 0, "-", "refiller"]], "coreblocks.cache.icache": [[6, 1, 1, "", "ICache"], [6, 1, 1, "", "ICacheBypass"]], "coreblocks.cache.icache.ICache": [[6, 2, 1, "", "__init__"], [6, 2, 1, "", "deserialize_addr"], [6, 2, 1, "", "serialize_addr"]], "coreblocks.cache.icache.ICacheBypass": [[6, 2, 1, "", "__init__"]], "coreblocks.cache.iface": [[6, 1, 1, "", "CacheInterface"], [6, 1, 1, "", "CacheRefillerInterface"]], "coreblocks.cache.iface.CacheInterface": [[6, 3, 1, "", "accept_res"], [6, 3, 1, "", "flush"], [6, 3, 1, "", "issue_req"]], "coreblocks.cache.iface.CacheRefillerInterface": [[6, 3, 1, "", "accept_refill"], [6, 3, 1, "", "start_refill"]], "coreblocks.cache.refiller": [[6, 1, 1, "", "SimpleCommonBusCacheRefiller"]], "coreblocks.cache.refiller.SimpleCommonBusCacheRefiller": [[6, 2, 1, "", "__init__"]], "coreblocks.core": [[4, 1, 1, "", "Core"]], "coreblocks.core.Core": [[4, 2, 1, "", "__init__"]], "coreblocks.core_structs": [[7, 0, 0, "-", "rat"], [7, 0, 0, "-", "rf"], [7, 0, 0, "-", "rob"]], "coreblocks.core_structs.rat": [[7, 1, 1, "", "FRAT"], [7, 1, 1, "", "RRAT"]], "coreblocks.core_structs.rat.FRAT": [[7, 2, 1, "", "__init__"]], "coreblocks.core_structs.rat.RRAT": [[7, 2, 1, "", "__init__"]], "coreblocks.core_structs.rf": [[7, 1, 1, "", "RegisterFile"]], "coreblocks.core_structs.rf.RegisterFile": [[7, 2, 1, "", "__init__"]], "coreblocks.core_structs.rob": [[7, 1, 1, "", "ReorderBuffer"]], "coreblocks.core_structs.rob.ReorderBuffer": [[7, 2, 1, "", "__init__"]], "coreblocks.frontend": [[9, 0, 0, "-", "decoder"], [10, 0, 0, "-", "fetch"]], "coreblocks.frontend.decoder": [[9, 0, 0, "-", "decode_stage"], [9, 0, 0, "-", "instr_decoder"], [9, 0, 0, "-", "instr_description"], [9, 0, 0, "-", "isa"], [9, 0, 0, "-", "optypes"], [9, 0, 0, "-", "rvc"]], "coreblocks.frontend.decoder.decode_stage": [[9, 1, 1, "", "DecodeStage"]], "coreblocks.frontend.decoder.decode_stage.DecodeStage": [[9, 2, 1, "", "__init__"]], "coreblocks.frontend.decoder.instr_decoder": [[9, 1, 1, "", "InstrDecoder"]], "coreblocks.frontend.decoder.instr_decoder.InstrDecoder": [[9, 2, 1, "", "__init__"]], "coreblocks.frontend.decoder.instr_description": [[9, 1, 1, "", "Encoding"]], "coreblocks.frontend.decoder.instr_description.Encoding": [[9, 2, 1, "", "__init__"], [9, 3, 1, "", "funct12"], [9, 3, 1, "", "funct3"], [9, 3, 1, "", "funct7"], [9, 3, 1, "", "instr_type_override"], [9, 3, 1, "", "opcode"], [9, 3, 1, "", "rd_zero"], [9, 3, 1, "", "rs1_zero"]], "coreblocks.frontend.decoder.isa": [[9, 1, 1, "", "ExceptionCause"], [9, 1, 1, "", "FenceFm"], [9, 1, 1, "", "FenceTarget"], [9, 1, 1, "", "Funct12"], [9, 1, 1, "", "Funct3"], [9, 1, 1, "", "Funct7"], [9, 1, 1, "", "InstrType"], [9, 1, 1, "", "Opcode"], [9, 1, 1, "", "Registers"]], "coreblocks.frontend.decoder.isa.ExceptionCause": [[9, 3, 1, "", "BREAKPOINT"], [9, 3, 1, "", "ENVIRONMENT_CALL_FROM_M"], [9, 3, 1, "", "ENVIRONMENT_CALL_FROM_S"], [9, 3, 1, "", "ENVIRONMENT_CALL_FROM_U"], [9, 3, 1, "", "ILLEGAL_INSTRUCTION"], [9, 3, 1, "", "INSTRUCTION_ACCESS_FAULT"], [9, 3, 1, "", "INSTRUCTION_ADDRESS_MISALIGNED"], [9, 3, 1, "", "INSTRUCTION_PAGE_FAULT"], [9, 3, 1, "", "LOAD_ACCESS_FAULT"], [9, 3, 1, "", "LOAD_ADDRESS_MISALIGNED"], [9, 3, 1, "", "LOAD_PAGE_FAULT"], [9, 3, 1, "", "STORE_ACCESS_FAULT"], [9, 3, 1, "", "STORE_ADDRESS_MISALIGNED"], [9, 3, 1, "", "STORE_PAGE_FAULT"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.FenceFm": [[9, 3, 1, "", "NONE"], [9, 3, 1, "", "TSO"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.FenceTarget": [[9, 3, 1, "", "DEV_I"], [9, 3, 1, "", "DEV_O"], [9, 3, 1, "", "MEM_R"], [9, 3, 1, "", "MEM_W"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Funct12": [[9, 3, 1, "", "CLZ"], [9, 3, 1, "", "CPOP"], [9, 3, 1, "", "CTZ"], [9, 3, 1, "", "EBREAK"], [9, 3, 1, "", "ECALL"], [9, 3, 1, "", "MRET"], [9, 3, 1, "", "ORCB"], [9, 3, 1, "", "REV8_32"], [9, 3, 1, "", "REV8_64"], [9, 3, 1, "", "SEXTB"], [9, 3, 1, "", "SEXTH"], [9, 3, 1, "", "SRET"], [9, 3, 1, "", "WFI"], [9, 3, 1, "", "ZEXTH"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Funct3": [[9, 3, 1, "", "ADD"], [9, 3, 1, "", "AND"], [9, 3, 1, "", "ANDN"], [9, 3, 1, "", "B"], [9, 3, 1, "", "BCLR"], [9, 3, 1, "", "BEQ"], [9, 3, 1, "", "BEXT"], [9, 3, 1, "", "BGE"], [9, 3, 1, "", "BGEU"], [9, 3, 1, "", "BINV"], [9, 3, 1, "", "BLT"], [9, 3, 1, "", "BLTU"], [9, 3, 1, "", "BNE"], [9, 3, 1, "", "BSET"], [9, 3, 1, "", "BU"], [9, 3, 1, "", "CLMUL"], [9, 3, 1, "", "CLMULH"], [9, 3, 1, "", "CLMULR"], [9, 3, 1, "", "CLZ"], [9, 3, 1, "", "CPOP"], [9, 3, 1, "", "CSRRC"], [9, 3, 1, "", "CSRRCI"], [9, 3, 1, "", "CSRRS"], [9, 3, 1, "", "CSRRSI"], [9, 3, 1, "", "CSRRW"], [9, 3, 1, "", "CSRRWI"], [9, 3, 1, "", "CTZ"], [9, 3, 1, "", "D"], [9, 3, 1, "", "DIV"], [9, 3, 1, "", "DIVU"], [9, 3, 1, "", "DIVUW"], [9, 3, 1, "", "DIVW"], [9, 3, 1, "", "FENCE"], [9, 3, 1, "", "FENCEI"], [9, 3, 1, "", "H"], [9, 3, 1, "", "HU"], [9, 3, 1, "", "JALR"], [9, 3, 1, "", "MAX"], [9, 3, 1, "", "MAXU"], [9, 3, 1, "", "MIN"], [9, 3, 1, "", "MINU"], [9, 3, 1, "", "MUL"], [9, 3, 1, "", "MULH"], [9, 3, 1, "", "MULHSU"], [9, 3, 1, "", "MULHU"], [9, 3, 1, "", "MULW"], [9, 3, 1, "", "OR"], [9, 3, 1, "", "ORCB"], [9, 3, 1, "", "ORN"], [9, 3, 1, "", "PRIV"], [9, 3, 1, "", "REM"], [9, 3, 1, "", "REMU"], [9, 3, 1, "", "REMUW"], [9, 3, 1, "", "REMW"], [9, 3, 1, "", "REV8"], [9, 3, 1, "", "ROL"], [9, 3, 1, "", "ROR"], [9, 3, 1, "", "SEXTB"], [9, 3, 1, "", "SEXTH"], [9, 3, 1, "", "SH1ADD"], [9, 3, 1, "", "SH2ADD"], [9, 3, 1, "", "SH3ADD"], [9, 3, 1, "", "SLL"], [9, 3, 1, "", "SLT"], [9, 3, 1, "", "SLTU"], [9, 3, 1, "", "SR"], [9, 3, 1, "", "SUB"], [9, 3, 1, "", "W"], [9, 3, 1, "", "XNOR"], [9, 3, 1, "", "XOR"], [9, 3, 1, "", "ZEXTH"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Funct7": [[9, 3, 1, "", "ADD"], [9, 3, 1, "", "AND"], [9, 3, 1, "", "ANDN"], [9, 3, 1, "", "BCLR"], [9, 3, 1, "", "BEXT"], [9, 3, 1, "", "BINV"], [9, 3, 1, "", "BSET"], [9, 3, 1, "", "CLMUL"], [9, 3, 1, "", "CLZ"], [9, 3, 1, "", "CPOP"], [9, 3, 1, "", "CTZ"], [9, 3, 1, "", "MAX"], [9, 3, 1, "", "MIN"], [9, 3, 1, "", "MULDIV"], [9, 3, 1, "", "OR"], [9, 3, 1, "", "ORCB"], [9, 3, 1, "", "ORN"], [9, 3, 1, "", "REV8"], [9, 3, 1, "", "ROL"], [9, 3, 1, "", "ROR"], [9, 3, 1, "", "SA"], [9, 3, 1, "", "SEXTB"], [9, 3, 1, "", "SEXTH"], [9, 3, 1, "", "SFENCEVMA"], [9, 3, 1, "", "SH1ADD"], [9, 3, 1, "", "SH2ADD"], [9, 3, 1, "", "SH3ADD"], [9, 3, 1, "", "SL"], [9, 3, 1, "", "SLT"], [9, 3, 1, "", "SUB"], [9, 3, 1, "", "XNOR"], [9, 3, 1, "", "XOR"], [9, 3, 1, "", "ZEXTH"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.InstrType": [[9, 3, 1, "", "B"], [9, 3, 1, "", "I"], [9, 3, 1, "", "J"], [9, 3, 1, "", "R"], [9, 3, 1, "", "S"], [9, 3, 1, "", "U"]], "coreblocks.frontend.decoder.isa.Opcode": [[9, 3, 1, "", "AUIPC"], [9, 3, 1, "", "BRANCH"], [9, 3, 1, "", "JAL"], [9, 3, 1, "", "JALR"], [9, 3, 1, "", "LOAD"], [9, 3, 1, "", "LOAD_FP"], [9, 3, 1, "", "LUI"], [9, 3, 1, "", "MISC_MEM"], [9, 3, 1, "", "OP"], [9, 3, 1, "", "OP32"], [9, 3, 1, "", "OP_IMM"], [9, 3, 1, "", "OP_IMM_32"], [9, 3, 1, "", "STORE"], [9, 3, 1, "", "STORE_FP"], [9, 3, 1, "", "SYSTEM"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Registers": [[9, 3, 1, "", "A0"], [9, 3, 1, "", "A1"], [9, 3, 1, "", "A2"], [9, 3, 1, "", "A3"], [9, 3, 1, "", "A4"], [9, 3, 1, "", "A5"], [9, 3, 1, "", "A6"], [9, 3, 1, "", "A7"], [9, 3, 1, "", "FP"], [9, 3, 1, "", "GP"], [9, 3, 1, "", "RA"], [9, 3, 1, "", "S0"], [9, 3, 1, "", "S1"], [9, 3, 1, "", "S10"], [9, 3, 1, "", "S11"], [9, 3, 1, "", "S2"], [9, 3, 1, "", "S3"], [9, 3, 1, "", "S4"], [9, 3, 1, "", "S5"], [9, 3, 1, "", "S6"], [9, 3, 1, "", "S7"], [9, 3, 1, "", "S8"], [9, 3, 1, "", "S9"], [9, 3, 1, "", "SP"], [9, 3, 1, "", "T0"], [9, 3, 1, "", "T1"], [9, 3, 1, "", "T2"], [9, 3, 1, "", "T3"], [9, 3, 1, "", "T4"], [9, 3, 1, "", "T5"], [9, 3, 1, "", "T6"], [9, 3, 1, "", "TP"], [9, 3, 1, "", "X0"], [9, 3, 1, "", "X1"], [9, 3, 1, "", "X10"], [9, 3, 1, "", "X11"], [9, 3, 1, "", "X12"], [9, 3, 1, "", "X13"], [9, 3, 1, "", "X14"], [9, 3, 1, "", "X15"], [9, 3, 1, "", "X16"], [9, 3, 1, "", "X17"], [9, 3, 1, "", "X18"], [9, 3, 1, "", "X19"], [9, 3, 1, "", "X2"], [9, 3, 1, "", "X20"], [9, 3, 1, "", "X21"], [9, 3, 1, "", "X22"], [9, 3, 1, "", "X23"], [9, 3, 1, "", "X24"], [9, 3, 1, "", "X25"], [9, 3, 1, "", "X26"], [9, 3, 1, "", "X27"], [9, 3, 1, "", "X28"], [9, 3, 1, "", "X29"], [9, 3, 1, "", "X3"], [9, 3, 1, "", "X30"], [9, 3, 1, "", "X31"], [9, 3, 1, "", "X4"], [9, 3, 1, "", "X5"], [9, 3, 1, "", "X6"], [9, 3, 1, "", "X7"], [9, 3, 1, "", "X8"], [9, 3, 1, "", "X9"], [9, 3, 1, "", "ZERO"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.optypes": [[9, 1, 1, "", "OpType"], [9, 4, 1, "", "optypes_required_by_extensions"]], "coreblocks.frontend.decoder.optypes.OpType": [[9, 3, 1, "", "ADDRESS_GENERATION"], [9, 3, 1, "", "ARITHMETIC"], [9, 3, 1, "", "AUIPC"], [9, 3, 1, "", "BIT_MANIPULATION"], [9, 3, 1, "", "BIT_ROTATION"], [9, 3, 1, "", "BRANCH"], [9, 3, 1, "", "CLMUL"], [9, 3, 1, "", "COMPARE"], [9, 3, 1, "", "CSR_IMM"], [9, 3, 1, "", "CSR_REG"], [9, 3, 1, "", "DIV_REM"], [9, 3, 1, "", "EBREAK"], [9, 3, 1, "", "ECALL"], [9, 3, 1, "", "EXCEPTION"], [9, 3, 1, "", "FENCE"], [9, 3, 1, "", "FENCEI"], [9, 3, 1, "", "JAL"], [9, 3, 1, "", "JALR"], [9, 3, 1, "", "LOAD"], [9, 3, 1, "", "LOGIC"], [9, 3, 1, "", "MRET"], [9, 3, 1, "", "MUL"], [9, 3, 1, "", "SFENCEVMA"], [9, 3, 1, "", "SHIFT"], [9, 3, 1, "", "SINGLE_BIT_MANIPULATION"], [9, 3, 1, "", "SRET"], [9, 3, 1, "", "STORE"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_1"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_2"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_3"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_4"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_5"], [9, 3, 1, "", "UNKNOWN"], [9, 3, 1, "", "WFI"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.rvc": [[9, 1, 1, "", "InstrDecompress"], [9, 4, 1, "", "is_instr_compressed"]], "coreblocks.frontend.decoder.rvc.InstrDecompress": [[9, 2, 1, "", "__init__"], [9, 2, 1, "", "decompr_reg"], [9, 2, 1, "", "instr_mux"]], "coreblocks.frontend.fetch": [[10, 0, 0, "-", "fetch"]], "coreblocks.frontend.fetch.fetch": [[10, 1, 1, "", "Fetch"], [10, 1, 1, "", "UnalignedFetch"]], "coreblocks.frontend.fetch.fetch.Fetch": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.fetch.fetch.UnalignedFetch": [[10, 2, 1, "", "__init__"]], "coreblocks.func_blocks": [[12, 0, 0, "-", "fu"], [14, 0, 0, "-", "interface"], [15, 0, 0, "-", "lsu"]], "coreblocks.func_blocks.fu": [[12, 0, 0, "-", "alu"], [12, 0, 0, "-", "div_unit"], [12, 0, 0, "-", "exception"], [12, 0, 0, "-", "jumpbranch"], [12, 0, 0, "-", "mul_unit"], [12, 0, 0, "-", "priv"], [12, 0, 0, "-", "shift_unit"], [13, 0, 0, "-", "unsigned_multiplication"], [12, 0, 0, "-", "zbc"], [12, 0, 0, "-", "zbs"]], "coreblocks.func_blocks.fu.alu": [[12, 1, 1, "", "ALUComponent"], [12, 1, 1, "", "AluFuncUnit"]], "coreblocks.func_blocks.fu.alu.ALUComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.alu.AluFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.div_unit": [[12, 1, 1, "", "DivComponent"], [12, 1, 1, "", "DivFn"], [12, 1, 1, "", "DivUnit"], [12, 4, 1, "", "get_input"]], "coreblocks.func_blocks.fu.div_unit.DivComponent": [[12, 2, 1, "", "__init__"], [12, 3, 1, "", "div_fn"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"], [12, 3, 1, "", "ipc"]], "coreblocks.func_blocks.fu.div_unit.DivFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.div_unit.DivFn.Fn": [[12, 3, 1, "", "DIV"], [12, 3, 1, "", "DIVU"], [12, 3, 1, "", "REM"], [12, 3, 1, "", "REMU"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.div_unit.DivUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.exception": [[12, 1, 1, "", "ExceptionFuncUnit"], [12, 1, 1, "", "ExceptionUnitComponent"]], "coreblocks.func_blocks.fu.exception.ExceptionFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.exception.ExceptionUnitComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.jumpbranch": [[12, 1, 1, "", "JumpBranchFuncUnit"], [12, 1, 1, "", "JumpComponent"]], "coreblocks.func_blocks.fu.jumpbranch.JumpBranchFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.jumpbranch.JumpComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.mul_unit": [[12, 1, 1, "", "MulComponent"], [12, 1, 1, "", "MulFn"], [12, 1, 1, "", "MulType"], [12, 1, 1, "", "MulUnit"]], "coreblocks.func_blocks.fu.mul_unit.MulComponent": [[12, 2, 1, "", "__init__"], [12, 3, 1, "", "dsp_width"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"], [12, 3, 1, "", "mul_fn"], [12, 3, 1, "", "mul_unit_type"]], "coreblocks.func_blocks.fu.mul_unit.MulFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.mul_unit.MulFn.Fn": [[12, 3, 1, "", "MUL"], [12, 3, 1, "", "MULH"], [12, 3, 1, "", "MULHSU"], [12, 3, 1, "", "MULHU"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.mul_unit.MulType": [[12, 3, 1, "", "RECURSIVE_MUL"], [12, 3, 1, "", "SEQUENCE_MUL"], [12, 3, 1, "", "SHIFT_MUL"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.mul_unit.MulUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.priv": [[12, 1, 1, "", "PrivilegedFn"], [12, 1, 1, "", "PrivilegedFuncUnit"], [12, 1, 1, "", "PrivilegedUnitComponent"]], "coreblocks.func_blocks.fu.priv.PrivilegedFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.priv.PrivilegedFn.Fn": [[12, 3, 1, "", "MRET"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.priv.PrivilegedFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.priv.PrivilegedUnitComponent": [[12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.shift_unit": [[12, 1, 1, "", "ShiftFuncUnit"], [12, 1, 1, "", "ShiftUnitComponent"]], "coreblocks.func_blocks.fu.shift_unit.ShiftFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.shift_unit.ShiftUnitComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.unsigned_multiplication": [[13, 0, 0, "-", "common"], [13, 0, 0, "-", "fast_recursive"], [13, 0, 0, "-", "sequence"], [13, 0, 0, "-", "shift"]], "coreblocks.func_blocks.fu.unsigned_multiplication.common": [[13, 1, 1, "", "DSPMulUnit"], [13, 1, 1, "", "MulBaseUnsigned"]], "coreblocks.func_blocks.fu.unsigned_multiplication.common.DSPMulUnit": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.common.MulBaseUnsigned": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.fast_recursive": [[13, 1, 1, "", "RecursiveUnsignedMul"]], "coreblocks.func_blocks.fu.unsigned_multiplication.fast_recursive.RecursiveUnsignedMul": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.sequence": [[13, 1, 1, "", "SequentialUnsignedMul"]], "coreblocks.func_blocks.fu.unsigned_multiplication.sequence.SequentialUnsignedMul": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.shift": [[13, 1, 1, "", "ShiftUnsignedMul"]], "coreblocks.func_blocks.fu.unsigned_multiplication.shift.ShiftUnsignedMul": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.zbc": [[12, 1, 1, "", "ClMultiplier"], [12, 1, 1, "", "ZbcComponent"], [12, 1, 1, "", "ZbcFn"], [12, 1, 1, "", "ZbcUnit"]], "coreblocks.func_blocks.fu.zbc.ClMultiplier": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "iterative_module"], [12, 2, 1, "", "recursive_module"]], "coreblocks.func_blocks.fu.zbc.ZbcComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"], [12, 3, 1, "", "recursion_depth"], [12, 3, 1, "", "zbc_fn"]], "coreblocks.func_blocks.fu.zbc.ZbcFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.zbc.ZbcFn.Fn": [[12, 3, 1, "", "CLMUL"], [12, 3, 1, "", "CLMULH"], [12, 3, 1, "", "CLMULR"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.zbc.ZbcUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.zbs": [[12, 1, 1, "", "Zbs"], [12, 1, 1, "", "ZbsComponent"], [12, 1, 1, "", "ZbsFunction"], [12, 1, 1, "", "ZbsUnit"]], "coreblocks.func_blocks.fu.zbs.Zbs": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.zbs.ZbsComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.zbs.ZbsFunction": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.zbs.ZbsFunction.Fn": [[12, 3, 1, "", "BCLR"], [12, 3, 1, "", "BEXT"], [12, 3, 1, "", "BINV"], [12, 3, 1, "", "BSET"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.zbs.ZbsUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.interface": [[14, 0, 0, "-", "func_blocks_unifier"], [14, 0, 0, "-", "func_protocols"]], "coreblocks.func_blocks.interface.func_blocks_unifier": [[14, 1, 1, "", "FuncBlocksUnifier"]], "coreblocks.func_blocks.interface.func_blocks_unifier.FuncBlocksUnifier": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "get_extra_method"]], "coreblocks.func_blocks.interface.func_protocols": [[14, 1, 1, "", "FuncBlock"], [14, 1, 1, "", "FuncUnit"]], "coreblocks.func_blocks.interface.func_protocols.FuncBlock": [[14, 3, 1, "", "get_result"], [14, 3, 1, "", "insert"], [14, 3, 1, "", "select"], [14, 3, 1, "", "update"]], "coreblocks.func_blocks.interface.func_protocols.FuncUnit": [[14, 3, 1, "", "accept"], [14, 3, 1, "", "issue"]], "coreblocks.func_blocks.lsu": [[15, 0, 0, "-", "dummyLsu"], [15, 0, 0, "-", "pma"]], "coreblocks.func_blocks.lsu.dummyLsu": [[15, 1, 1, "", "LSUBlockComponent"], [15, 1, 1, "", "LSUDummy"]], "coreblocks.func_blocks.lsu.dummyLsu.LSUBlockComponent": [[15, 2, 1, "", "get_module"], [15, 2, 1, "", "get_optypes"], [15, 2, 1, "", "get_rs_entry_count"]], "coreblocks.func_blocks.lsu.dummyLsu.LSUDummy": [[15, 2, 1, "", "__init__"]], "coreblocks.func_blocks.lsu.pma": [[15, 1, 1, "", "PMAChecker"], [15, 1, 1, "", "PMALayout"], [15, 1, 1, "", "PMARegion"]], "coreblocks.func_blocks.lsu.pma.PMAChecker": [[15, 2, 1, "", "__init__"]], "coreblocks.func_blocks.lsu.pma.PMALayout": [[15, 2, 1, "", "__init__"]], "coreblocks.func_blocks.lsu.pma.PMARegion": [[15, 2, 1, "", "__init__"], [15, 3, 1, "", "end"], [15, 3, 1, "", "mmio"], [15, 3, 1, "", "start"]], "coreblocks.params": [[16, 0, 0, "-", "configurations"], [16, 0, 0, "-", "fu_params"], [16, 0, 0, "-", "genparams"], [16, 0, 0, "-", "icache_params"], [16, 0, 0, "-", "instr"], [16, 0, 0, "-", "isa_params"]], "coreblocks.params.configurations": [[16, 1, 1, "", "CoreConfiguration"]], "coreblocks.params.configurations.CoreConfiguration": [[16, 2, 1, "", "__init__"], [16, 3, 1, "", "allow_partial_extensions"], [16, 3, 1, "", "compressed"], [16, 3, 1, "", "debug_signals"], [16, 3, 1, "", "embedded"], [16, 3, 1, "", "func_units_config"], [16, 3, 1, "", "icache_block_size_bits"], [16, 3, 1, "", "icache_enable"], [16, 3, 1, "", "icache_sets_bits"], [16, 3, 1, "", "icache_ways"], [16, 3, 1, "", "phys_regs_bits"], [16, 3, 1, "", "pma"], [16, 2, 1, "", "replace"], [16, 3, 1, "", "rob_entries_bits"], [16, 3, 1, "", "start_pc"], [16, 3, 1, "", "xlen"]], "coreblocks.params.fu_params": [[16, 1, 1, "", "BlockComponentParams"], [16, 1, 1, "", "FunctionalComponentParams"], [16, 4, 1, "", "optypes_supported"]], "coreblocks.params.fu_params.BlockComponentParams": [[16, 2, 1, "", "get_module"], [16, 2, 1, "", "get_optypes"], [16, 2, 1, "", "get_rs_entry_count"]], "coreblocks.params.fu_params.FunctionalComponentParams": [[16, 2, 1, "", "get_module"], [16, 2, 1, "", "get_optypes"]], "coreblocks.params.genparams": [[16, 1, 1, "", "GenParams"]], "coreblocks.params.genparams.GenParams": [[16, 2, 1, "", "__init__"]], "coreblocks.params.icache_params": [[16, 1, 1, "", "ICacheParameters"]], "coreblocks.params.icache_params.ICacheParameters": [[16, 2, 1, "", "__init__"]], "coreblocks.params.instr": [[16, 1, 1, "", "BTypeInstr"], [16, 1, 1, "", "EBreakInstr"], [16, 1, 1, "", "ITypeInstr"], [16, 1, 1, "", "IllegalInstr"], [16, 1, 1, "", "JTypeInstr"], [16, 1, 1, "", "RTypeInstr"], [16, 1, 1, "", "STypeInstr"], [16, 1, 1, "", "UTypeInstr"]], "coreblocks.params.instr.BTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.EBreakInstr": [[16, 2, 1, "", "__init__"]], "coreblocks.params.instr.ITypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.IllegalInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.JTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.RTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.STypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.UTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.isa_params": [[16, 1, 1, "", "Extension"], [16, 1, 1, "", "ISA"]], "coreblocks.params.isa_params.Extension": [[16, 3, 1, "", "A"], [16, 3, 1, "", "B"], [16, 3, 1, "", "C"], [16, 3, 1, "", "D"], [16, 3, 1, "", "E"], [16, 3, 1, "", "F"], [16, 3, 1, "", "G"], [16, 3, 1, "", "I"], [16, 3, 1, "", "J"], [16, 3, 1, "", "L"], [16, 3, 1, "", "M"], [16, 3, 1, "", "N"], [16, 3, 1, "", "P"], [16, 3, 1, "", "Q"], [16, 3, 1, "", "T"], [16, 3, 1, "", "V"], [16, 3, 1, "", "XINTMACHINEMODE"], [16, 3, 1, "", "XINTSUPERVISOR"], [16, 3, 1, "", "ZAM"], [16, 3, 1, "", "ZBA"], [16, 3, 1, "", "ZBB"], [16, 3, 1, "", "ZBC"], [16, 3, 1, "", "ZBS"], [16, 3, 1, "", "ZDINX"], [16, 3, 1, "", "ZFH"], [16, 3, 1, "", "ZFHMIN"], [16, 3, 1, "", "ZFINX"], [16, 3, 1, "", "ZHINX"], [16, 3, 1, "", "ZICNTR"], [16, 3, 1, "", "ZICSR"], [16, 3, 1, "", "ZIFENCEI"], [16, 3, 1, "", "ZIHINTNTL"], [16, 3, 1, "", "ZIHINTPAUSE"], [16, 3, 1, "", "ZIHPM"], [16, 3, 1, "", "ZMMUL"], [16, 3, 1, "", "ZTSO"], [16, 2, 1, "", "__new__"]], "coreblocks.params.isa_params.ISA": [[16, 2, 1, "", "__init__"]], "coreblocks.peripherals": [[17, 0, 0, "-", "axi_lite"], [17, 0, 0, "-", "bus_adapter"], [17, 0, 0, "-", "wishbone"]], "coreblocks.peripherals.axi_lite": [[17, 1, 1, "", "AXILiteInterface"], [17, 1, 1, "", "AXILiteMaster"], [17, 1, 1, "", "AXILiteParameters"], [17, 1, 1, "", "AXILiteSignature"]], "coreblocks.peripherals.axi_lite.AXILiteInterface": [[17, 3, 1, "", "read_address"], [17, 3, 1, "", "read_data"], [17, 3, 1, "", "write_address"], [17, 3, 1, "", "write_data"], [17, 3, 1, "", "write_response"]], "coreblocks.peripherals.axi_lite.AXILiteMaster": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "axil_master"], [17, 2, 1, "", "result_handler"], [17, 2, 1, "", "start_request_transaction"], [17, 2, 1, "", "state_machine_request"]], "coreblocks.peripherals.axi_lite.AXILiteParameters": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.axi_lite.AXILiteSignature": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.bus_adapter": [[17, 1, 1, "", "AXILiteMasterAdapter"], [17, 1, 1, "", "BusMasterInterface"], [17, 1, 1, "", "WishboneMasterAdapter"]], "coreblocks.peripherals.bus_adapter.AXILiteMasterAdapter": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.bus_adapter.BusMasterInterface": [[17, 3, 1, "", "get_read_response"], [17, 3, 1, "", "get_write_response"], [17, 3, 1, "", "params"], [17, 3, 1, "", "request_read"], [17, 3, 1, "", "request_write"]], "coreblocks.peripherals.bus_adapter.WishboneMasterAdapter": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone": [[17, 1, 1, "", "PipelinedWishboneMaster"], [17, 1, 1, "", "WishboneArbiter"], [17, 1, 1, "", "WishboneInterface"], [17, 1, 1, "", "WishboneMaster"], [17, 1, 1, "", "WishboneMasterMethodLayout"], [17, 1, 1, "", "WishboneMemorySlave"], [17, 1, 1, "", "WishboneMuxer"], [17, 1, 1, "", "WishboneParameters"], [17, 1, 1, "", "WishboneSignature"]], "coreblocks.peripherals.wishbone.PipelinedWishboneMaster": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "generate_method_layouts"], [17, 3, 1, "", "wb"]], "coreblocks.peripherals.wishbone.WishboneArbiter": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "masters"], [17, 3, 1, "", "slave_wb"]], "coreblocks.peripherals.wishbone.WishboneInterface": [[17, 3, 1, "", "ack"], [17, 3, 1, "", "adr"], [17, 3, 1, "", "cyc"], [17, 3, 1, "", "dat_r"], [17, 3, 1, "", "dat_w"], [17, 3, 1, "", "err"], [17, 3, 1, "", "lock"], [17, 3, 1, "", "rst"], [17, 3, 1, "", "rty"], [17, 3, 1, "", "sel"], [17, 3, 1, "", "stall"], [17, 3, 1, "", "stb"], [17, 3, 1, "", "we"]], "coreblocks.peripherals.wishbone.WishboneMaster": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "wb_master"]], "coreblocks.peripherals.wishbone.WishboneMasterMethodLayout": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneMemorySlave": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "bus"]], "coreblocks.peripherals.wishbone.WishboneMuxer": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "master_wb"], [17, 3, 1, "", "slaves"]], "coreblocks.peripherals.wishbone.WishboneParameters": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneSignature": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "create"]], "coreblocks.priv": [[19, 0, 0, "-", "csr"], [20, 0, 0, "-", "traps"]], "coreblocks.priv.csr": [[19, 0, 0, "-", "csr_instances"], [19, 0, 0, "-", "csr_register"]], "coreblocks.priv.csr.csr_instances": [[19, 1, 1, "", "CSRAddress"], [19, 1, 1, "", "DoubleCounterCSR"], [19, 1, 1, "", "GenericCSRRegisters"], [19, 1, 1, "", "MachineModeCSRRegisters"]], "coreblocks.priv.csr.csr_instances.CSRAddress": [[19, 3, 1, "", "CYCLE"], [19, 3, 1, "", "CYCLEH"], [19, 3, 1, "", "INSTRET"], [19, 3, 1, "", "INSTRETH"], [19, 3, 1, "", "MCAUSE"], [19, 3, 1, "", "MEPC"], [19, 3, 1, "", "MTVEC"], [19, 3, 1, "", "TIME"], [19, 3, 1, "", "TIMEH"], [19, 2, 1, "", "__new__"]], "coreblocks.priv.csr.csr_instances.DoubleCounterCSR": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_instances.GenericCSRRegisters": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_instances.MachineModeCSRRegisters": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_register": [[19, 1, 1, "", "CSRListKey"], [19, 1, 1, "", "CSRRegister"], [19, 1, 1, "", "PrivilegeLevel"], [19, 4, 1, "", "csr_access_privilege"]], "coreblocks.priv.csr.csr_register.CSRListKey": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_register.CSRRegister": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_register.PrivilegeLevel": [[19, 3, 1, "", "MACHINE"], [19, 3, 1, "", "SUPERVISOR"], [19, 3, 1, "", "USER"], [19, 2, 1, "", "__new__"]], "coreblocks.priv.traps": [[20, 0, 0, "-", "exception"], [20, 0, 0, "-", "instr_counter"], [20, 0, 0, "-", "interrupt_controller"]], "coreblocks.priv.traps.exception": [[20, 1, 1, "", "ExceptionCauseRegister"], [20, 4, 1, "", "should_update_prioriy"]], "coreblocks.priv.traps.exception.ExceptionCauseRegister": [[20, 2, 1, "", "__init__"]], "coreblocks.priv.traps.instr_counter": [[20, 1, 1, "", "CoreInstructionCounter"]], "coreblocks.priv.traps.instr_counter.CoreInstructionCounter": [[20, 2, 1, "", "__init__"]], "coreblocks.priv.traps.interrupt_controller": [[20, 1, 1, "", "InterruptController"]], "coreblocks.priv.traps.interrupt_controller.InterruptController": [[20, 2, 1, "", "__init__"]], "coreblocks.scheduler": [[21, 0, 0, "-", "scheduler"], [21, 0, 0, "-", "wakeup_select"]], "coreblocks.scheduler.scheduler": [[21, 1, 1, "", "Scheduler"]], "coreblocks.scheduler.scheduler.Scheduler": [[21, 2, 1, "", "__init__"]], "coreblocks.scheduler.wakeup_select": [[21, 1, 1, "", "WakeupSelect"]], "coreblocks.scheduler.wakeup_select.WakeupSelect": [[21, 2, 1, "", "__init__"]], "transactron": [[36, 0, 0, "-", "core"], [35, 0, 0, "-", "graph"], [37, 0, 0, "-", "lib"], [35, 0, 0, "-", "profiler"], [38, 0, 0, "-", "testing"], [35, 0, 0, "-", "tracing"], [39, 0, 0, "-", "utils"]], "transactron.core": [[36, 0, 0, "-", "keys"], [36, 0, 0, "-", "manager"], [36, 0, 0, "-", "method"], [36, 0, 0, "-", "schedulers"], [36, 0, 0, "-", "sugar"], [36, 0, 0, "-", "tmodule"], [36, 0, 0, "-", "transaction"], [36, 0, 0, "-", "transaction_base"]], "transactron.core.keys": [[36, 1, 1, "", "TransactionManagerKey"]], "transactron.core.keys.TransactionManagerKey": [[36, 2, 1, "", "__init__"]], "transactron.core.manager": [[36, 1, 1, "", "TransactionManager"], [36, 1, 1, "", "TransactionModule"]], "transactron.core.manager.TransactionManager": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "add_transaction"], [36, 2, 1, "", "debug_signals"], [36, 2, 1, "", "print_info"], [36, 2, 1, "", "visual_graph"]], "transactron.core.manager.TransactionModule": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "context"]], "transactron.core.method": [[36, 1, 1, "", "Method"]], "transactron.core.method.Method": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "body"], [36, 2, 1, "", "debug_signals"], [36, 5, 1, "", "layout_in"], [36, 5, 1, "", "layout_out"], [36, 2, 1, "", "like"], [36, 2, 1, "", "proxy"]], "transactron.core.schedulers": [[36, 4, 1, "", "eager_deterministic_cc_scheduler"], [36, 4, 1, "", "trivial_roundrobin_cc_scheduler"]], "transactron.core.sugar": [[36, 4, 1, "", "def_method"]], "transactron.core.tmodule": [[36, 1, 1, "", "TModule"]], "transactron.core.tmodule.TModule": [[36, 2, 1, "", "AvoidedIf"], [36, 2, 1, "", "Case"], [36, 2, 1, "", "Default"], [36, 2, 1, "", "Elif"], [36, 2, 1, "", "Else"], [36, 2, 1, "", "FSM"], [36, 2, 1, "", "If"], [36, 2, 1, "", "State"], [36, 2, 1, "", "Switch"], [36, 2, 1, "", "__init__"], [36, 5, 1, "", "ctrl_path"], [36, 5, 1, "", "next"]], "transactron.core.transaction": [[36, 1, 1, "", "Transaction"]], "transactron.core.transaction.Transaction": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "body"], [36, 2, 1, "", "debug_signals"]], "transactron.core.transaction_base": [[36, 1, 1, "", "Priority"], [36, 1, 1, "", "TransactionBase"]], "transactron.core.transaction_base.Priority": [[36, 3, 1, "", "LEFT"], [36, 3, 1, "", "RIGHT"], [36, 3, 1, "", "UNDEFINED"]], "transactron.core.transaction_base.TransactionBase": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "add_conflict"], [36, 2, 1, "", "context"], [36, 3, 1, "", "ctrl_path"], [36, 3, 1, "", "def_counter"], [36, 3, 1, "", "def_order"], [36, 3, 1, "", "defined"], [36, 2, 1, "", "get"], [36, 3, 1, "", "independent_list"], [36, 3, 1, "", "method_calls"], [36, 3, 1, "", "method_uses"], [36, 3, 1, "", "name"], [36, 5, 1, "", "owned_name"], [36, 2, 1, "", "peek"], [36, 3, 1, "", "relations"], [36, 2, 1, "", "schedule_before"], [36, 2, 1, "", "simultaneous"], [36, 2, 1, "", "simultaneous_alternatives"], [36, 3, 1, "", "simultaneous_list"], [36, 3, 1, "", "src_loc"], [36, 3, 1, "", "stack"]], "transactron.graph": [[35, 1, 1, "", "Direction"], [35, 1, 1, "", "Owned"], [35, 1, 1, "", "OwnershipGraph"]], "transactron.graph.Direction": [[35, 3, 1, "", "IN"], [35, 3, 1, "", "INOUT"], [35, 3, 1, "", "NONE"], [35, 3, 1, "", "OUT"], [35, 2, 1, "", "__new__"]], "transactron.graph.Owned": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "name"], [35, 3, 1, "", "owner"]], "transactron.graph.OwnershipGraph": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "dump"], [35, 2, 1, "", "dump_dot"], [35, 2, 1, "", "dump_elk"], [35, 2, 1, "", "dump_mermaid"], [35, 2, 1, "", "get_hier_name"], [35, 2, 1, "", "get_name"], [35, 2, 1, "", "insert_edge"], [35, 2, 1, "", "insert_node"], [35, 3, 1, "", "mermaid_direction"], [35, 2, 1, "", "prune"], [35, 2, 1, "", "remember"], [35, 2, 1, "", "remember_field"]], "transactron.lib": [[37, 0, 0, "-", "adapters"], [37, 0, 0, "-", "buttons"], [37, 0, 0, "-", "connectors"], [37, 0, 0, "-", "dependencies"], [37, 0, 0, "-", "fifo"], [37, 0, 0, "-", "logging"], [37, 0, 0, "-", "metrics"], [37, 0, 0, "-", "reqres"], [37, 0, 0, "-", "simultaneous"], [37, 0, 0, "-", "storage"], [37, 0, 0, "-", "transformers"]], "transactron.lib.adapters": [[37, 1, 1, "", "Adapter"], [37, 1, 1, "", "AdapterBase"], [37, 1, 1, "", "AdapterTrans"]], "transactron.lib.adapters.Adapter": [[37, 2, 1, "", "__init__"]], "transactron.lib.adapters.AdapterBase": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "data_in"], [37, 3, 1, "", "data_out"], [37, 2, 1, "", "debug_signals"]], "transactron.lib.adapters.AdapterTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.buttons": [[37, 1, 1, "", "ClickIn"], [37, 1, 1, "", "ClickOut"]], "transactron.lib.buttons.ClickIn": [[37, 2, 1, "", "__init__"]], "transactron.lib.buttons.ClickOut": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors": [[37, 1, 1, "", "Connect"], [37, 1, 1, "", "ConnectTrans"], [37, 1, 1, "", "FIFO"], [37, 1, 1, "", "Forwarder"], [37, 1, 1, "", "ManyToOneConnectTrans"], [37, 1, 1, "", "StableSelectingNetwork"]], "transactron.lib.connectors.Connect": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.ConnectTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.FIFO": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.Forwarder": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.ManyToOneConnectTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.StableSelectingNetwork": [[37, 2, 1, "", "__init__"]], "transactron.lib.dependencies": [[37, 1, 1, "", "DependencyKey"], [37, 1, 1, "", "DependencyManager"], [37, 1, 1, "", "ListKey"], [37, 1, 1, "", "SimpleKey"], [37, 1, 1, "", "UnifierKey"]], "transactron.lib.dependencies.DependencyKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "empty_valid"], [37, 3, 1, "", "lock_on_get"]], "transactron.lib.dependencies.DependencyManager": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "add_dependency"], [37, 2, 1, "", "get_dependency"]], "transactron.lib.dependencies.ListKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "empty_valid"]], "transactron.lib.dependencies.SimpleKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "default_value"]], "transactron.lib.dependencies.UnifierKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "unifier"]], "transactron.lib.fifo": [[37, 1, 1, "", "BasicFifo"], [37, 1, 1, "", "Semaphore"]], "transactron.lib.fifo.BasicFifo": [[37, 2, 1, "", "__init__"]], "transactron.lib.fifo.Semaphore": [[37, 2, 1, "", "__init__"]], "transactron.lib.logging": [[37, 1, 1, "", "HardwareLogger"], [37, 1, 1, "", "LogKey"], [37, 1, 1, "", "LogRecord"], [37, 1, 1, "", "LogRecordInfo"], [37, 4, 1, "", "get_log_records"], [37, 4, 1, "", "get_trigger_bit"]], "transactron.lib.logging.HardwareLogger": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "assertion"], [37, 2, 1, "", "debug"], [37, 2, 1, "", "error"], [37, 2, 1, "", "info"], [37, 2, 1, "", "log"], [37, 2, 1, "", "warning"]], "transactron.lib.logging.LogKey": [[37, 2, 1, "", "__init__"]], "transactron.lib.logging.LogRecord": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "fields"], [37, 3, 1, "", "trigger"]], "transactron.lib.logging.LogRecordInfo": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "format"], [37, 3, 1, "", "format_str"], [37, 2, 1, "", "from_dict"], [37, 2, 1, "", "from_json"], [37, 3, 1, "", "level"], [37, 3, 1, "", "location"], [37, 3, 1, "", "logger_name"], [37, 2, 1, "", "schema"], [37, 2, 1, "", "to_dict"], [37, 2, 1, "", "to_json"]], "transactron.lib.metrics": [[37, 1, 1, "", "HardwareMetricsManager"], [37, 1, 1, "", "HwCounter"], [37, 1, 1, "", "HwExpHistogram"], [37, 1, 1, "", "HwMetric"], [37, 1, 1, "", "HwMetricsEnabledKey"], [37, 1, 1, "", "LatencyMeasurer"], [37, 1, 1, "", "MetricModel"], [37, 1, 1, "", "MetricRegisterModel"]], "transactron.lib.metrics.HardwareMetricsManager": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "debug_signals"], [37, 2, 1, "", "get_metrics"], [37, 2, 1, "", "get_register_value"]], "transactron.lib.metrics.HwCounter": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "incr"]], "transactron.lib.metrics.HwExpHistogram": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "add"]], "transactron.lib.metrics.HwMetric": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "add_registers"], [37, 2, 1, "", "metrics_enabled"]], "transactron.lib.metrics.HwMetricsEnabledKey": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "default_value"], [37, 3, 1, "", "empty_valid"], [37, 3, 1, "", "lock_on_get"]], "transactron.lib.metrics.LatencyMeasurer": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "metrics_enabled"], [37, 2, 1, "", "start"], [37, 2, 1, "", "stop"]], "transactron.lib.metrics.MetricModel": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "description"], [37, 2, 1, "", "from_dict"], [37, 2, 1, "", "from_json"], [37, 3, 1, "", "fully_qualified_name"], [37, 3, 1, "", "regs"], [37, 2, 1, "", "schema"], [37, 2, 1, "", "to_dict"], [37, 2, 1, "", "to_json"]], "transactron.lib.metrics.MetricRegisterModel": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "description"], [37, 2, 1, "", "from_dict"], [37, 2, 1, "", "from_json"], [37, 3, 1, "", "name"], [37, 2, 1, "", "schema"], [37, 2, 1, "", "to_dict"], [37, 2, 1, "", "to_json"], [37, 3, 1, "", "width"]], "transactron.lib.reqres": [[37, 1, 1, "", "ArgumentsToResultsZipper"], [37, 1, 1, "", "Serializer"]], "transactron.lib.reqres.ArgumentsToResultsZipper": [[37, 2, 1, "", "__init__"]], "transactron.lib.reqres.Serializer": [[37, 2, 1, "", "__init__"]], "transactron.lib.simultaneous": [[37, 4, 1, "", "condition"]], "transactron.lib.storage": [[37, 1, 1, "", "MemoryBank"]], "transactron.lib.storage.MemoryBank": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers": [[37, 1, 1, "", "CatTrans"], [37, 1, 1, "", "Collector"], [37, 1, 1, "", "ConnectAndMapTrans"], [37, 1, 1, "", "MethodFilter"], [37, 1, 1, "", "MethodMap"], [37, 1, 1, "", "MethodProduct"], [37, 1, 1, "", "MethodTryProduct"], [37, 1, 1, "", "Transformer"], [37, 1, 1, "", "Unifier"]], "transactron.lib.transformers.CatTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.Collector": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.ConnectAndMapTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodFilter": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodMap": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodProduct": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodTryProduct": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.Transformer": [[37, 3, 1, "", "method"], [37, 2, 1, "", "use"]], "transactron.lib.transformers.Unifier": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "method"]], "transactron.profiler": [[35, 1, 1, "", "MethodSamples"], [35, 1, 1, "", "Profile"], [35, 1, 1, "", "ProfileData"], [35, 1, 1, "", "ProfileInfo"], [35, 1, 1, "", "ProfileSamples"], [35, 1, 1, "", "RunStat"], [35, 1, 1, "", "RunStatNode"], [35, 1, 1, "", "TransactionSamples"]], "transactron.profiler.MethodSamples": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "run"]], "transactron.profiler.Profile": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "analyze_methods"], [35, 2, 1, "", "analyze_transactions"], [35, 3, 1, "", "cycles"], [35, 2, 1, "", "decode"], [35, 2, 1, "", "encode"], [35, 2, 1, "", "from_dict"], [35, 2, 1, "", "from_json"], [35, 2, 1, "", "schema"], [35, 2, 1, "", "to_dict"], [35, 2, 1, "", "to_json"], [35, 3, 1, "", "transactions_and_methods"]], "transactron.profiler.ProfileData": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "make"], [35, 3, 1, "", "method_parents"], [35, 3, 1, "", "transaction_conflicts"], [35, 3, 1, "", "transactions_and_methods"], [35, 3, 1, "", "transactions_by_method"]], "transactron.profiler.ProfileInfo": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "from_dict"], [35, 2, 1, "", "from_json"], [35, 3, 1, "", "is_transaction"], [35, 3, 1, "", "name"], [35, 2, 1, "", "schema"], [35, 3, 1, "", "src_loc"], [35, 2, 1, "", "to_dict"], [35, 2, 1, "", "to_json"]], "transactron.profiler.ProfileSamples": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "methods"], [35, 3, 1, "", "transactions"]], "transactron.profiler.RunStat": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "locked"], [35, 2, 1, "", "make"], [35, 3, 1, "", "name"], [35, 3, 1, "", "run"], [35, 3, 1, "", "src_loc"]], "transactron.profiler.RunStatNode": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "callers"], [35, 2, 1, "", "make"], [35, 3, 1, "", "stat"]], "transactron.profiler.TransactionSamples": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "grant"], [35, 3, 1, "", "request"], [35, 3, 1, "", "runnable"]], "transactron.testing": [[38, 0, 0, "-", "functions"], [38, 0, 0, "-", "gtkw_extension"], [38, 0, 0, "-", "infrastructure"], [38, 0, 0, "-", "logging"], [38, 0, 0, "-", "profiler"], [38, 0, 0, "-", "sugar"], [38, 0, 0, "-", "testbenchio"]], "transactron.testing.functions": [[38, 4, 1, "", "get_outputs"], [38, 4, 1, "", "set_inputs"]], "transactron.testing.gtkw_extension": [[38, 4, 1, "", "write_vcd_ext"]], "transactron.testing.infrastructure": [[38, 1, 1, "", "CoreblocksCommand"], [38, 1, 1, "", "Now"], [38, 1, 1, "", "PysimSimulator"], [38, 1, 1, "", "SimpleTestCircuit"], [38, 1, 1, "", "SyncProcessWrapper"], [38, 1, 1, "", "TestCaseWithSimulator"], [38, 4, 1, "", "guard_nested_collection"]], "transactron.testing.infrastructure.PysimSimulator": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "add_sync_process"], [38, 2, 1, "", "run"]], "transactron.testing.infrastructure.SimpleTestCircuit": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "debug_signals"]], "transactron.testing.infrastructure.SyncProcessWrapper": [[38, 2, 1, "", "__init__"]], "transactron.testing.infrastructure.TestCaseWithSimulator": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "add_all_mocks"], [38, 2, 1, "", "add_class_mocks"], [38, 2, 1, "", "add_local_mocks"], [38, 3, 1, "", "dependency_manager"], [38, 2, 1, "", "random_wait"], [38, 2, 1, "", "random_wait_geom"], [38, 2, 1, "", "run_simulation"], [38, 2, 1, "", "tick"]], "transactron.testing.logging": [[38, 4, 1, "", "make_logging_process"], [38, 4, 1, "", "parse_logging_level"]], "transactron.testing.profiler": [[38, 4, 1, "", "profiler_process"]], "transactron.testing.sugar": [[38, 4, 1, "", "def_method_mock"]], "transactron.testing.testbenchio": [[38, 1, 1, "", "TestbenchIO"]], "transactron.testing.testbenchio.TestbenchIO": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "call"], [38, 2, 1, "", "call_do"], [38, 2, 1, "", "call_init"], [38, 2, 1, "", "call_result"], [38, 2, 1, "", "call_try"], [38, 2, 1, "", "debug_signals"], [38, 2, 1, "", "disable"], [38, 2, 1, "", "done"], [38, 2, 1, "", "enable"], [38, 2, 1, "", "get_outputs"], [38, 2, 1, "", "method_argument"], [38, 2, 1, "", "method_handle"], [38, 2, 1, "", "method_handle_loop"], [38, 2, 1, "", "method_return"], [38, 2, 1, "", "set_enable"], [38, 2, 1, "", "set_inputs"], [38, 2, 1, "", "wait_until_done"]], "transactron.tracing": [[35, 1, 1, "", "TracingEnabler"], [35, 1, 1, "", "TracingFragment"], [35, 1, 1, "", "TracingFragmentTransformer"], [35, 1, 1, "", "TracingInstance"]], "transactron.tracing.TracingFragment": [[35, 2, 1, "", "get"], [35, 2, 1, "", "prepare"], [35, 3, 1, "", "subfragments"]], "transactron.tracing.TracingFragmentTransformer": [[35, 2, 1, "", "on_fragment"]], "transactron.tracing.TracingInstance": [[35, 2, 1, "", "get"]], "transactron.utils": [[40, 0, 0, "-", "amaranth_ext"], [39, 0, 0, "-", "assign"], [39, 0, 0, "-", "data_repr"], [39, 0, 0, "-", "debug_signals"], [39, 0, 0, "-", "depcache"], [39, 0, 0, "-", "dependencies"], [39, 0, 0, "-", "gen"], [39, 0, 0, "-", "idgen"], [39, 0, 0, "-", "transactron_helpers"]], "transactron.utils.amaranth_ext": [[40, 0, 0, "-", "elaboratables"], [40, 0, 0, "-", "functions"]], "transactron.utils.amaranth_ext.elaboratables": [[40, 1, 1, "", "ModuleConnector"], [40, 4, 1, "", "OneHotSwitch"], [40, 4, 1, "", "OneHotSwitchDynamic"], [40, 1, 1, "", "RoundRobin"], [40, 1, 1, "", "Scheduler"]], "transactron.utils.amaranth_ext.elaboratables.ModuleConnector": [[40, 2, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.RoundRobin": [[40, 2, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.Scheduler": [[40, 2, 1, "", "__init__"]], "transactron.utils.amaranth_ext.functions": [[40, 4, 1, "", "count_leading_zeros"], [40, 4, 1, "", "count_trailing_zeros"], [40, 4, 1, "", "flatten_signals"], [40, 4, 1, "", "mod_incr"], [40, 4, 1, "", "popcount"]], "transactron.utils.assign": [[39, 1, 1, "", "AssignType"], [39, 4, 1, "", "assign"]], "transactron.utils.assign.AssignType": [[39, 3, 1, "", "ALL"], [39, 3, 1, "", "COMMON"], [39, 3, 1, "", "RHS"]], "transactron.utils.data_repr": [[39, 4, 1, "", "align_down_to_power_of_two"], [39, 4, 1, "", "align_to_power_of_two"], [39, 4, 1, "", "average_dict_of_lists"], [39, 4, 1, "", "bits_from_int"], [39, 4, 1, "", "data_layout"], [39, 4, 1, "", "int_to_signed"], [39, 4, 1, "", "layout_subset"], [39, 4, 1, "", "make_hashable"], [39, 4, 1, "", "neg"], [39, 4, 1, "", "signed_to_int"]], "transactron.utils.debug_signals": [[39, 4, 1, "", "auto_debug_signals"]], "transactron.utils.depcache": [[39, 1, 1, "", "DependentCache"]], "transactron.utils.depcache.DependentCache": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "get"]], "transactron.utils.dependencies": [[39, 1, 1, "", "DependencyContext"], [39, 1, 1, "", "DependencyKey"], [39, 1, 1, "", "DependencyManager"], [39, 1, 1, "", "ListKey"], [39, 1, 1, "", "SimpleKey"]], "transactron.utils.dependencies.DependencyContext": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "get"], [39, 3, 1, "", "stack"]], "transactron.utils.dependencies.DependencyKey": [[39, 2, 1, "", "combine"], [39, 3, 1, "", "empty_valid"], [39, 3, 1, "", "lock_on_get"]], "transactron.utils.dependencies.DependencyManager": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "add_dependency"], [39, 2, 1, "", "get_dependency"]], "transactron.utils.dependencies.ListKey": [[39, 2, 1, "", "combine"], [39, 3, 1, "", "empty_valid"]], "transactron.utils.dependencies.SimpleKey": [[39, 2, 1, "", "combine"], [39, 3, 1, "", "default_value"]], "transactron.utils.gen": [[39, 1, 1, "", "GeneratedLog"], [39, 1, 1, "", "GenerationInfo"], [39, 1, 1, "", "MetricLocation"], [39, 4, 1, "", "generate_verilog"]], "transactron.utils.gen.GeneratedLog": [[39, 2, 1, "", "__init__"], [39, 3, 1, "", "fields_location"], [39, 2, 1, "", "from_dict"], [39, 2, 1, "", "from_json"], [39, 2, 1, "", "schema"], [39, 2, 1, "", "to_dict"], [39, 2, 1, "", "to_json"], [39, 3, 1, "", "trigger_location"]], "transactron.utils.gen.GenerationInfo": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "decode"], [39, 2, 1, "", "encode"], [39, 2, 1, "", "from_dict"], [39, 2, 1, "", "from_json"], [39, 3, 1, "", "logs"], [39, 3, 1, "", "method_signals_location"], [39, 3, 1, "", "metrics_location"], [39, 3, 1, "", "profile_data"], [39, 2, 1, "", "schema"], [39, 2, 1, "", "to_dict"], [39, 2, 1, "", "to_json"], [39, 3, 1, "", "transaction_signals_location"]], "transactron.utils.gen.MetricLocation": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "from_dict"], [39, 2, 1, "", "from_json"], [39, 3, 1, "", "regs"], [39, 2, 1, "", "schema"], [39, 2, 1, "", "to_dict"], [39, 2, 1, "", "to_json"]], "transactron.utils.idgen": [[39, 1, 1, "", "IdGenerator"]], "transactron.utils.idgen.IdGenerator": [[39, 2, 1, "", "__init__"]], "transactron.utils.transactron_helpers": [[39, 4, 1, "", "def_helper"], [39, 4, 1, "", "from_method_layout"], [39, 4, 1, "", "get_caller_class_name"], [39, 4, 1, "", "get_src_loc"], [39, 4, 1, "", "method_def_helper"], [39, 4, 1, "", "mock_def_helper"], [39, 4, 1, "", "silence_mustuse"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"]}, "titleterms": {"api": 0, "coreblock": [0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 25, 27, 34], "transactron": [0, 28, 35, 36, 37, 38, 39, 40], "list": 1, "assumpt": [1, 3], "made": 1, "dure": 1, "develop": [1, 23], "instruct": [3, 32], "cach": [3, 6], "interfac": [3, 14, 31, 32], "address": 3, "map": 3, "exampl": 3, "packag": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 36, 37, 38, 39, 40], "subpackag": [4, 8, 11, 12, 18, 35, 39], "submodul": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 35, 36, 37, 38, 39, 40], "core": [4, 33, 36], "modul": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 36, 37, 38, 39, 40], "content": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 36, 37, 38, 39, 40], "backend": 5, "annouc": 5, "retir": 5, "icach": 6, "ifac": 6, "refil": 6, "core_struct": 7, "rat": 7, "rf": 7, "rob": 7, "frontend": [8, 9, 10], "decod": 9, "decode_stag": 9, "instr_decod": 9, "instr_descript": 9, "isa": 9, "optyp": 9, "rvc": 9, "fetch": 10, "func_block": [11, 12, 13, 14, 15], "fu": [12, 13], "alu": 12, "div_unit": 12, "except": [12, 20, 26], "jumpbranch": 12, "mul_unit": 12, "priv": [12, 18, 19, 20], "shift_unit": 12, "zbc": 12, "zb": 12, "unsigned_multipl": 13, "common": 13, "fast_recurs": 13, "sequenc": 13, "shift": 13, "func_blocks_unifi": 14, "func_protocol": 14, "lsu": 15, "dummylsu": 15, "pma": 15, "param": 16, "configur": 16, "fu_param": 16, "genparam": 16, "icache_param": 16, "instr": 16, "isa_param": 16, "peripher": 17, "axi_lit": 17, "bus_adapt": 17, "wishbon": 17, "csr": 19, "csr_instanc": 19, "csr_regist": 19, "trap": 20, "instr_count": 20, "interrupt_control": 20, "schedul": [21, 30, 34, 36], "wakeup_select": 21, "full": 22, "transact": [22, 34, 36], "method": [22, 31, 32, 34, 36], "graph": [22, 35], "environ": 23, "set": 23, "up": 23, "us": [23, 31, 32], "script": 23, "run_test": 23, "py": 23, "lint": 23, "sh": 23, "core_graph": 23, "build_doc": 23, "tprof": 23, "introduct": [24, 26, 34], "document": [24, 34], "summari": 26, "paper": 26, "about": 26, "interrupt": 26, "handl": 26, "old": 26, "pc": 26, "out": 26, "order": [26, 34], "execut": [26, 33], "processor": 26, "In": 26, "line": 26, "softwar": 26, "manag": [26, 36], "tlb": 26, "hardwar": 26, "cost": 26, "analysi": 26, "process": 26, "strategi": 26, "igpu": 26, "support": 26, "specul": 26, "gpu": 26, "effici": 26, "other": 26, "problem": 29, "checklist": 29, "overview": [30, 32], "descript": 30, "schema": 30, "structur": 30, "more": 30, "detail": 30, "each": 30, "block": 30, "proposit": 31, "reserv": [31, 32], "station": [31, 32], "implement": [31, 34], "intern": 31, "data": 31, "actual": 31, "slot": [31, 32], "tabl": 31, "compar": [31, 32], "substitut": [31, 32], "read": [31, 32], "row": [31, 32], "clean": [31, 32], "get": [31, 32], "free": 31, "mark": [31, 32], "extern": [31, 32], "all": [31, 32], "reset": 32, "initi": 32, "state": 32, "insert": 32, "new": 32, "readi": [32, 34], "vector": 32, "signal": [32, 34], "verif": 33, "synthesi": 33, "manual": 33, "reproduct": 33, "depend": [33, 37, 39], "benchmark": 33, "regress": 33, "test": [33, 38], "framework": 34, "basic": 34, "usag": 34, "argument": 34, "pass": 34, "convent": 34, "definit": 34, "return": 34, "valu": 34, "The": 34, "librari": 34, "advanc": 34, "concept": 34, "special": 34, "combin": 34, "domain": 34, "conflict": 34, "nest": 34, "profil": [35, 38], "trace": 35, "kei": 36, "sugar": [36, 38], "tmodul": 36, "transaction_bas": 36, "lib": 37, "adapt": 37, "button": 37, "connector": 37, "fifo": 37, "log": [37, 38], "metric": 37, "reqr": 37, "simultan": 37, "storag": 37, "transform": 37, "function": [38, 40], "gtkw_extens": 38, "infrastructur": 38, "testbenchio": 38, "util": [39, 40], "assign": 39, "data_repr": 39, "debug_sign": 39, "depcach": 39, "gen": 39, "idgen": 39, "transactron_help": 39, "amaranth_ext": 40, "elaborat": 40}, "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.todo": 2, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["api", "assumptions", "auto_graph", "components/icache", "coreblocks", "coreblocks.backend", "coreblocks.cache", "coreblocks.core_structs", "coreblocks.frontend", "coreblocks.frontend.decoder", "coreblocks.frontend.fetch", "coreblocks.func_blocks", "coreblocks.func_blocks.fu", "coreblocks.func_blocks.fu.unsigned_multiplication", "coreblocks.func_blocks.interface", "coreblocks.func_blocks.lsu", "coreblocks.params", "coreblocks.peripherals", "coreblocks.priv", "coreblocks.priv.csr", "coreblocks.priv.traps", "coreblocks.scheduler", "current-graph", "development-environment", "home", "index", "miscellany/exceptions-summary", "modules-coreblocks", "modules-transactron", "problem-checklist", "scheduler/overview", "shared-structs/implementation/rs-impl", "shared-structs/rs", "synthesis/synthesis", "transactions", "transactron", "transactron.core", "transactron.lib", "transactron.testing", "transactron.utils", "transactron.utils.amaranth_ext"], "filenames": ["api.md", "assumptions.md", "auto_graph.rst", "components/icache.md", "coreblocks.rst", "coreblocks.backend.rst", "coreblocks.cache.rst", "coreblocks.core_structs.rst", "coreblocks.frontend.rst", "coreblocks.frontend.decoder.rst", "coreblocks.frontend.fetch.rst", "coreblocks.func_blocks.rst", "coreblocks.func_blocks.fu.rst", "coreblocks.func_blocks.fu.unsigned_multiplication.rst", "coreblocks.func_blocks.interface.rst", "coreblocks.func_blocks.lsu.rst", "coreblocks.params.rst", "coreblocks.peripherals.rst", "coreblocks.priv.rst", "coreblocks.priv.csr.rst", "coreblocks.priv.traps.rst", "coreblocks.scheduler.rst", "current-graph.md", "development-environment.md", "home.md", "index.md", "miscellany/exceptions-summary.md", "modules-coreblocks.rst", "modules-transactron.rst", "problem-checklist.md", "scheduler/overview.md", "shared-structs/implementation/rs-impl.md", "shared-structs/rs.md", "synthesis/synthesis.md", "transactions.md", "transactron.rst", "transactron.core.rst", "transactron.lib.rst", "transactron.testing.rst", "transactron.utils.rst", "transactron.utils.amaranth_ext.rst"], "titles": ["API", "List of assumptions made during development", "<no title>", "Instruction Cache", "coreblocks package", "coreblocks.backend package", "coreblocks.cache package", "coreblocks.core_structs package", "coreblocks.frontend package", "coreblocks.frontend.decoder package", "coreblocks.frontend.fetch package", "coreblocks.func_blocks package", "coreblocks.func_blocks.fu package", "coreblocks.func_blocks.fu.unsigned_multiplication package", "coreblocks.func_blocks.interface package", "coreblocks.func_blocks.lsu package", "coreblocks.params package", "coreblocks.peripherals package", "coreblocks.priv package", "coreblocks.priv.csr package", "coreblocks.priv.traps package", "coreblocks.scheduler package", "Full transaction-method graph", "Development environment", "Introduction", "Coreblocks", "Summary of papers about interrupts", "coreblocks", "transactron", "Problem checklist", "Scheduler overview", "Proposition of Reservation Station implementation", "Reservation Station", "Core verification", "Documentation for Coreblocks transaction framework", "transactron package", "transactron.core package", "transactron.lib package", "transactron.testing package", "transactron.utils package", "transactron.utils.amaranth_ext package"], "terms": {"packag": [0, 23, 25, 27, 28], "subpackag": [0, 27, 28], "backend": [0, 4, 27, 37], "submodul": [0, 8, 11, 18, 27, 28, 33], "annouc": [0, 4, 27], "modul": [0, 23, 27, 28, 33, 34], "retir": [0, 4, 15, 20, 27], "content": [0, 27, 28], "cach": [0, 4, 10, 16, 25, 27, 39], "icach": [0, 4, 10, 27, 37], "ifac": [0, 4, 27, 37], "refil": [0, 3, 4, 27], "core_struct": [0, 4, 27], "rat": [0, 1, 4, 21, 26, 27], "rf": [0, 1, 4, 5, 26, 27, 31, 32], "rob": [0, 1, 4, 5, 20, 21, 26, 27, 30, 31, 32], "frontend": [0, 4, 12, 15, 21, 27, 30, 37], "func_block": [0, 4, 16, 21, 27], "param": [0, 4, 6, 12, 17, 27], "configur": [0, 4, 17, 21, 27, 33, 37], "fu_param": [0, 4, 27], "genparam": [0, 4, 5, 7, 9, 10, 12, 13, 14, 15, 19, 20, 21, 27], "icache_param": [0, 4, 27], "instr": [0, 4, 9, 27], "isa_param": [0, 4, 27], "peripher": [0, 4, 27], "axi_lit": [0, 4, 27], "bus_adapt": [0, 4, 27], "wishbon": [0, 4, 27], "priv": [0, 4, 9, 11, 16, 27], "schedul": [0, 4, 25, 26, 27, 28, 35, 37, 40], "wakeup_select": [0, 4, 27], "core": [0, 5, 9, 12, 13, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 35, 37, 39], "kei": [0, 19, 28, 35, 37, 39], "manag": [0, 12, 23, 25, 28, 35, 37, 39], "method": [0, 3, 5, 6, 9, 10, 12, 13, 14, 15, 17, 19, 20, 21, 23, 25, 28, 35, 37, 38, 39], "sugar": [0, 28, 35], "tmodul": [0, 17, 20, 28, 34, 35, 37], "transact": [0, 9, 16, 17, 19, 23, 25, 28, 31, 35, 37, 40], "transaction_bas": [0, 28, 35], "lib": [0, 28, 35, 36, 38, 39, 40], "adapt": [0, 17, 28, 34, 35, 38], "button": [0, 28, 35], "connector": [0, 28, 35], "depend": [0, 16, 19, 25, 28, 34, 35, 40], "fifo": [0, 5, 26, 28, 34, 35], "log": [0, 16, 17, 26, 28, 35, 39], "metric": [0, 16, 28, 35, 39], "reqr": [0, 28, 35], "simultan": [0, 19, 28, 34, 35, 36], "storag": [0, 28, 35], "transform": [0, 28, 35], "test": [0, 16, 23, 25, 28, 29, 35, 36, 37, 39, 40], "function": [0, 9, 12, 16, 21, 26, 28, 29, 34, 35, 36, 37, 39], "gtkw_extens": [0, 28, 35], "infrastructur": [0, 28, 35], "profil": [0, 23, 28], "testbenchio": [0, 28, 29, 35], "util": [0, 28, 29, 34, 35, 37], "assign": [0, 19, 28, 29, 34, 35, 36], "data_repr": [0, 28, 35], "debug_sign": [0, 5, 16, 28, 35, 36, 37, 38], "depcach": [0, 28, 35], "gen": [0, 9, 12, 13, 28, 35], "idgen": [0, 28, 35], "transactron_help": [0, 28, 35], "graph": [0, 23, 25, 28, 33, 36], "trace": [0, 23, 28, 38], "ha": [1, 6, 9, 10, 19, 21, 23, 26, 29, 31, 34, 35, 36, 37], "data": [1, 9, 10, 15, 17, 19, 20, 25, 32, 33, 35, 36, 37, 38, 39, 40], "forward": [1, 17, 34, 36, 37], "from": [1, 5, 6, 9, 15, 17, 19, 20, 21, 23, 24, 26, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "tomasulo": 1, "announc": [1, 5, 15], "bu": [1, 9, 15, 16, 17], "read": [1, 15, 17, 19, 23, 25, 29, 34, 37, 39], "x0": [1, 9], "rf0": 1, "return": [1, 3, 12, 15, 17, 20, 25, 26, 36, 37, 38, 39], "0": [1, 9, 12, 16, 17, 19, 21, 31, 32, 33, 35, 36, 37, 38], "write": [1, 6, 9, 17, 19, 26, 32, 34, 36, 37], "i": [1, 3, 5, 6, 9, 12, 13, 15, 16, 17, 19, 20, 21, 23, 24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "noop": 1, "separ": [1, 30, 35, 36, 37, 39], "r": [1, 5, 9, 15, 21, 23, 26, 30, 31, 32, 33], "each": [1, 10, 12, 16, 17, 19, 23, 25, 26, 31, 32, 34, 35, 36, 37, 38, 39], "fu": [1, 4, 5, 9, 11, 16, 20, 31, 32, 37], "writeback": 1, "stage": [1, 15, 20], "save": [1, 5, 16, 20, 23, 26, 31, 32, 35, 37, 39], "after": [1, 3, 6, 10, 17, 20, 26, 30, 33, 34, 37], "get": [1, 5, 9, 12, 13, 21, 23, 25, 35, 36, 37, 38, 39, 40], "output": [1, 5, 6, 15, 17, 23, 26, 31, 32, 36, 37, 40], "commit": [1, 23, 26, 33], "updat": [1, 14, 15, 19, 33, 40], "The": [3, 5, 6, 12, 17, 23, 24, 25, 26, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40], "should": [3, 5, 6, 9, 10, 17, 20, 21, 23, 24, 26, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40], "expos": [3, 37, 39], "three": [3, 9, 26, 33, 36], "issue_req": [3, 6], "thi": [3, 5, 6, 9, 12, 13, 15, 17, 19, 20, 21, 23, 26, 29, 31, 32, 33, 34, 35, 36, 37, 39, 40], "issu": [3, 6, 12, 13, 14, 21, 23, 34, 37], "an": [3, 5, 6, 15, 17, 21, 23, 24, 26, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40], "lookup": [3, 6], "request": [3, 6, 12, 13, 15, 16, 17, 34, 35, 36, 37, 40], "accept_resp": 3, "result": [3, 5, 6, 9, 12, 13, 15, 17, 20, 26, 33, 34, 37, 39], "flush": [3, 6, 20, 26], "entir": [3, 33, 34], "oper": [3, 9, 12, 16, 26, 34, 36, 37, 40], "under": [3, 34, 35, 36], "follow": [3, 12, 21, 23, 31, 33, 34, 37, 39], "ar": [3, 5, 9, 15, 16, 17, 19, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "alwai": [3, 9, 19, 33, 34, 36, 37, 38], "multipl": [3, 12, 13, 16, 17, 21, 34, 36, 37, 39], "4": [3, 9, 12, 16, 37], "byte": [3, 16, 35, 37, 39], "risc": [3, 9, 16, 24, 33], "v": [3, 9, 16, 23, 24, 26, 31, 33, 37], "specif": [3, 9, 16, 17, 23, 26, 33, 37], "requir": [3, 19, 23, 26, 33, 34, 35, 36], "align": [3, 15, 39], "c": [3, 16, 26, 33, 37], "extens": [3, 9, 16, 33], "introduc": [3, 26, 34], "16": [3, 9, 16, 26, 36], "bit": [3, 6, 9, 12, 13, 16, 17, 19, 20, 26, 31, 32, 34, 37, 39, 40], "relax": [3, 34], "fetch": [3, 4, 5, 6, 8, 9, 16, 20, 26], "unit": [3, 5, 9, 10, 12, 13, 16, 17, 21, 23, 30, 33], "handl": [3, 12, 20, 25, 34, 36], "case": [3, 5, 17, 21, 26, 29, 34, 36, 37, 39, 40], "fulli": [3, 15, 37], "pipelin": [3, 15, 17, 21, 26, 31, 37], "process": [3, 20, 23, 25, 33, 37, 38], "order": [3, 16, 20, 21, 23, 24, 25, 33, 36, 37], "As": [3, 26, 34, 37], "can": [3, 5, 15, 17, 19, 20, 23, 24, 26, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "invok": [3, 5, 9, 10, 21, 26, 31, 38], "independ": [3, 34, 37], "accept_r": [3, 6], "If": [3, 9, 16, 17, 19, 20, 26, 29, 31, 34, 35, 36, 37, 39], "space": [3, 26], "anoth": [3, 6, 23, 34, 36, 37], "simpli": 3, "block": [3, 6, 13, 14, 16, 17, 21, 25, 26, 34, 36, 37], "latenc": [3, 26, 33, 37], "least": 3, "one": [3, 5, 6, 12, 17, 20, 23, 26, 30, 31, 32, 34, 36, 37, 38, 39, 40], "cycl": [3, 12, 13, 17, 19, 20, 23, 26, 30, 33, 34, 35, 36, 37, 38], "miss": [3, 26], "occur": [3, 6], "arbitrarili": 3, "long": [3, 32, 33, 37], "ensur": [3, 33], "ani": [3, 9, 17, 21, 26, 29, 37, 38, 39, 40], "refetch": 3, "howev": [3, 36, 37], "guarante": [3, 26], "have": [3, 5, 15, 17, 23, 26, 29, 33, 34, 36, 37, 38, 39, 40], "alreadi": [3, 5, 26, 37, 39], "been": 3, "still": [3, 26, 32, 36], "wait": [3, 5, 17, 20, 23, 26, 31, 32, 36, 38], "accept": [3, 6, 12, 13, 14, 33, 36, 37, 39], "inform": [3, 15, 21, 23, 35, 37, 39], "regard": 3, "error": [3, 6, 17, 36, 37, 39], "mean": [3, 21, 23, 32, 36, 37], "dure": [3, 15, 25, 30, 37, 38], "line": [3, 6, 16, 23, 25], "subsequ": 3, "access": [3, 16, 17, 19, 26, 34, 37, 38, 39], "trigger": [3, 19, 37, 39], "which": [3, 5, 6, 9, 10, 12, 15, 17, 21, 23, 24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "most": [3, 26, 34, 36, 37], "like": [3, 9, 26, 34, 36, 37], "For": [3, 16, 23, 31, 32, 34, 35, 37, 39, 40], "32": [3, 9, 12, 13, 16, 17, 26, 34, 37], "128": [3, 9, 16], "set": [3, 6, 9, 12, 15, 16, 19, 20, 21, 25, 31, 33, 36, 37, 39, 40], "size": [3, 16, 17, 26, 34, 37, 39], "equal": [3, 20, 37], "31": [3, 9], "15": [3, 9], "14": [3, 9], "13": [3, 9], "12": [3, 9], "11": [3, 9, 23, 33], "10": [3, 9, 26], "09": 3, "08": 3, "07": 3, "06": [3, 38], "05": 3, "04": 3, "03": 3, "02": 3, "01": 3, "00": 3, "tag": [3, 17, 26, 31, 32], "index": [3, 35, 36, 40], "offset": 3, "decod": [4, 8, 12, 15, 21, 35, 39], "decode_stag": [4, 8], "instr_decod": [4, 8], "instr_descript": [4, 8], "isa": [4, 8, 10, 16, 19], "optyp": [4, 8, 12, 15, 16, 21], "rvc": [4, 8, 10], "alu": [4, 11, 16], "div_unit": [4, 11], "except": [4, 5, 9, 11, 16, 18, 25, 29, 36, 38, 39], "jumpbranch": [4, 11, 16, 37], "mul_unit": [4, 11], "shift_unit": [4, 11, 16], "zbc": [4, 11, 16], "zb": [4, 11, 16], "interfac": [4, 6, 9, 11, 13, 15, 17, 21, 25, 33, 34, 36, 37], "func_blocks_unifi": [4, 11], "func_protocol": [4, 11, 21], "lsu": [4, 11, 16], "dummylsu": [4, 11, 16], "pma": [4, 11, 16], "csr": [4, 9, 16, 18], "csr_instanc": [4, 18], "csr_regist": [4, 18], "trap": [4, 18], "instr_count": [4, 18], "interrupt_control": [4, 18], "class": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 34, 35, 36, 37, 38, 39, 40], "base": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 26, 35, 36, 37, 38, 39, 40], "elaborat": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 17, 19, 20, 21, 34, 35, 36, 37, 38, 39], "__init__": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 34, 35, 36, 37, 38, 39, 40], "gen_param": [4, 5, 7, 9, 10, 12, 13, 14, 15, 16, 19, 20, 21], "wb_instr_bu": 4, "wishboneinterfac": [4, 17], "wb_data_bu": 4, "resultannounc": 5, "simpl": [5, 6, 9, 10, 15, 21, 36, 37, 39, 40], "It": [5, 9, 10, 12, 13, 15, 17, 21, 23, 26, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40], "take": [5, 9, 17, 30, 31, 34, 36, 37, 38, 39], "execut": [5, 9, 12, 17, 21, 23, 25, 30, 32, 34, 35, 36, 37, 38], "instruct": [5, 6, 9, 10, 12, 15, 16, 19, 20, 21, 25, 26, 30, 31, 33], "send": [5, 9, 10, 16, 17, 21], "its": [5, 9, 19, 21, 26, 33, 34, 36, 37, 39, 40], "mark": [5, 25, 26, 35], "complet": [5, 17, 26], "store": [5, 9, 15, 16, 20, 26, 31, 32, 36, 37, 39], "valu": [5, 6, 9, 12, 15, 16, 17, 19, 20, 21, 25, 29, 31, 32, 35, 36, 37, 38, 39, 40], "also": [5, 23, 33, 34, 37, 38], "sent": [5, 17, 38], "get_result": [5, 14, 15, 37], "serial": [5, 15, 37], "so": [5, 17, 26, 33, 34, 35, 36, 37], "we": [5, 6, 15, 17, 26, 30, 31, 32, 33, 34, 37, 38], "more": [5, 23, 25, 26, 37, 39], "than": [5, 26, 37, 39], "connect": [5, 9, 17, 19, 26, 34, 36, 37], "manytooneconnecttran": [5, 37], "rob_mark_don": 5, "rs_updat": 5, "rf_write": 5, "paramet": [5, 6, 9, 10, 12, 13, 15, 16, 17, 19, 20, 21, 34, 36, 37, 38, 39, 40], "instanc": [5, 6, 9, 10, 15, 21, 33, 35, 36, 37, 38, 39], "us": [5, 6, 9, 10, 12, 13, 15, 16, 17, 19, 20, 21, 25, 26, 29, 33, 34, 36, 37, 38, 39, 40], "gener": [5, 6, 9, 10, 12, 13, 15, 16, 17, 19, 21, 23, 24, 26, 29, 33, 35, 36, 37, 38, 39], "next": [5, 6, 9, 10, 15, 21, 26, 36, 40], "readi": [5, 6, 15, 17, 19, 21, 25, 31, 35, 36, 37], "assum": [5, 12, 26, 37, 39], "differ": [5, 12, 17, 23, 24, 26, 29, 33, 36, 37, 39], "end": [5, 15, 26, 36, 37], "without": [5, 21, 26, 36, 37, 39], "pass": [5, 23, 25, 33, 36, 37, 38, 39], "finish": [5, 17, 20, 37], "rob_peek": 5, "rob_retir": 5, "r_rat_commit": 5, "r_rat_peek": 5, "free_rf_put": 5, "rf_free": 5, "precommit": [5, 15, 23], "exception_cause_get": 5, "exception_cause_clear": 5, "frat_renam": 5, "fetch_continu": 5, "instr_decr": 5, "trap_entri": 5, "cacheinterfac": [6, 10], "A": [6, 16, 17, 33, 34, 35, 36, 37, 39], "associ": [6, 16, 37], "replac": [6, 13, 16, 31], "polici": 6, "pseudo": 6, "random": [6, 38], "scheme": 6, "everi": [6, 12, 17, 23, 33, 36, 37], "time": [6, 17, 19, 26, 36, 37], "trash": 6, "select": [6, 9, 12, 14, 15, 17, 21, 23], "wai": [6, 12, 17, 23, 26, 33, 34, 36, 37, 39], "keep": [6, 36], "global": [6, 19, 26], "counter": [6, 16, 19, 20, 23, 37], "abstract": [6, 13, 16, 33, 37, 39], "awai": 6, "need": [6, 17, 23, 26, 31, 34, 36], "two": [6, 19, 26, 29, 33, 34, 36, 37, 38, 39], "refiller_start": 6, "call": [6, 19, 20, 21, 23, 29, 31, 34, 35, 36, 37, 38, 39], "whenev": [6, 37], "refiller_accept": 6, "written": [6, 19, 32, 33, 37], "last": [6, 20, 21, 36, 37], "when": [6, 17, 20, 23, 26, 29, 31, 32, 34, 36, 37, 38, 39, 40], "either": [6, 17, 34, 36, 37, 38, 39, 40], "transfer": [6, 17, 36, 37], "over": [6, 19, 36, 37], "shouldn": [6, 33], "t": [6, 9, 15, 16, 23, 26, 29, 31, 33, 34, 36, 37, 38, 39], "until": [6, 26, 37], "start": [6, 12, 15, 17, 26, 36, 37], "layout": [6, 9, 10, 17, 21, 23, 29, 34, 36, 37, 39], "icachelayout": 6, "icacheparamet": [6, 16], "cacherefillerinterfac": 6, "none": [6, 7, 9, 10, 12, 15, 16, 19, 35, 36, 37, 38, 39, 40], "creat": [6, 13, 17, 23, 33, 34, 36, 37, 38, 39, 40], "input": [6, 9, 12, 17, 26, 31, 32, 34, 36, 37, 40], "start_refil": 6, "accept_refil": 6, "deserialize_addr": 6, "raw_addr": 6, "dict": [6, 17, 34, 35, 36, 37, 38, 39, 40], "str": [6, 16, 17, 35, 36, 37, 38, 39, 40], "amaranth": [6, 9, 12, 16, 17, 29, 33, 34, 35, 36, 37, 38, 39, 40], "hdl": [6, 9, 12, 16, 35, 36, 37, 38, 39, 40], "_ast": [6, 9, 12, 16, 36, 37, 38, 39, 40], "serialize_addr": 6, "addr": [6, 15, 17, 37], "view": [6, 12, 15, 36, 37, 38, 39, 40], "icachebypass": 6, "bus_mast": 6, "busmasterinterfac": [6, 15, 17], "haselabor": [6, 14, 17, 35, 36, 37, 38, 40], "protocol": [6, 14, 17, 35, 36, 37], "whole": [6, 24, 26, 37], "given": [6, 15, 23, 31, 34, 35, 36, 37, 38, 39, 40], "simplecommonbuscacherefil": 6, "frat": 7, "rrat": 7, "registerfil": 7, "reorderbuff": [7, 20], "decodestag": 9, "instanti": [9, 36], "instrdecod": 9, "make": [9, 12, 23, 24, 26, 29, 33, 34, 35, 38], "actual": [9, 23, 25, 34], "combinatori": [9, 34], "manner": [9, 17], "get_raw": 9, "push_decod": 9, "raw": 9, "previou": [9, 17, 26, 37], "step": [9, 10, 21, 23, 26, 33, 34], "e": [9, 16, 23, 26, 29, 34, 37, 39, 40], "g": [9, 16, 23, 26, 29, 34, 37, 39, 40], "fetchlayout": [9, 10], "describ": [9, 10, 21, 26, 33, 35, 36, 37, 38], "decodelayout": [9, 21], "perform": [9, 12, 13, 16, 21, 23, 33, 34, 36, 37, 39, 40], "elementari": 9, "compon": [9, 16, 17, 24, 36, 37], "opcod": [9, 16, 31, 32], "funct3": [9, 12, 16], "etc": [9, 16, 34], "via": [9, 34, 36], "attribut": [9, 12, 13, 15, 16, 17, 19, 20, 35, 36, 37, 39, 40], "signal": [9, 12, 15, 16, 17, 25, 29, 35, 36, 37, 38, 39, 40], "ilen": [9, 16], "out": [9, 12, 13, 17, 24, 25, 35, 36, 37, 40], "identifi": [9, 16, 31, 37], "funct3_v": 9, "1": [9, 12, 13, 16, 19, 21, 26, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "funct7": [9, 12, 16], "seven": 9, "funct7_v": 9, "funct12": 9, "twelv": 9, "funct12_v": 9, "rd": [9, 16], "reg_cnt_log": 9, "address": [9, 15, 16, 17, 19, 25, 26], "regist": [9, 16, 19, 21, 26, 30, 36, 37, 39], "rd_v": 9, "rs1": [9, 16], "hold": [9, 17, 37], "first": [9, 12, 21, 26, 31, 32, 33, 34, 37, 38, 39], "rs1_v": 9, "form": [9, 16, 19, 26, 33, 37], "rs2": [9, 16], "second": [9, 12, 21, 31, 32, 33, 37], "rs2_v": 9, "imm": [9, 16], "xlen": [9, 12, 16, 19, 39], "immedi": [9, 17], "provid": [9, 12, 16, 19, 21, 33, 34, 37, 38, 39], "were": [9, 26, 34], "succ": 9, "fencetarget": 9, "successor": 9, "fenc": [9, 16], "pred": 9, "predecessor": 9, "fm": 9, "fencefm": 9, "mode": [9, 16, 23, 26], "csr_alen": [9, 16], "control": [9, 16, 17, 33, 35, 36, 37, 40], "sourc": [9, 21, 23, 31, 35, 36, 37], "type": [9, 12, 23, 36, 37, 38, 39], "defin": [9, 15, 19, 34, 36, 37, 39, 40], "kind": [9, 12, 21, 37, 39], "illeg": 9, "wa": [9, 19, 20, 23, 26, 34, 35, 36, 37, 39], "success": [9, 17, 38], "do": [9, 26, 29, 34, 36], "fit": 9, "support": [9, 15, 16, 21, 23, 25, 36, 37], "constructor": [9, 34, 36, 39], "encod": [9, 16, 26, 35, 39, 40], "object": [9, 12, 15, 16, 17, 33, 34, 35, 37, 38, 39], "repres": [9, 19, 36, 37], "singl": [9, 12, 13, 16, 20, 21, 34, 36, 37, 39], "option": [9, 12, 16, 17, 19, 23, 34, 35, 36, 37, 38, 39, 40], "exist": [9, 34], "instr_type_overrid": 9, "instrtyp": 9, "specifi": [9, 16, 17, 19, 32, 37, 38, 39], "determin": [9, 26, 33, 37, 39], "instrust": 9, "almost": 9, "correct": [9, 15, 26, 31, 32, 33], "rd_zero": 9, "bool": [9, 15, 16, 19, 35, 36, 37, 38, 39, 40], "field": [9, 15, 16, 19, 23, 31, 32, 34, 35, 36, 37, 38, 39], "constant": 9, "zero": [9, 20, 31, 37, 40], "other": [9, 19, 23, 25, 34, 35, 36, 37, 40], "accordingli": 9, "default": [9, 17, 23, 34, 35, 36, 37, 39, 40], "fals": [9, 12, 15, 16, 23, 34, 35, 36, 37, 39, 40], "rs1_zero": 9, "exceptioncaus": 9, "intenum": [9, 12, 19], "breakpoint": 9, "3": [9, 12, 19, 23, 35, 36, 39], "environment_call_from_m": 9, "environment_call_from_": 9, "9": 9, "environment_call_from_u": 9, "8": [9, 12, 13, 16, 17, 36, 37], "illegal_instruct": 9, "2": [9, 12, 13, 16, 17, 19, 33, 35, 36, 37, 39], "instruction_access_fault": 9, "instruction_address_misalign": 9, "instruction_page_fault": 9, "load_access_fault": 9, "5": [9, 12, 16, 30, 37, 38], "load_address_misalign": 9, "load_page_fault": 9, "store_access_fault": 9, "7": [9, 16], "store_address_misalign": 9, "6": [9, 16, 26], "store_page_fault": 9, "__new__": [9, 12, 16, 19, 35], "tso": 9, "intflag": [9, 12, 16, 35], "dev_i": 9, "dev_o": 9, "mem_r": 9, "mem_w": 9, "clz": 9, "1536": 9, "cpop": 9, "1538": 9, "ctz": 9, "1537": 9, "ebreak": 9, "ecal": 9, "mret": [9, 12], "770": 9, "orcb": 9, "647": 9, "rev8_32": 9, "1688": 9, "rev8_64": 9, "1720": 9, "sextb": 9, "1540": 9, "sexth": 9, "1541": 9, "sret": 9, "258": 9, "wfi": 9, "261": 9, "zexth": 9, "add": [9, 34, 36, 37, 39], "AND": 9, "andn": 9, "b": [9, 16, 37], "bclr": [9, 12], "beq": 9, "bext": [9, 12], "bge": 9, "bgeu": 9, "binv": [9, 12], "blt": 9, "bltu": 9, "bne": 9, "bset": [9, 12], "clmul": [9, 12], "clmulh": [9, 12], "clmulr": [9, 12], "csrrc": 9, "csrrci": 9, "csrr": 9, "csrrsi": 9, "csrrw": 9, "csrrwi": 9, "d": [9, 16, 34, 36, 37, 39], "div": [9, 12], "divu": [9, 12], "divuw": 9, "divw": 9, "fencei": 9, "h": [9, 26], "hu": 9, "jalr": 9, "max": [9, 33], "maxu": 9, "min": [9, 37], "minu": 9, "mul": [9, 12], "mulh": [9, 12], "mulhsu": [9, 12], "mulhu": [9, 12], "mulw": 9, "OR": 9, "orn": 9, "rem": [9, 12], "remu": [9, 12], "remuw": 9, "remw": 9, "rev8": 9, "rol": 9, "ror": 9, "sh1add": 9, "sh2add": 9, "sh3add": 9, "sll": 9, "slt": 9, "sltu": 9, "sr": 9, "sub": [9, 37], "w": [9, 26], "xnor": 9, "xor": 9, "36": 9, "52": 9, "20": 9, "48": 9, "muldiv": 9, "sa": 9, "sfencevma": 9, "sl": 9, "enum": [9, 12, 16, 36, 37, 38, 39], "j": [9, 16], "": [9, 16, 17, 26, 34, 35, 36, 37, 39, 40], "u": [9, 26, 33, 37, 39], "auipc": 9, "branch": [9, 26, 33, 37], "24": 9, "jal": 9, "27": 9, "25": 9, "load": [9, 15, 26, 37, 39], "load_fp": 9, "lui": 9, "misc_mem": 9, "op": 9, "op32": 9, "op_imm": 9, "op_imm_32": 9, "store_fp": 9, "system": [9, 33, 34, 39], "28": [9, 26], "a0": 9, "a1": 9, "a2": 9, "a3": 9, "a4": 9, "a5": 9, "a6": 9, "a7": 9, "17": 9, "fp": [9, 35], "gp": [9, 12, 20], "ra": 9, "s0": 9, "s1": 9, "s10": 9, "26": 9, "s11": 9, "s2": 9, "18": 9, "s3": 9, "19": 9, "s4": 9, "s5": 9, "21": 9, "s6": 9, "22": 9, "s7": 9, "23": 9, "s8": 9, "s9": 9, "sp": 9, "t0": 9, "t1": [9, 34], "t2": [9, 34], "t3": 9, "t4": 9, "29": 9, "t5": 9, "30": [9, 26], "t6": 9, "tp": [9, 39], "x1": 9, "x10": 9, "x11": 9, "x12": 9, "x13": 9, "x14": 9, "x15": 9, "x16": 9, "x17": 9, "x18": 9, "x19": 9, "x2": 9, "x20": 9, "x21": 9, "x22": 9, "x23": 9, "x24": 9, "x25": 9, "x26": 9, "x27": 9, "x28": 9, "x29": 9, "x3": 9, "x30": 9, "x31": 9, "x4": 9, "x5": 9, "x6": 9, "x7": 9, "x8": 9, "x9": 9, "confus": 9, "address_gener": 9, "arithmet": 9, "bit_manipul": 9, "bit_rot": 9, "compar": [9, 25], "csr_imm": 9, "csr_reg": 9, "div_rem": 9, "34": 9, "intern": [9, 16, 25, 34, 36, 37], "caus": [9, 26, 37, 39], "befor": [9, 17, 20, 23, 29, 30, 34, 36, 37], "logic": [9, 26, 32, 33, 34], "33": 9, "shift": [9, 11, 12, 16, 37], "single_bit_manipul": 9, "unary_bit_manipulation_1": 9, "unary_bit_manipulation_2": 9, "unary_bit_manipulation_3": 9, "unary_bit_manipulation_4": 9, "unary_bit_manipulation_5": 9, "unknown": [9, 23, 35, 37, 39], "optypes_required_by_extens": 9, "resolve_impl": 9, "true": [9, 15, 16, 17, 34, 35, 36, 37, 38, 39, 40], "ignore_unsupport": 9, "instrdecompress": 9, "decompr_reg": 9, "rvc_reg": 9, "instr_mux": 9, "sel": [9, 17], "list": [9, 12, 16, 17, 19, 23, 25, 29, 33, 35, 36, 37, 38, 39, 40], "int": [9, 12, 13, 15, 16, 17, 19, 35, 36, 37, 38, 39, 40], "valuecast": [9, 16, 36, 37, 38, 39], "tupl": [9, 12, 17, 19, 21, 35, 36, 37, 39], "is_instr_compress": 9, "pc": [10, 25], "insid": [10, 33, 34, 36, 37], "increment": [10, 19, 20], "ilen_byt": 10, "cont": [10, 38], "unalignedfetch": 10, "work": [10, 21, 26, 29, 33, 34, 36, 37], "unalign": 10, "unsigned_multipl": [11, 12], "common": [11, 12, 17, 36, 37, 39], "fast_recurs": [11, 12], "sequenc": [11, 12, 21, 37], "alucompon": [12, 16], "functionalcomponentparam": [12, 16], "zba_en": 12, "zbb_enabl": 12, "get_modul": [12, 15, 16], "funcunit": [12, 14, 16], "get_optyp": [12, 15, 16], "alufuncunit": 12, "alu_fn": 12, "alufn": 12, "divcompon": 12, "ipc": [12, 33], "div_fn": 12, "divfn": 12, "decodermanag": 12, "fn": 12, "get_instruct": 12, "valid": [12, 17, 21, 31, 37, 39, 40], "implement": [12, 15, 17, 24, 25, 26, 30, 37, 39, 40], "format": [12, 23, 33, 34, 35, 36, 37, 39], "divunit": 12, "get_input": 12, "arg": [12, 17, 34, 35, 36, 37, 38, 39, 40], "exceptionfuncunit": 12, "unit_fn": 12, "exceptionunitfn": 12, "exceptionunitcompon": [12, 16], "jumpbranchfuncunit": 12, "jb_fn": 12, "jumpbranchfn": 12, "jumpcompon": [12, 16], "mulcompon": 12, "mul_unit_typ": 12, "multyp": 12, "dsp_width": [12, 13], "mul_fn": 12, "mulfn": 12, "hot": [12, 26, 40], "wire": 12, "recursive_mul": 12, "fastest": 12, "multipli": [12, 13], "onli": [12, 17, 19, 20, 26, 33, 34, 35, 36, 37, 38, 39], "costli": [12, 26], "term": 12, "resourc": [12, 20, 26, 33, 34, 36], "sequence_mul": 12, "dsp": [12, 13], "balanc": 12, "between": [12, 23, 26, 34, 36, 37, 39, 40], "cost": [12, 25, 34], "shift_mul": 12, "cheapest": 12, "russian": [12, 13], "peasant": [12, 13], "algorithm": [12, 13, 37], "mulunit": 12, "respons": [12, 17, 21, 23, 36, 37, 38], "unsign": [12, 13], "integ": [12, 16, 38, 39], "standard": [12, 26, 33, 37, 40], "funcunitlayout": [12, 21], "comput": [12, 13, 15, 20, 26, 37, 39], "mul_typ": 12, "privilegedfn": 12, "classmethod": [12, 35, 36, 37, 39], "privilegedfuncunit": 12, "privilegedunitcompon": [12, 16], "shiftfuncunit": 12, "shift_unit_fn": 12, "shiftunitfn": 12, "shiftunitcompon": [12, 16], "clmultipli": 12, "carri": [12, 16, 33], "less": [12, 16], "product": [12, 37], "i1": [12, 13], "n": [12, 13, 16, 37], "factor": 12, "i2": [12, 13], "reset": [12, 19, 25, 36], "new": [12, 15, 17, 20, 25, 26, 36, 37, 39, 40], "busi": 12, "while": [12, 36, 38], "progress": 12, "bit_width": 12, "recursion_depth": 12, "width": [12, 13, 16, 17, 19, 37, 39, 40], "depth": [12, 17, 33, 37], "recurs": [12, 13, 33, 34, 35, 37, 39], "parallel": [12, 37], "power": [12, 39], "iterative_modul": 12, "recursive_modul": 12, "zbccompon": 12, "zbc_fn": 12, "zbcfn": 12, "zbcunit": 12, "zbsfunction": 12, "in1": 12, "in2": 12, "zbscompon": 12, "zbsunit": 12, "zbs_fn": 12, "dspmulunit": 13, "clock": [13, 30, 33, 34, 35, 36, 37], "design": [13, 26, 34, 35], "synthesi": [13, 25], "tool": [13, 23, 33, 35], "o": [13, 26, 34, 36], "same": [13, 15, 23, 34, 36, 37, 39], "number": [13, 16, 17, 23, 26, 33, 35, 36, 37, 38, 39, 40], "mulbaseunsign": 13, "unsignedmulunitlayout": 13, "recursiveunsignedmul": 13, "see": [13, 29, 33, 34, 37], "fast": 13, "within": [13, 23], "sequentialunsignedmul": 13, "sequenti": [13, 17], "classic": [13, 26], "shiftunsignedmul": 13, "cheap": 13, "multi": 13, "funcblocksunifi": 14, "iter": [14, 16, 36, 37, 38, 39, 40], "blockcomponentparam": [14, 15, 16], "extra_methods_requir": 14, "unifierkei": [14, 37], "get_extra_method": 14, "item": [14, 39, 40], "funcblock": [14, 15, 16, 21], "insert": [14, 15, 21, 25, 26, 30, 31], "lsublockcompon": [15, 16], "get_rs_entry_count": [15, 16], "lsudummi": 15, "veri": [15, 26, 34], "all": [15, 16, 17, 20, 23, 25, 26, 29, 34, 35, 36, 37, 39, 40], "isn": [15, 33, 36], "compliant": [15, 33], "riscv": [15, 33], "spec": 15, "doesn": [15, 26, 29, 34, 37], "check": [15, 23, 26, 29, 31, 32, 33, 36, 39], "rang": [15, 36, 37, 38, 39, 40], "reserv": [15, 16, 25, 26], "place": [15, 17, 26, 31, 33, 34, 36, 37], "intruct": 15, "put": [15, 31, 33, 37], "receiv": [15, 17, 34, 36, 37], "calcul": [15, 37], "further": [15, 23, 37], "To": [15, 23, 26, 33, 37, 39], "processor": [15, 24, 25, 30], "master": [15, 17, 33], "pmacheck": 15, "physic": [15, 16, 21, 26], "memori": [15, 16, 17, 26, 36, 37], "checker": 15, "mai": [15, 23, 37, 38, 39], "part": [15, 19, 26, 30, 34, 36, 37], "combin": [15, 25, 29, 36, 37, 39], "circuit": [15, 33, 34, 36, 37, 39], "pmalayout": 15, "structlayout": [15, 36, 37, 39], "pmaregion": [15, 16], "contigu": [15, 16], "region": [15, 26], "includ": [15, 33, 34, 36, 37, 39, 40], "both": [15, 31, 34, 36, 37, 39], "begin": [15, 26], "mmio": 15, "indic": [15, 26, 32, 36, 37], "coreconfigur": 16, "func_units_config": 16, "collect": [16, 19, 24, 33, 35, 36, 37, 38, 39, 40], "station": [16, 25], "exampl": [16, 19, 23, 25, 31, 34, 36, 37, 40], "rsblockcompon": 16, "rs_entri": 16, "compress": 16, "enabl": [16, 37, 38, 39], "embed": 16, "reduc": [16, 26, 36], "debug": [16, 23, 37, 39], "hardwar": [16, 25, 30, 34, 37], "disabl": [16, 35, 37, 38], "them": [16, 23, 26, 33, 34, 36, 37, 39], "synthes": [16, 33, 37], "phys_regs_bit": 16, "file": [16, 23, 26, 33, 39], "rob_entries_bit": 16, "reorder": [16, 26, 37], "buffer": [16, 17, 26, 31, 37], "start_pc": 16, "initi": [16, 17, 25, 37, 38], "program": [16, 26, 33, 34], "icache_en": 16, "bypass": 16, "directli": [16, 34, 36], "icache_wai": 16, "icache_sets_bit": 16, "icache_line_bytes_log": 16, "fetch_block_bytes_log": 16, "allow_partial_extens": 16, "allow": [16, 24, 26, 33, 34, 36, 37, 40], "partial": [16, 35, 37, 39], "_implied_extens": 16, "extenst": 16, "flag": 16, "definit": [16, 25, 36], "per": [16, 33], "segment": 16, "abc": [16, 36, 37, 38, 39, 40], "func_unit": 16, "csrblockcompon": 16, "factori": [16, 35, 37, 39], "kwarg": [16, 17, 35, 36, 37, 38, 39, 40], "optypes_support": 16, "dependentcach": [16, 39], "cfg": 16, "addr_width": [16, 17], "length": [16, 26, 36, 39], "word_width": 16, "machin": [16, 19], "word": 16, "num_of_wai": 16, "num_of_sets_bit": 16, "line_bytes_log": 16, "btypeinstr": 16, "riscvinstr": 16, "static": [16, 35, 36, 39], "pack": 16, "ebreakinstr": 16, "itypeinstr": 16, "illegalinstr": 16, "jtypeinstr": 16, "rtypeinstr": 16, "stypeinstr": 16, "utypeinstr": 16, "avail": [16, 17, 19, 21, 23, 24, 33, 37], "atom": [16, 31, 34], "512": 16, "manipul": 16, "256": 16, "doubl": [16, 19, 26], "precis": [16, 26, 33], "float": [16, 35, 37, 38, 39], "point": [16, 26, 29, 33], "64": [16, 17], "f": [16, 21, 23, 33, 38], "98366": 16, "contain": [16, 23, 33, 34, 36, 37, 39], "basic": [16, 25, 33, 37], "full": [16, 23, 25, 26, 33, 37], "1024": 16, "dynam": [16, 26, 40], "languag": [16, 34], "l": [16, 23], "decim": 16, "m": [16, 17, 19, 20, 23, 26, 33, 34, 36, 37, 40], "divis": 16, "16384": 16, "user": [16, 19, 26, 33, 37], "level": [16, 17, 24, 26, 33, 34, 37, 38, 39], "interrupt": [16, 25], "p": [16, 23], "4096": 16, "simd": 16, "q": 16, "quad": 16, "2048": 16, "8192": 16, "vector": [16, 21, 25, 26, 37], "xintmachinemod": 16, "8589934592": 16, "categor": 16, "privilieg": 16, "xintsupervisor": 16, "17179869184": 16, "supervisor": [16, 19], "zam": 16, "2097152": 16, "misalign": 16, "zba": 16, "268435456": 16, "extend": [16, 29, 36], "zbb": 16, "536870912": 16, "1073741824": 16, "2147483648": 16, "zdinx": 16, "33554432": 16, "zfh": 16, "4194304": 16, "half": 16, "zfhmin": 16, "8388608": 16, "minim": 16, "zfinx": 16, "16777216": 16, "zhinx": 16, "67108864": 16, "zicntr": 16, "524288": 16, "timer": [16, 19], "zicsr": 16, "32768": 16, "statu": [16, 19, 38], "zifencei": 16, "65536": 16, "zihintntl": 16, "262144": 16, "non": [16, 31, 36, 37, 38], "tempor": 16, "local": [16, 20, 23], "hint": [16, 36], "zihintpaus": 16, "131072": 16, "paus": 16, "energi": 16, "zihpm": 16, "1048576": 16, "zmmul": 16, "134217728": 16, "ztso": 16, "4294967296": 16, "total": 16, "gather": 16, "numer": 16, "val": [16, 39], "correspond": [16, 31, 36, 40], "val_log": 16, "relev": [16, 35], "nativ": 16, "reg_cnt": 16, "maximum": [16, 33, 37], "bitwis": 16, "isa_str": 16, "string": [16, 37, 38], "pleas": [16, 23, 29, 34], "refer": [16, 35, 39], "gcc": 16, "arch": [16, 23, 33], "detail": [16, 20, 25, 37], "axiliteinterfac": 17, "abstractinterfac": 17, "abstractsignatur": 17, "read_address": 17, "axilitereadaddressinterfac": 17, "read_data": 17, "axilitereaddatainterfac": 17, "write_address": 17, "axilitewriteaddressinterfac": 17, "write_data": 17, "axilitewritedatainterfac": 17, "write_respons": 17, "axilitewriteresponseinterfac": 17, "axilitemast": 17, "axi": 17, "lite": 17, "axil_param": 17, "axiliteparamet": 17, "ra_request": 17, "channel": 17, "being": [17, 23, 37, 39, 40], "ra_request_layout": 17, "argument": [17, 21, 23, 25, 32, 33, 36, 37, 38, 39, 40], "rd_respons": 17, "availab": 17, "state": [17, 25, 26, 34, 36, 37, 38], "rd_response_layout": 17, "wa_request": 17, "wa_request_layout": 17, "wd_request": 17, "wd_request_layout": 17, "wr_respons": 17, "wr_response_layout": 17, "axil_mast": 17, "result_handl": 17, "start_request_transact": 17, "is_address_channel": 17, "state_machine_request": 17, "request_sign": 17, "data_width": 17, "must": [17, 36, 37, 39], "axilitesignatur": 17, "signatur": 17, "patamet": 17, "axilitemasteradapt": 17, "where": [17, 21, 23, 26, 31, 32, 34, 36, 37, 38, 39], "expect": 17, "busparametersinterfac": 17, "method_layout": 17, "commonbusmastermethodlayout": 17, "request_read": 17, "underli": 17, "request_read_layout": 17, "request_writ": 17, "request_write_layout": 17, "get_read_respons": 17, "action": [17, 19, 36, 37, 39], "read_response_layout": 17, "get_write_respons": 17, "write_response_layout": 17, "prefer": [17, 34], "gain": 17, "simplifi": 17, "interchang": 17, "buse": 17, "previous": 17, "wishbonemasteradapt": 17, "wishbonemast": 17, "pipelinedwishbonemast": 17, "wb_param": 17, "wishboneparamet": 17, "max_req": 17, "limit": [17, 34, 37], "pend": 17, "wb": 17, "request_layout": 17, "result_layout": 17, "requests_finish": 17, "generate_method_layout": 17, "wishbonearbit": 17, "arbit": 17, "slave": 17, "assert": [17, 37, 40], "cyc": 17, "grant": [17, 34, 35, 36, 37, 40], "round": [17, 36, 39, 40], "robin": [17, 36, 40], "num_slav": 17, "devic": 17, "slave_wb": 17, "intefac": 17, "num_mast": 17, "ack": 17, "adr": 17, "dat_r": 17, "dat_w": 17, "err": 17, "lock": [17, 23, 26, 34, 35, 37], "rst": 17, "rty": 17, "stall": [17, 26], "stb": 17, "name": [17, 23, 34, 35, 36, 37, 38, 39, 40], "wb_master": 17, "becom": 17, "wishbonemastermethodlayout": 17, "wishbonememoryslav": 17, "underneath": 17, "keyword": [17, 34, 36, 37, 38, 39], "thei": [17, 19, 23, 26, 30, 33, 34, 36, 37], "re": [17, 26, 29, 34, 36], "infer": [17, 36], "wishbonemux": 17, "muxer": 17, "multiplex": [17, 34], "ssel_tga": 17, "corespond": 17, "tga": 17, "note": [17, 19, 37], "stare": 17, "clear": [17, 31, 32, 37], "delai": [17, 34], "deassert": [17, 40], "master_wb": 17, "singal": 17, "granular": [17, 37], "smallest": 17, "port": [17, 36, 37, 39, 40], "capabl": 17, "wishbonesignatur": 17, "path": [17, 36, 37], "src_loc_at": [17, 37], "csraddress": 19, "3072": 19, "cycleh": 19, "3200": 19, "instret": 19, "3074": 19, "instreth": 19, "3202": 19, "mcaus": 19, "834": 19, "mepc": 19, "833": 19, "mtvec": 19, "773": 19, "3073": 19, "timeh": 19, "3201": 19, "doublecountercsr": 19, "group": [19, 37], "csrregist": 19, "At": 19, "overflow": [19, 37], "low_addr": 19, "high_addr": 19, "lower": [19, 39], "higher": 19, "synthetis": 19, "genericcsrregist": 19, "machinemodecsrregist": 19, "csrlistkei": 19, "listkei": [19, 37, 39], "dependencymanag": [19, 36, 37, 38, 39], "behaviour": [19, 33], "automat": [19, 23, 33, 39], "csrunit": 19, "bodi": [19, 34, 36, 37], "csr_val": 19, "els": [19, 26, 34, 36], "side": [19, 26, 31, 32], "effect": [19, 26, 31, 32, 36, 37], "_fu_read": 19, "_fu_writ": 19, "current": [19, 20, 21, 26, 36], "ignor": 19, "prioriti": [19, 20, 34, 36, 37], "csr_number": 19, "ro_bit": 19, "mask": [19, 37], "those": [19, 26, 36], "some": [19, 26, 29, 34, 36, 37], "upper": [19, 37], "0b11": 19, "discard": 19, "privilegelevel": 19, "csr_access_privileg": 19, "csr_addr": 19, "exceptioncauseregist": 20, "earliest": 20, "report": [20, 37], "rob_get_indic": 20, "fetch_stall_except": 20, "should_update_priorii": 20, "current_caus": 20, "new_caus": 20, "coreinstructioncount": 20, "count": [20, 23, 36, 37, 40], "leav": [20, 23], "decrement": 20, "interruptcontrol": 20, "prepar": [21, 23, 26, 35], "In": [21, 23, 24, 25, 32, 33, 34, 35, 36, 39], "alloc": [21, 30, 31, 32], "renam": [21, 30], "entri": [21, 26, 30, 31, 32, 37, 39], "stuck": 21, "get_instr": 21, "get_free_reg": 21, "rat_renam": 21, "rob_put": 21, "rf_read1": 21, "rf_read2": 21, "reservation_st": 21, "decoded_instr": 21, "id": [21, 31, 32, 35], "free": [21, 25, 26, 32], "ratlayout": 21, "rat_rename_in": 21, "rat_rename_out": 21, "roblayout": 21, "data_layout": [21, 37, 39], "rflayout": 21, "rf_read_out": 21, "rf_read_in": 21, "wakeupselect": 21, "wakeup": [21, 32], "firstli": 21, "get_readi": 21, "binari": [21, 33, 40], "th": [21, 37, 40], "posit": [21, 31, 32, 39], "row": [21, 23, 25], "taken": [21, 33, 36, 37], "take_row": 21, "rslayout": 21, "get_ready_list_out": 21, "take_out": 21, "push": 21, "down": [21, 39], "below": [23, 37], "instal": [23, 33], "python": [23, 34, 36, 37, 39], "interpret": [23, 37, 39], "pip": [23, 33], "virtual": 23, "python3": [23, 33], "venv": [23, 33], "project": [23, 24, 26], "directori": [23, 24, 33], "activ": [23, 33, 37, 38, 40], "bin": [23, 33], "librari": [23, 25, 37], "pip3": [23, 33], "dev": [23, 33], "txt": [23, 33], "riscv64": 23, "elf": 23, "binutil": 23, "your": [23, 29], "favourit": 23, "On": [23, 37], "debian": 23, "distro": 23, "hook": [23, 35], "pre": [23, 33], "run": [23, 33, 34, 35, 36, 37, 38, 40], "linter": 23, "ci": [23, 33], "intend": [23, 36], "By": [23, 36, 37], "test_transact": 23, "One": [23, 26, 34, 37, 40], "even": [23, 26, 34, 36, 37], "testschedul": 23, "Or": [23, 34], "test_singl": 23, "search": 23, "match": [23, 31, 32, 40], "queri": 23, "thank": 23, "uniqu": [23, 35, 37], "just": [23, 34, 37], "help": [23, 26, 37], "find": [23, 26, 37], "parameter": 23, "waveform": 23, "vcd": 23, "gtkw": [23, 39], "gtkwave": [23, 39], "__traces__": 23, "driven": 23, "transactron": [23, 25, 34], "__profile__": 23, "analyz": 23, "verbos": [23, 33], "runner": 23, "print": [23, 37], "code": [23, 24, 26, 29, 33, 34, 35, 37, 39, 40], "subcommand": 23, "filenam": 23, "main": [23, 26, 30, 33], "reformat": 23, "black": 23, "check_format": 23, "verifi": [23, 33], "flake8": 23, "check_typ": 23, "pyright": 23, "confront": 23, "would": [23, 26, 34, 37, 39], "messag": [23, 37], "you": [23, 29, 31, 33, 37], "diff": 23, "displai": 23, "chang": [23, 31, 34, 37, 38, 39, 40], "appli": [23, 26, 29, 35, 38], "chose": 23, "locat": [23, 24, 30, 35, 36, 37, 39], "visual": 23, "architectur": [23, 26, 33], "appropri": [23, 31, 37, 38], "prune": [23, 35], "remov": [23, 26], "disconnect": 23, "node": 23, "elk": [23, 35], "eclips": 23, "kernel": [23, 26], "dot": [23, 35, 37], "graphviz": 23, "mermaid": [23, 35], "document": [23, 25], "sphinx": 23, "html": [23, 24], "build": [23, 33, 37], "present": [23, 26, 34, 37, 39], "readabl": [23, 37], "profile_fil": 23, "json": [23, 33, 39], "about": [23, 25, 35, 37, 39], "column": 23, "question": [23, 34], "togeth": [23, 34, 36], "differenti": 23, "ident": [23, 37], "declar": [23, 34, 37, 38], "disambigu": 23, "show": 23, "caller": [23, 34, 35, 36, 37], "condit": [23, 34, 35, 36, 37], "could": [23, 34, 37], "forc": 23, "conflict": [23, 25, 35, 36], "produc": 23, "tree": [23, 35, 37], "root": [23, 35], "invert": 23, "children": 23, "how": [23, 26, 31, 33, 36, 37], "mani": [23, 26, 33, 34, 35, 36, 37, 39], "sort": [23, 37], "filter": [23, 37], "regular": 23, "express": [23, 34, 37], "loc": 23, "coreblock": [24, 29, 33], "go": [24, 26, 29, 36], "microarchitectur": 24, "focu": 24, "flexibl": [24, 30], "easili": [24, 37], "experi": 24, "doc": 24, "descript": [24, 25, 33, 37, 39], "overview": [24, 25, 26], "high": [24, 37, 40], "found": [24, 33], "version": [24, 33], "page": [24, 26, 33], "api": [24, 25], "kuznia": [24, 33], "rdzeni": [24, 33], "github": [24, 33], "io": [24, 33], "introduct": 25, "assumpt": [25, 26], "made": [25, 26, 34], "develop": [25, 37], "environ": 25, "up": [25, 32, 33, 37, 39], "script": [25, 33], "run_test": [25, 33], "py": [25, 33], "lint": 25, "sh": 25, "core_graph": 25, "build_doc": 25, "tprof": 25, "framework": [25, 31], "usag": 25, "convent": 25, "advanc": 25, "concept": 25, "special": [25, 37], "domain": [25, 29, 36], "nest": [25, 37], "schema": [25, 35, 37, 39], "structur": [25, 26, 31, 34, 35, 36, 37, 39], "proposit": [25, 26], "slot": [25, 37], "tabl": 25, "substitut": 25, "clean": 25, "extern": [25, 33, 34, 36], "problem": [25, 26], "checklist": 25, "verif": 25, "manual": [25, 34], "reproduct": 25, "benchmark": 25, "regress": 25, "map": [25, 26, 36, 37, 38, 39, 40], "summari": 25, "paper": 25, "old": 25, "softwar": [25, 37], "tlb": 25, "analysi": [25, 35], "strategi": 25, "igpu": 25, "specul": 25, "gpu": 25, "effici": 25, "journal": 26, "articl": 26, "look": [26, 37], "choic": 26, "primari": 26, "relat": [26, 36, 37, 39], "procedur": 26, "chosen": 26, "basi": 26, "improv": [26, 34], "pretti": 26, "1993": 26, "2001": 26, "much": [26, 37], "research": 26, "cpu": 26, "consid": [26, 34, 36, 37], "solv": 26, "instead": [26, 29, 34, 35, 36, 37, 38, 40], "try": [26, 29, 34], "due": [26, 36, 37], "characterist": 26, "easi": [26, 29, 34, 37], "our": [26, 30, 33], "decid": [26, 30, 34], "what": 26, "peopl": 26, "probabl": [26, 38], "lot": 26, "worth": 26, "walker": 26, "cragon": 26, "concurr": [26, 36], "ieee": 26, "vol": 26, "june": 26, "1995": 26, "moudgil": 26, "vassiliadi": 26, "micro": 26, "pp": 26, "58": 26, "67": 26, "februari": 26, "1996": 26, "These": [26, 33, 34], "survei": 26, "topic": 26, "cdc": 26, "6600": 26, "done": [26, 33, 34, 36, 37, 38], "jump": 26, "handler": [26, 38], "ibm360": 26, "stop": [26, 37], "crai": 26, "similar": [26, 33, 34, 37, 40], "here": [26, 31], "bigger": [26, 37], "torng": 26, "martin": 26, "dai": 26, "probe": 26, "idea": [26, 34], "author": 26, "window": 26, "iw": 26, "dispatch": [26, 30, 31, 32], "didn": 26, "context": [26, 35, 36, 37, 39], "copi": [26, 35], "restor": [26, 35], "restart": [26, 40], "few": 26, "big": 26, "overhead": 26, "origin": [26, 35, 37], "unfeas": 26, "becaus": [26, 34, 35, 36, 37], "job": 26, "addition": [26, 37], "But": 26, "mayb": [26, 34], "possibl": [26, 33, 34, 37, 39], "cooper": 26, "smaller": 26, "interest": 26, "propos": 26, "nrp": 26, "No": [26, 37], "itself": [26, 39], "don": [26, 29, 31, 34, 36], "wast": 26, "rememb": [26, 34, 35], "element": [26, 37], "left": [26, 34, 36, 37], "middl": [26, 30], "aamer": 26, "jaleel": 26, "bruce": 26, "jacob": 26, "cours": 26, "switch": [26, 31, 34, 36, 37, 40], "penalti": 26, "alpha": 26, "mip": 26, "concentr": 26, "properti": [26, 33, 36], "short": 26, "inlin": 26, "observ": [26, 37], "import": [26, 34], "enough": 26, "live": 26, "known": 26, "fly": 26, "swap": 26, "nop": 26, "reexecut": 26, "privileg": 26, "contrast": 26, "tendenc": 26, "longer": 26, "hard": [26, 37], "risk": [26, 34, 37], "linux": [26, 33], "purpos": [26, 36, 37], "addit": [26, 33, 34, 39], "hw": 26, "bore": 26, "treat": [26, 30], "mansur": 26, "samadzadeh": 26, "loai": 26, "garalnabi": 26, "checkpoint": 26, "repair": 26, "histori": 26, "futur": [26, 30, 31], "jaikrishnan": 26, "menon": 26, "marc": 26, "de": 26, "kruijf": 26, "karthikeyan": 26, "sankaralingam": 26, "2012": 26, "low": 26, "boundari": 26, "safe": [26, 34, 39], "rewritten": 26, "recompil": 26, "runtim": [26, 35], "subregion": 26, "small": 26, "overrid": 26, "barrier": 26, "warp": 26, "wrong": 26, "split": [26, 30, 37, 38], "prevent": 26, "ivan": 26, "tanas": 26, "isaac": 26, "gelado": 26, "jorda": 26, "eduard": 26, "ayguad": 26, "nacho": 26, "navarro": 26, "2017": 26, "analys": 26, "problemat": 26, "successfulli": 26, "kill": 26, "modif": 26, "usual": [26, 34, 37], "fail": [26, 37], "repli": 26, "modifi": [26, 37], "claim": 26, "operand": [26, 31, 32], "replai": 26, "queue": [26, 34, 37], "marker": 26, "jerom": 26, "hampton": 26, "2008": 26, "mention": 26, "alli": 26, "bailei": 26, "ab04": 26, "ag": 26, "rais": [26, 35, 37, 38, 39], "younger": 26, "repeat": 26, "commun": [26, 31, 34], "canon": 26, "eventu": 26, "aren": [26, 34, 37], "someth": [29, 34, 40], "puzzl": 29, "why": 29, "through": [29, 37], "sure": [29, 38], "yield": [29, 38], "notabl": 29, "settl": 29, "unexpect": 29, "ad": [29, 34, 36, 37, 38, 39, 40], "right": [29, 34, 36], "eq": [29, 34, 36], "record": [29, 34, 36, 37, 38, 39, 40], "statement": [29, 34, 36, 38, 39], "loop": [29, 34], "especi": 29, "simul": [29, 33, 35, 37, 38], "hang": 29, "spot": 29, "yourself": [29, 34], "fix": 29, "mistak": 29, "Its": [30, 34], "task": [30, 36], "rss": 30, "phase": 30, "choos": [30, 33], "potenti": 30, "merg": [30, 37], "optim": 30, "todo": 30, "want": [31, 33, 36, 38, 40], "feel": 31, "anyth": 31, "id_out": [31, 32], "id_rob": [31, 32], "id_rs1": [31, 32], "val_rs1": [31, 32], "id_rs2": [31, 32], "val_rs2": [31, 32], "fill": 31, "id_rsx": 31, "val_rsx": 31, "releas": 31, "comparison": 31, "null": [31, 32], "woken": 32, "invalid": [32, 37], "src1": [32, 37], "src2": [32, 37], "inst_readi": 32, "sever": [33, 37], "besid": 33, "synthesis": 33, "ecp5": 33, "fpga": [33, 37], "target": [33, 37], "realiti": 33, "cocotb": 33, "assembl": 33, "deliv": 33, "histor": 33, "dedic": [33, 37], "subpag": 33, "built": 33, "docker": 33, "publicli": 33, "subsect": 33, "recreat": 33, "command": [33, 38], "platform": [33, 34, 35], "amd64": 33, "synth": 33, "latest": [33, 37], "amaranthsynthecp5": 33, "dockerfil": 33, "complex": [33, 37], "although": 33, "educ": 33, "practic": 33, "frequenc": 33, "too": [33, 35], "met": [33, 36], "whether": [33, 36, 40], "cell": 33, "ram": 33, "dff": 33, "repo": 33, "sudo": 33, "pull": 33, "ghcr": 33, "rm": 33, "git": 33, "clone": 33, "http": 33, "com": 33, "cd": 33, "apt": 33, "upgrad": 33, "pythonhashse": 33, "config": 33, "parse_benchmark_info": 33, "cat": 33, "abov": [33, 34], "verilog": [33, 39], "yosi": 33, "nextpnr": 33, "bitstream": 33, "strength": 33, "modular": [33, 34], "littl": 33, "effort": 33, "gate": 33, "rout": 33, "prjtrelli": 33, "measur": [33, 37], "theori": 33, "increas": [33, 34, 37], "fmax": 33, "avoid": [33, 34], "pitfal": 33, "affect": 33, "throughput": [33, 37], "monitor": 33, "accuraci": 33, "embench": 33, "compil": [33, 34, 38], "gnu": 33, "toolchain": 33, "glibc": 33, "subset": 33, "exact": [33, 35], "onc": [33, 34, 36, 37, 40], "veril": 33, "featur": [33, 34], "stub": 33, "compat": [33, 37], "host": 33, "init": [33, 37], "mount": 33, "subdirectori": 33, "share": 33, "surviv": 33, "close": 33, "exit": 33, "gen_verilog": 33, "run_benchmark": 33, "inspir": 34, "bluespec": 34, "wiki": 34, "entrieti": 34, "doe": [34, 38, 40], "link": 34, "indirectli": [34, 36], "coordin": 34, "direct": [34, 35, 36, 37], "back": 34, "simplest": 34, "myth": 34, "def": [34, 36], "elabor": 34, "self": [34, 36, 38], "comb": [34, 36], "sig1": 34, "expr1": 34, "sync": [34, 36], "sig2": 34, "expr2": 34, "arg_expr": 34, "analog": 34, "typic": [34, 36, 37], "myotherth": 34, "my_method": 34, "input_layout": 34, "output_layout": 34, "def_method": [34, 36], "_": [34, 36], "other_method": 34, "ret_expr": 34, "techniqu": 34, "conveni": [34, 36, 37], "syntax": [34, 36], "particular": 34, "unnam": 34, "around": 34, "sometim": 34, "might": [34, 35, 37], "altern": [34, 36, 37], "best": 34, "ask": 34, "thing": [34, 37, 39], "doubt": 34, "noth": 34, "Such": [34, 38], "adaptertran": [34, 37], "though": 34, "cleaner": 34, "suppos": 34, "foo": [34, 37], "bar": [34, 37], "cleanest": 34, "recommend": 34, "foo_expr": 34, "bar_expr": 34, "final": 34, "rec": 34, "layout2": 34, "foobar": 34, "baz": 34, "42": 34, "method2": [34, 37], "baz_expr": 34, "method3": 34, "expr": 34, "mechan": [34, 37], "certain": 34, "occas": 34, "facilit": 34, "ones": 34, "connecttran": [34, 37], "plain": [34, 36, 37], "testbench": [34, 37], "own": [34, 35, 36], "variant": 34, "role": 34, "omit": [34, 36, 37], "unneed": 34, "av_comb": [34, 36], "top_comb": [34, 36], "avoidedif": [34, 36], "guard": [34, 36, 37], "therefor": 34, "induc": 34, "often": 34, "belong": [34, 37], "move": [34, 37], "top": [34, 39], "caveat": 34, "normal": [34, 37], "cannot": [34, 36, 37, 38], "schedule_befor": [34, 36], "first_t_or_m": 34, "other_t_or_m": 34, "lift": 34, "first_m": 34, "other_t": 34, "situat": [34, 36], "mutual": [34, 36, 37], "exclus": [34, 36, 37], "similarli": [34, 37], "add_conflict": [34, 36], "undefin": [34, 36], "other_m": 34, "come": 34, "consider": 34, "parent": 34, "convers": 34, "impli": 34, "amaranth_ext": [35, 39], "extract": 35, "IN": 35, "inout": 35, "owner": 35, "ownershipgraph": 35, "dump": 35, "liter": [35, 40], "dump_dot": 35, "indent": [35, 37, 39], "dump_elk": 35, "dump_mermaid": 35, "get_hier_nam": 35, "obj": 35, "hierarch": 35, "keyerror": [35, 37, 39], "yet": 35, "get_nam": 35, "insert_edg": 35, "fr": 35, "insert_nod": 35, "mermaid_direct": 35, "empti": [35, 37], "subgraph": 35, "remember_field": 35, "owner_id": 35, "methodsampl": 35, "transactions_and_method": 35, "profileinfo": 35, "cycleprofil": 35, "analyze_method": 35, "runstatnod": 35, "analyze_transact": 35, "file_nam": [35, 39], "from_dict": [35, 37, 39], "kv": [35, 37, 39], "union": [35, 36, 37, 38, 39], "infer_miss": [35, 37, 39], "from_json": [35, 37, 39], "bytearrai": [35, 37, 39], "parse_float": [35, 37, 39], "parse_int": [35, 37, 39], "parse_const": [35, 37, 39], "kw": [35, 37, 39], "exclud": [35, 37, 39], "load_onli": [35, 37, 39], "dump_onli": [35, 37, 39], "schemaf": [35, 37, 39], "to_dict": [35, 37, 39], "encode_json": [35, 37, 39], "to_json": [35, 37, 39], "skipkei": [35, 37, 39], "ensure_ascii": [35, 37, 39], "check_circular": [35, 37, 39], "allow_nan": [35, 37, 39], "callabl": [35, 36, 37, 38, 39], "sort_kei": [35, 37, 39], "profiledata": [35, 39], "individu": 35, "method_par": 35, "transactions_by_method": 35, "transaction_conflict": 35, "transaction_manag": [35, 36, 38], "transactionmanag": [35, 36, 38], "src_loc": [35, 36, 37, 39], "srcloc": [35, 36, 37], "is_transact": 35, "profilesampl": 35, "transactionsampl": 35, "runstat": 35, "statist": 35, "did": 35, "info": [35, 37], "summar": 35, "stat": 35, "runnabl": [35, 36], "tracingenabl": 35, "tracingfrag": 35, "fragment": [35, 36], "lose": 35, "difficult": 35, "copyright": 35, "subfrag": 35, "_ir": [35, 39], "tracingfragmenttransform": 35, "fragmenttransform": 35, "on_frag": 35, "tracinginst": 35, "transactionmanagerkei": 36, "simplekei": [36, 37, 39], "care": [36, 37], "never": 36, "cc_schedul": 36, "methodmap": [36, 37], "_dsl": 36, "eager_deterministic_cc_schedul": 36, "add_transact": 36, "_rec": [36, 37, 38, 39, 40], "signalbundl": [36, 37, 38, 39, 40], "print_info": 36, "cgr": 36, "porder": 36, "cc": 36, "method_map": 36, "visual_graph": 36, "transactionmodul": 36, "wrapper": [36, 37], "dependency_manag": [36, 38], "wrap": [36, 38], "dependencycontext": [36, 39], "transactionbas": 36, "serv": [36, 37], "simultena": 36, "rest": 36, "behavior": [36, 37, 39], "combination": 36, "data_out": [36, 37], "data_in": [36, 37], "methodstruct": [36, 37], "shape": [36, 39], "shapecast": [36, 39], "forwardref": [36, 38, 39], "shapelik": [36, 37, 39], "layoutlist": [36, 37, 39], "nonexclus": 36, "single_cal": [36, 37], "variabl": [36, 40], "happen": 36, "thrown": 36, "stack": [36, 37, 39], "frame": [36, 37], "deep": [36, 37], "const": [36, 37], "d1": [36, 37], "d0": 36, "validate_argu": 36, "combinationi": 36, "valuelik": [36, 37], "my_sum_method": 36, "arg1": 36, "arg2": 36, "sum": [36, 37], "layout_in": 36, "layout_out": 36, "construct": [36, 37], "blueprint": 36, "freshli": 36, "proxi": 36, "gr": 36, "transactiongraph": 36, "transactiongraphcc": 36, "priorityord": 36, "eager": 36, "subsystem": [36, 40], "fair": 36, "lowest": 36, "highest": [36, 40], "arbitr": [36, 40], "agent": [36, 40], "vertic": 36, "edg": [36, 37], "linear": 36, "consist": 36, "constraint": 36, "trivial_roundrobin_cc_schedul": 36, "mainli": 36, "decor": [36, 38], "eleg": 36, "dictionari": 36, "whose": 36, "modulelik": [36, 37, 40], "amount": [36, 38], "useless": 36, "multplex": 36, "unguard": 36, "synchron": [36, 37], "cond": [36, 37], "pattern": 36, "elif": 36, "fsm": 36, "ctrl_path": 36, "noreturn": 36, "regularli": 36, "explicit": 36, "implicit": 36, "aris": 36, "pair": [36, 37], "transactioncontext": 36, "priorit": 36, "reason": [36, 37], "transactionormethodbound": 36, "ctrlpath": 36, "def_count": 36, "classvar": 36, "def_ord": 36, "independent_list": 36, "method_cal": 36, "defaultdict": 36, "method_us": 36, "owned_nam": 36, "peek": 36, "relationbas": 36, "simultaneous_altern": 36, "simultaneous_list": 36, "adapterbas": [37, 38], "mock": [37, 38], "en": [37, 38], "clickin": 37, "click": 37, "interact": 37, "rise": 37, "btn": 37, "dat": 37, "retriev": 37, "clickout": 37, "led": 37, "flow": 37, "revers": 37, "possibli": 37, "rev_layout": 37, "vice": 37, "versa": 37, "method1": 37, "respect": 37, "fulfil": 37, "fifo_typ": 37, "syncfifo": 37, "fifotyp": 37, "conform": 37, "equival": 37, "put_result": 37, "stableselectingnetwork": 37, "network": 37, "consecut": 37, "preserv": 37, "divid": 37, "conquer": 37, "properli": 37, "v1": 37, "v2": 37, "now": [37, 38], "thu": 37, "log_2": 37, "dependencykei": [37, 39], "concret": [37, 39], "frozen": [37, 39], "lock_on_get": [37, 39], "get_depend": [37, 39], "empty_valid": [37, 39], "add_depend": [37, 39], "give": [37, 39], "track": [37, 39], "across": [37, 39], "multpl": [37, 39], "dependeci": [37, 39], "default_valu": [37, 39], "unifi": 37, "wish": 37, "custom": 37, "basicfifo": 37, "reiniti": 37, "semaphor": 37, "max_count": 37, "hardwarelogg": 37, "intuit": 37, "logger": 37, "anywher": 37, "natur": 37, "shall": 37, "evalu": [37, 38], "arbitrari": 37, "exactli": 37, "organ": 37, "namespac": 37, "hierarchi": 37, "period": 37, "bpu": 37, "There": 37, "bug": 37, "otherwis": [37, 40], "detect": 37, "termin": 37, "turn": 37, "warn": 37, "board": 37, "semant": 37, "server": 37, "pep": 37, "3101": 37, "logkei": 37, "logrecord": 37, "logrecordinfo": [37, 39], "event": 37, "logger_nam": [37, 39], "format_str": [37, 39], "agnost": 37, "outsid": 37, "loglevel": 37, "templat": 37, "get_log_record": 37, "namespace_regexp": [37, 38], "minimum": 37, "regexp": 37, "get_trigger_bit": 37, "hardwaremetricsmanag": 37, "compos": 37, "get_metr": 37, "hwmetric": 37, "get_register_valu": 37, "metric_nam": 37, "reg_nam": 37, "qualifi": 37, "histogram": 37, "bucket": 37, "hwcounter": 37, "fully_qualified_nam": 37, "width_bit": 37, "human": 37, "incr": 37, "hwexphistogram": 37, "exponenti": 37, "distribut": 37, "sampl": 37, "durat": 37, "inf": 37, "bucket_count": 37, "sample_width": 37, "registers_width": 37, "max_valu": 37, "abl": 37, "metricmodel": 37, "add_regist": 37, "reg": [37, 39], "hwmetricregist": 37, "inherit": 37, "metrics_en": 37, "hwmetricsenabledkei": 37, "theirs": 37, "latencymeasur": 37, "slots_numb": 37, "max_lat": 37, "oldest": 37, "compris": 37, "join": 37, "metricregistermodel": 37, "fundament": 37, "singular": 37, "among": 37, "reman": 37, "brief": 37, "argumentstoresultszipp": 37, "zip": 37, "cut": 37, "critic": 37, "calle": 37, "asymmetri": 37, "correctli": 37, "rate": 37, "reach": [37, 40], "capac": 37, "topologi": 37, "write_arg": 37, "args_layout": 37, "write_result": 37, "results_layout": 37, "client": 37, "somethig": 37, "deseri": 37, "proper": 37, "serialize_in": 37, "serialized_req_method": 37, "serialize_out": 37, "serialized_resp_method": 37, "port_count": 37, "len": 37, "resist": 37, "nonblock": 37, "overlap": 37, "boolean": 37, "catch": 37, "influenc": 37, "cond1": 37, "cond2": 37, "memorybank": 37, "read_req": 37, "read_resp": 37, "elem_count": 37, "safe_writ": 37, "optimis": 37, "eg": 37, "x": [37, 39], "later": 37, "cattran": 37, "concaten": 37, "third": 37, "dst": 37, "collector": 37, "method_list": 37, "connectandmaptran": 37, "behav": 37, "i_fun": 37, "recorddict": 37, "o_fun": 37, "methodfilt": 37, "desir": 37, "use_condit": 37, "drawback": 37, "simultaneu": 37, "bidirect": 37, "i_transform": 37, "o_transform": 37, "unmodifi": 37, "methodproduct": 37, "methodtryproduct": 37, "tri": 37, "succeed": 37, "get_output": 38, "coreblockscommand": 38, "recordintdict": 38, "set_input": 38, "recordvaluedict": 38, "write_vcd_ext": 38, "engin": 38, "vcd_file": 38, "gtkw_file": 38, "pysimsimul": 38, "max_cycl": 38, "100000": 38, "add_transaction_modul": 38, "traces_fil": 38, "clk_period": 38, "1e": 38, "add_sync_process": 38, "add_process": 38, "passiv": 38, "add_clock": 38, "simpletestcircuit": 38, "_t_haselabor": 38, "dut": 38, "syncprocesswrapp": 38, "testcasewithsimul": 38, "testcas": 38, "valueerror": [38, 39], "add_all_mock": 38, "sim": 38, "frame_loc": 38, "add_class_mock": 38, "add_local_mock": 38, "random_wait": 38, "max_cycle_cnt": 38, "min_cycle_cnt": 38, "random_wait_geom": 38, "prob": 38, "till": 38, "run_simul": 38, "tick": 38, "cycle_cnt": 38, "guard_nested_collect": 38, "_t_nested_collect": 38, "make_logging_process": 38, "on_error": 38, "parse_logging_level": 38, "pars": 38, "neg": [38, 39], "represent": [38, 39, 40], "predefin": 38, "profiler_process": 38, "def_method_mock": 38, "tb_getter": 38, "sched_prio": 38, "method_handle_loop": 38, "invoc": 38, "defer": 38, "sinc": 38, "eagerli": 38, "kwdata": 38, "call_do": 38, "call_init": 38, "call_result": 38, "call_tri": 38, "method_argu": 38, "method_handl": 38, "extra_settle_count": 38, "method_return": 38, "set_en": 38, "wait_until_don": 38, "assigntyp": 39, "rh": 39, "lh": 39, "assignarg": 39, "assignfield": 39, "lhs_strict": 39, "rhs_strict": 39, "mismatch": 39, "accord": 39, "explicitli": 39, "castabl": 39, "subfield": 39, "align_down_to_power_of_two": 39, "num": 39, "align_to_power_of_two": 39, "average_dict_of_list": 39, "bits_from_int": 39, "int_to_sign": 39, "convert": 39, "u2": 39, "sign": 39, "layout_subset": 39, "make_hash": 39, "negat": 39, "signed_to_int": 39, "auto_debug_sign": 39, "arrai": 39, "cl": 39, "generatedlog": 39, "trigger_loc": 39, "signalhandl": 39, "fields_loc": 39, "generationinfo": 39, "variou": 39, "metrics_loc": 39, "metricinfo": 39, "metadata": 39, "metricloc": 39, "transaction_signals_loc": 39, "transactionsignalsloc": 39, "method_signals_loc": 39, "methodsignalsloc": 39, "profile_data": 39, "generate_verilog": 39, "top_modul": 39, "top_nam": 39, "idgener": 39, "def_help": 39, "func": 39, "from_method_layout": 39, "get_caller_class_nam": 39, "get_src_loc": 39, "method_def_help": 39, "mock_def_help": 39, "tb": 39, "silence_mustus": 39, "moduleconnector": 40, "anonym": 40, "onehotswitch": 40, "style": 40, "benefit": 40, "sig": 40, "onehotcas": 40, "0b01": 40, "0b10": 40, "onehotswitchdynam": 40, "signifi": 40, "roundrobin": 40, "greater": 40, "enableinsert": 40, "count_leading_zero": 40, "count_trailing_zero": 40, "flatten_sign": 40, "flatten": 40, "mod_incr": 40, "mod": 40, "popcount": 40}, "objects": {"": [[4, 0, 0, "-", "coreblocks"], [35, 0, 0, "-", "transactron"]], "coreblocks": [[5, 0, 0, "-", "backend"], [6, 0, 0, "-", "cache"], [4, 0, 0, "-", "core"], [7, 0, 0, "-", "core_structs"], [8, 0, 0, "-", "frontend"], [11, 0, 0, "-", "func_blocks"], [16, 0, 0, "-", "params"], [17, 0, 0, "-", "peripherals"], [18, 0, 0, "-", "priv"], [21, 0, 0, "-", "scheduler"]], "coreblocks.backend": [[5, 0, 0, "-", "annoucement"], [5, 0, 0, "-", "retirement"]], "coreblocks.backend.annoucement": [[5, 1, 1, "", "ResultAnnouncement"]], "coreblocks.backend.annoucement.ResultAnnouncement": [[5, 2, 1, "", "__init__"], [5, 2, 1, "", "debug_signals"]], "coreblocks.backend.retirement": [[5, 1, 1, "", "Retirement"]], "coreblocks.backend.retirement.Retirement": [[5, 2, 1, "", "__init__"]], "coreblocks.cache": [[6, 0, 0, "-", "icache"], [6, 0, 0, "-", "iface"], [6, 0, 0, "-", "refiller"]], "coreblocks.cache.icache": [[6, 1, 1, "", "ICache"], [6, 1, 1, "", "ICacheBypass"]], "coreblocks.cache.icache.ICache": [[6, 2, 1, "", "__init__"], [6, 2, 1, "", "deserialize_addr"], [6, 2, 1, "", "serialize_addr"]], "coreblocks.cache.icache.ICacheBypass": [[6, 2, 1, "", "__init__"]], "coreblocks.cache.iface": [[6, 1, 1, "", "CacheInterface"], [6, 1, 1, "", "CacheRefillerInterface"]], "coreblocks.cache.iface.CacheInterface": [[6, 3, 1, "", "accept_res"], [6, 3, 1, "", "flush"], [6, 3, 1, "", "issue_req"]], "coreblocks.cache.iface.CacheRefillerInterface": [[6, 3, 1, "", "accept_refill"], [6, 3, 1, "", "start_refill"]], "coreblocks.cache.refiller": [[6, 1, 1, "", "SimpleCommonBusCacheRefiller"]], "coreblocks.cache.refiller.SimpleCommonBusCacheRefiller": [[6, 2, 1, "", "__init__"]], "coreblocks.core": [[4, 1, 1, "", "Core"]], "coreblocks.core.Core": [[4, 2, 1, "", "__init__"]], "coreblocks.core_structs": [[7, 0, 0, "-", "rat"], [7, 0, 0, "-", "rf"], [7, 0, 0, "-", "rob"]], "coreblocks.core_structs.rat": [[7, 1, 1, "", "FRAT"], [7, 1, 1, "", "RRAT"]], "coreblocks.core_structs.rat.FRAT": [[7, 2, 1, "", "__init__"]], "coreblocks.core_structs.rat.RRAT": [[7, 2, 1, "", "__init__"]], "coreblocks.core_structs.rf": [[7, 1, 1, "", "RegisterFile"]], "coreblocks.core_structs.rf.RegisterFile": [[7, 2, 1, "", "__init__"]], "coreblocks.core_structs.rob": [[7, 1, 1, "", "ReorderBuffer"]], "coreblocks.core_structs.rob.ReorderBuffer": [[7, 2, 1, "", "__init__"]], "coreblocks.frontend": [[9, 0, 0, "-", "decoder"], [10, 0, 0, "-", "fetch"]], "coreblocks.frontend.decoder": [[9, 0, 0, "-", "decode_stage"], [9, 0, 0, "-", "instr_decoder"], [9, 0, 0, "-", "instr_description"], [9, 0, 0, "-", "isa"], [9, 0, 0, "-", "optypes"], [9, 0, 0, "-", "rvc"]], "coreblocks.frontend.decoder.decode_stage": [[9, 1, 1, "", "DecodeStage"]], "coreblocks.frontend.decoder.decode_stage.DecodeStage": [[9, 2, 1, "", "__init__"]], "coreblocks.frontend.decoder.instr_decoder": [[9, 1, 1, "", "InstrDecoder"]], "coreblocks.frontend.decoder.instr_decoder.InstrDecoder": [[9, 2, 1, "", "__init__"]], "coreblocks.frontend.decoder.instr_description": [[9, 1, 1, "", "Encoding"]], "coreblocks.frontend.decoder.instr_description.Encoding": [[9, 2, 1, "", "__init__"], [9, 3, 1, "", "funct12"], [9, 3, 1, "", "funct3"], [9, 3, 1, "", "funct7"], [9, 3, 1, "", "instr_type_override"], [9, 3, 1, "", "opcode"], [9, 3, 1, "", "rd_zero"], [9, 3, 1, "", "rs1_zero"]], "coreblocks.frontend.decoder.isa": [[9, 1, 1, "", "ExceptionCause"], [9, 1, 1, "", "FenceFm"], [9, 1, 1, "", "FenceTarget"], [9, 1, 1, "", "Funct12"], [9, 1, 1, "", "Funct3"], [9, 1, 1, "", "Funct7"], [9, 1, 1, "", "InstrType"], [9, 1, 1, "", "Opcode"], [9, 1, 1, "", "Registers"]], "coreblocks.frontend.decoder.isa.ExceptionCause": [[9, 3, 1, "", "BREAKPOINT"], [9, 3, 1, "", "ENVIRONMENT_CALL_FROM_M"], [9, 3, 1, "", "ENVIRONMENT_CALL_FROM_S"], [9, 3, 1, "", "ENVIRONMENT_CALL_FROM_U"], [9, 3, 1, "", "ILLEGAL_INSTRUCTION"], [9, 3, 1, "", "INSTRUCTION_ACCESS_FAULT"], [9, 3, 1, "", "INSTRUCTION_ADDRESS_MISALIGNED"], [9, 3, 1, "", "INSTRUCTION_PAGE_FAULT"], [9, 3, 1, "", "LOAD_ACCESS_FAULT"], [9, 3, 1, "", "LOAD_ADDRESS_MISALIGNED"], [9, 3, 1, "", "LOAD_PAGE_FAULT"], [9, 3, 1, "", "STORE_ACCESS_FAULT"], [9, 3, 1, "", "STORE_ADDRESS_MISALIGNED"], [9, 3, 1, "", "STORE_PAGE_FAULT"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.FenceFm": [[9, 3, 1, "", "NONE"], [9, 3, 1, "", "TSO"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.FenceTarget": [[9, 3, 1, "", "DEV_I"], [9, 3, 1, "", "DEV_O"], [9, 3, 1, "", "MEM_R"], [9, 3, 1, "", "MEM_W"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Funct12": [[9, 3, 1, "", "CLZ"], [9, 3, 1, "", "CPOP"], [9, 3, 1, "", "CTZ"], [9, 3, 1, "", "EBREAK"], [9, 3, 1, "", "ECALL"], [9, 3, 1, "", "MRET"], [9, 3, 1, "", "ORCB"], [9, 3, 1, "", "REV8_32"], [9, 3, 1, "", "REV8_64"], [9, 3, 1, "", "SEXTB"], [9, 3, 1, "", "SEXTH"], [9, 3, 1, "", "SRET"], [9, 3, 1, "", "WFI"], [9, 3, 1, "", "ZEXTH"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Funct3": [[9, 3, 1, "", "ADD"], [9, 3, 1, "", "AND"], [9, 3, 1, "", "ANDN"], [9, 3, 1, "", "B"], [9, 3, 1, "", "BCLR"], [9, 3, 1, "", "BEQ"], [9, 3, 1, "", "BEXT"], [9, 3, 1, "", "BGE"], [9, 3, 1, "", "BGEU"], [9, 3, 1, "", "BINV"], [9, 3, 1, "", "BLT"], [9, 3, 1, "", "BLTU"], [9, 3, 1, "", "BNE"], [9, 3, 1, "", "BSET"], [9, 3, 1, "", "BU"], [9, 3, 1, "", "CLMUL"], [9, 3, 1, "", "CLMULH"], [9, 3, 1, "", "CLMULR"], [9, 3, 1, "", "CLZ"], [9, 3, 1, "", "CPOP"], [9, 3, 1, "", "CSRRC"], [9, 3, 1, "", "CSRRCI"], [9, 3, 1, "", "CSRRS"], [9, 3, 1, "", "CSRRSI"], [9, 3, 1, "", "CSRRW"], [9, 3, 1, "", "CSRRWI"], [9, 3, 1, "", "CTZ"], [9, 3, 1, "", "D"], [9, 3, 1, "", "DIV"], [9, 3, 1, "", "DIVU"], [9, 3, 1, "", "DIVUW"], [9, 3, 1, "", "DIVW"], [9, 3, 1, "", "FENCE"], [9, 3, 1, "", "FENCEI"], [9, 3, 1, "", "H"], [9, 3, 1, "", "HU"], [9, 3, 1, "", "JALR"], [9, 3, 1, "", "MAX"], [9, 3, 1, "", "MAXU"], [9, 3, 1, "", "MIN"], [9, 3, 1, "", "MINU"], [9, 3, 1, "", "MUL"], [9, 3, 1, "", "MULH"], [9, 3, 1, "", "MULHSU"], [9, 3, 1, "", "MULHU"], [9, 3, 1, "", "MULW"], [9, 3, 1, "", "OR"], [9, 3, 1, "", "ORCB"], [9, 3, 1, "", "ORN"], [9, 3, 1, "", "PRIV"], [9, 3, 1, "", "REM"], [9, 3, 1, "", "REMU"], [9, 3, 1, "", "REMUW"], [9, 3, 1, "", "REMW"], [9, 3, 1, "", "REV8"], [9, 3, 1, "", "ROL"], [9, 3, 1, "", "ROR"], [9, 3, 1, "", "SEXTB"], [9, 3, 1, "", "SEXTH"], [9, 3, 1, "", "SH1ADD"], [9, 3, 1, "", "SH2ADD"], [9, 3, 1, "", "SH3ADD"], [9, 3, 1, "", "SLL"], [9, 3, 1, "", "SLT"], [9, 3, 1, "", "SLTU"], [9, 3, 1, "", "SR"], [9, 3, 1, "", "SUB"], [9, 3, 1, "", "W"], [9, 3, 1, "", "XNOR"], [9, 3, 1, "", "XOR"], [9, 3, 1, "", "ZEXTH"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Funct7": [[9, 3, 1, "", "ADD"], [9, 3, 1, "", "AND"], [9, 3, 1, "", "ANDN"], [9, 3, 1, "", "BCLR"], [9, 3, 1, "", "BEXT"], [9, 3, 1, "", "BINV"], [9, 3, 1, "", "BSET"], [9, 3, 1, "", "CLMUL"], [9, 3, 1, "", "CLZ"], [9, 3, 1, "", "CPOP"], [9, 3, 1, "", "CTZ"], [9, 3, 1, "", "MAX"], [9, 3, 1, "", "MIN"], [9, 3, 1, "", "MULDIV"], [9, 3, 1, "", "OR"], [9, 3, 1, "", "ORCB"], [9, 3, 1, "", "ORN"], [9, 3, 1, "", "REV8"], [9, 3, 1, "", "ROL"], [9, 3, 1, "", "ROR"], [9, 3, 1, "", "SA"], [9, 3, 1, "", "SEXTB"], [9, 3, 1, "", "SEXTH"], [9, 3, 1, "", "SFENCEVMA"], [9, 3, 1, "", "SH1ADD"], [9, 3, 1, "", "SH2ADD"], [9, 3, 1, "", "SH3ADD"], [9, 3, 1, "", "SL"], [9, 3, 1, "", "SLT"], [9, 3, 1, "", "SUB"], [9, 3, 1, "", "XNOR"], [9, 3, 1, "", "XOR"], [9, 3, 1, "", "ZEXTH"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.InstrType": [[9, 3, 1, "", "B"], [9, 3, 1, "", "I"], [9, 3, 1, "", "J"], [9, 3, 1, "", "R"], [9, 3, 1, "", "S"], [9, 3, 1, "", "U"]], "coreblocks.frontend.decoder.isa.Opcode": [[9, 3, 1, "", "AUIPC"], [9, 3, 1, "", "BRANCH"], [9, 3, 1, "", "JAL"], [9, 3, 1, "", "JALR"], [9, 3, 1, "", "LOAD"], [9, 3, 1, "", "LOAD_FP"], [9, 3, 1, "", "LUI"], [9, 3, 1, "", "MISC_MEM"], [9, 3, 1, "", "OP"], [9, 3, 1, "", "OP32"], [9, 3, 1, "", "OP_IMM"], [9, 3, 1, "", "OP_IMM_32"], [9, 3, 1, "", "STORE"], [9, 3, 1, "", "STORE_FP"], [9, 3, 1, "", "SYSTEM"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.isa.Registers": [[9, 3, 1, "", "A0"], [9, 3, 1, "", "A1"], [9, 3, 1, "", "A2"], [9, 3, 1, "", "A3"], [9, 3, 1, "", "A4"], [9, 3, 1, "", "A5"], [9, 3, 1, "", "A6"], [9, 3, 1, "", "A7"], [9, 3, 1, "", "FP"], [9, 3, 1, "", "GP"], [9, 3, 1, "", "RA"], [9, 3, 1, "", "S0"], [9, 3, 1, "", "S1"], [9, 3, 1, "", "S10"], [9, 3, 1, "", "S11"], [9, 3, 1, "", "S2"], [9, 3, 1, "", "S3"], [9, 3, 1, "", "S4"], [9, 3, 1, "", "S5"], [9, 3, 1, "", "S6"], [9, 3, 1, "", "S7"], [9, 3, 1, "", "S8"], [9, 3, 1, "", "S9"], [9, 3, 1, "", "SP"], [9, 3, 1, "", "T0"], [9, 3, 1, "", "T1"], [9, 3, 1, "", "T2"], [9, 3, 1, "", "T3"], [9, 3, 1, "", "T4"], [9, 3, 1, "", "T5"], [9, 3, 1, "", "T6"], [9, 3, 1, "", "TP"], [9, 3, 1, "", "X0"], [9, 3, 1, "", "X1"], [9, 3, 1, "", "X10"], [9, 3, 1, "", "X11"], [9, 3, 1, "", "X12"], [9, 3, 1, "", "X13"], [9, 3, 1, "", "X14"], [9, 3, 1, "", "X15"], [9, 3, 1, "", "X16"], [9, 3, 1, "", "X17"], [9, 3, 1, "", "X18"], [9, 3, 1, "", "X19"], [9, 3, 1, "", "X2"], [9, 3, 1, "", "X20"], [9, 3, 1, "", "X21"], [9, 3, 1, "", "X22"], [9, 3, 1, "", "X23"], [9, 3, 1, "", "X24"], [9, 3, 1, "", "X25"], [9, 3, 1, "", "X26"], [9, 3, 1, "", "X27"], [9, 3, 1, "", "X28"], [9, 3, 1, "", "X29"], [9, 3, 1, "", "X3"], [9, 3, 1, "", "X30"], [9, 3, 1, "", "X31"], [9, 3, 1, "", "X4"], [9, 3, 1, "", "X5"], [9, 3, 1, "", "X6"], [9, 3, 1, "", "X7"], [9, 3, 1, "", "X8"], [9, 3, 1, "", "X9"], [9, 3, 1, "", "ZERO"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.optypes": [[9, 1, 1, "", "OpType"], [9, 4, 1, "", "optypes_required_by_extensions"]], "coreblocks.frontend.decoder.optypes.OpType": [[9, 3, 1, "", "ADDRESS_GENERATION"], [9, 3, 1, "", "ARITHMETIC"], [9, 3, 1, "", "AUIPC"], [9, 3, 1, "", "BIT_MANIPULATION"], [9, 3, 1, "", "BIT_ROTATION"], [9, 3, 1, "", "BRANCH"], [9, 3, 1, "", "CLMUL"], [9, 3, 1, "", "COMPARE"], [9, 3, 1, "", "CSR_IMM"], [9, 3, 1, "", "CSR_REG"], [9, 3, 1, "", "DIV_REM"], [9, 3, 1, "", "EBREAK"], [9, 3, 1, "", "ECALL"], [9, 3, 1, "", "EXCEPTION"], [9, 3, 1, "", "FENCE"], [9, 3, 1, "", "FENCEI"], [9, 3, 1, "", "JAL"], [9, 3, 1, "", "JALR"], [9, 3, 1, "", "LOAD"], [9, 3, 1, "", "LOGIC"], [9, 3, 1, "", "MRET"], [9, 3, 1, "", "MUL"], [9, 3, 1, "", "SFENCEVMA"], [9, 3, 1, "", "SHIFT"], [9, 3, 1, "", "SINGLE_BIT_MANIPULATION"], [9, 3, 1, "", "SRET"], [9, 3, 1, "", "STORE"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_1"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_2"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_3"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_4"], [9, 3, 1, "", "UNARY_BIT_MANIPULATION_5"], [9, 3, 1, "", "UNKNOWN"], [9, 3, 1, "", "WFI"], [9, 2, 1, "", "__new__"]], "coreblocks.frontend.decoder.rvc": [[9, 1, 1, "", "InstrDecompress"], [9, 4, 1, "", "is_instr_compressed"]], "coreblocks.frontend.decoder.rvc.InstrDecompress": [[9, 2, 1, "", "__init__"], [9, 2, 1, "", "decompr_reg"], [9, 2, 1, "", "instr_mux"]], "coreblocks.frontend.fetch": [[10, 0, 0, "-", "fetch"]], "coreblocks.frontend.fetch.fetch": [[10, 1, 1, "", "Fetch"], [10, 1, 1, "", "UnalignedFetch"]], "coreblocks.frontend.fetch.fetch.Fetch": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.fetch.fetch.UnalignedFetch": [[10, 2, 1, "", "__init__"]], "coreblocks.func_blocks": [[12, 0, 0, "-", "fu"], [14, 0, 0, "-", "interface"], [15, 0, 0, "-", "lsu"]], "coreblocks.func_blocks.fu": [[12, 0, 0, "-", "alu"], [12, 0, 0, "-", "div_unit"], [12, 0, 0, "-", "exception"], [12, 0, 0, "-", "jumpbranch"], [12, 0, 0, "-", "mul_unit"], [12, 0, 0, "-", "priv"], [12, 0, 0, "-", "shift_unit"], [13, 0, 0, "-", "unsigned_multiplication"], [12, 0, 0, "-", "zbc"], [12, 0, 0, "-", "zbs"]], "coreblocks.func_blocks.fu.alu": [[12, 1, 1, "", "ALUComponent"], [12, 1, 1, "", "AluFuncUnit"]], "coreblocks.func_blocks.fu.alu.ALUComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.alu.AluFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.div_unit": [[12, 1, 1, "", "DivComponent"], [12, 1, 1, "", "DivFn"], [12, 1, 1, "", "DivUnit"], [12, 4, 1, "", "get_input"]], "coreblocks.func_blocks.fu.div_unit.DivComponent": [[12, 2, 1, "", "__init__"], [12, 3, 1, "", "div_fn"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"], [12, 3, 1, "", "ipc"]], "coreblocks.func_blocks.fu.div_unit.DivFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.div_unit.DivFn.Fn": [[12, 3, 1, "", "DIV"], [12, 3, 1, "", "DIVU"], [12, 3, 1, "", "REM"], [12, 3, 1, "", "REMU"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.div_unit.DivUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.exception": [[12, 1, 1, "", "ExceptionFuncUnit"], [12, 1, 1, "", "ExceptionUnitComponent"]], "coreblocks.func_blocks.fu.exception.ExceptionFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.exception.ExceptionUnitComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.jumpbranch": [[12, 1, 1, "", "JumpBranchFuncUnit"], [12, 1, 1, "", "JumpComponent"]], "coreblocks.func_blocks.fu.jumpbranch.JumpBranchFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.jumpbranch.JumpComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.mul_unit": [[12, 1, 1, "", "MulComponent"], [12, 1, 1, "", "MulFn"], [12, 1, 1, "", "MulType"], [12, 1, 1, "", "MulUnit"]], "coreblocks.func_blocks.fu.mul_unit.MulComponent": [[12, 2, 1, "", "__init__"], [12, 3, 1, "", "dsp_width"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"], [12, 3, 1, "", "mul_fn"], [12, 3, 1, "", "mul_unit_type"]], "coreblocks.func_blocks.fu.mul_unit.MulFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.mul_unit.MulFn.Fn": [[12, 3, 1, "", "MUL"], [12, 3, 1, "", "MULH"], [12, 3, 1, "", "MULHSU"], [12, 3, 1, "", "MULHU"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.mul_unit.MulType": [[12, 3, 1, "", "RECURSIVE_MUL"], [12, 3, 1, "", "SEQUENCE_MUL"], [12, 3, 1, "", "SHIFT_MUL"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.mul_unit.MulUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.priv": [[12, 1, 1, "", "PrivilegedFn"], [12, 1, 1, "", "PrivilegedFuncUnit"], [12, 1, 1, "", "PrivilegedUnitComponent"]], "coreblocks.func_blocks.fu.priv.PrivilegedFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.priv.PrivilegedFn.Fn": [[12, 3, 1, "", "MRET"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.priv.PrivilegedFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.priv.PrivilegedUnitComponent": [[12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.shift_unit": [[12, 1, 1, "", "ShiftFuncUnit"], [12, 1, 1, "", "ShiftUnitComponent"]], "coreblocks.func_blocks.fu.shift_unit.ShiftFuncUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.shift_unit.ShiftUnitComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.unsigned_multiplication": [[13, 0, 0, "-", "common"], [13, 0, 0, "-", "fast_recursive"], [13, 0, 0, "-", "sequence"], [13, 0, 0, "-", "shift"]], "coreblocks.func_blocks.fu.unsigned_multiplication.common": [[13, 1, 1, "", "DSPMulUnit"], [13, 1, 1, "", "MulBaseUnsigned"]], "coreblocks.func_blocks.fu.unsigned_multiplication.common.DSPMulUnit": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.common.MulBaseUnsigned": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.fast_recursive": [[13, 1, 1, "", "RecursiveUnsignedMul"]], "coreblocks.func_blocks.fu.unsigned_multiplication.fast_recursive.RecursiveUnsignedMul": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.sequence": [[13, 1, 1, "", "SequentialUnsignedMul"]], "coreblocks.func_blocks.fu.unsigned_multiplication.sequence.SequentialUnsignedMul": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.unsigned_multiplication.shift": [[13, 1, 1, "", "ShiftUnsignedMul"]], "coreblocks.func_blocks.fu.unsigned_multiplication.shift.ShiftUnsignedMul": [[13, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.zbc": [[12, 1, 1, "", "ClMultiplier"], [12, 1, 1, "", "ZbcComponent"], [12, 1, 1, "", "ZbcFn"], [12, 1, 1, "", "ZbcUnit"]], "coreblocks.func_blocks.fu.zbc.ClMultiplier": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "iterative_module"], [12, 2, 1, "", "recursive_module"]], "coreblocks.func_blocks.fu.zbc.ZbcComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"], [12, 3, 1, "", "recursion_depth"], [12, 3, 1, "", "zbc_fn"]], "coreblocks.func_blocks.fu.zbc.ZbcFn": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.zbc.ZbcFn.Fn": [[12, 3, 1, "", "CLMUL"], [12, 3, 1, "", "CLMULH"], [12, 3, 1, "", "CLMULR"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.zbc.ZbcUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.zbs": [[12, 1, 1, "", "Zbs"], [12, 1, 1, "", "ZbsComponent"], [12, 1, 1, "", "ZbsFunction"], [12, 1, 1, "", "ZbsUnit"]], "coreblocks.func_blocks.fu.zbs.Zbs": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.fu.zbs.ZbsComponent": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get_module"], [12, 2, 1, "", "get_optypes"]], "coreblocks.func_blocks.fu.zbs.ZbsFunction": [[12, 1, 1, "", "Fn"], [12, 2, 1, "", "get_instructions"]], "coreblocks.func_blocks.fu.zbs.ZbsFunction.Fn": [[12, 3, 1, "", "BCLR"], [12, 3, 1, "", "BEXT"], [12, 3, 1, "", "BINV"], [12, 3, 1, "", "BSET"], [12, 2, 1, "", "__new__"]], "coreblocks.func_blocks.fu.zbs.ZbsUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.func_blocks.interface": [[14, 0, 0, "-", "func_blocks_unifier"], [14, 0, 0, "-", "func_protocols"]], "coreblocks.func_blocks.interface.func_blocks_unifier": [[14, 1, 1, "", "FuncBlocksUnifier"]], "coreblocks.func_blocks.interface.func_blocks_unifier.FuncBlocksUnifier": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "get_extra_method"]], "coreblocks.func_blocks.interface.func_protocols": [[14, 1, 1, "", "FuncBlock"], [14, 1, 1, "", "FuncUnit"]], "coreblocks.func_blocks.interface.func_protocols.FuncBlock": [[14, 3, 1, "", "get_result"], [14, 3, 1, "", "insert"], [14, 3, 1, "", "select"], [14, 3, 1, "", "update"]], "coreblocks.func_blocks.interface.func_protocols.FuncUnit": [[14, 3, 1, "", "accept"], [14, 3, 1, "", "issue"]], "coreblocks.func_blocks.lsu": [[15, 0, 0, "-", "dummyLsu"], [15, 0, 0, "-", "pma"]], "coreblocks.func_blocks.lsu.dummyLsu": [[15, 1, 1, "", "LSUBlockComponent"], [15, 1, 1, "", "LSUDummy"]], "coreblocks.func_blocks.lsu.dummyLsu.LSUBlockComponent": [[15, 2, 1, "", "get_module"], [15, 2, 1, "", "get_optypes"], [15, 2, 1, "", "get_rs_entry_count"]], "coreblocks.func_blocks.lsu.dummyLsu.LSUDummy": [[15, 2, 1, "", "__init__"]], "coreblocks.func_blocks.lsu.pma": [[15, 1, 1, "", "PMAChecker"], [15, 1, 1, "", "PMALayout"], [15, 1, 1, "", "PMARegion"]], "coreblocks.func_blocks.lsu.pma.PMAChecker": [[15, 2, 1, "", "__init__"]], "coreblocks.func_blocks.lsu.pma.PMALayout": [[15, 2, 1, "", "__init__"]], "coreblocks.func_blocks.lsu.pma.PMARegion": [[15, 2, 1, "", "__init__"], [15, 3, 1, "", "end"], [15, 3, 1, "", "mmio"], [15, 3, 1, "", "start"]], "coreblocks.params": [[16, 0, 0, "-", "configurations"], [16, 0, 0, "-", "fu_params"], [16, 0, 0, "-", "genparams"], [16, 0, 0, "-", "icache_params"], [16, 0, 0, "-", "instr"], [16, 0, 0, "-", "isa_params"]], "coreblocks.params.configurations": [[16, 1, 1, "", "CoreConfiguration"]], "coreblocks.params.configurations.CoreConfiguration": [[16, 2, 1, "", "__init__"], [16, 3, 1, "", "allow_partial_extensions"], [16, 3, 1, "", "compressed"], [16, 3, 1, "", "debug_signals"], [16, 3, 1, "", "embedded"], [16, 3, 1, "", "fetch_block_bytes_log"], [16, 3, 1, "", "func_units_config"], [16, 3, 1, "", "icache_enable"], [16, 3, 1, "", "icache_line_bytes_log"], [16, 3, 1, "", "icache_sets_bits"], [16, 3, 1, "", "icache_ways"], [16, 3, 1, "", "phys_regs_bits"], [16, 3, 1, "", "pma"], [16, 2, 1, "", "replace"], [16, 3, 1, "", "rob_entries_bits"], [16, 3, 1, "", "start_pc"], [16, 3, 1, "", "xlen"]], "coreblocks.params.fu_params": [[16, 1, 1, "", "BlockComponentParams"], [16, 1, 1, "", "FunctionalComponentParams"], [16, 4, 1, "", "optypes_supported"]], "coreblocks.params.fu_params.BlockComponentParams": [[16, 2, 1, "", "get_module"], [16, 2, 1, "", "get_optypes"], [16, 2, 1, "", "get_rs_entry_count"]], "coreblocks.params.fu_params.FunctionalComponentParams": [[16, 2, 1, "", "get_module"], [16, 2, 1, "", "get_optypes"]], "coreblocks.params.genparams": [[16, 1, 1, "", "GenParams"]], "coreblocks.params.genparams.GenParams": [[16, 2, 1, "", "__init__"]], "coreblocks.params.icache_params": [[16, 1, 1, "", "ICacheParameters"]], "coreblocks.params.icache_params.ICacheParameters": [[16, 2, 1, "", "__init__"]], "coreblocks.params.instr": [[16, 1, 1, "", "BTypeInstr"], [16, 1, 1, "", "EBreakInstr"], [16, 1, 1, "", "ITypeInstr"], [16, 1, 1, "", "IllegalInstr"], [16, 1, 1, "", "JTypeInstr"], [16, 1, 1, "", "RTypeInstr"], [16, 1, 1, "", "STypeInstr"], [16, 1, 1, "", "UTypeInstr"]], "coreblocks.params.instr.BTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.EBreakInstr": [[16, 2, 1, "", "__init__"]], "coreblocks.params.instr.ITypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.IllegalInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.JTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.RTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.STypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.instr.UTypeInstr": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "encode"], [16, 2, 1, "", "pack"]], "coreblocks.params.isa_params": [[16, 1, 1, "", "Extension"], [16, 1, 1, "", "ISA"]], "coreblocks.params.isa_params.Extension": [[16, 3, 1, "", "A"], [16, 3, 1, "", "B"], [16, 3, 1, "", "C"], [16, 3, 1, "", "D"], [16, 3, 1, "", "E"], [16, 3, 1, "", "F"], [16, 3, 1, "", "G"], [16, 3, 1, "", "I"], [16, 3, 1, "", "J"], [16, 3, 1, "", "L"], [16, 3, 1, "", "M"], [16, 3, 1, "", "N"], [16, 3, 1, "", "P"], [16, 3, 1, "", "Q"], [16, 3, 1, "", "T"], [16, 3, 1, "", "V"], [16, 3, 1, "", "XINTMACHINEMODE"], [16, 3, 1, "", "XINTSUPERVISOR"], [16, 3, 1, "", "ZAM"], [16, 3, 1, "", "ZBA"], [16, 3, 1, "", "ZBB"], [16, 3, 1, "", "ZBC"], [16, 3, 1, "", "ZBS"], [16, 3, 1, "", "ZDINX"], [16, 3, 1, "", "ZFH"], [16, 3, 1, "", "ZFHMIN"], [16, 3, 1, "", "ZFINX"], [16, 3, 1, "", "ZHINX"], [16, 3, 1, "", "ZICNTR"], [16, 3, 1, "", "ZICSR"], [16, 3, 1, "", "ZIFENCEI"], [16, 3, 1, "", "ZIHINTNTL"], [16, 3, 1, "", "ZIHINTPAUSE"], [16, 3, 1, "", "ZIHPM"], [16, 3, 1, "", "ZMMUL"], [16, 3, 1, "", "ZTSO"], [16, 2, 1, "", "__new__"]], "coreblocks.params.isa_params.ISA": [[16, 2, 1, "", "__init__"]], "coreblocks.peripherals": [[17, 0, 0, "-", "axi_lite"], [17, 0, 0, "-", "bus_adapter"], [17, 0, 0, "-", "wishbone"]], "coreblocks.peripherals.axi_lite": [[17, 1, 1, "", "AXILiteInterface"], [17, 1, 1, "", "AXILiteMaster"], [17, 1, 1, "", "AXILiteParameters"], [17, 1, 1, "", "AXILiteSignature"]], "coreblocks.peripherals.axi_lite.AXILiteInterface": [[17, 3, 1, "", "read_address"], [17, 3, 1, "", "read_data"], [17, 3, 1, "", "write_address"], [17, 3, 1, "", "write_data"], [17, 3, 1, "", "write_response"]], "coreblocks.peripherals.axi_lite.AXILiteMaster": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "axil_master"], [17, 2, 1, "", "result_handler"], [17, 2, 1, "", "start_request_transaction"], [17, 2, 1, "", "state_machine_request"]], "coreblocks.peripherals.axi_lite.AXILiteParameters": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.axi_lite.AXILiteSignature": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.bus_adapter": [[17, 1, 1, "", "AXILiteMasterAdapter"], [17, 1, 1, "", "BusMasterInterface"], [17, 1, 1, "", "WishboneMasterAdapter"]], "coreblocks.peripherals.bus_adapter.AXILiteMasterAdapter": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.bus_adapter.BusMasterInterface": [[17, 3, 1, "", "get_read_response"], [17, 3, 1, "", "get_write_response"], [17, 3, 1, "", "params"], [17, 3, 1, "", "request_read"], [17, 3, 1, "", "request_write"]], "coreblocks.peripherals.bus_adapter.WishboneMasterAdapter": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone": [[17, 1, 1, "", "PipelinedWishboneMaster"], [17, 1, 1, "", "WishboneArbiter"], [17, 1, 1, "", "WishboneInterface"], [17, 1, 1, "", "WishboneMaster"], [17, 1, 1, "", "WishboneMasterMethodLayout"], [17, 1, 1, "", "WishboneMemorySlave"], [17, 1, 1, "", "WishboneMuxer"], [17, 1, 1, "", "WishboneParameters"], [17, 1, 1, "", "WishboneSignature"]], "coreblocks.peripherals.wishbone.PipelinedWishboneMaster": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "generate_method_layouts"], [17, 3, 1, "", "wb"]], "coreblocks.peripherals.wishbone.WishboneArbiter": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "masters"], [17, 3, 1, "", "slave_wb"]], "coreblocks.peripherals.wishbone.WishboneInterface": [[17, 3, 1, "", "ack"], [17, 3, 1, "", "adr"], [17, 3, 1, "", "cyc"], [17, 3, 1, "", "dat_r"], [17, 3, 1, "", "dat_w"], [17, 3, 1, "", "err"], [17, 3, 1, "", "lock"], [17, 3, 1, "", "rst"], [17, 3, 1, "", "rty"], [17, 3, 1, "", "sel"], [17, 3, 1, "", "stall"], [17, 3, 1, "", "stb"], [17, 3, 1, "", "we"]], "coreblocks.peripherals.wishbone.WishboneMaster": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "wb_master"]], "coreblocks.peripherals.wishbone.WishboneMasterMethodLayout": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneMemorySlave": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "bus"]], "coreblocks.peripherals.wishbone.WishboneMuxer": [[17, 2, 1, "", "__init__"], [17, 3, 1, "", "master_wb"], [17, 3, 1, "", "slaves"]], "coreblocks.peripherals.wishbone.WishboneParameters": [[17, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneSignature": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "create"]], "coreblocks.priv": [[19, 0, 0, "-", "csr"], [20, 0, 0, "-", "traps"]], "coreblocks.priv.csr": [[19, 0, 0, "-", "csr_instances"], [19, 0, 0, "-", "csr_register"]], "coreblocks.priv.csr.csr_instances": [[19, 1, 1, "", "CSRAddress"], [19, 1, 1, "", "DoubleCounterCSR"], [19, 1, 1, "", "GenericCSRRegisters"], [19, 1, 1, "", "MachineModeCSRRegisters"]], "coreblocks.priv.csr.csr_instances.CSRAddress": [[19, 3, 1, "", "CYCLE"], [19, 3, 1, "", "CYCLEH"], [19, 3, 1, "", "INSTRET"], [19, 3, 1, "", "INSTRETH"], [19, 3, 1, "", "MCAUSE"], [19, 3, 1, "", "MEPC"], [19, 3, 1, "", "MTVEC"], [19, 3, 1, "", "TIME"], [19, 3, 1, "", "TIMEH"], [19, 2, 1, "", "__new__"]], "coreblocks.priv.csr.csr_instances.DoubleCounterCSR": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_instances.GenericCSRRegisters": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_instances.MachineModeCSRRegisters": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_register": [[19, 1, 1, "", "CSRListKey"], [19, 1, 1, "", "CSRRegister"], [19, 1, 1, "", "PrivilegeLevel"], [19, 4, 1, "", "csr_access_privilege"]], "coreblocks.priv.csr.csr_register.CSRListKey": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_register.CSRRegister": [[19, 2, 1, "", "__init__"]], "coreblocks.priv.csr.csr_register.PrivilegeLevel": [[19, 3, 1, "", "MACHINE"], [19, 3, 1, "", "SUPERVISOR"], [19, 3, 1, "", "USER"], [19, 2, 1, "", "__new__"]], "coreblocks.priv.traps": [[20, 0, 0, "-", "exception"], [20, 0, 0, "-", "instr_counter"], [20, 0, 0, "-", "interrupt_controller"]], "coreblocks.priv.traps.exception": [[20, 1, 1, "", "ExceptionCauseRegister"], [20, 4, 1, "", "should_update_prioriy"]], "coreblocks.priv.traps.exception.ExceptionCauseRegister": [[20, 2, 1, "", "__init__"]], "coreblocks.priv.traps.instr_counter": [[20, 1, 1, "", "CoreInstructionCounter"]], "coreblocks.priv.traps.instr_counter.CoreInstructionCounter": [[20, 2, 1, "", "__init__"]], "coreblocks.priv.traps.interrupt_controller": [[20, 1, 1, "", "InterruptController"]], "coreblocks.priv.traps.interrupt_controller.InterruptController": [[20, 2, 1, "", "__init__"]], "coreblocks.scheduler": [[21, 0, 0, "-", "scheduler"], [21, 0, 0, "-", "wakeup_select"]], "coreblocks.scheduler.scheduler": [[21, 1, 1, "", "Scheduler"]], "coreblocks.scheduler.scheduler.Scheduler": [[21, 2, 1, "", "__init__"]], "coreblocks.scheduler.wakeup_select": [[21, 1, 1, "", "WakeupSelect"]], "coreblocks.scheduler.wakeup_select.WakeupSelect": [[21, 2, 1, "", "__init__"]], "transactron": [[36, 0, 0, "-", "core"], [35, 0, 0, "-", "graph"], [37, 0, 0, "-", "lib"], [35, 0, 0, "-", "profiler"], [38, 0, 0, "-", "testing"], [35, 0, 0, "-", "tracing"], [39, 0, 0, "-", "utils"]], "transactron.core": [[36, 0, 0, "-", "keys"], [36, 0, 0, "-", "manager"], [36, 0, 0, "-", "method"], [36, 0, 0, "-", "schedulers"], [36, 0, 0, "-", "sugar"], [36, 0, 0, "-", "tmodule"], [36, 0, 0, "-", "transaction"], [36, 0, 0, "-", "transaction_base"]], "transactron.core.keys": [[36, 1, 1, "", "TransactionManagerKey"]], "transactron.core.keys.TransactionManagerKey": [[36, 2, 1, "", "__init__"]], "transactron.core.manager": [[36, 1, 1, "", "TransactionManager"], [36, 1, 1, "", "TransactionModule"]], "transactron.core.manager.TransactionManager": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "add_transaction"], [36, 2, 1, "", "debug_signals"], [36, 2, 1, "", "print_info"], [36, 2, 1, "", "visual_graph"]], "transactron.core.manager.TransactionModule": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "context"]], "transactron.core.method": [[36, 1, 1, "", "Method"]], "transactron.core.method.Method": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "body"], [36, 2, 1, "", "debug_signals"], [36, 5, 1, "", "layout_in"], [36, 5, 1, "", "layout_out"], [36, 2, 1, "", "like"], [36, 2, 1, "", "proxy"]], "transactron.core.schedulers": [[36, 4, 1, "", "eager_deterministic_cc_scheduler"], [36, 4, 1, "", "trivial_roundrobin_cc_scheduler"]], "transactron.core.sugar": [[36, 4, 1, "", "def_method"]], "transactron.core.tmodule": [[36, 1, 1, "", "TModule"]], "transactron.core.tmodule.TModule": [[36, 2, 1, "", "AvoidedIf"], [36, 2, 1, "", "Case"], [36, 2, 1, "", "Default"], [36, 2, 1, "", "Elif"], [36, 2, 1, "", "Else"], [36, 2, 1, "", "FSM"], [36, 2, 1, "", "If"], [36, 2, 1, "", "State"], [36, 2, 1, "", "Switch"], [36, 2, 1, "", "__init__"], [36, 5, 1, "", "ctrl_path"], [36, 5, 1, "", "next"]], "transactron.core.transaction": [[36, 1, 1, "", "Transaction"]], "transactron.core.transaction.Transaction": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "body"], [36, 2, 1, "", "debug_signals"]], "transactron.core.transaction_base": [[36, 1, 1, "", "Priority"], [36, 1, 1, "", "TransactionBase"]], "transactron.core.transaction_base.Priority": [[36, 3, 1, "", "LEFT"], [36, 3, 1, "", "RIGHT"], [36, 3, 1, "", "UNDEFINED"]], "transactron.core.transaction_base.TransactionBase": [[36, 2, 1, "", "__init__"], [36, 2, 1, "", "add_conflict"], [36, 2, 1, "", "context"], [36, 3, 1, "", "ctrl_path"], [36, 3, 1, "", "def_counter"], [36, 3, 1, "", "def_order"], [36, 3, 1, "", "defined"], [36, 2, 1, "", "get"], [36, 3, 1, "", "independent_list"], [36, 3, 1, "", "method_calls"], [36, 3, 1, "", "method_uses"], [36, 3, 1, "", "name"], [36, 5, 1, "", "owned_name"], [36, 2, 1, "", "peek"], [36, 3, 1, "", "relations"], [36, 2, 1, "", "schedule_before"], [36, 2, 1, "", "simultaneous"], [36, 2, 1, "", "simultaneous_alternatives"], [36, 3, 1, "", "simultaneous_list"], [36, 3, 1, "", "src_loc"], [36, 3, 1, "", "stack"]], "transactron.graph": [[35, 1, 1, "", "Direction"], [35, 1, 1, "", "Owned"], [35, 1, 1, "", "OwnershipGraph"]], "transactron.graph.Direction": [[35, 3, 1, "", "IN"], [35, 3, 1, "", "INOUT"], [35, 3, 1, "", "NONE"], [35, 3, 1, "", "OUT"], [35, 2, 1, "", "__new__"]], "transactron.graph.Owned": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "name"], [35, 3, 1, "", "owner"]], "transactron.graph.OwnershipGraph": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "dump"], [35, 2, 1, "", "dump_dot"], [35, 2, 1, "", "dump_elk"], [35, 2, 1, "", "dump_mermaid"], [35, 2, 1, "", "get_hier_name"], [35, 2, 1, "", "get_name"], [35, 2, 1, "", "insert_edge"], [35, 2, 1, "", "insert_node"], [35, 3, 1, "", "mermaid_direction"], [35, 2, 1, "", "prune"], [35, 2, 1, "", "remember"], [35, 2, 1, "", "remember_field"]], "transactron.lib": [[37, 0, 0, "-", "adapters"], [37, 0, 0, "-", "buttons"], [37, 0, 0, "-", "connectors"], [37, 0, 0, "-", "dependencies"], [37, 0, 0, "-", "fifo"], [37, 0, 0, "-", "logging"], [37, 0, 0, "-", "metrics"], [37, 0, 0, "-", "reqres"], [37, 0, 0, "-", "simultaneous"], [37, 0, 0, "-", "storage"], [37, 0, 0, "-", "transformers"]], "transactron.lib.adapters": [[37, 1, 1, "", "Adapter"], [37, 1, 1, "", "AdapterBase"], [37, 1, 1, "", "AdapterTrans"]], "transactron.lib.adapters.Adapter": [[37, 2, 1, "", "__init__"]], "transactron.lib.adapters.AdapterBase": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "data_in"], [37, 3, 1, "", "data_out"], [37, 2, 1, "", "debug_signals"]], "transactron.lib.adapters.AdapterTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.buttons": [[37, 1, 1, "", "ClickIn"], [37, 1, 1, "", "ClickOut"]], "transactron.lib.buttons.ClickIn": [[37, 2, 1, "", "__init__"]], "transactron.lib.buttons.ClickOut": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors": [[37, 1, 1, "", "Connect"], [37, 1, 1, "", "ConnectTrans"], [37, 1, 1, "", "FIFO"], [37, 1, 1, "", "Forwarder"], [37, 1, 1, "", "ManyToOneConnectTrans"], [37, 1, 1, "", "StableSelectingNetwork"]], "transactron.lib.connectors.Connect": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.ConnectTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.FIFO": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.Forwarder": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.ManyToOneConnectTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.connectors.StableSelectingNetwork": [[37, 2, 1, "", "__init__"]], "transactron.lib.dependencies": [[37, 1, 1, "", "DependencyKey"], [37, 1, 1, "", "DependencyManager"], [37, 1, 1, "", "ListKey"], [37, 1, 1, "", "SimpleKey"], [37, 1, 1, "", "UnifierKey"]], "transactron.lib.dependencies.DependencyKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "empty_valid"], [37, 3, 1, "", "lock_on_get"]], "transactron.lib.dependencies.DependencyManager": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "add_dependency"], [37, 2, 1, "", "get_dependency"]], "transactron.lib.dependencies.ListKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "empty_valid"]], "transactron.lib.dependencies.SimpleKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "default_value"]], "transactron.lib.dependencies.UnifierKey": [[37, 2, 1, "", "combine"], [37, 3, 1, "", "unifier"]], "transactron.lib.fifo": [[37, 1, 1, "", "BasicFifo"], [37, 1, 1, "", "Semaphore"]], "transactron.lib.fifo.BasicFifo": [[37, 2, 1, "", "__init__"]], "transactron.lib.fifo.Semaphore": [[37, 2, 1, "", "__init__"]], "transactron.lib.logging": [[37, 1, 1, "", "HardwareLogger"], [37, 1, 1, "", "LogKey"], [37, 1, 1, "", "LogRecord"], [37, 1, 1, "", "LogRecordInfo"], [37, 4, 1, "", "get_log_records"], [37, 4, 1, "", "get_trigger_bit"]], "transactron.lib.logging.HardwareLogger": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "assertion"], [37, 2, 1, "", "debug"], [37, 2, 1, "", "error"], [37, 2, 1, "", "info"], [37, 2, 1, "", "log"], [37, 2, 1, "", "warning"]], "transactron.lib.logging.LogKey": [[37, 2, 1, "", "__init__"]], "transactron.lib.logging.LogRecord": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "fields"], [37, 3, 1, "", "trigger"]], "transactron.lib.logging.LogRecordInfo": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "format"], [37, 3, 1, "", "format_str"], [37, 2, 1, "", "from_dict"], [37, 2, 1, "", "from_json"], [37, 3, 1, "", "level"], [37, 3, 1, "", "location"], [37, 3, 1, "", "logger_name"], [37, 2, 1, "", "schema"], [37, 2, 1, "", "to_dict"], [37, 2, 1, "", "to_json"]], "transactron.lib.metrics": [[37, 1, 1, "", "HardwareMetricsManager"], [37, 1, 1, "", "HwCounter"], [37, 1, 1, "", "HwExpHistogram"], [37, 1, 1, "", "HwMetric"], [37, 1, 1, "", "HwMetricsEnabledKey"], [37, 1, 1, "", "LatencyMeasurer"], [37, 1, 1, "", "MetricModel"], [37, 1, 1, "", "MetricRegisterModel"]], "transactron.lib.metrics.HardwareMetricsManager": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "debug_signals"], [37, 2, 1, "", "get_metrics"], [37, 2, 1, "", "get_register_value"]], "transactron.lib.metrics.HwCounter": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "incr"]], "transactron.lib.metrics.HwExpHistogram": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "add"]], "transactron.lib.metrics.HwMetric": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "add_registers"], [37, 2, 1, "", "metrics_enabled"]], "transactron.lib.metrics.HwMetricsEnabledKey": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "default_value"], [37, 3, 1, "", "empty_valid"], [37, 3, 1, "", "lock_on_get"]], "transactron.lib.metrics.LatencyMeasurer": [[37, 2, 1, "", "__init__"], [37, 2, 1, "", "metrics_enabled"], [37, 2, 1, "", "start"], [37, 2, 1, "", "stop"]], "transactron.lib.metrics.MetricModel": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "description"], [37, 2, 1, "", "from_dict"], [37, 2, 1, "", "from_json"], [37, 3, 1, "", "fully_qualified_name"], [37, 3, 1, "", "regs"], [37, 2, 1, "", "schema"], [37, 2, 1, "", "to_dict"], [37, 2, 1, "", "to_json"]], "transactron.lib.metrics.MetricRegisterModel": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "description"], [37, 2, 1, "", "from_dict"], [37, 2, 1, "", "from_json"], [37, 3, 1, "", "name"], [37, 2, 1, "", "schema"], [37, 2, 1, "", "to_dict"], [37, 2, 1, "", "to_json"], [37, 3, 1, "", "width"]], "transactron.lib.reqres": [[37, 1, 1, "", "ArgumentsToResultsZipper"], [37, 1, 1, "", "Serializer"]], "transactron.lib.reqres.ArgumentsToResultsZipper": [[37, 2, 1, "", "__init__"]], "transactron.lib.reqres.Serializer": [[37, 2, 1, "", "__init__"]], "transactron.lib.simultaneous": [[37, 4, 1, "", "condition"]], "transactron.lib.storage": [[37, 1, 1, "", "MemoryBank"]], "transactron.lib.storage.MemoryBank": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers": [[37, 1, 1, "", "CatTrans"], [37, 1, 1, "", "Collector"], [37, 1, 1, "", "ConnectAndMapTrans"], [37, 1, 1, "", "MethodFilter"], [37, 1, 1, "", "MethodMap"], [37, 1, 1, "", "MethodProduct"], [37, 1, 1, "", "MethodTryProduct"], [37, 1, 1, "", "Transformer"], [37, 1, 1, "", "Unifier"]], "transactron.lib.transformers.CatTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.Collector": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.ConnectAndMapTrans": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodFilter": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodMap": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodProduct": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.MethodTryProduct": [[37, 2, 1, "", "__init__"]], "transactron.lib.transformers.Transformer": [[37, 3, 1, "", "method"], [37, 2, 1, "", "use"]], "transactron.lib.transformers.Unifier": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "method"]], "transactron.profiler": [[35, 1, 1, "", "MethodSamples"], [35, 1, 1, "", "Profile"], [35, 1, 1, "", "ProfileData"], [35, 1, 1, "", "ProfileInfo"], [35, 1, 1, "", "ProfileSamples"], [35, 1, 1, "", "RunStat"], [35, 1, 1, "", "RunStatNode"], [35, 1, 1, "", "TransactionSamples"]], "transactron.profiler.MethodSamples": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "run"]], "transactron.profiler.Profile": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "analyze_methods"], [35, 2, 1, "", "analyze_transactions"], [35, 3, 1, "", "cycles"], [35, 2, 1, "", "decode"], [35, 2, 1, "", "encode"], [35, 2, 1, "", "from_dict"], [35, 2, 1, "", "from_json"], [35, 2, 1, "", "schema"], [35, 2, 1, "", "to_dict"], [35, 2, 1, "", "to_json"], [35, 3, 1, "", "transactions_and_methods"]], "transactron.profiler.ProfileData": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "make"], [35, 3, 1, "", "method_parents"], [35, 3, 1, "", "transaction_conflicts"], [35, 3, 1, "", "transactions_and_methods"], [35, 3, 1, "", "transactions_by_method"]], "transactron.profiler.ProfileInfo": [[35, 2, 1, "", "__init__"], [35, 2, 1, "", "from_dict"], [35, 2, 1, "", "from_json"], [35, 3, 1, "", "is_transaction"], [35, 3, 1, "", "name"], [35, 2, 1, "", "schema"], [35, 3, 1, "", "src_loc"], [35, 2, 1, "", "to_dict"], [35, 2, 1, "", "to_json"]], "transactron.profiler.ProfileSamples": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "methods"], [35, 3, 1, "", "transactions"]], "transactron.profiler.RunStat": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "locked"], [35, 2, 1, "", "make"], [35, 3, 1, "", "name"], [35, 3, 1, "", "run"], [35, 3, 1, "", "src_loc"]], "transactron.profiler.RunStatNode": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "callers"], [35, 2, 1, "", "make"], [35, 3, 1, "", "stat"]], "transactron.profiler.TransactionSamples": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "grant"], [35, 3, 1, "", "request"], [35, 3, 1, "", "runnable"]], "transactron.testing": [[38, 0, 0, "-", "functions"], [38, 0, 0, "-", "gtkw_extension"], [38, 0, 0, "-", "infrastructure"], [38, 0, 0, "-", "logging"], [38, 0, 0, "-", "profiler"], [38, 0, 0, "-", "sugar"], [38, 0, 0, "-", "testbenchio"]], "transactron.testing.functions": [[38, 4, 1, "", "get_outputs"], [38, 4, 1, "", "set_inputs"]], "transactron.testing.gtkw_extension": [[38, 4, 1, "", "write_vcd_ext"]], "transactron.testing.infrastructure": [[38, 1, 1, "", "CoreblocksCommand"], [38, 1, 1, "", "Now"], [38, 1, 1, "", "PysimSimulator"], [38, 1, 1, "", "SimpleTestCircuit"], [38, 1, 1, "", "SyncProcessWrapper"], [38, 1, 1, "", "TestCaseWithSimulator"], [38, 4, 1, "", "guard_nested_collection"]], "transactron.testing.infrastructure.PysimSimulator": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "add_sync_process"], [38, 2, 1, "", "run"]], "transactron.testing.infrastructure.SimpleTestCircuit": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "debug_signals"]], "transactron.testing.infrastructure.SyncProcessWrapper": [[38, 2, 1, "", "__init__"]], "transactron.testing.infrastructure.TestCaseWithSimulator": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "add_all_mocks"], [38, 2, 1, "", "add_class_mocks"], [38, 2, 1, "", "add_local_mocks"], [38, 3, 1, "", "dependency_manager"], [38, 2, 1, "", "random_wait"], [38, 2, 1, "", "random_wait_geom"], [38, 2, 1, "", "run_simulation"], [38, 2, 1, "", "tick"]], "transactron.testing.logging": [[38, 4, 1, "", "make_logging_process"], [38, 4, 1, "", "parse_logging_level"]], "transactron.testing.profiler": [[38, 4, 1, "", "profiler_process"]], "transactron.testing.sugar": [[38, 4, 1, "", "def_method_mock"]], "transactron.testing.testbenchio": [[38, 1, 1, "", "TestbenchIO"]], "transactron.testing.testbenchio.TestbenchIO": [[38, 2, 1, "", "__init__"], [38, 2, 1, "", "call"], [38, 2, 1, "", "call_do"], [38, 2, 1, "", "call_init"], [38, 2, 1, "", "call_result"], [38, 2, 1, "", "call_try"], [38, 2, 1, "", "debug_signals"], [38, 2, 1, "", "disable"], [38, 2, 1, "", "done"], [38, 2, 1, "", "enable"], [38, 2, 1, "", "get_outputs"], [38, 2, 1, "", "method_argument"], [38, 2, 1, "", "method_handle"], [38, 2, 1, "", "method_handle_loop"], [38, 2, 1, "", "method_return"], [38, 2, 1, "", "set_enable"], [38, 2, 1, "", "set_inputs"], [38, 2, 1, "", "wait_until_done"]], "transactron.tracing": [[35, 1, 1, "", "TracingEnabler"], [35, 1, 1, "", "TracingFragment"], [35, 1, 1, "", "TracingFragmentTransformer"], [35, 1, 1, "", "TracingInstance"]], "transactron.tracing.TracingFragment": [[35, 2, 1, "", "get"], [35, 2, 1, "", "prepare"], [35, 3, 1, "", "subfragments"]], "transactron.tracing.TracingFragmentTransformer": [[35, 2, 1, "", "on_fragment"]], "transactron.tracing.TracingInstance": [[35, 2, 1, "", "get"]], "transactron.utils": [[40, 0, 0, "-", "amaranth_ext"], [39, 0, 0, "-", "assign"], [39, 0, 0, "-", "data_repr"], [39, 0, 0, "-", "debug_signals"], [39, 0, 0, "-", "depcache"], [39, 0, 0, "-", "dependencies"], [39, 0, 0, "-", "gen"], [39, 0, 0, "-", "idgen"], [39, 0, 0, "-", "transactron_helpers"]], "transactron.utils.amaranth_ext": [[40, 0, 0, "-", "elaboratables"], [40, 0, 0, "-", "functions"]], "transactron.utils.amaranth_ext.elaboratables": [[40, 1, 1, "", "ModuleConnector"], [40, 4, 1, "", "OneHotSwitch"], [40, 4, 1, "", "OneHotSwitchDynamic"], [40, 1, 1, "", "RoundRobin"], [40, 1, 1, "", "Scheduler"]], "transactron.utils.amaranth_ext.elaboratables.ModuleConnector": [[40, 2, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.RoundRobin": [[40, 2, 1, "", "__init__"]], "transactron.utils.amaranth_ext.elaboratables.Scheduler": [[40, 2, 1, "", "__init__"]], "transactron.utils.amaranth_ext.functions": [[40, 4, 1, "", "count_leading_zeros"], [40, 4, 1, "", "count_trailing_zeros"], [40, 4, 1, "", "flatten_signals"], [40, 4, 1, "", "mod_incr"], [40, 4, 1, "", "popcount"]], "transactron.utils.assign": [[39, 1, 1, "", "AssignType"], [39, 4, 1, "", "assign"]], "transactron.utils.assign.AssignType": [[39, 3, 1, "", "ALL"], [39, 3, 1, "", "COMMON"], [39, 3, 1, "", "RHS"]], "transactron.utils.data_repr": [[39, 4, 1, "", "align_down_to_power_of_two"], [39, 4, 1, "", "align_to_power_of_two"], [39, 4, 1, "", "average_dict_of_lists"], [39, 4, 1, "", "bits_from_int"], [39, 4, 1, "", "data_layout"], [39, 4, 1, "", "int_to_signed"], [39, 4, 1, "", "layout_subset"], [39, 4, 1, "", "make_hashable"], [39, 4, 1, "", "neg"], [39, 4, 1, "", "signed_to_int"]], "transactron.utils.debug_signals": [[39, 4, 1, "", "auto_debug_signals"]], "transactron.utils.depcache": [[39, 1, 1, "", "DependentCache"]], "transactron.utils.depcache.DependentCache": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "get"]], "transactron.utils.dependencies": [[39, 1, 1, "", "DependencyContext"], [39, 1, 1, "", "DependencyKey"], [39, 1, 1, "", "DependencyManager"], [39, 1, 1, "", "ListKey"], [39, 1, 1, "", "SimpleKey"]], "transactron.utils.dependencies.DependencyContext": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "get"], [39, 3, 1, "", "stack"]], "transactron.utils.dependencies.DependencyKey": [[39, 2, 1, "", "combine"], [39, 3, 1, "", "empty_valid"], [39, 3, 1, "", "lock_on_get"]], "transactron.utils.dependencies.DependencyManager": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "add_dependency"], [39, 2, 1, "", "get_dependency"]], "transactron.utils.dependencies.ListKey": [[39, 2, 1, "", "combine"], [39, 3, 1, "", "empty_valid"]], "transactron.utils.dependencies.SimpleKey": [[39, 2, 1, "", "combine"], [39, 3, 1, "", "default_value"]], "transactron.utils.gen": [[39, 1, 1, "", "GeneratedLog"], [39, 1, 1, "", "GenerationInfo"], [39, 1, 1, "", "MetricLocation"], [39, 4, 1, "", "generate_verilog"]], "transactron.utils.gen.GeneratedLog": [[39, 2, 1, "", "__init__"], [39, 3, 1, "", "fields_location"], [39, 2, 1, "", "from_dict"], [39, 2, 1, "", "from_json"], [39, 2, 1, "", "schema"], [39, 2, 1, "", "to_dict"], [39, 2, 1, "", "to_json"], [39, 3, 1, "", "trigger_location"]], "transactron.utils.gen.GenerationInfo": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "decode"], [39, 2, 1, "", "encode"], [39, 2, 1, "", "from_dict"], [39, 2, 1, "", "from_json"], [39, 3, 1, "", "logs"], [39, 3, 1, "", "method_signals_location"], [39, 3, 1, "", "metrics_location"], [39, 3, 1, "", "profile_data"], [39, 2, 1, "", "schema"], [39, 2, 1, "", "to_dict"], [39, 2, 1, "", "to_json"], [39, 3, 1, "", "transaction_signals_location"]], "transactron.utils.gen.MetricLocation": [[39, 2, 1, "", "__init__"], [39, 2, 1, "", "from_dict"], [39, 2, 1, "", "from_json"], [39, 3, 1, "", "regs"], [39, 2, 1, "", "schema"], [39, 2, 1, "", "to_dict"], [39, 2, 1, "", "to_json"]], "transactron.utils.idgen": [[39, 1, 1, "", "IdGenerator"]], "transactron.utils.idgen.IdGenerator": [[39, 2, 1, "", "__init__"]], "transactron.utils.transactron_helpers": [[39, 4, 1, "", "def_helper"], [39, 4, 1, "", "from_method_layout"], [39, 4, 1, "", "get_caller_class_name"], [39, 4, 1, "", "get_src_loc"], [39, 4, 1, "", "method_def_helper"], [39, 4, 1, "", "mock_def_helper"], [39, 4, 1, "", "silence_mustuse"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"]}, "titleterms": {"api": 0, "coreblock": [0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 25, 27, 34], "transactron": [0, 28, 35, 36, 37, 38, 39, 40], "list": 1, "assumpt": [1, 3], "made": 1, "dure": 1, "develop": [1, 23], "instruct": [3, 32], "cach": [3, 6], "interfac": [3, 14, 31, 32], "address": 3, "map": 3, "exampl": 3, "packag": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 36, 37, 38, 39, 40], "subpackag": [4, 8, 11, 12, 18, 35, 39], "submodul": [4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 35, 36, 37, 38, 39, 40], "core": [4, 33, 36], "modul": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 36, 37, 38, 39, 40], "content": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 36, 37, 38, 39, 40], "backend": 5, "annouc": 5, "retir": 5, "icach": 6, "ifac": 6, "refil": 6, "core_struct": 7, "rat": 7, "rf": 7, "rob": 7, "frontend": [8, 9, 10], "decod": 9, "decode_stag": 9, "instr_decod": 9, "instr_descript": 9, "isa": 9, "optyp": 9, "rvc": 9, "fetch": 10, "func_block": [11, 12, 13, 14, 15], "fu": [12, 13], "alu": 12, "div_unit": 12, "except": [12, 20, 26], "jumpbranch": 12, "mul_unit": 12, "priv": [12, 18, 19, 20], "shift_unit": 12, "zbc": 12, "zb": 12, "unsigned_multipl": 13, "common": 13, "fast_recurs": 13, "sequenc": 13, "shift": 13, "func_blocks_unifi": 14, "func_protocol": 14, "lsu": 15, "dummylsu": 15, "pma": 15, "param": 16, "configur": 16, "fu_param": 16, "genparam": 16, "icache_param": 16, "instr": 16, "isa_param": 16, "peripher": 17, "axi_lit": 17, "bus_adapt": 17, "wishbon": 17, "csr": 19, "csr_instanc": 19, "csr_regist": 19, "trap": 20, "instr_count": 20, "interrupt_control": 20, "schedul": [21, 30, 34, 36], "wakeup_select": 21, "full": 22, "transact": [22, 34, 36], "method": [22, 31, 32, 34, 36], "graph": [22, 35], "environ": 23, "set": 23, "up": 23, "us": [23, 31, 32], "script": 23, "run_test": 23, "py": 23, "lint": 23, "sh": 23, "core_graph": 23, "build_doc": 23, "tprof": 23, "introduct": [24, 26, 34], "document": [24, 34], "summari": 26, "paper": 26, "about": 26, "interrupt": 26, "handl": 26, "old": 26, "pc": 26, "out": 26, "order": [26, 34], "execut": [26, 33], "processor": 26, "In": 26, "line": 26, "softwar": 26, "manag": [26, 36], "tlb": 26, "hardwar": 26, "cost": 26, "analysi": 26, "process": 26, "strategi": 26, "igpu": 26, "support": 26, "specul": 26, "gpu": 26, "effici": 26, "other": 26, "problem": 29, "checklist": 29, "overview": [30, 32], "descript": 30, "schema": 30, "structur": 30, "more": 30, "detail": 30, "each": 30, "block": 30, "proposit": 31, "reserv": [31, 32], "station": [31, 32], "implement": [31, 34], "intern": 31, "data": 31, "actual": 31, "slot": [31, 32], "tabl": 31, "compar": [31, 32], "substitut": [31, 32], "read": [31, 32], "row": [31, 32], "clean": [31, 32], "get": [31, 32], "free": 31, "mark": [31, 32], "extern": [31, 32], "all": [31, 32], "reset": 32, "initi": 32, "state": 32, "insert": 32, "new": 32, "readi": [32, 34], "vector": 32, "signal": [32, 34], "verif": 33, "synthesi": 33, "manual": 33, "reproduct": 33, "depend": [33, 37, 39], "benchmark": 33, "regress": 33, "test": [33, 38], "framework": 34, "basic": 34, "usag": 34, "argument": 34, "pass": 34, "convent": 34, "definit": 34, "return": 34, "valu": 34, "The": 34, "librari": 34, "advanc": 34, "concept": 34, "special": 34, "combin": 34, "domain": 34, "conflict": 34, "nest": 34, "profil": [35, 38], "trace": 35, "kei": 36, "sugar": [36, 38], "tmodul": 36, "transaction_bas": 36, "lib": 37, "adapt": 37, "button": 37, "connector": 37, "fifo": 37, "log": [37, 38], "metric": 37, "reqr": 37, "simultan": 37, "storag": 37, "transform": 37, "function": [38, 40], "gtkw_extens": 38, "infrastructur": 38, "testbenchio": 38, "util": [39, 40], "assign": 39, "data_repr": 39, "debug_sign": 39, "depcach": 39, "gen": 39, "idgen": 39, "transactron_help": 39, "amaranth_ext": 40, "elaborat": 40}, "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.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/shared-structs/implementation/rs-impl.html b/shared-structs/implementation/rs-impl.html index 0fc9d768d..676993968 100644 --- a/shared-structs/implementation/rs-impl.html +++ b/shared-structs/implementation/rs-impl.html @@ -252,7 +252,7 @@

    Read and clean row

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/shared-structs/rs.html b/shared-structs/rs.html index 27e834bbf..1474588a2 100644 --- a/shared-structs/rs.html +++ b/shared-structs/rs.html @@ -222,7 +222,7 @@

    External interface signals

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/synthesis/synthesis.html b/synthesis/synthesis.html index f6a70d826..183c9787f 100644 --- a/synthesis/synthesis.html +++ b/synthesis/synthesis.html @@ -266,7 +266,7 @@

    Regression tests manual execution

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactions.html b/transactions.html index 62513abb7..3d6d1b07d 100644 --- a/transactions.html +++ b/transactions.html @@ -409,7 +409,7 @@

    Transaction and method nesting

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactron.core.html b/transactron.core.html index 7184e1124..496d6343c 100644 --- a/transactron.core.html +++ b/transactron.core.html @@ -860,7 +860,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactron.html b/transactron.html index d4e49b336..484cc72a8 100644 --- a/transactron.html +++ b/transactron.html @@ -751,7 +751,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactron.lib.html b/transactron.lib.html index 9019dee43..3f4e6aa62 100644 --- a/transactron.lib.html +++ b/transactron.lib.html @@ -1942,7 +1942,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactron.testing.html b/transactron.testing.html index 8321c5136..33e39c736 100644 --- a/transactron.testing.html +++ b/transactron.testing.html @@ -408,7 +408,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactron.utils.amaranth_ext.html b/transactron.utils.amaranth_ext.html index 400c36b61..02619f402 100644 --- a/transactron.utils.amaranth_ext.html +++ b/transactron.utils.amaranth_ext.html @@ -293,7 +293,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.

    diff --git a/transactron.utils.html b/transactron.utils.html index cb379819d..1c961b76a 100644 --- a/transactron.utils.html +++ b/transactron.utils.html @@ -792,7 +792,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2024. - Last updated on 15:57 2024-03-27. + Last updated on 10:11 2024-03-31.