Skip to main content

Configuration Schema

v0.1
Auto-generated

This page is generated from config_schema.json by the schema doc generator. To update this page, edit the schema file and run bin/chore gen schema-docs.

A configuration represents RISC-V architectural choices - ranging from complete design specifications to requirement sets to unconstrained baselines.

See also: Configurations Overview for a narrative introduction with examples and use cases.

Configurations come in three forms:

  • Fully configured: Concrete implementations with all extensions and parameters explicitly specified. These represent actual processor implementations where every architectural detail is known. Each extension must specify an exact version (e.g., 2.1.0 or 2.1). Used for generating implementations, documentation, and test suites for specific hardware.

  • Partially configured: Profiles or configurable IP that define mandatory, optional, and prohibited extensions using version constraints (e.g., >= 2.0). These specify requirements that multiple implementations can satisfy. Can restrict whether additional extensions beyond those listed are allowed. Used for RISC-V compliance profiles, configurable IP offerings (a class of implementations a vendor may offer), and platform requirements.

  • Unconfigured: Special case representing the entire RISC-V specification without any implementation choices. Used to model the complete RISC-V architecture space before any configuration decisions are made.

The variant is selected by the type field. Fields common to all variants: name, description, arch_overlay. The params field is available on fully configured and partially configured variants.

Note: Schema validation checks structural correctness only. A schema-valid file can still be semantically invalid - for example, referencing an extension version that does not exist in the database, or omitting a parameter that is required by the implemented extensions.

Quick Start​

Minimal Fully Configured:

"$schema": config_schema.json#
kind: architecture configuration
type: fully configured
name: MyProcessor
description: A minimal 64-bit RISC-V processor
params:
MXLEN: 64
implemented_extensions:
- name: I
version: '2.1'
- name: Sm
version: '1.12'

Minimal Partially Configured:

"$schema": config_schema.json#
kind: architecture configuration
type: partially configured
name: MyProfile
description: A minimal profile requiring base integer instructions
mandatory_extensions:
- name: I
version: ">= 2.1"

Minimal Unconfigured:

"$schema": config_schema.json#
kind: architecture configuration
type: unconfigured
name: generic
description: The complete RISC-V specification with no implementation choices

Variants​

This schema accepts one of the following variants, distinguished by the type field:

fully configured​

