verification platform open source risc-v processor

27
RISC-V Summit 2019 Tao Liu, Richard Ho, Udi Jonnalagadda Open Source RISC-V Processor Verification Plaorm

Upload: others

Post on 01-Dec-2021

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Verification Platform Open Source RISC-V Processor

RISC-V Summit 2019

Tao Liu, Richard Ho, Udi Jonnalagadda

Open Source RISC-V Processor Verification Platform

Page 2: Verification Platform Open Source RISC-V Processor

● RISCV-DV: Open source RISC-V instruction generator

● YAML based end-to-end verification flow

● Case study : ibex core verification

● Roadmap

Agenda

Page 3: Verification Platform Open Source RISC-V Processor

Confidential & ProprietaryGoogle Cloud Platform 3

RISCV-DVSV/UVM based open source RISC-V instruction generatorhttps://github.com/google/riscv-dv

Page 4: Verification Platform Open Source RISC-V Processor

Page tables

RISCV-DV Generate a complete random RISC-V assembly program for processor verification

RISCV-DV

PT 1PT 0 PT 2

PT 3PT 4

Random instructions

Data page 0

Data page n

….

Stack section

Data and stack sectionsTrap handlers

Page 5: Verification Platform Open Source RISC-V Processor

RISCV-DV new features

Initial release @01/2019

ISA: RV32IMC, RV64IMCM/S/U privileged modeVirtual address translationRegression suiteSimulator: vcs, incisiveISS: spikeSimple simulation flow

New features

+ ISA: F/D/A extensions+ Debug mode support+ Functional coverage model+ Hint/illegal instruction testing+ Handshake mechanism+ Vectored interrupt handling+ Bare program mode+ Simulator: Questa, Metrics+ ISS: ovpsim, whisper, sail-riscv+ YAML based end-to-end flow+ Improve performance+ New regression suite...

Page 6: Verification Platform Open Source RISC-V Processor

RISCV-DV new features

Illegal/HINT instruction support

HINT

ILLEGAL

HINTIllegal instruction handler

Type of illegal instructions:Reserved opcodeUnsupported instructionCSR access to unsupported CSROperation in the wrong privileged mode...

Configurable memory regions

Section mem_0

Section mem_1

Section mem_2

link

mem_0

mem_1

mem_2

Use cases:Access various internal memoriesPMP verificationVirtual address translation verification

Page 7: Verification Platform Open Source RISC-V Processor

Debug mode support

ebreak

ebreak

Normal program

Externaldebug request

dpc checkrandomize dcsr

save GPR...

ebreak

dret

Debug ROM

...

...mret

ebreak handler

...Restore GPR

Debug mode test scenarios

> ebreak with dcsr.ebreakx enable/disable> Enter debug mode through external debug request> Access non debug mode CSR in debug mode> ebreak in debug ROM> Exception in debug ROM> Single step debug mode> ….

? How to check the processor’s behavior if ISS cannot be put to debug mode the same time as RTL design?

Page 8: Verification Platform Open Source RISC-V Processor

Handshake mechanism

Handshake packet definition

cmddata

24 bits 8 bits

CORE_STATUS : 0TEST_RESULT: 1WRITE_GPR : 2WRITE_CSR : 3

data

data

Variable length data packets

Testbench Normal program Debug ROM

CORE_STATUS: IN_DEBUG_MODE

debug request

check WRITE_CSR: dpc

WRITE_CSR: dcsr

dret

Use cases:Debug mode testingInterrupt testingMemory access fault testingSelf-checked tests...

Page 9: Verification Platform Open Source RISC-V Processor

Functional coverage flow

ISS logISS logISS logspike log

ISS logISS logISS logovpsim log

ISS logISS logISS logwhisper log

log2csv

log2csv

log2csv

ISS logISS logISS logTrace CSV

RISC-V ISASV functional

coverage model

Independent of test generation flow

Fast coverage closure without RTL sim. No RTL tracer needed

Flexible to support different ISS

Page 10: Verification Platform Open Source RISC-V Processor

Functional coverage model

● Cover all possible operands of each instruction● Hazard conditions● Corner cases like overflow, underflow, divide by zero● Aligned/unaligned load/store● Positive/negative immediate value● Forward/backward branches, branch hit history● Hint instruction● Illegal instruction● All opcode● Access to all implemented privileged CSR● Exception and interrupt

Page 11: Verification Platform Open Source RISC-V Processor

Generator performance improvement

test_0, 100 iterations

Average test generation time (s)

35s

7s

test_1, 10 iterations

test_2, 5 iterations

Test_n, x iterations

test_0, batch 1, 20 iterations

test_0, batch 2, 20 iterations

test_0, batch 3, 20 iterations

test_0, batch 4, 20 iterations

test_0, batch 5, 20 iterations… ...

Run large regression in parallel with small batches

Page 12: Verification Platform Open Source RISC-V Processor

Confidential & ProprietaryGoogle Cloud Platform 12

YAML based end-to-end verification flowAn ecosystem for RISC-V processor verification

Page 13: Verification Platform Open Source RISC-V Processor

