- OpenTitan
- Getting Started
- 1. Getting Started
- 2. Workflows
❱
- 2.1. Design Verification
- 2.2. Formal Verification
- 2.3. Building (and Testing) Software
- 2.4. Building Documentation
- 2.5. Using OpenOCD
- 3. Tools Setup
❱
- 3.1. FPGA Setup
- 3.2. Verilator Setup
- 3.3. Installing Vivado
- 4. Unofficial Guides
❱
- 4.1. RedHat/Fedora
- Hardware
- 5. Introduction
- 6. Top Earlgrey
❱
- 6.1. Datasheet
- 6.2. Design
- 6.3. Design Verification
❱
- 6.3.1. Chip Testplan
- 6.4. Analog Sensor Top
❱
- 6.4.1. Interfaces
- 6.5. Alert Handler
❱
- 6.5.1. Theory of Operation
- 6.5.2. Design Verification
❱
- 6.5.2.1. Testplan
- 6.5.3. Programmer's Guide
- 6.5.4. Interface and Registers
- 6.5.5. Device Interface Functions
- 6.5.6. Checklist
- 6.6. Interrupt Controller
❱
- 6.6.1. Theory of Operation
- 6.6.2. Design Verification
❱
- 6.6.2.1. Testplan
- 6.6.3. Programmer's Guide
- 6.6.4. Interface and Registers
- 6.6.5. Device Interface Functions
- 6.6.6. Checklist
- 6.7. Sensor Control
❱
- 6.7.1. Theory of Operation
- 6.7.2. Programmer's Guide
- 6.7.3. Hardware Interfaces
- 6.7.4. Registers
- 6.7.5. Device Interface Functions
- 6.7.6. Checklist
- 6.8. TL-UL Checklist
- 6.9. Pinmux Targets
❱
- 6.9.1. ASIC Target Pinout and Pinmux Connectivity
- 6.9.2. CW310 Target Pinout and Pinmux Connectivity
- 6.9.3. CW340 Target Pinout and Pinmux Connectivity
- 7. Top Darjeeling
❱
- 7.1. Datasheet
- 8. Cores
❱
- 8.1. Ibex RISC-V Core Wrapper
❱
- 8.1.1. Theory of Operation
- 8.1.2. Design Verification
- 8.1.3. Programmer's Guide
- 8.1.4. Hardware Interfaces
- 8.1.5. Registers
- 8.1.6. Checklist
- 8.2. OTBN
❱
- 8.2.1. Theory of Operation
- 8.2.2. Introduction to OTBN
- 8.2.3. Developing OTBN
- 8.2.4. ISA Guide
- 8.2.5. Design Verification
❱
- 8.2.5.1. Random Instruction Generator
❱
- 8.2.5.1.1. Internals
- 8.2.5.1.2. Configuration
- 8.2.5.2. memutil wrapper
- 8.2.5.3. OTBN Simulation Software
- 8.2.5.4. Tracer
- 8.2.5.5. Formal Masking Verification Using Alma
- 8.2.6. Functional Coverage
- 8.2.7. Programmer's Guide
- 8.2.8. Hardware Interfaces
- 8.2.9. Registers
- 8.2.10. Checklist
- 9. Hardware IP Blocks
❱
- 9.1. Analog to Digital Converter Control
❱
- 9.1.1. Theory of Operation
- 9.1.2. Design Verification
❱
- 9.1.2.1. Testplan
- 9.1.3. Programmer's Guide
- 9.1.4. Hardware Interfaces
- 9.1.5. Registers
- 9.1.6. Checklist
- 9.2. AES
❱
- 9.2.1. Theory of Operation
- 9.2.2. Design Verification
❱
- 9.2.2.1. Testplan
- 9.2.3. Programmer's Guide
- 9.2.4. Hardware Interfaces
- 9.2.5. Registers
- 9.2.6. Device Interface Functions
- 9.2.7. Checklist
- 9.3. AON Timer
❱
- 9.3.1. Theory of Operation
- 9.3.2. Design Verification
❱
- 9.3.2.1. Testplan
- 9.3.3. Programmer's Guide
- 9.3.4. Hardware Interfaces
- 9.3.5. Registers
- 9.3.6. Device Interface Functions
- 9.3.7. Checklist
- 9.4. Ascon
❱
- 9.4.1. Background
- 9.4.2. Theory of Operation
- 9.4.3. Programmer's Guide
- 9.4.4. Hardware Interfaces
- 9.4.5. Registers
- 9.4.6. Checklist
- 9.5. Clock Manager
❱
- 9.5.1. Theory of Operation
- 9.5.2. Design Verification
❱
- 9.5.2.1. Testplan
- 9.5.3. Programmer's Guide
- 9.5.4. Hardware Interfaces
- 9.5.5. Registers
- 9.5.6. Device Interface Functions
- 9.5.7. Checklist
- 9.6. CSRNG
❱
- 9.6.1. Theory of Operation
- 9.6.2. Design Verification
❱
- 9.6.2.1. Testplan
- 9.6.3. Programmer's Guide
- 9.6.4. Hardware Interfaces
- 9.6.5. Registers
- 9.6.6. Device Interface Functions
- 9.6.7. Checklist
- 9.7. EDN
❱
- 9.7.1. Theory of Operation
- 9.7.2. Design Verification
❱
- 9.7.2.1. Testplan
- 9.7.3. Programmer's Guide
- 9.7.4. Hardware Interfaces
- 9.7.5. Registers
- 9.7.6. Device Interface Functions
- 9.7.7. Checklist
- 9.8. Entropy Source
❱
- 9.8.1. Theory of Operation
- 9.8.2. Design Verification
❱
- 9.8.2.1. Testplan
- 9.8.3. Programmer's Guide
- 9.8.4. Hardware Interfaces
- 9.8.5. Registers
- 9.8.6. Device Interface Functions
- 9.8.7. Checklist
- 9.9. Flash Controller
❱
- 9.9.1. Theory of Operation
- 9.9.2. Design Verification
❱
- 9.9.2.1. Testplan
- 9.9.3. Programmer's Guide
- 9.9.4. Hardware Interfaces
- 9.9.5. Registers
- 9.9.6. Device Interface Functions
- 9.9.7. Checklist
- 9.10. GPIO
❱
- 9.10.1. Theory of Operation
- 9.10.2. Design Verification
❱
- 9.10.2.1. Testplan
- 9.10.3. Programmer's Guide
- 9.10.4. Hardware Interfaces
- 9.10.5. Registers
- 9.10.6. Device Interface Functions
- 9.10.7. Checklist
- 9.11. HMAC
❱
- 9.11.1. Theory of Operation
- 9.11.2. Design Verification
❱
- 9.11.2.1. Testplan
- 9.11.3. Programmer's Guide
- 9.11.4. Hardware Interfaces
- 9.11.5. Registers
- 9.11.6. Device Interface Functions
- 9.11.7. Checklist
- 9.12. I2C
❱
- 9.12.1. Theory of Operation
- 9.12.2. Design Verification
❱
- 9.12.2.1. Testplan
- 9.12.3. Programmer's Guide
- 9.12.4. Hardware Interfaces
- 9.12.5. Registers
- 9.12.6. Device Interface Functions
- 9.12.7. Checklist
- 9.13. Key Manager
❱
- 9.13.1. Theory of Operation
- 9.13.2. Design Verification
❱
- 9.13.2.1. Testplan
- 9.13.3. Programmer's Guide
- 9.13.4. Hardware Interfaces
- 9.13.5. Registers
- 9.13.6. Device Interface Functions
- 9.13.7. Checklist
- 9.14. Key Manager DPE
❱
- 9.14.1. Theory of Operation
- 9.14.2. Programmer's Guide
- 9.14.3. Interface and Registers
- 9.14.4. Checklist
- 9.15. KMAC
❱
- 9.15.1. Theory of Operation
- 9.15.2. Design Verification
❱
- 9.15.2.1. Testplan
- 9.15.3. Programmer's Guide
- 9.15.4. Hardware Interfaces
- 9.15.5. Registers
- 9.15.6. Device Interface Functions
- 9.15.7. Checklist
- 9.16. Life Cycle Controller
❱
- 9.16.1. Theory of Operation
- 9.16.2. Design Verification
❱
- 9.16.2.1. Testplan
- 9.16.3. Programmer's Guide
- 9.16.4. Hardware Interfaces
- 9.16.5. Registers
- 9.16.6. Device Interface Functions
- 9.16.7. Checklist
- 9.17. OTP Controller
❱
- 9.17.1. Theory of Operation
- 9.17.2. Design Verification
❱
- 9.17.2.1. Testplan
- 9.17.3. Programmer's Guide
- 9.17.4. Hardware Interfaces
- 9.17.5. Registers
- 9.17.6. Device Interface Functions
- 9.17.7. Checklist
- 9.18. Pattern Generator
❱
- 9.18.1. Theory of Operation
- 9.18.2. Design Verification
❱
- 9.18.2.1. Testplan
- 9.18.3. Programmer's Guide
- 9.18.4. Hardware Interfaces
- 9.18.5. Registers
- 9.18.6. Device Interface Functions
- 9.18.7. Checklist
- 9.19. Pinmux
❱
- 9.19.1. Theory of Operation
- 9.19.2. Design Verification
❱
- 9.19.2.1. Testplan
- 9.19.3. Programmer's Guide
- 9.19.4. Hardware Interfaces
- 9.19.5. Registers
- 9.19.6. Device Interface Functions
- 9.19.7. Checklist
- 9.20. Pulse Width Modulator
❱
- 9.20.1. Theory of Operation
- 9.20.2. Design Verification
❱
- 9.20.2.1. Testplan
- 9.20.3. Programmer's Guide
- 9.20.4. Hardware Interfaces
- 9.20.5. Registers
- 9.20.6. Device Interface Functions
- 9.20.7. Checklist
- 9.21. Power Management
❱
- 9.21.1. Theory of Operation
- 9.21.2. Design Verification
❱
- 9.21.2.1. Testplan
- 9.21.3. Programmer's Guide
- 9.21.4. Hardware Interfaces
- 9.21.5. Registers
- 9.21.6. Device Interface Functions
- 9.21.7. Checklist
- 9.22. ROM Control
❱
- 9.22.1. Theory of Operation
- 9.22.2. Design Verification
❱
- 9.22.2.1. Testplan
- 9.22.3. Programmer's Guide
- 9.22.4. Hardware Interfaces
- 9.22.5. Registers
- 9.22.6. Device Interface Functions
- 9.22.7. Checklist
- 9.23. Reset Manager
❱
- 9.23.1. Theory of Operation
- 9.23.2. Design Verification
❱
- 9.23.2.1. Testplan
- 9.23.3. Programmer's Guide
- 9.23.4. Hardware Interfaces
- 9.23.5. Registers
- 9.23.6. Device Interface Functions
- 9.23.7. Checklist
- 9.24. RISC-V Debug Manager
❱
- 9.24.1. Theory of Operation
- 9.24.2. Design Verification
❱
- 9.24.2.1. Testplan
- 9.24.3. Programmer's Guide
- 9.24.4. Hardware Interfaces
- 9.24.5. Registers
- 9.24.6. Checklist
- 9.25. SPI Device
❱
- 9.25.1. Theory of Operation
- 9.25.2. Design Verification
❱
- 9.25.2.1. Testplan
- 9.25.3. Programmer's Guide
- 9.25.4. Hardware Interfaces
- 9.25.5. Registers
- 9.25.6. Device Interface Functions
- 9.25.7. Checklist
- 9.26. SPI Host
❱
- 9.26.1. Theory of Operation
- 9.26.2. Design Verification
❱
- 9.26.2.1. Testplan
- 9.26.3. Programmer's Guide
- 9.26.4. Hardware Interfaces
- 9.26.5. Registers
- 9.26.6. Device Interface Functions
- 9.26.7. Checklist
- 9.27. SRAM Controller
❱
- 9.27.1. Theory of Operation
- 9.27.2. Design Verification
❱
- 9.27.2.1. Testplan
- 9.27.3. Programmer's Guide
- 9.27.4. Hardware Interfaces
- 9.27.5. Registers
- 9.27.6. Device Interface Functions
- 9.27.7. Checklist
- 9.28. System Reset Controller
❱
- 9.28.1. Theory of Operation
- 9.28.2. Design Verification
❱
- 9.28.2.1. Testplan
- 9.28.3. Hardware Interfaces
- 9.28.4. Registers
- 9.28.5. Device Interface Functions
- 9.28.6. Checklist
- 9.29. Timer
❱
- 9.29.1. Theory of Operation
- 9.29.2. Design Verification
❱
- 9.29.2.1. Testplan
- 9.29.3. Programmer's Guide
- 9.29.4. Hardware Interfaces
- 9.29.5. Registers
- 9.29.6. Device Interface Functions
- 9.29.7. Checklist
- 9.30. TL-UL Bus
❱
- 9.30.1. Design Verification
❱
- 9.30.1.1. Testplan
- 9.30.1.2. Protocol Checker
- 9.31. UART
❱
- 9.31.1. Theory of Operation
- 9.31.2. Design Verification
❱
- 9.31.2.1. Testplan
- 9.31.3. Programmer's Guide
- 9.31.4. Hardware Interfaces
- 9.31.5. Registers
- 9.31.6. Device Interface Functions
- 9.31.7. Checklist
- 9.32. USB 2.0
❱
- 9.32.1. Theory of Operation
- 9.32.2. Design Verification
❱
- 9.32.2.1. Testplan
- 9.32.3. Programmer's Guide
- 9.32.4. Suspending and Resuming
- 9.32.5. Hardware Interfaces
- 9.32.6. Registers
- 9.32.7. Device Interface Functions
- 9.32.8. Checklist
- 9.33. lowRISC Hardware Primitives
❱
- 9.33.1. Flash Wrapper
- 9.33.2. Keccak Permutation
- 9.33.3. Linear Feedback Shift Register
- 9.33.4. Packer
- 9.33.5. Packer FIFO
- 9.33.6. Present Scrambler
- 9.33.7. Prince Scrambler
- 9.33.8. SRAM Scrambler
- 9.33.9. Pseudo Random Number Generator
- 10. Common SystemVerilog and UVM Components
❱
- 10.1. ALERT_ESC Agent
- 10.2. Bus Params Package
- 10.3. Comportable IP Testbench Architecture
- 10.4. Common Interfaces
- 10.5. CSR Utils
- 10.6. CSRNG Agent
- 10.7. DV Library Classes
- 10.8. DV Utils
- 10.9. FLASH_PHY_PRIM Agent
- 10.10. I2C Agent
- 10.11. JTAG Agent
- 10.12. JTAG DMI Agent
- 10.13. JTAG RISCV Agent
- 10.14. KEY_SIDELOAD Agent
- 10.15. KMAC_APP Agent
- 10.16. Memory Backdoor Scoreboard
- 10.17. Memory Backdoor Utility
- 10.18. Memory Model
- 10.19. PATTGEN Agent
- 10.20. PUSH_PULL Agent
- 10.21. PWM Monitor
- 10.22. RNG Agent
- 10.23. Scoreboard
- 10.24. Simulation SRAM
- 10.25. SPI Agent
- 10.26. String Utils
- 10.27. Test Vectors
- 10.28. Tile Link Agent
- 10.29. UART Agent
- 10.30. USB20 Agent
- Software
- 11. Introduction
- 12. Build Software
- 13. Device Software
❱
- 13.1. Build & Test Rules
❱
- 13.1.1. FPGA Bitstreams
- 13.1.2. OTP Build and Test Infrastructure
- 13.2. Device Libraries
❱
- 13.2.1. DIF Library
❱
- 13.2.1.1. ADC Checklist
- 13.2.1.2. AES Checklist
- 13.2.1.3. Alert Handler Checklist
- 13.2.1.4. Always-On Timer Checklist
- 13.2.1.5. Clock Manager Checklist
- 13.2.1.6. CSRNG Checklist
- 13.2.1.7. EDN Checklist
- 13.2.1.8. Entropy Source Checklist
- 13.2.1.9. Flash Controller Checklist
- 13.2.1.10. GPIO Checklist
- 13.2.1.11. HMAC Checklist
- 13.2.1.12. I2C Checklist
- 13.2.1.13. Key Manager Checklist
- 13.2.1.14. KMAC Checklist
- 13.2.1.15. Lifecycle Checklist
- 13.2.1.16. OTBN Checklist
- 13.2.1.17. OTP Controller Checklist
- 13.2.1.18. Pattern Generator Checklist
- 13.2.1.19. Pin Multiplexer Checklist
- 13.2.1.20. PWM Checklist
- 13.2.1.21. Power Manager Checklist
- 13.2.1.22. ROM Checklist
- 13.2.1.23. Reset Manager Checklist
- 13.2.1.24. RV Core Ibex Checklist
- 13.2.1.25. PLIC Checklist
- 13.2.1.26. RV Timer Checklist
- 13.2.1.27. Sensor Controller Checklist
- 13.2.1.28. SPI Device Checklist
- 13.2.1.29. SPI Host Checklist
- 13.2.1.30. SRAM Controller Checklist
- 13.2.1.31. System Reset Controller Checklist
- 13.2.1.32. UART Checklist
- 13.2.1.33. USB Checklist
- 13.2.2. Top-Level Test Libraries
❱
- 13.2.2.1. On-Device Test Framework
- 13.2.3. OpenTitan Standard Library
❱
- 13.2.3.1. Freestanding C Headers
- 13.3. Silicon Creator Software
❱
- 13.3.1. Manufacturing Firmware
❱
- 13.3.1.1. Test Plan
- 13.3.2. ROM
❱
- 13.3.2.1. ROM Specification
- 13.3.2.2. Bootstrap
- 13.3.2.3. Memory Protection
- 13.3.2.4. E2E tests
- 13.3.2.5. Root Keys
- 13.3.2.6. Signature Verification
- 13.3.2.7. Test Plan
- 13.3.2.8. Signoff Test Plan
- 13.3.2.9. Shutdown Specification
- 13.3.3. ROM_EXT
❱
- 13.3.3.1. ROM_EXT for Silicon Validation
- 13.3.3.2. ROM_EXT Ownership Transfer
- 13.3.3.3. ROM_EXT Rescue Protocol
- 13.3.4. Manifest Format
- 13.3.5. Boot Log
- 13.4. Top-Level Tests
❱
- 13.4.1. Manufacturer Test Hooks
- 13.4.2. Cryptotest
- 13.5. Silicon Validation
❱
- 13.5.1. Developer Guide
- 14. Host Software
❱
- 14.1. OpenTitanLib
- 14.2. OpenTitanTool
- 14.3. OpenTitanSession
- 14.4. OpenTitan Certificate Generator
- 14.5. Hardware Security Module (HSM) tool
❱
- 14.5.1. Requirements
- 14.5.2. Signing Guide
- 14.6. TPM2 Test Server
- Tooling
- 15. Tools Overview
- 16. Design-Related Tooling
- 17. dvsim
❱
- 17.1. Design Document
- 17.2. Testplanner
- 17.3. Glossary
- 18. fpvgen: Initial FPV Testbench Generation
- 19. reggen & regtool: Register Generator
❱
- 19.1. Setup and use of regtool
- 20. ralgen: FuseSoC UVM RAL Generator
- 21. uvmdvgen: Initial Testbench Auto-generation
- 22. tlgen: Crossbar Generation
- 23. ipgen: Generate IP Blocks from IP Templates
- 24. topgen: Top Generator
- 25. vendor: Vendoring In Tool
- 26. i2csvg: Generate SVGs of I2C Commands
- Contributing
- 27. Contributing
❱
- 27.1. Detailed Contribution Guide
- 27.2. Directory Structure
- 27.3. Contributing to Documentation
❱
- 27.3.1. An Example IP Block's Documentation
- 27.4. Continuous Intergration
- 27.5. Top-Level Design and Targets
- 27.6. GitHub Notes
- 27.7. Bazel Notes
- 27.8. Using the Container
- 28. Contributing to Hardware
❱
- 28.1. Comportability
- 28.2. Hardware Design
- 28.3. Design Methodology
- 28.4. Vendoring in Hardware
- 28.5. Linting
- 28.6. Synthesis Flow
- 29. Contributing to Verification
❱
- 29.1. Verification Methodology
- 29.2. Security Countermeasure Verification Framework
- 29.3. Assertions
- 30. Contributing to Software
❱
- 30.1. Device Interface Functions
- 30.2. Writing and Building Software for OTBN
- 31. Style Guides
❱
- 31.1. HJSON
- 31.2. Python
- 31.3. C & C++
- 31.4. Markdown
- 31.5. RISC-V Assembly
- 31.6. OTBN Assembly
- 31.7. Guidance for Volatile
- 32. Developing on an FPGA
❱
- 32.1. Get a Board
- 32.2. FPGA Reference Manual
- 32.3. Debugging with an ILA
- Project Governance
- 33. Introduction
- 34. Committers
- 35. RFC Process
- 36. Generalized Priority Definitions
- 37. Generalized Project Milestone Definitions
- 38. OpenTitan Technical Committee
- 39. Hardware Development Stages
- 40. Signoff Checklist
- Security
- 41. Security
- 42. Cryptography Library
❱
- 42.1. API Documentation
- 42.2. Contributing
- 43. Implementation Guidelines
❱
- 43.1. Secure Hardware Design Guidelines
- 43.2. Reset vs. Non-Reset Flops
- 44. Logical Security Model
- 45. Security Model Specification
❱
- 45.1. Device Attestation
- 45.2. Device Life Cycle
- 45.3. Device Provisioning
- 45.4. Firmware Update
- 45.5. Identities and Root Keys
- 45.6. Ownership Transfer
- 45.7. Secure Boot
- 46. Lightweight Threat Model
- Use Cases
- 47. Use Cases
- 48. Platform Integrity Module
- 49. Trusted Platform Module
- 50. Universal 2nd-Factor Security Key
- Rust for C Developers
- 51. Rust for Embedded C Programmers
- Appendix
- 52. Glossary