A formal and executable RISC-V ISA specification written in F# with a purely functional style, designed for clarity and reference.
riscv-fs is a formal and executable specification of the RISC-V Instruction Set Architecture (ISA) written in F#. It provides a precise, readable definition of RISC-V instruction semantics and can function as a sequential simulator to run RISC-V binaries. The project aims to clarify ISA details for developers, educators, and verification engineers.
Computer architects, hardware verification engineers, educators teaching computer architecture, and developers working with RISC-V who need a clear, executable reference for the ISA.
It offers a unique blend of formal specification and practical executability in a clean functional style, making RISC-V semantics accessible without requiring deep F# expertise, unlike many low-level or verification-focused alternatives.
F# RISC-V Instruction Set formal specification
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides a mathematically precise definition of RISC-V instruction semantics in executable F# code, serving as both a reference and a simulator, as highlighted in the README.
Uses an 'extremely elementary' F# implementation to enhance readability for audiences unfamiliar with F#, making the specification accessible without deep language expertise.
Supports Linux, Windows, and macOS via the .NET SDK, allowing execution of RISC-V ELF binaries through a command-line interface, as documented in the build instructions.
Includes unit tests and assembler test programs for validating instruction implementations, aiding in correctness verification and ongoing development.
The README lists key extensions like C, F, D, and privilege levels as 'under development,' limiting current usability for full RISC-V compliance.
Operates as a one-instruction-at-a-time sequential simulator, which is not optimized for speed or parallel execution, making it unsuitable for performance-critical applications.
Requires specific .NET SDK versions (2.2 or 3.0) that may be outdated or cumbersome to install, especially on non-Windows systems, adding setup complexity.