with many thanks and congratulations to Cesar for getting the first basic Cray-style Vector Loop operational in HDL, on top of OpenPOWER v3.0B and passing its first unit tests.<div><br></div><div><span style="font-size:15px"><a href="https://git.libre-soc.org/?p=soc.git;a=commitdiff;h=97136d71397f420479d601dcb80f0df4abf73d22">https://git.libre-soc.org/?p=soc.git;a=commitdiff;h=97136d71397f420479d601dcb80f0df4abf73d22</a></span><br></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">the Simulator ISACaller was functional three weeks ago and has been used to verify the HDL&#39;s functionality through co-simulation:</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px"><a href="https://git.libre-soc.org/?p=soc.git;a=commitdiff;h=9078b2935beb4ba89dcd2af91bb5e3a0bcffbe71">https://git.libre-soc.org/?p=soc.git;a=commitdiff;h=9078b2935beb4ba89dcd2af91bb5e3a0bcffbe71</a></span><br></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">the unit tests for the ADD pipeline will build up progressively over time to give operational confidence (extended later with Formal Correctness Proofs).  other pipelines will have their own extensive tests as well.</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px"><a href="https://git.libre-soc.org/?p=soc.git;a=blob;f=src/soc/fu/alu/test/svp64_cases.py;hb=HEAD">https://git.libre-soc.org/?p=soc.git;a=blob;f=src/soc/fu/alu/test/svp64_cases.py;hb=HEAD</a></span><br></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">the unit tests which are deliberately well-commented serve as examples to demonstrate the SVP64 Vectorisation principle.  however the hardware unit tests themselves rely on the python-based Simulator, ISACaller, which is co-simulated (above) and so iw not immediately obvious what is occurring. for more explicit unit tests, these are more appropriate:</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px"><a href="https://git.libre-soc.org/?p=soc.git;a=blob;f=src/soc/decoder/isa/test_caller_svp64.py;hb=HEAD">https://git.libre-soc.org/?p=soc.git;a=blob;f=src/soc/decoder/isa/test_caller_svp64.py;hb=HEAD</a></span><br></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">above is &quot;sv.add.&quot; for example which enables Vectorised Rc=1, producing a *Vector* of CR fields that are explicitly verified in the test.</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">this allow</span>s, (unlike VSX which only creates CR6) inherently far greater parallelism (64 computations per clock cycle per issue) without Condition Register Hazards occurring.</div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">with the ISACaller Simulator having rigorous explicit checking of output, this engenders confidence in co-simulation to simply extract and compare the entire contents of all regfiles from both ISACaller and HDL, after each step.</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">an identical co-simulation process is planned to be applied for qemu, power-gem5 and Microwatt when adding SVP64.  qemu co-simulation of OpenPOWER v3.0B is *already* performed (and has found obscure bugs in qemu!)</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">our next steps are to add:</span></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">* LD/ST and other pipeline unit tests</span></div><div><span style="font-size:15px">* Single and Twin Predication</span></div><div><span style="font-size:15px">* Polymorphic Element Width overrides (uint8/16/32, FP16, BF16)</span></div><div>* Saturation, Mapreduce, and other advanced modes</div><div><br></div><div>medium term:</div><div><br></div><div>* Scalar v3.0B Bitmanipulation extensions suitable for cryptographic, Audio and Video and other uses (Vectorisation of these now comes &quot;for free&quot;!)</div><div>* Scalar v3.0B IEEE754 FP Transcendentals (SIN, COS, ATAN2, LOG1P) which again become inherently and automatically Vectorised</div><div>* 3D Texturisation opcodes suitable for Vulkan Khronos Group Compliance</div><div><br></div><div>longer term:</div><div><br></div><div>* SV-REMAP provides 2D and 3D Matrix register remapping</div><div>* Instruction Prefix remapping similar to hardware compression</div><div><br></div><div>A particularly fascinating and powerful combination of the above involves the planned general-purpose Galois Field multiply operation in the bitmanipulation extension, with REMAP Matrix applied, from which Rijndael (AES) &quot;MixColumns&quot; functionality emerges *as a single instruction* without requiring that to be added as an explicit opcode as would normally be done in any other ISA.</div><div><br></div><div>all of this is achieved without modifying the Scalar OpenPOWER v3.0B ISA in any way, without requiring (eliminating and superceding) any of the SIMD (VSX) ISA, merely adding a new &quot;Vector Context&quot; inside v3.1 style EXT01 64 bit prefixes.</div><div><br></div><div>we are tracking the implementation progress here, including gcc, power-gem5 and would love to see Microwatt as well, as time permits:</div><div><br></div><div><span style="font-size:15px"><a href="https://libre-soc.org/openpower/sv/implementation">https://libre-soc.org/openpower/sv/implementation</a></span><br></div><div><span style="font-size:15px"><br></span></div><div><span style="font-size:15px">l.</span></div><div><span style="font-size:15px"><br></span></div><br><br>-- <br>---<br>crowd-funded eco-conscious hardware: <a href="https://www.crowdsupply.com/eoma68" target="_blank">https://www.crowdsupply.com/eoma68</a><br><br>