3.3.6.1.1. Machine Status Register (mstatus)
3.3.6.1.2. Machine Trap-Vector Base-Address Register (mtvec)
3.3.6.1.3. Machine Interrupt Register (mip and mie)
3.3.6.1.4. Machine Exception Program Counter Register (mepc)
3.3.6.1.5. Machine Cause Register (mcause)
3.3.6.1.6. Machine Trap Value Register (mtval)
4.3.1. General-Purpose Register File
4.3.2. Shadow Register
4.3.3. Arithmetic Logic Unit
4.3.4. Multipy and Divide Units
4.3.5. Floating-Point Unit
4.3.6. Custom Instruction
4.3.7. Instruction Cycles
4.3.8. Reset and Debug Signals
4.3.9. Control and Status Registers
4.3.10. Trap Controller (CLINT)
4.3.11. Trap Controller (CLIC)
4.3.12. Memory and I/O Organization
4.3.13. RISC-V based Debug Module
4.3.14. Error Correction Code (ECC)
4.3.15. Branch Prediction
4.3.16. Lockstep Module
4.3.10.1.1. Machine Status Register (mstatus)
4.3.10.1.2. Machine Trap-Vector Base-Address Register (mtvec)
4.3.10.1.3. Machine Interrupt Register (mip and mie)
4.3.10.1.4. Machine Exception Program Counter Register (mepc)
4.3.10.1.5. Machine Cause Register (mcause)
4.3.10.1.6. Machine Trap Value Register (mtval)
4.3.10.1.7. Machine Second Trap Value Register (mtval2)
4.3.11.1.3.1. Machine Trap-handler Vector Table base address Register (mtvt)
4.3.11.1.3.2. Machine Next Interrupt Handler Address and Interrupt Enable Register (mnxti)
4.3.11.1.3.3. Machine Interrupt Status Register (mintstatus)
4.3.11.1.3.4. Machine Interrupt-Level Threshold Register (mintthresh)
4.3.11.1.3.5. Machine Scratch Swap for Interrupt-Level Register (mscratchcswl)
3.3.9.4. Single-bit & Double-bit ECC Error Injection
The Nios® V processor supports ECC error injection to introduce errors into memory protected by ECC intentionally. This is crucial to test the processor's ability to detect and correct those errors during reliability testing or fault tolerance verification in safety-critical applications.
The processor implements ECC error injection using a custom processor CSR – ECC Error Injection CSR. To inject an ECC error, write a unique encoding into the ECC Error Injection CSR. To prevent the hardware from continuing to inject the ECC error, write a zero to the Injection Enable bit field to turn off the ECC error injection globally.
Bit Field | ||||||||||
31 | 30 | 29 | 28 | 27 | ... | 4 | 3 | 2 | 1 | 0 |
Injection Enable | Active ECC Error Injection |
Target Memory | ECC Type | Active ECC Error Injection bit field (Decimal value) |
---|---|---|
General Purpose Register (GPR) | Correctable | 0 |
Uncorrectable | 1 |
Example to inject an Uncorrectable GPR ECC error:
- Write a decimal value of 1 into the Active ECC Error Injection field.
- Start the injection by asserting Injection Enable as “1”.
- Observe that the cpu_ecc_status is 2’b11 and cpu_ecc_source is 4’b1.
- Since this is an uncorrectable double-bit ECC error,
- The processor stalls if Single-bit & Double-bit ECC Error Exception Code is absent.
- The processor services it as an exception and jumps to the trap handler address (defined in mtvec register) if Single-bit & Double-bit ECC Error Exception Code is present.
Altera provides an error injection API for you to inject an ECC error into the processor. Refer to Nios® V Processor Software Developers Handbook – ECC Handling chapter for more information.