PropertyTypeRequiredDescription
$schemastring (const: config_schema.json#)βœ“Schema reference - must be config_schema.json#
kindstring (const: architecture configuration)βœ“Document type identifier - must be architecture configuration
typestring (const: fully configured)βœ“Configuration specificity level - fully configured means all extensions and parameters are explicitly specified
namestringβœ“Name of the configuration
descriptionstringβœ“Human-readable description of this configuration (AsciiDoc format)
paramsobjectβœ“Architecture parameters that define implementation choices (e.g., MXLEN: 64, privilege modes, physical address width, etc.). Parameter names and valid values are defined by the parameter data files in spec/std/isa/param/.
implemented_extensionsArray<{name, version}> ↓ schemaβœ“Extensions implemented by this architecture ↓ example
arch_overlaystringOptional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or an absolute or relative path to an overlay directory
implemented_extensions item schema
PropertyTypeRequiredDescription
namestringβœ“Extension name
versionstringβœ“Exact version in MAJOR[.MINOR[.PATCH]] format (e.g., 2.1.0, 2.1, 2)
implemented_extensions example
- name: I
version: 2.1.0
- name: M
version: 2.0.0
- name: Zicsr
version: 2.0.0

Tooling field

$source is an optional field set automatically by UDB tooling to record the file path this object was loaded from. You do not need to set it manually.

partially configured​

PropertyTypeRequiredDescription
$schemastring (const: config_schema.json#)βœ“Schema reference - must be config_schema.json#
kindstring (const: architecture configuration)βœ“Document type identifier - must be architecture configuration
typestring (const: partially configured)βœ“Configuration specificity level - partially configured means some extensions/parameters are specified as requirements while others are left open
namestringβœ“Name of the configuration
descriptionstringβœ“Human-readable description of this configuration (AsciiDoc format)
mandatory_extensionsArray<{name, version}> ↓ schemaβœ“Extensions mandatory in this architecture
paramsobjectArchitecture parameters that constrain compliant implementations. The entire params key may be omitted if no parameter constraints are needed. Parameter names and valid values are defined by the parameter data files in spec/std/isa/param/.
arch_overlaystringOptional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or an absolute or relative path to an overlay directory
non_mandatory_extensionsArray<{name, version}> ↓ schemaOptional extensions with special significance in this architecture. For configurable IP, these are optionally supported extensions. For profiles, these are profile-optional extensions.
prohibited_extensionsArray<{name, version}> ↓ schemaExtensions explicitly prohibited in this architecture. Does not need to include extensions that are excluded because of a conflict-by-definition with a mandatory extension, as those will be calculated automatically
additional_extensionsbooleanWhether a compliant instance may implement extensions beyond those listed in mandatory_extensions/non_mandatory_extensions. Defaults to true if omitted.
requirementsA condition (YAML structure or IDL function). See the conditions reference for details.Additional condition that must be satisfied for this configuration to be valid (e.g., a parameter constraint or extension dependency).
mandatory_extensions item schema
PropertyTypeRequiredDescription
namestringβœ“Extension name (e.g., I, M, Zicsr, Smstateen)
versionstring | Array<string>Version requirement or list of requirements (e.g., &gt;= 2.0 or ['&gt;= 2.0', '&lt; 3.0'])
non_mandatory_extensions item schema
PropertyTypeRequiredDescription
namestringβœ“Extension name (e.g., I, M, Zicsr, Smstateen)
versionstring | Array<string>Version requirement or list of requirements (e.g., &gt;= 2.0 or ['&gt;= 2.0', '&lt; 3.0'])
prohibited_extensions item schema
PropertyTypeRequiredDescription
namestringβœ“Extension name (e.g., I, M, Zicsr, Smstateen)
versionstring | Array<string>Version requirement or list of requirements (e.g., &gt;= 2.0 or ['&gt;= 2.0', '&lt; 3.0'])
Tooling field

$source is an optional field set automatically by UDB tooling to record the file path this object was loaded from. You do not need to set it manually.

unconfigured​

PropertyTypeRequiredDescription
$schemastring (const: config_schema.json#)βœ“Schema reference - must be config_schema.json#
kindstring (const: architecture configuration)βœ“Document type identifier - must be architecture configuration
typestring (const: unconfigured)βœ“Configuration specificity level - unconfigured represents the entire RISC-V specification with no implementation choices
namestringβœ“Name of the configuration
descriptionstringβœ“Human-readable description of this configuration (AsciiDoc format)
arch_overlaystringOptional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or an absolute or relative path to an overlay directory
Tooling field

$source is an optional field set automatically by UDB tooling to record the file path this object was loaded from. You do not need to set it manually.

Examples​

Full Configuration Example (RV64)
"$schema": config_schema.json#
kind: architecture configuration
type: fully configured
name: RV64GC
description: 64-bit RISC-V with General-purpose and Compressed extensions
params:
XLEN: 64
MXLEN: 64
SXLEN: 64
UXLEN: 64
implemented_extensions:
- name: I
version: '2.1'
- name: M
version: '2.0'
- name: A
version: '2.1'
- name: F
version: '2.2'
- name: D
version: '2.2'
- name: C
version: '2.0'
- name: Zicsr
version: '2.0'
- name: Zifencei
version: '2.0'

Partial Configuration Example (Profile)
"$schema": config_schema.json#
kind: architecture configuration
type: partially configured
name: RVA22U64
description: RISC-V Application Profile for 64-bit Unix-like systems
mandatory_extensions:
- name: I
version: ">= 2.1"
- name: M
version: ">= 2.0"
- name: A
version: ">= 2.1"
- name: F
version: ">= 2.2"
- name: D
version: ">= 2.2"
- name: C
version: ">= 2.0"
- name: Zicsr
version: ">= 2.0"
non_mandatory_extensions:
- name: V
version: ">= 1.0"
params:
XLEN: 64
additional_extensions: false

Unconfigured Example
"$schema": config_schema.json#
kind: architecture configuration
type: unconfigured
name: generic
description: Generic unconfigured RISC-V architecture

Schema Information​

PropertyValue
Versionv0.1
JSON Schema VersionDraft 07