VRoom! blog - Floating Point 2

Introduction

Work has slowed, we’ve not been getting a lot of time to work on FP …. this is an update as we move from one part of the FP unit to the next.

New Stuff

Most of the work in the past couple of months has been a rewrite of the multiplier to add fused multiply-add to the FP ALU - in the end this involved pulling the whole thing apart and a major rewrite, this is now done.

At the same time we added 16-bit floating point all the way through the FP unit (and decode/load/store/etc).

Finally in order to test fused mul-add and FP16 we upgraded our stand-alone FP multiplier/adder test infrastructure and found far better sources for test vectors - and in the process found lots of wonderfully annoying corner cases - which is where most of the time has been spent over the past few months. Our FP test vectors are now many gigabytes in size and too big to fit in git, they’re easier to just regenerate - they all ran clean for the first time last night which is why we’re checking everything in today - when we’re done we’ll run something 100 times larger.

Still To Do

We know how handle exceptions, the way RISC-V manages them works very well with our commit model, but there’s still a bunch of work to do there.

We also have a small number of instructions still to implement - basically divide and sqrt, they will be next.

Finally we’re using our own testing for the moment, once we’re done with the above we’ll pull in the more public verification tests and run them before we declare we’re finished with FP.

Next time: more FPU stuff - divide/sqrt