324.70K
Category: programmingprogramming

RISC-V Processor with “F” Extension

1.

RISC-V Processor with “F”
Extension
Kathy Camenzind and Miguel Gomez

2.

Outline
● Background
● Implementation Strategy



Combinational
Multicycle
4-stage pipeline
● Microarchitecture
● Testing


Connectal
Compliance tests
● Results
● Notable bugs & lessons learned

3.

Background
● RISC-V “F” extension


Single-precision floating point numbers
Includes encodings for +- Infinity, quiet/signaling NaN
● Instructions include:







FLW/FSW
FMV (between integer and FP registers)
FDIV/ADD/MUL/SQRT/MADD/…
FMIN/MAX, FEQ/FLT/FLE
FSGNJ (sign injection)
FCVT
FCLASS

4.

Overview of Required Modifications
● Based on Lab 5 Processor
● CSR instructions


Basic CSR reads and swaps
FCSR (rounding mode)
● Extending the Decode and Execute stages to handle new instructions
● Integrating Bluespec’s built in FloatingPoint library
● Adding tests that use floating point instructions

5.

Implementation Strategy
● Combinational


Executes floating-point operations in single cycle
Very long critical path
● Multicycle


Executes floating-point operations in multiple cycles
One instruction passes through processor at a time
● 4-Stage Pipeline with Bypassing


Executes floating-point operations in multiple cycles
Pipelining based on ThreeStageBypass from lab 5, with added writeback stage
● 4-Stage Superscalar Pipeline with Bypassing


Can execute multiple instructions at a time in different functional units
Preserves commit order within integer operations and floating point operations

6.

4-Stage Pipeline: Microarchitecture

7.

Superscalar Execute: Microarchitecture
Control Hazards:

Branch instructions resolve
in one cycle in Execute
Data Hazards

RAW: Still handled by
Scoreboard

WAW: Completion buffer
reorders same-RF
writebacks

8.

Synthesis Results
Combinational
Multicycle
FourStageBypass
Superscalar
Area (μm2)
~190,000
~187,000
~368,000
~397,000
Critical Path (ps)
~10,200
1,147
2,018
1,656

9.

Performance Results
Multicycle
(Floating Point)
Four Stage
Bypass (Floating
Point)
Four Stage
Superscalar
Bypass (Floating
Point)
towers
.1033
.1069
0.1069
median
.2768
.2872
0.2873
Multiply
.4763
.3838
0.3838
Qsort
.3817
n/a
Vvadd
.2229
.2241
n/a
0.2242

10.

Running on FPGA

11.

Notable Bugs
● Functionally incorrect functions in FloatingPoint.bsv
● Compliance tests that were non-compliant :)

Mostly centered around NaN operations
● Debugging



Implemented showInst for new instructions
Printed which stages were executing which instructions
Printing the current state of the completion buffer

12.

Conclusion / Things Learned
● Efficient pipelining is difficult
● Fixing edge cases should be a second priority, completing the bigger picture
is first
● Simulations can sometimes be unreliable
● Libraries can be incorrect
English     Русский Rules