74 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| == Introduction
 | |
| 
 | |
| Hazard3 is a configurable 3-stage RISC-V processor, implementing:
 | |
| 
 | |
| * `RV32I`: 32-bit base instruction set
 | |
| * `M`: integer multiply/divide/modulo
 | |
| * `A`: atomic memory operations, with AHB5 global exclusives
 | |
| * `C`: compressed instructions
 | |
| * `Zicsr`: CSR access
 | |
| * `Zba`: address generation
 | |
| * `Zbb`: basic bit manipulation
 | |
| * `Zbc`: carry-less multiplication
 | |
| * `Zbs`: single-bit manipulation
 | |
| * `Zbkb`: basic bit manipulation for scalar cryptography
 | |
| * Debug, Machine and User privilege/execution modes
 | |
| * Privileged instructions `ECALL`, `EBREAK`, `MRET` and `WFI`
 | |
| * External debug support
 | |
| * Instruction address trigger unit (hardware breakpoints)
 | |
| 
 | |
| === Architectural Overview
 | |
| 
 | |
| ==== Pipe Stages
 | |
| 
 | |
| The three stages are:
 | |
| 
 | |
| * `F`: Fetch
 | |
| ** Contains the data phase for instruction fetch
 | |
| ** Contains the instruction prefetch buffer
 | |
| ** Predecodes register numbers `rs1`/`rs2`, for faster register file read and register bypass
 | |
| * `X`: Execute
 | |
| ** Decode and execute instructions
 | |
| ** Drive the address phase for load/store/AMO
 | |
| ** Generate jump/branch addresses
 | |
| * `M`: Memory
 | |
| ** Contains the data phase for load/store/AMO
 | |
| ** Register writeback is at the end of stage `M`
 | |
| ** Generate exception addresses
 | |
| 
 | |
| The instruction fetch address phase is best thought of as residing in stage `X`. The 2-cycle feedback loop between jump/branch decode into address issue in stage `X`, and the fetch data phase in stage `F`, is what defines Hazard3's jump/branch performance.
 | |
| 
 | |
| ==== Bus Interfaces
 | |
| 
 | |
| Hazard3 implements either one or two AHB5 bus master ports. The single-port configuration is used when ease of integration is a priority, since it supports simpler bus topologies. The dual-port configuration adds a dedicated port for instruction fetch, which improves both the maximum frequency and the clock-for-clock performance.
 | |
| 
 | |
| Hazard3 uses AHB5 specifically, rather than older versions of the AHB standard, because of its support for its global exclusives. This is a bus feature that allows a processor to perform an ordered read-modify-write sequence with a guarantee that no other processor has written to the same address range in between. Hazard3 uses this to implement multiprocessor support for the A (atomics) extension.
 | |
| 
 | |
| ==== Multiply/Divide
 | |
| 
 | |
| For minimal M-extension support, Hazard3 instantiates a sequential multiply/divide circuit (restoring divide, naive repeated-addition multiply). Instructions stall in stage `X` until the multiply/divide completes. Optionally, the circuit can be unrolled by a small factor to produce multiple bits ber clock -- 2 or 4 is achievable in practice.
 | |
| 
 | |
| A single-cycle multiplier can be instantiated, retiring either to stage 3 or stage 2 (configurable). By default only 32-bit `mul` is supported, which is by far the most common of the four multiply instructions.
 | |
| 
 | |
| === List of RISC-V Specifications
 | |
| 
 | |
| These are links to the ratified versions of the base instruction set and extensions implemented by Hazard3.
 | |
| 
 | |
| [%autowidth.stretch, options="header"]
 | |
| |===
 | |
| | Extension         | Specification
 | |
| | `RV32I` v2.1      | https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf[Unprivileged ISA 20191213]
 | |
| | `M` v2.0          | https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf[Unprivileged ISA 20191213]
 | |
| | `A` v2.1          | https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf[Unprivileged ISA 20191213]
 | |
| | `C` v2.0          | https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf[Unprivileged ISA 20191213]
 | |
| | `Zicsr` v2.0      | https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf[Unprivileged ISA 20191213]
 | |
| | `Zifencei` v2.0   | https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf[Unprivileged ISA 20191213]
 | |
| | `Zba` v1.0.0      | https://github.com/riscv/riscv-bitmanip/releases/download/1.0.0/bitmanip-1.0.0-38-g865e7a7.pdf[Bit Manipulation ISA extensions 20210628]
 | |
| | `Zbb` v1.0.0      | https://github.com/riscv/riscv-bitmanip/releases/download/1.0.0/bitmanip-1.0.0-38-g865e7a7.pdf[Bit Manipulation ISA extensions 20210628]
 | |
| | `Zbc` v1.0.0      | https://github.com/riscv/riscv-bitmanip/releases/download/1.0.0/bitmanip-1.0.0-38-g865e7a7.pdf[Bit Manipulation ISA extensions 20210628]
 | |
| | `Zbs` v1.0.0      | https://github.com/riscv/riscv-bitmanip/releases/download/1.0.0/bitmanip-1.0.0-38-g865e7a7.pdf[Bit Manipulation ISA extensions 20210628]
 | |
| | `Zbkb` v1.0.1     | https://github.com/riscv/riscv-crypto/releases/download/v1.0.1-scalar/riscv-crypto-spec-scalar-v1.0.1.pdf[Scalar Cryptography ISA extensions 20220218]
 | |
| | Machine ISA v1.12 | https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf[Privileged Architecture 20211203]
 | |
| | Debug v0.13.2     | https://riscv.org/wp-content/uploads/2019/03/riscv-debug-release.pdf[RISC-V External Debug Support 20190322]
 | |
| |===
 |