diff --git a/master/.buildinfo b/master/.buildinfo index 4202515..60a1c94 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: 6ed152ca14bbff66d5bd76982b97c0dc +config: 3e6a844c07a3927961e313365b2069b5 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/master/.doctrees/VexiiRiscv/BranchPrediction/index.doctree b/master/.doctrees/VexiiRiscv/BranchPrediction/index.doctree index 19401d6..93baaa2 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 ca5ee46..f1744c5 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 d0f63c7..92b620e 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 f19f4d8..bf8825e 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 bc92834..2400433 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 563909e..b62ec73 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 9b9199d..c45f592 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 51da92d..073c2d2 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 2f61d1e..f562849 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 96a52a0..4cee719 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 a7cdf9b..fd9346b 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 ad183b6..c8dcfe3 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 5aa8e5f..c637618 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 363d55a..76e0705 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 d790741..7101251 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 a88bae4..57f131e 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 7c95a0a..da696bc 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 64bafe6..35942bd 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 b41ba14..7fc23bc 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 e611c0b..9295765 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 edb765b..36d1cb3 100644 --- a/master/VexiiRiscv/BranchPrediction/index.html +++ b/master/VexiiRiscv/BranchPrediction/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -254,7 +254,7 @@

    Branch Prediction
  • During fetch, a BTB, GShare, RAS memory is used to provide an early branch prediction (BtbPlugin / GSharePlugin)

  • In Decode, the DecodePredictionPlugin will ensure that no “none jump/branch instruction”” predicted as a jump/branch continues down the pipeline.

  • -
  • In Execute, the prediction made is checked and eventualy corrected. Also a stream of data is generated to feed the BTB / GShare memories with good data to learn.

  • +
  • In Execute, the prediction made is checked and eventually corrected. Also a stream of data is generated to feed the BTB / GShare memories with good data to learn.

  • Here is a diagram of the whole architecture :

    ../../_images/branch_prediction.png @@ -266,11 +266,11 @@

    BtbPlugin @@ -326,7 +326,7 @@

    LearnPlugin

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Debug/index.html b/master/VexiiRiscv/Debug/index.html index e36466a..4a46418 100644 --- a/master/VexiiRiscv/Debug/index.html +++ b/master/VexiiRiscv/Debug/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -286,7 +286,7 @@

    Debug diff --git a/master/VexiiRiscv/Debug/jtag.html b/master/VexiiRiscv/Debug/jtag.html index f2956a3..6c2b943 100644 --- a/master/VexiiRiscv/Debug/jtag.html +++ b/master/VexiiRiscv/Debug/jtag.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -289,7 +289,7 @@

    JTAG diff --git a/master/VexiiRiscv/Decode/index.html b/master/VexiiRiscv/Decode/index.html index 47e780f..1bcae08 100644 --- a/master/VexiiRiscv/Decode/index.html +++ b/master/VexiiRiscv/Decode/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -265,17 +265,17 @@

    DecodePipelinePlugin

    AlignerPlugin

    -

    Decode the words froms the fetch pipeline into aligned instructions in the decode pipeline. Its complexity mostly come from the necessity to support having RVC [and BTB], mostly by adding additional cases to handle.

    +

    Decode the words from the fetch pipeline into aligned instructions in the decode pipeline. Its complexity mostly come from the necessity to support having RVC [and BTB], mostly by adding additional cases to handle.

    1. RVC allows 32 bits instruction to be unaligned, meaning they can cross between 2 fetched words, so it need to have some internal buffer / states to work.

    2. -
    3. The BTB may have predicted (falsly) a jump instruction where there is none, which may cut the fetch of an 32 bits instruction in the middle.

    4. +
    5. The BTB may have predicted (falsely) a jump instruction where there is none, which may cut the fetch of an 32 bits instruction in the middle.

    The AlignerPlugin is designed as following :

    • Has a internal fetch word buffer in oder to support 32 bits instruction with RVC

    • First it scan at every possible instruction position, ex : RVC with 64 bits fetch words => 2x64/16 scanners. Extracting the instruction length, presence of all the instruction data (slices) and necessity to redo the fetch because of a bad BTB prediction.

    • Then it has one extractor per decoding lane. They will check the scanner for the firsts valid instructions.

    • -
    • Then each extractor is feeded into the decoder pipeline.

    • +
    • Then each extractor is fed into the decoder pipeline.

    ../../_images/aligner.png
    @@ -284,7 +284,7 @@

    DecoderPlugin
  • Decode instruction

  • -
  • Generate ilegal instruction exception

  • +
  • Generate illegal instruction exception

  • Generate “interrupt” instruction

  • @@ -301,13 +301,13 @@

    DispatchPlugin
  • A execute lane represent a path toward which an instruction can be executed.

  • A execute lane can have one or many layers, which can be used to implement things as early ALU / late ALU

  • Each layer will have static a scheduling priority

  • -

    The DispatchPlugin doesn’t require lanes or layers to be symetric in any way.

    +

    The DispatchPlugin doesn’t require lanes or layers to be symmetric in any way.

    @@ -340,7 +340,7 @@

    DispatchPlugin

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Execute/custom.html b/master/VexiiRiscv/Execute/custom.html index 79b5212..2611434 100644 --- a/master/VexiiRiscv/Execute/custom.html +++ b/master/VexiiRiscv/Execute/custom.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -281,69 +281,69 @@

    Plugin implementationimport vexiiriscv.compat.MultiPortWritesSymplifier import vexiiriscv.riscv.{IntRegFile, RS1, RS2, Riscv} -//This plugin example will add a new instruction named SIMD_ADD which do the following : +// This plugin example will add a new instruction named SIMD_ADD which do the following : // -//RD : Regfile Destination, RS : Regfile Source -//RD( 7 downto 0) = RS1( 7 downto 0) + RS2( 7 downto 0) -//RD(16 downto 8) = RS1(16 downto 8) + RS2(16 downto 8) -//RD(23 downto 16) = RS1(23 downto 16) + RS2(23 downto 16) -//RD(31 downto 24) = RS1(31 downto 24) + RS2(31 downto 24) +// RD : Regfile Destination, RS : Regfile Source +// RD( 7 downto 0) = RS1( 7 downto 0) + RS2( 7 downto 0) +// RD(16 downto 8) = RS1(16 downto 8) + RS2(16 downto 8) +// RD(23 downto 16) = RS1(23 downto 16) + RS2(23 downto 16) +// RD(31 downto 24) = RS1(31 downto 24) + RS2(31 downto 24) // -//Instruction encoding : -//0000000----------000-----0001011 <- Custom0 func3=0 func7=0 -// |RS2||RS1| |RD | +// Instruction encoding : +// 0000000----------000-----0001011 <- Custom0 func3=0 func7=0 +// |RS2||RS1| |RD | // -//Note : RS1, RS2, RD positions follow the RISC-V spec and are common for all instruction of the ISA +// Note : RS1, RS2, RD positions follow the RISC-V spec and are common for all instruction of the ISA object SimdAddPlugin{ - //Define the instruction type and encoding that we wll use + // Define the instruction type and encoding that we wll use val ADD4 = IntRegFile.TypeR(M"0000000----------000-----0001011") } -//ExecutionUnitElementSimple is a plugin base class which will integrate itself in a execute lane layer -//It provide quite a few utilities to ease the implementation of custom instruction. -//Here we will implement a plugin which provide SIMD add on the register file. -class SimdAddPlugin(val layer : LaneLayer) extends ExecutionUnitElementSimple(layer) { +// ExecutionUnitElementSimple is a plugin base class which will integrate itself in a execute lane layer +// It provide quite a few utilities to ease the implementation of custom instruction. +// Here we will implement a plugin which provide SIMD add on the register file. +class SimdAddPlugin(val layer : LaneLayer) extends ExecutionUnitElementSimple(layer) { - //Here we create an elaboration thread. The Logic class is provided by ExecutionUnitElementSimple to provide functionalities + // Here we create an elaboration thread. The Logic class is provided by ExecutionUnitElementSimple to provide functionalities val logic = during setup new Logic { - //Here we could have lock the elaboration of some other plugins (ex CSR), but here we don't need any of that - //as all is already sorted out in the Logic base class. - //So we just wait for the build phase + // Here we could have lock the elaboration of some other plugins (ex CSR), but here we don't need any of that + // as all is already sorted out in the Logic base class. + // So we just wait for the build phase awaitBuild() - //Let's assume we only support RV32 for now + // Let's assume we only support RV32 for now assert(Riscv.XLEN.get == 32) - //Let's get the hardware interface that we will use to provide the result of our custom instruction + // Let's get the hardware interface that we will use to provide the result of our custom instruction val wb = newWriteback(ifp, 0) - //Specify that the current plugin will implement the ADD4 instruction + // Specify that the current plugin will implement the ADD4 instruction val add4 = add(SimdAddPlugin.ADD4).spec - //We need to specify on which stage we start using the register file values + // We need to specify on which stage we start using the register file values add4.addRsSpec(RS1, executeAt = 0) add4.addRsSpec(RS2, executeAt = 0) - //Now that we are done specifying everything about the instructions, we can release the Logic.uopRetainer - //This will allow a few other plugins to continue their elaboration (ex : decoder, dispatcher, ...) + // Now that we are done specifying everything about the instructions, we can release the Logic.uopRetainer + // This will allow a few other plugins to continue their elaboration (ex : decoder, dispatcher, ...) uopRetainer.release() - //Let's define some logic in the execute lane [0] + // Let's define some logic in the execute lane [0] val process = new el.Execute(id = 0) { - //Get the RISC-V RS1/RS2 values from the register file + // Get the RISC-V RS1/RS2 values from the register file val rs1 = el(IntRegFile, RS1).asUInt val rs2 = el(IntRegFile, RS2).asUInt - //Do some computation + // Do some computation val rd = UInt(32 bits) rd( 7 downto 0) := rs1( 7 downto 0) + rs2( 7 downto 0) rd(16 downto 8) := rs1(16 downto 8) + rs2(16 downto 8) rd(23 downto 16) := rs1(23 downto 16) + rs2(23 downto 16) rd(31 downto 24) := rs1(31 downto 24) + rs2(31 downto 24) - //Provide the computation value for the writeback + // Provide the computation value for the writeback wb.valid := SEL wb.payload := rd.asBits } @@ -391,16 +391,16 @@

    Software test#include "../../driver/sim_asm.h" #include "../../driver/custom_asm.h" - //Test 1 + // Test 1 li x1, 0x01234567 li x2, 0x01FF01FF - opcode_R(CUSTOM0, 0x0, 0x00, x3, x1, x2) //x3 = ADD4(x1, x2) + opcode_R(CUSTOM0, 0x0, 0x00, x3, x1, x2) // x3 = ADD4(x1, x2) - //Print result value + // Print result value li x4, PUT_HEX sw x3, 0(x4) - //Check result + // Check result li x5, 0x02224666 bne x3, x5, fail @@ -423,7 +423,7 @@

    Simulation
  • Bottom of https://github.com/SpinalHDL/VexiiRiscv/blob/dev/src/main/scala/vexiiriscv/execute/SimdAddPlugin.scala

  • -
    object VexiiSimdAddSim extends App{
    +
    object VexiiSimdAddSim extends App {
       val param = new ParamSimple()
       val testOpt = new TestOptions()
     
    @@ -495,7 +495,7 @@ 

    Conclusion

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Execute/fpu.html b/master/VexiiRiscv/Execute/fpu.html index ca97dbe..698f69a 100644 --- a/master/VexiiRiscv/Execute/fpu.html +++ b/master/VexiiRiscv/Execute/fpu.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -251,24 +251,24 @@

    FPU

    -

    The VexiiRiscv FPU has the following caracteristics :

    +

    The VexiiRiscv FPU has the following characteristics :

    • By default, It is fully compliant with the IEEE-754 spec (subnormal, rounding, exception flags, ..)

    • There is options to reduce its footprint at the cost of compliance (reduced FMA accuracy, and drop subnormal support)

    • It isn’t a single chunky module, instead it is composed of many plugins in the same ways than the rest of the CPU.

    • -
    • It is thightly coupled to the execute pipeline

    • +
    • It is tightly coupled to the execute pipeline

    • All operations can be issued at the rate of 1 instruction per cycle, excepted for FDIV/FSQRT/Subnormals

    • By default, it is deeply pipelined to help with FPGA timings (10 stages FMA)

    • -
    • Multiple hardware ressources are sharred between multiple instruction (ex rounding, adder (FMA+FADD)

    • -
    • The VexiiRiscv scheduler take care to not schedule an instruction which would use the same ressource than an older instruction

    • +
    • Multiple hardware resources are shared between multiple instruction (ex rounding, adder (FMA+FADD)

    • +
    • The VexiiRiscv scheduler take care to not schedule an instruction which would use the same resource than an older instruction

    • FDIV and FMUL reuse the integer pipeline DIV and MUL hardware

    • Subnormal numbers are handled by recoding/encoding them on operands and results of math instructions. This will trigger some little state machines which will halt the CPU a few cycles (2-3 cycles)

    Plugins architecture

    -

    There is a few fundation plugins that compose the FPU :

    +

    There is a few foundation plugins that compose the FPU :

      -
    • FpuUnpackPlugin : Will decode the RS1/2/3 operands (isZero, isInfinit, ..) aswell as recode them in a floating point format which simplify subnormals into regular floating point values

    • +
    • FpuUnpackPlugin : Will decode the RS1/2/3 operands (isZero, isInfinity, ..) as well as recode them in a floating point format which simplify subnormals into regular floating point values

    • FpuPackPlugin : Will apply rounding to floating point results, recode them into IEEE-754 (including subnormal) before sending those to the WriteBackPlugin(float)

    • WriteBackPlugin(float) : Allows to write values back to the register file (it is the same implementation as the WriteBackPlugin(integer)

    • FpuFlagsWriteback ; Allows instruction to set FPU exception flags

    • @@ -277,13 +277,17 @@

      Plugins architecture

      Area / Timings options

      -

      To improve the FPU area and timings (especialy on FPGA), there is currently two main options implemented.

      +

      To improve the FPU area and timings (especially on FPGA), there is currently two main options implemented.

      The first option is to reduce the FMA (Float Multiply Add instruction A*B+C) accuracy. -The reason is that the mantissa result of the multiply operation (for 64 bits float) is 2x(52+1)=106 bits, then we need to take those bits and implement the floating point adder against the third opperand. So, instead of having to do a 52 bits + 52 bits floating point adder, we need to do a 106 bits + 52 bits floating point adder, which is quite heavy, increase the timings and latencies while being (very likely) overkilled. +The reason is that the mantissa result of the multiply operation (for 64 bits float) is 2x(52+1)=106 bits, +then we need to take those bits and implement the floating point adder against the third operand. +So, instead of having to do a 52 bits + 52 bits floating point adder, +we need to do a 106 bits + 52 bits floating point adder, which is quite heavy, +increase the timings and latencies while being (very likely) overkilled. So this option throw away about half of the multiplication mantissa result.

      The second option is to disable subnormal support, and instead consider those value as normal floating point numbers. This reduce the area by not having to handle subnormals (it removes big barrels shifters) -, aswell as improving timings. +, as well as improving timings. The down side is that the floating point value range is slightly reduced, and if the user provide floating point constants which are subnormals number, they will be considered as 2^exp_subnormal numbers.

      @@ -293,11 +297,11 @@

      Area / Timings options

      Optimized software

      If you used the default FPU configuration (deeply pipelined), and you want to achieve a high FPU bandwidth, -your software need to be carefull about dependencies between instruction. +your software need to be careful about dependencies between instruction. For instance, a FMA instruction will have around 10 cycle latency before providing its results, -so if you want for instance to multipliy 1000 values against some constants +so if you want for instance to multiply 1000 values against some constants and accumulate the results together, you will need to accumulate things using multiple accumulators and then, only at the end, aggregate the accumulators together.

      -

      So think about code pipelining. GCC will not necessarly do a got job about it, +

      So think about code pipelining. GCC will not necessary do a got job about it, as it may assume assume that the FPU has a much lower latency, or just optimize for code size.

    @@ -331,7 +335,7 @@

    Optimized software

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Execute/index.html b/master/VexiiRiscv/Execute/index.html index d916dd2..c5df48a 100644 --- a/master/VexiiRiscv/Execute/index.html +++ b/master/VexiiRiscv/Execute/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -309,7 +309,7 @@

    Execute

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Execute/introduction.html b/master/VexiiRiscv/Execute/introduction.html index c29540f..dab7b0a 100644 --- a/master/VexiiRiscv/Execute/introduction.html +++ b/master/VexiiRiscv/Execute/introduction.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -264,9 +264,9 @@

    Introduction

    The main thing about it is that for every uop implementation in the pipeline, there is the elaboration time information for :

    diff --git a/master/VexiiRiscv/Execute/lsu.html b/master/VexiiRiscv/Execute/lsu.html index 5b52fa6..2c8d98c 100644 --- a/master/VexiiRiscv/Execute/lsu.html +++ b/master/VexiiRiscv/Execute/lsu.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -251,7 +251,7 @@

    Load Store Unit (LSU)

    -

    VexiiRiscv has 2 implementions of LSU :

    +

    VexiiRiscv has 2 implementations of LSU :

    • LsuCachelessPlugin for microcontrollers, which doesn’t implement any cache

    • LsuPlugin / LsuL1Plugin which can work together to implement load and store through an L1 cache

    • @@ -261,7 +261,7 @@

      Without L1

    @@ -273,7 +273,7 @@

    With L1 -

    This LSU implementation is partitionned between 2 plugins :

    +

    This LSU implementation is partitioned between 2 plugins :

    The LsuPlugin :

    SrcPlugin

    @@ -281,7 +281,7 @@

    RsUnsignedPlugin

    IntFormatPlugin

    -

    Alows plugins to write integer values back to the register file through a optional sign extender. +

    Allows plugins to write integer values back to the register file through a optional sign extender. It uses WriteBackPlugin as value backend.

    @@ -318,7 +318,7 @@

    MulPlugin
  • Implement multiplication operation using partial multiplications and then summing their result

  • Done over multiple stage

  • -
  • Can optionaly extends the last stage for one cycle in order to buffer the MULH bits

  • +
  • Can optionally extends the last stage for one cycle in order to buffer the MULH bits

  • @@ -334,7 +334,7 @@

    LsuCachelessPlugin
  • Implement load / store through a cacheless memory bus

  • Will fork the cmd as soon as fork stage is valid (with no flush)

  • -
  • Handle backpresure by using a little fifo on the response data

  • +
  • Handle backpressure by using a little fifo on the response data

  • @@ -352,7 +352,7 @@

    CsrAccessPlugin

    • Implement a shared on chip ram

    • -
    • Provide an API which allows to staticaly allocate space on it

    • +
    • Provide an API which allows to statically allocate space on it

    • Provide an API to create read / write ports on it

    • Used by various plugins to store the CSR contents in a FPGA efficient way

    @@ -412,7 +412,7 @@

    EnvPlugin

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Fetch/index.html b/master/VexiiRiscv/Fetch/index.html index 43dec55..4cdb881 100644 --- a/master/VexiiRiscv/Fetch/index.html +++ b/master/VexiiRiscv/Fetch/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -302,7 +302,7 @@

    PrefetcherNextLinePlugin

    Note, for the best results, the FetchL1Plugin need to have 2 hardware refill slots instead of 1 (default).

    @@ -357,7 +357,7 @@

    HistoryPlugin

    - Version: master git~867f372 2024-09-05 + Version: master git~d07b8dd 2024-09-08

    diff --git a/master/VexiiRiscv/Framework/index.html b/master/VexiiRiscv/Framework/index.html index e2e40a0..8288444 100644 --- a/master/VexiiRiscv/Framework/index.html +++ b/master/VexiiRiscv/Framework/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -266,7 +266,7 @@

    Dependencies

    Scala / SpinalHDL

    -

    This combination alows to goes way behond what regular HDL alows in terms of hardware description capabilities. +

    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 :

    @@ -381,14 +381,14 @@

    Run a simulation

    Synthesis / Inferation

    VexiiRiscv is designed in a way which should make it easy to deploy on all FPGA. -including the ones without support for asyncronous memory read +including the ones without support for asynchronous memory read (LUT ram / distributed ram / MLAB). The one exception is the MMU, but if configured to only read the memory on cycle 0 -(no tag hit), then the synthesis tool should be capable of inferring that asyncronus -read into a syncronous one (RAM block, work on Efinix FPGA)

    +(no tag hit), then the synthesis tool should be capable of inferring that asynchronous +read into a synchronous one (RAM block, work on Efinix FPGA)

    By default SpinalHDL will generate memories in a Verilog/VHDL inferable way. Otherwise, for ASIC, you likely want to enable the automatic memory blackboxing, -which will instead replace all memories defined in the design by a consistant blackbox +which will instead replace all memories defined in the design by a consistent blackbox module/component, the user having then to provide those blackbox implementation.

    Currently all memories used are “simple dual port ram”. While this is the best for FPGA usages, on ASIC maybe some of those could be redesigned to be single port rams instead (todo).

    @@ -424,7 +424,7 @@

    Synthesis / Inferation diff --git a/master/VexiiRiscv/Introduction/index.html b/master/VexiiRiscv/Introduction/index.html index f3680e3..3e6326e 100644 --- a/master/VexiiRiscv/Introduction/index.html +++ b/master/VexiiRiscv/Introduction/index.html @@ -87,7 +87,7 @@
  • Scala / SpinalHDL
  • Plugin
  • Database
  • @@ -259,7 +259,7 @@

    Introduction

    Other doc / media / talks

    -

    Here is a list of links to ressources which present or document VexiiRiscv :

    +

    Here is a list of links to resources which present or document VexiiRiscv :