YAML based end-to-end verification flow

RISCV-DV source code

simulator.yaml

Compile generator

Generate RISC-V

assembly tests

testlist.yaml

RISC-V compiler

(gcc, llvm)

ISS sim

iss.yaml

Assembly testAssembly testAssembly testAssembly test

testtestRISC-V ELF

simulator.yaml

RTL sim

log2csv

log2csv

log

log

csv

csv

compare

Add new RTL simulator, ISS, test to the flow simply by modifying the

YAML configure file

Page 14: Verification Platform Open Source RISC-V Processor

YAML based end-to-end verification flow

- iss: spike path_var: SPIKE_PATH cmd: > <path_var>/spike --isa=<variant> -l <elf> ...

- iss: ovpsim path_var: OVPSIM_PATH cmd: > <path_var>/riscvOVPsim.exe --controlfile <cfg_path>/riscvOVPsim.ic …

- iss: whisper path_var: WHISPER_ISS cmd: > <path_var> <elf> --log --xlen <xlen> --isa <variant>

- import: <riscv_dv_root>/yaml/base_testlist.yaml

- test: riscv_machine_mode_rand_test

description: >

Machine mode random instruction test

iterations: 2 gen_test: riscv_instr_base_test

gen_opts: >

+instr_cnt=10000

+num_of_sub_program=5

+boot_mode=m

rtl_test: core_base_test

...

ISS.yaml testlist.yaml

Page 15: Verification Platform Open Source RISC-V Processor

YAML based end-to-end verification flow

# Run the generator with specific RTL simulator python3 run.py --simulator vcs

# Run the generator with two ISS and cross compare the result python3 run.py --iss ovpsim,spike

# Run the generator with RV64IMC variant python3 run.py --target rv64imc

# Run a test with 10 iterations in verbose mode python3 run.py --test_name riscv_rand_instr_test -i 10 -v

Page 16: Verification Platform Open Source RISC-V Processor

An ecosystem for RISC-V processor verification

RTL simulator ISS

SPIKE

Sail-RISCV

Pre-defined targets

RV32I

RV32IMC

RV64IMC

RV64GC

...

Page 17: Verification Platform Open Source RISC-V Processor

Case study: Ibex core verification

Ibex features

RV32IMC + Debug mode + User mode + PMP + ….

Source code: https://github.com/lowRISC/ibex/tree/master/dv/uvm

Page 18: Verification Platform Open Source RISC-V Processor

Case study : Ibex core verification

Categories of found bugs

Page 19: Verification Platform Open Source RISC-V Processor

Roadmap

Page 20: Verification Platform Open Source RISC-V Processor

Complete RISC-V verification platform

Complete ISA support

Improve test library for supported ISA extensions.Vector extension Bitmanip extension

Functional coverage model

Extend the current model to

support more ISA extensions,

privileged spec coverage etc.

Reference testbench

UVM environment framework

Test/sequence infrastructure

Interface agent library

Predefined targets for open

source RISC-V processors

Page 21: Verification Platform Open Source RISC-V Processor

Machine Learning for Verification Research Platform

RL AgentISS sim

testlist.yaml

Instruction generator

Coverage model

EnvironmentAction

State/Reward

Improve the generator controllability

Enhance coverage model to provide better differentiation of coverage results

Provide standard API to interact with ML models

Benchmark platform for different ML algorithms

Page 22: Verification Platform Open Source RISC-V Processor

Unified configuration

riscv-config

Instruction generator ISS Compliance

testCoverage

model ...

A single configuration format for all flows

Page 23: Verification Platform Open Source RISC-V Processor

Backup Slides

Page 24: Verification Platform Open Source RISC-V Processor

Generator flow

Generate program header

Privileged mode setup

Page table randomization

Initialization routine

Generate main/sub programs

Branch target assignment

Generate data/stack section

Generate page tables

Generate intr/trap handler

Test completion section

Call stack randomization

Apply directed instructions

Page 25: Verification Platform Open Source RISC-V Processor

Benchmark flow

Pulpino RI5CY:4 stages, RV32-IMC, DSP extensionPulpino Ariane :6-stage, RV64-IMC, single issue, in-order, support M/S/U privileged levelsMerlin:Open Source RV32I[C] CPU

Ariane core architecture

Processor candidates

Benchmark metrics

Bug hunting capability, test coverageFlow integration effort, performance

ISS simulator

Spike

Page 26: Verification Platform Open Source RISC-V Processor

Cache line access racing

Bugs found

LoadStoreLoadLoad

SSTATUS

MSTATUS

mxr ...

mxr ...

wr rd

Issu

e

LSU

ALU

...

Multiplier

Fence

PT 1

PT 0 PT 2

PT 3

PT 4

Load Branch Add ... Mult

privileged CSR access FENCE operation failure

page fault handling Incorrect branch execution

MULHSU

ALU corner case bug

Page 27: Verification Platform Open Source RISC-V Processor

Handshake packet format

0IN_DEBUG_MODE CORE_STATUS

1TEST_PASS TEST_RESULT

2MSTATUS

0x0000_1234WRITE_GPR: MSTATUS