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 93baaa2..89ba30e 100644 Binary files a/master/.doctrees/VexiiRiscv/BranchPrediction/index.doctree and b/master/.doctrees/VexiiRiscv/BranchPrediction/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Debug/index.doctree b/master/.doctrees/VexiiRiscv/Debug/index.doctree index f1744c5..4efb0e2 100644 Binary files a/master/.doctrees/VexiiRiscv/Debug/index.doctree and b/master/.doctrees/VexiiRiscv/Debug/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Debug/jtag.doctree b/master/.doctrees/VexiiRiscv/Debug/jtag.doctree index 92b620e..21e0876 100644 Binary files a/master/.doctrees/VexiiRiscv/Debug/jtag.doctree and b/master/.doctrees/VexiiRiscv/Debug/jtag.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Decode/index.doctree b/master/.doctrees/VexiiRiscv/Decode/index.doctree index bf8825e..90696e7 100644 Binary files a/master/.doctrees/VexiiRiscv/Decode/index.doctree and b/master/.doctrees/VexiiRiscv/Decode/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Execute/custom.doctree b/master/.doctrees/VexiiRiscv/Execute/custom.doctree index 2400433..91b1120 100644 Binary files a/master/.doctrees/VexiiRiscv/Execute/custom.doctree and b/master/.doctrees/VexiiRiscv/Execute/custom.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Execute/fpu.doctree b/master/.doctrees/VexiiRiscv/Execute/fpu.doctree index b62ec73..9653a29 100644 Binary files a/master/.doctrees/VexiiRiscv/Execute/fpu.doctree and b/master/.doctrees/VexiiRiscv/Execute/fpu.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Execute/index.doctree b/master/.doctrees/VexiiRiscv/Execute/index.doctree index c45f592..3159779 100644 Binary files a/master/.doctrees/VexiiRiscv/Execute/index.doctree and b/master/.doctrees/VexiiRiscv/Execute/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Execute/introduction.doctree b/master/.doctrees/VexiiRiscv/Execute/introduction.doctree index 073c2d2..bf9b6fb 100644 Binary files a/master/.doctrees/VexiiRiscv/Execute/introduction.doctree and b/master/.doctrees/VexiiRiscv/Execute/introduction.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Execute/lsu.doctree b/master/.doctrees/VexiiRiscv/Execute/lsu.doctree index f562849..36b60e0 100644 Binary files a/master/.doctrees/VexiiRiscv/Execute/lsu.doctree and b/master/.doctrees/VexiiRiscv/Execute/lsu.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Execute/plugins.doctree b/master/.doctrees/VexiiRiscv/Execute/plugins.doctree index 4cee719..0b72576 100644 Binary files a/master/.doctrees/VexiiRiscv/Execute/plugins.doctree and b/master/.doctrees/VexiiRiscv/Execute/plugins.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Fetch/index.doctree b/master/.doctrees/VexiiRiscv/Fetch/index.doctree index fd9346b..83d7a7d 100644 Binary files a/master/.doctrees/VexiiRiscv/Fetch/index.doctree and b/master/.doctrees/VexiiRiscv/Fetch/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Framework/index.doctree b/master/.doctrees/VexiiRiscv/Framework/index.doctree index c8dcfe3..8e8a5f0 100644 Binary files a/master/.doctrees/VexiiRiscv/Framework/index.doctree and b/master/.doctrees/VexiiRiscv/Framework/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/HowToUse/index.doctree b/master/.doctrees/VexiiRiscv/HowToUse/index.doctree index c637618..bb244a8 100644 Binary files a/master/.doctrees/VexiiRiscv/HowToUse/index.doctree and b/master/.doctrees/VexiiRiscv/HowToUse/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Introduction/index.doctree b/master/.doctrees/VexiiRiscv/Introduction/index.doctree index 76e0705..22293d4 100644 Binary files a/master/.doctrees/VexiiRiscv/Introduction/index.doctree and b/master/.doctrees/VexiiRiscv/Introduction/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Performance/index.doctree b/master/.doctrees/VexiiRiscv/Performance/index.doctree index 7101251..87860f8 100644 Binary files a/master/.doctrees/VexiiRiscv/Performance/index.doctree and b/master/.doctrees/VexiiRiscv/Performance/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Soc/index.doctree b/master/.doctrees/VexiiRiscv/Soc/index.doctree index 57f131e..57a43c6 100644 Binary files a/master/.doctrees/VexiiRiscv/Soc/index.doctree and b/master/.doctrees/VexiiRiscv/Soc/index.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Soc/litex.doctree b/master/.doctrees/VexiiRiscv/Soc/litex.doctree index da696bc..f62b312 100644 Binary files a/master/.doctrees/VexiiRiscv/Soc/litex.doctree and b/master/.doctrees/VexiiRiscv/Soc/litex.doctree differ diff --git a/master/.doctrees/VexiiRiscv/Soc/microsoc.doctree b/master/.doctrees/VexiiRiscv/Soc/microsoc.doctree index 35942bd..3ea4933 100644 Binary files a/master/.doctrees/VexiiRiscv/Soc/microsoc.doctree and b/master/.doctrees/VexiiRiscv/Soc/microsoc.doctree differ diff --git a/master/.doctrees/environment.pickle b/master/.doctrees/environment.pickle index 7fc23bc..d7e3bb7 100644 Binary files a/master/.doctrees/environment.pickle and b/master/.doctrees/environment.pickle differ diff --git a/master/.doctrees/index.doctree b/master/.doctrees/index.doctree index 9295765..03e42f4 100644 Binary files a/master/.doctrees/index.doctree and b/master/.doctrees/index.doctree differ 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 @@
- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Debug/index.html b/master/VexiiRiscv/Debug/index.html index 4a46418..b6c47e9 100644 --- a/master/VexiiRiscv/Debug/index.html +++ b/master/VexiiRiscv/Debug/index.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Execute/custom.html b/master/VexiiRiscv/Execute/custom.html index 2611434..4d1bd88 100644 --- a/master/VexiiRiscv/Execute/custom.html +++ b/master/VexiiRiscv/Execute/custom.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Execute/fpu.html b/master/VexiiRiscv/Execute/fpu.html index 698f69a..0c2bf2c 100644 --- a/master/VexiiRiscv/Execute/fpu.html +++ b/master/VexiiRiscv/Execute/fpu.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Execute/index.html b/master/VexiiRiscv/Execute/index.html index c5df48a..05db6d5 100644 --- a/master/VexiiRiscv/Execute/index.html +++ b/master/VexiiRiscv/Execute/index.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Execute/introduction.html b/master/VexiiRiscv/Execute/introduction.html index dab7b0a..6fa3831 100644 --- a/master/VexiiRiscv/Execute/introduction.html +++ b/master/VexiiRiscv/Execute/introduction.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Execute/lsu.html b/master/VexiiRiscv/Execute/lsu.html index 2c8d98c..cc913b7 100644 --- a/master/VexiiRiscv/Execute/lsu.html +++ b/master/VexiiRiscv/Execute/lsu.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Execute/plugins.html b/master/VexiiRiscv/Execute/plugins.html index 69490e0..625ac6b 100644 --- a/master/VexiiRiscv/Execute/plugins.html +++ b/master/VexiiRiscv/Execute/plugins.html @@ -78,8 +78,8 @@- Version: master git~d07b8dd 2024-09-08 + Version: master git~d7fa741 2024-09-10
diff --git a/master/VexiiRiscv/Fetch/index.html b/master/VexiiRiscv/Fetch/index.html index 4cdb881..08f431c 100644 --- a/master/VexiiRiscv/Fetch/index.html +++ b/master/VexiiRiscv/Fetch/index.html @@ -78,8 +78,8 @@The goal of the fetch pipeline is to provide the CPU with a stream of words in which the instructions to execute are presents. +So more precisely, the fetch pipeline doesn’t realy have the notion of instruction, but instead, just provide memory aligned chunks of memory block (ex 64 bits). +Those chunks of memory (word) will later be handled by the “AlignerPlugin” to extract the instruction to be executed (and also handle the decompression in the case of RVC).
+Here is an example of fetch architecture with an instruction cache, branch predictor aswell as a prefetcher.
+A few plugins operate in the fetch stage :
FetchPipelinePlugin
Allow out of order memory bus responses (for maximal compatibility)
Always generate aligned memory accesses
Note that in order to get goo performance on FPGA, you may want to set it with the following config in order to relax timings :
+forkAt = 1
joinAt = 2
See more in the Branch prediction chapter
+This plugin implement most of the branch prediction logic. +See more in the Branch prediction chapter
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 :
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 @@More documentation about it in :
+- 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 @@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
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.
-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.
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)