From cdea2037dc2d80af3194f016193c9144827343ef Mon Sep 17 00:00:00 2001 From: Dolu1990 Date: Tue, 10 Sep 2024 16:39:47 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20SpinalHD?= =?UTF-8?q?L/VexiiRiscv-RTD@d7fa74162244f687ffecfdeef97e2f3b8da6cbd5=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- master/.buildinfo | 2 +- .../VexiiRiscv/BranchPrediction/index.doctree | Bin 11837 -> 11837 bytes .../.doctrees/VexiiRiscv/Debug/index.doctree | Bin 2739 -> 2739 bytes .../.doctrees/VexiiRiscv/Debug/jtag.doctree | Bin 3959 -> 3959 bytes .../.doctrees/VexiiRiscv/Decode/index.doctree | Bin 13432 -> 13432 bytes .../VexiiRiscv/Execute/custom.doctree | Bin 22573 -> 22573 bytes .../.doctrees/VexiiRiscv/Execute/fpu.doctree | Bin 14269 -> 14269 bytes .../VexiiRiscv/Execute/index.doctree | Bin 2890 -> 2890 bytes .../VexiiRiscv/Execute/introduction.doctree | Bin 8121 -> 8121 bytes .../.doctrees/VexiiRiscv/Execute/lsu.doctree | Bin 26247 -> 26247 bytes .../VexiiRiscv/Execute/plugins.doctree | Bin 21260 -> 21260 bytes .../.doctrees/VexiiRiscv/Fetch/index.doctree | Bin 14707 -> 17170 bytes .../VexiiRiscv/Framework/index.doctree | Bin 25294 -> 26229 bytes .../VexiiRiscv/HowToUse/index.doctree | Bin 16170 -> 16170 bytes .../VexiiRiscv/Introduction/index.doctree | Bin 20026 -> 20775 bytes .../VexiiRiscv/Performance/index.doctree | Bin 10381 -> 15927 bytes master/.doctrees/VexiiRiscv/Soc/index.doctree | Bin 2911 -> 2911 bytes master/.doctrees/VexiiRiscv/Soc/litex.doctree | Bin 9945 -> 9945 bytes .../.doctrees/VexiiRiscv/Soc/microsoc.doctree | Bin 6679 -> 6679 bytes master/.doctrees/environment.pickle | Bin 61353 -> 61418 bytes master/.doctrees/index.doctree | Bin 3216 -> 3216 bytes master/VexiiRiscv/BranchPrediction/index.html | 4 +- master/VexiiRiscv/Debug/index.html | 4 +- master/VexiiRiscv/Debug/jtag.html | 4 +- master/VexiiRiscv/Decode/index.html | 4 +- master/VexiiRiscv/Execute/custom.html | 4 +- master/VexiiRiscv/Execute/fpu.html | 4 +- master/VexiiRiscv/Execute/index.html | 4 +- master/VexiiRiscv/Execute/introduction.html | 4 +- master/VexiiRiscv/Execute/lsu.html | 4 +- master/VexiiRiscv/Execute/plugins.html | 4 +- master/VexiiRiscv/Fetch/index.html | 17 +++- master/VexiiRiscv/Framework/index.html | 23 ++++-- master/VexiiRiscv/HowToUse/index.html | 4 +- master/VexiiRiscv/Introduction/index.html | 36 ++++---- master/VexiiRiscv/Performance/index.html | 77 +++++++++++++++++- master/VexiiRiscv/Soc/index.html | 4 +- master/VexiiRiscv/Soc/litex.html | 4 +- master/VexiiRiscv/Soc/microsoc.html | 4 +- master/_images/fetch_l1.png | Bin 0 -> 51785 bytes .../_sources/VexiiRiscv/Fetch/index.rst.txt | 17 ++++ .../VexiiRiscv/Framework/index.rst.txt | 18 ++-- .../VexiiRiscv/Introduction/index.rst.txt | 33 ++++---- .../VexiiRiscv/Performance/index.rst.txt | 75 +++++++++++++++++ .../VexiiRiscv_docs-master-SingleHTML.zip | Bin 4080661 -> 4119854 bytes master/artefacts/VexiiRiscv_docs-master.pdf | Bin 913931 -> 940768 bytes master/genindex.html | 4 +- master/index.html | 4 +- master/search.html | 4 +- master/searchindex.js | 2 +- 50 files changed, 281 insertions(+), 87 deletions(-) create mode 100644 master/_images/fetch_l1.png diff --git a/master/.buildinfo b/master/.buildinfo index 60a1c94..6c88072 100644 --- a/master/.buildinfo +++ b/master/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 3e6a844c07a3927961e313365b2069b5 +config: 766945666379cf39d35347feb2cf8d9f tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/master/.doctrees/VexiiRiscv/BranchPrediction/index.doctree b/master/.doctrees/VexiiRiscv/BranchPrediction/index.doctree index 93baaa2a382fb2b4ae252160b554e645df110490..89ba30e9665c8159b01ba6dd44366a18d1d657ee 100644 GIT binary patch delta 62 zcmdlRvo~f#BBNn`UXgifa#opsig{Y1xrw2fk&%f>nwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v=1GjJbpWc)6&wHn delta 62 zcmdlRvo~f#BBP;cd3tJ5dUBnwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<|;-@P5^!b6SV*U delta 62 zcmdlix> diff --git a/master/.doctrees/VexiiRiscv/Debug/jtag.doctree b/master/.doctrees/VexiiRiscv/Debug/jtag.doctree index 92b620e15f13be8aca966bbd7669a6d003669613..21e087668b7acd125ee3c744e6f96e442d47eda5 100644 GIT binary patch delta 62 zcmew^_g!v-JELKKUXgifa#opsig{Y1xrw2fk&%f>nwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<_gCDya1!Q6%_yg delta 62 zcmew^_g!v-JENg#d3tJ5dUBnwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<{HL7MgYh571aO$ delta 62 zcmey7@grk{H>06xd3tJ5dUBnwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<}yZiGXShi6tDmQ delta 62 zcmdm+zc+t_E2E)ld3tJ5dUBlc1mo6FQZ|8UXgifa#opsig{Y1xrw2fk&%f>nwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<~qhRoB)f96o3E# delta 62 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 diff --git a/master/.doctrees/VexiiRiscv/Framework/index.doctree b/master/.doctrees/VexiiRiscv/Framework/index.doctree index c8dcfe3e205594c8f349ed930dce661f92cfb29f..8e8a5f0a31556ebea41a067d8a194f0e3f1be8df 100644 GIT binary patch delta 2728 zcmb_eZERCj80OrrTN%sNvRU@oorb_#VC}xUfr7g7RnTp8EFHqK+xE8iUb^0{ALApL z+X#vcjmDfBLPYV0Vo3a8^oJxW2uA-1`pXzW6G8nWk^qW=B;t9`ZP`aKfbq|JbKdj3 z&-=XZJ?Fjm%g@k_vq(FxeMJsTYB!=rB^-4KK6%9McLaDxOJiG8Q%g&rt=$m_2)=+{ z5CRD61h?Te~ zL}RwJSgIjHB-eDjpfV5bCACH78er~8NMQj#ByFO79KliyOGA;6FeHTIYSnHZAL20| z_G8)y?2brbKD5rc5yurA6v9H3j|*7jqy8OyRLJ(-n0gq>W%uK}+c(*c$grtJyFjdx zP2^a0+1M3T9aYU|)r4>)5sfHRY9y)zqx{g26b|AL9}Xt?pnxqQX}f?s?VU@P+Fkqz zZ{L)N#qBnm&1%E$I3Jg2wYzY9S48kH!#imEftZhaA=amaLV_=@L~Vt=B2DR2$o1kL z;+$(3^YIbhD}|)EB;*dCG4(%*yEJ~}e&UK}sw0<+Js_)crmU$xKBo4uBG*UMMz)nW zat8+%PjDMlOf|zy8Y{^4lH{i(V6IC ztGd8?H(m4tpjy<3HR3XY47KDVgE1daCPZF#mXgbc{ba;wYc8R#7pGxG(*|?GJ9U*k zi|A$-y(vn7UC1F`BD%6?$>!3dg;TDKu52;l4yz?B1WGtAWb~0++`Fo?jyWfduc1#! z*Md>*40G$O)O|9mTMN2BBo`~Hh^zbn`i5L8Kg4~j;+D{@uV>&g7c1&G?ka4z=lwck zi$w6_T3`khZ=*sIF|}&z*?Q8rh>H zMBfxZ8mPBv7GxN&DuU2l_sGiCCUPFHMQ$=~ZPa&DcQm=zUhoJ2ZM) zDTCy+^(Ok5iSkm8+%^++XUXnj?h7XB$$N^@#$dqxizNSSy6-x+6ml2-dyNNykk(j6 z-gK^>UFRUV<#Zx5t+o^W4V6~ko>}Rs={JE4uGvTW)*R-FG;AuKrqs7H4QuZpu9A85 zpModL0L>tY^?xA?iMVk4!?)sdMh0gfbHRlW*UoZOotu?|rptYGGb_91X)^6yl^V1L zk~$tf=~uwc+I4c%3UrE{gK~F0$7{%hwLw3inQ;)Vk$vtIr>O1tjfM`8r+fYMyP4^A za(kIucZ0geX&9YS>g5{Mz~v%|%`!Sje%P#Vud2X5DDc2Nfam%Y?zjs1lS1B`1);Yv zA94(6pj8Ny-JaUQ6-8oiu79b1a!lVy)_dwmhu%QW zcn0Rn0v#;5efdYoUERN(`x!{ofegNB1NovV&!W3c6MUc5$_Dazy2xFky8{_eR5=Xf zk}aL+TE@M_&!P6riLF0r#^&eI>s$h+imH&y!R!a~0+^fh&C55y90hX(%vCT~z&t~< z$sRC;Ku|zUA~iS64+-$Cjlpl44E#yPon*X8#+hV%N%`tF%9CV7Nk)=Ph-L@_MPd{G;F5pNq delta 2031 zcmbVNdrVtp6zAMap#q^G*o+q162@!5puCq&d6t*!kWC&_z_s+!+iOP=+D$Y#a9L&@ zPTlGBpDj3Jd>aQhF)ATTrv9<$HZ>$pqggcmVT_xbW{ED-`JJz2Jc5bypWn@Q9>4QD z=YIFxYoEcnPe3!FIr@=vMza;H6?@&%h_K0ArmiF48Immafd+42^kHcX--+)6 z|C*k&2{vtnbj<+uY{Jg~uVY4XkHIC44vct){T|AdW@A)r5 zRoJC#$3tm4JbmXZG+`j61KQA`%f~AzaVbp@6%~*Rlos}sjY=bX;MJ}?t$`hC>2N}u zB`S9V_V?AqkkJI_XimYo)I$(pEJbBHW*njHbXk-$_g8DoXUOpG{TPDT5=Ke6eqjd)n6)nsw&WZH3f1JwCn`H?=AfxVr^!Hwt#tV-eSH%)z$e-3xI*U3z=IlEDrGo zXHTG<#d%?3iwWP%YKAJjuh5!Q&SIC1u^7wNcY%$lG**^Xu713}GFs>qu+DBmLw;NG z4oV2myo>?_oHVE4Q~AZ9P*#$i8^fdlr*gmgSN;YN9wh?vrU90$xCkT$L1mEPRO}vU z#N+k3LyF9f;~}~m%c`^!Ax;)ZNsBE+$`|uiQVTZ&@>ZT>*~?n##petEfD>F)KjT<* zb5ZAu9!nJ7<)Z4>6r~v*aCja6B5BuZy0^DH5GS1a|2-ZhLe^s{`kQU5`|QOt&5e-3 zx@~|TsMGX|D?6QAe)qAY^&sZ7PQw-c66YE7#o4x-fE_LTQYW1vON4-CfwryJApvXc zmg?J|#A!}OS3rHs4j`n9SeIFDJhQ3>E4R23)x_=bqN?3)5Mcuqt-Af9pAtKt*5S_0 z?6adA{ZnU=U=y*Uuq3HoTyYOBVRzS*u!9TJ{K``6(bVmNLEPWnD9GHby~@lkmKI(; z4)KW5fVLh5#_?p2PuLd@`i%uWzAEVWPM`2X*!??mA6e$6?>dHv>qVMR^j^Df1piLf z$9Vh}wv})q#fs1N=3#Abv^G!HPnjeBoUlK1AQb+I7?qQ^8rmkCwy}5CO5gu?54xjS zT2F+iRCu3snwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<`%|fwg9eS6)FG# delta 62 zcmZ2gx2kSKFr%Sqd3tJ5dUByo&ONVtKY5Luc#|jxlw-?=PAS8r!M27)wQ#_VR@nlNl zJheW?8&hi&aZPPXCbV_=!(=gutm$!?YOyiL&hVtiCUhgIGh=kjloYtr)YWe&6(t$%^l257V)AiB z(pP6;Ki0L*9pM_)&V= zM>ZkyUIB77)JHyt-kKqL&PQ4iIXfRATj8VH9{6h2-7r!+03X!uq8EI$4bdO3p`?6$ zpE$zY!Lx~Z3p3R&R!hsul@eoVahza{xt^0vdRg3dJ0-_8X=|J%RF|)Ysz_`gi4%wm zDW?Y~I+Zm|e`;`OZqaAe4Sim_H8NLaa%3}Hj2wnL<0J4~eFREF!O|r`za#o`eYIZM z+XZjMzo9FGqGQF~nD~+)d>dK;->vT_aj0z`rp>-?E9#npvM+0cvM*Pfw~zs7YuQSN ze54nV{sLs-hAEPQLmQr=x{vfBq7@*AHnx!|_-x}ANW}4kw=XR2M`nKkb7a$Yl7k;M z?WQmJZnh!vVgYix^%?qh5H_?Oq3`(205T`%Gx^T;YC=DiS~$}Zq-U;avFnORa0x8z zc%FVQ5oK6@__AX^>4HnKN*J#Tli%Tux`xWx!W!-<7?K|NwQgCl#$6+AK}mfb`OAkI zn5r+KiXtn%3uDZRir=6ArTzs%%a#0OV~)@YsaAHQx(rBrh~A^XzUVnxr$F1f4{3w1 z-h=8jb81`_G6W}@Dmz)tC|51RO3PUs>|hSxm-Q!AOifZ(EpaP~cWP2zg5keC4THi_ z%gsBQdoYIKize233-;G1xZBV1AT}f}&dp9WR#*7ve5#S!S^imxQ<|L|VWaitN$bEOnH7lVjW!uWm;8nvs5Hq>mYC zKO=2tq}@zbuM(sPs4v23Vf;Pm$J!=B%UI$T@nea#ld&?h`7ON_l>7mE`y0q*%FY9_N0o1JeGx`I4u+<982xTQ^kTJO=uPQmPabGyW>RV z=}NoI$qD1!IR7scu(EU3wq$N9E9IoT28(Q<{5OY0>-hk205cBGK@SHo3c zLO8tyr4SN<~R^uetdj+F)1vchzUc0r{ zX3QY%BBaQA62h<$Z?U=mvBleI-g?t;C#=MAgL~aJ9U_7u=71q)ZX?&ipAA8dc4dL< zi7_+;Xs`u7=Eu-+>d2kck=c4jhGE?IB{~Bi21CrOnGAXlEckb$W%$~^7hNzK-a}aD zs|_zzr@R!1qqpIgz=P-=qasBr-ZCoC5-j(;h(3i-?=$E#0~{sbCw25ta3}g6o(jg% zby@*)17_x0UBy7(KI`u_8~ghb>umhPkR2nkztxd4p=TKz2S0^QGg~>}{Q=89QnQ&e z-ly8R{%g1uF|I1QpP=mqYF=9P&O&D;Hhk-`!PWj_Ov0$-#%UH#4jeK{3%VL&H%T4pR6438ndsc_AlhGgFdE|Ah)AmX%>dqfCAm zWrgy~2DfbR$|c!JD-Q!2xyx<{KTZm(!gQ+*VP#hLjo2CHN7|>`>`-pdd0OCn%8ORu IYU<&?0Q3CassI20 diff --git a/master/.doctrees/VexiiRiscv/Performance/index.doctree b/master/.doctrees/VexiiRiscv/Performance/index.doctree index 7101251aa701a2e27509e475dd13d59e918387f8..87860f86d40de2139bafabd8a86906a736dfbd80 100644 GIT binary patch literal 15927 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 Eb2RXS8UO$Q delta 384 zcmdm9(;LXzz&f=_V(zr8nfyTtOjs2_3MTVt{$z@U2q=RDHalp^urQT@Mc7n|@vkE|FNoVDv z80lAlm4qL9`eEwJZW_;e^{Vd4;L9KsLxOh|@tX zv77wa)SFRmv%Ogr6Vn%_&ATlgGdrILs>wP7B94QIBS50GhchoRH?^d)Ahmc(?G%kH bkeW`gd}nEfB1inwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<}${YoB)&G6t@5X delta 62 zcmcaFc3*6RE2E)ld3tJ5dUBnwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<|@W`RRF5T6te&T delta 62 zcmccVd((G=C!?Whd3tJ5dUBnwf=pT3TvyT1skanx%QFQJQg* RMM|Psa#D)v<{HM?5&(dJ6fgh) delta 62 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 RMM|Psa#D)v<`zaCZUAvV6JP)U delta 62 zcmbOrIYDwmFr%Sqd3tJ5dUB diff --git a/master/VexiiRiscv/BranchPrediction/index.html b/master/VexiiRiscv/BranchPrediction/index.html index 36d1cb3..1403684 100644 --- a/master/VexiiRiscv/BranchPrediction/index.html +++ b/master/VexiiRiscv/BranchPrediction/index.html @@ -78,8 +78,8 @@

  • Other doc / media / talks
  • Technicalities
  • Navigating the code
  • -
  • Check list
  • About VexRiscv (not VexiiRiscv)
  • +
  • Check list
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework
  • Framework

    Scala / SpinalHDL

    -

    This combination allows to goes way beyond what regular HDL allows in terms of hardware description capabilities. -You can find some documentation about SpinalHDL here :

    +

    VexiiRiscv is implemented in Scala and use SpinalHDL to generate hardware.

    +

    Scala is a general purpose programming language (like C/C++/Java/Rust/…). Staticaly typed, with a garbage collector. +This combination allows to goes way beyond what regular HDL allows in terms of hardware elaboration time capabilities.

    +

    You can find some documentation about SpinalHDL here :

    Plugin

    -

    One main design aspect of VexiiRiscv is that all its hardware is defined inside plugins. +

    One of the main aspect of VexiiRiscv is that all its hardware is defined inside plugins. When you want to instantiate a VexiiRiscv CPU, you “only” need to provide a list of plugins as parameters. So, plugins can be seen as both parameters and hardware definition from a VexiiRiscv perspective.

    So it is quite different from the regular HDL component/module paradigm. Here are the advantagesof this approach :

    @@ -471,7 +473,10 @@

    Pipeline APIhttps://spinalhdl.github.io/SpinalDoc-RTD/master/SpinalHDL/Libraries/Pipeline/index.html

    +

    More documentation about it in :

    +

    @@ -504,7 +509,7 @@

    Pipeline API

    - Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10

    diff --git a/master/VexiiRiscv/HowToUse/index.html b/master/VexiiRiscv/HowToUse/index.html index 955513f..6d8157b 100644 --- a/master/VexiiRiscv/HowToUse/index.html +++ b/master/VexiiRiscv/HowToUse/index.html @@ -78,8 +78,8 @@
  • Other doc / media / talks
  • Technicalities
  • Navigating the code
  • -
  • Check list
  • About VexRiscv (not VexiiRiscv)
  • +
  • Check list
  • Framework
  • Framework
      @@ -252,10 +252,10 @@

      Introduction

      In a few words, VexiiRiscv :

        -
      • Is an hardware CPU project

      • -
      • Implements the RISC-V instruction set

      • +
      • Is an project which implement an hardware CPU

      • +
      • Follows the RISC-V instruction set

      • Is free / open-source

      • -
      • Should fit well on FPGA and ASIC

      • +
      • Should fit well on FPGA but also be portable to ASIC

      Other doc / media / talks

      @@ -298,23 +298,16 @@

      Technicalities

      Navigating the code

      +

      VexiiRiscv isn’t implmeneted in Verilog nor VHDL. Instead it is written in scala and use the SpinalHDL API to generate hardware. +This allows to leverage an advanced elaboration time paradigme in order to generate hardware in a very flexible manner.

      Here are a few key / typical code examples :

        -
      • The CPU toplevel src/main/scala/vexiiriscv/VexiiRiscv.scala

      • +
      • Integer ALU plugin ; src/main/scala/vexiiriscv/execute/IntAluPlugin.scala

      • A cpu configuration generator : dev/src/main/scala/vexiiriscv/Param.scala

      • +
      • The CPU toplevel src/main/scala/vexiiriscv/VexiiRiscv.scala

      • Some globally shared definitions : src/main/scala/vexiiriscv/Global.scala

      • -
      • Integer ALU plugin ; src/main/scala/vexiiriscv/execute/IntAluPlugin.scala

      • -
      -

      Also on quite important one is to use a text editor / IDE which support curly brace folding and to start with them fully folded, as the code extensively used nested structures.

      -

      -
      -

      Check list

      -

      Here is a list of important assumptions and things to know about :

      -
        -
      • trap/flush/pc request from the pipeline, once asserted one cycle can not be undone. This also mean that while a given instruction is stuck somewhere, if that instruction did raised on of those request, nothing should change the execution path. For instance, a sudden cache line refill completion should not lift the request from the LSU asking a redo (due to cache refill hazard).

      • -
      • In the execute pipeline, stage.up(RS1/RS2) is the value to be used, while stage.down(RS1/RS2) should not be used, as it implement the bypassing for the next stage

      • -
      • Fetch.ctrl(0) isn’t persistent.

      +

      Also due to the nested structure of the code base, a text editor / IDE which support curly brace folding can be very usefull.

      About VexRiscv (not VexiiRiscv)

      @@ -330,6 +323,15 @@

      About VexRiscv (not VexiiRiscv) +

      Check list

      +

      Here is a list of important design assumptions and things to know about :

      +
        +
      • trap/flush/pc request from the pipeline, once asserted one cycle can not be undone. This also mean that while a given instruction is stuck somewhere, if that instruction did raised on of those request, nothing should change the execution path. For instance, a sudden cache line refill completion should not lift the request from the LSU asking a redo (due to cache refill hazard).

      • +
      • In the execute pipeline, stage.up(RS1/RS2) is the value to be used, while stage.down(RS1/RS2) should not be used, as it implement the bypassing for the next stage

      • +
      • Fetch.ctrl(0) isn’t persistent (meaning the PC requested can change at any time)

      • +
      +