Skip to content
STIMSMITH

BlackParrot Core

Tool WIKI v2 · 5/29/2026

BlackParrot Core is a processor core used as a target in the ProcessorFuzz evaluation. The provided evidence reports several BlackParrot bugs involving RISC-V ISA-visible behavior, including floating-point/CSR issues and an x0 zero-register pipeline bypass issue, and notes that DIFUZZRTL instrumentation of BlackParrot failed because of limited SystemVerilog-to-FIRRTL conversion support.

Overview

BlackParrot Core is a processor core evaluated in the ProcessorFuzz study. In the provided evidence, BlackParrot appears as a target for processor fuzzing and as the core associated with multiple discovered bugs involving RISC-V architectural behavior, floating-point state, and control and status registers (CSRs).

The ProcessorFuzz paper also reports an evaluation limitation for BlackParrot: DIFUZZRTL instrumentation failed for BlackParrot because of limited support for SystemVerilog-to-FIRRTL conversion. As a result, the study used DIFUZZRTL as a comparison point but could not instrument BlackParrot in the same way as designs supported by that conversion flow.

Reported ProcessorFuzz findings

The provided ProcessorFuzz evidence lists the following BlackParrot issues:

Bug Reported BlackParrot behavior Status in evidence
1 Non-boxed single-precision floating-point values are not interpreted as NaNs. Confirmed (#971)
2 Read-after-write dependencies on fcsr.fflags are not satisfied. Fixed (#994)
3 When mstatus.FS is not set and fcsr is written, FS is unexpectedly updated. Fixed (#969)
6 The RISC-V zero register x0 can be read as a non-zero value when a preceding division instruction that writes to x0 is still in the pipeline. Described in the paper; status not shown in the provided excerpt

x0 pipeline-bypass issue

For Bug 6, the paper explains that the RISC-V ISA requires writes to the zero register x0 to be ignored. ProcessorFuzz detected a BlackParrot case where x0 was later read as non-zero if a preceding division instruction writing to x0 was still in the pipeline. The authors attribute the discrepancy to bypassing the division result to a following instruction even when the division destination register is x0.

ProcessorFuzz was able to expose this issue because the relevant test input caused a CSR transition in fflags due to division by zero. The paper notes a potential security consequence: malware could obfuscate behavior by jumping to an address computed by an instruction that uses x0.

Verification context

The BlackParrot findings in the provided evidence are framed around ISA-visible processor state: floating-point NaN-boxing behavior, fcsr.fflags, mstatus.FS, and the RISC-V architectural zero register. ProcessorFuzz uses CSR-transition coverage to identify interesting test inputs, while the comparison discussion notes that DIFUZZRTL-style instrumentation of BlackParrot was blocked by SystemVerilog-to-FIRRTL conversion limitations.

CITATIONS

6 sources
6 citations
[1] BlackParrot was a processor core evaluated in the ProcessorFuzz study, and the provided evidence reports multiple BlackParrot bugs. ProcessorFuzz: Processor Fuzzing with Control and
[2] The evidence lists BlackParrot Bugs 1-3: non-boxed single-precision floating-point values not interpreted as NaNs, read-after-write dependencies on fcsr.fflags not satisfied, and mstatus.FS unexpectedly updated when fcsr is written while FS is not set, with statuses Confirmed #971, Fixed #994, and Fixed #969. ProcessorFuzz: Processor Fuzzing with Control and
[3] Bug 6 concerns BlackParrot reading x0 as non-zero when a preceding division instruction writing to x0 is still in the pipeline, due to bypassing the division result even when the destination register is x0. ProcessorFuzz: Processor Fuzzing with Control and
[4] ProcessorFuzz exposed the x0 issue because the test input caused an fflags CSR transition due to division by zero, and the paper describes a possible malware-obfuscation consequence involving jumps computed using x0. ProcessorFuzz: Processor Fuzzing with Control and
[5] DIFUZZRTL instrumentation of BlackParrot failed because of limited support for SystemVerilog-to-FIRRTL conversion. ProcessorFuzz: Processor Fuzzing with Control and
[6] The ProcessorFuzz evaluation used time-to-exposure as the elapsed time from the start of fuzzing until a bug is exposed and ran fuzzing instances with a 48-hour limit. ProcessorFuzz: Processor Fuzzing with Control and

VERSION HISTORY

v2 · 5/29/2026 · gpt-5.5 (current)
v1 · 5/28/2026 · gpt-5.5