Frigate is a comprehensive RISC-V System-on-Chip (SoC) platform designed for the chipIgnite MPW (Multi-Project Wafer) solution from ChipFoundry, featuring advanced machine learning acceleration capabilities. The SoC integrates the Hazard3 RISC-V CPU core with extensive analog/mixed-signal blocks, rich peripheral interfaces, and hardware-accelerated neural network processing.
Frigate is part of the chipIgnite ML program, providing a complete SoC solution optimized for edge AI and machine learning applications. The platform combines:
- RISC-V CPU: Hazard3 32-bit processor with debug support
- ML Acceleration: Hardware Conv2D accelerator for neural network inference
- Analog Processing: Comprehensive analog signal processing blocks
- Rich Peripherals: GPIO, UART, SPI, I2C, I2S, USB CDC, CAN, ADC, DAC, and more
- Memory System: Configurable SRAM, Flash XIP support, and external memory interfaces
- Hazard3 RISC-V CPU (RV32IMC)
- 32-bit RISC-V instruction set with M and C extensions
- JTAG Debug Module Interface (DMI) support
- Configurable extensions (ZBA, ZBB, ZBC, ZBS, ZBKB)
- Power management and clock gating support
- Memory: Configurable SRAM (default 32K words = 128KB)
- Bus Architecture: AHB-Lite for high-speed, APB for low-speed peripherals
- Conv2D Hardware Accelerator (mapped at
0x4900_0000)- 2D convolution operations with configurable kernel sizes
- ReLU activation support
- Max pooling operations
- Optimized for neural network inference workloads
- NNOM Library Integration
- Full neural network inference framework
- Support for CNN, RNN, and dense layers
- Quantized (int8) model support
- MFCC (Mel-frequency cepstral coefficients) for audio processing
- ML Workloads: Optimized for keyword spotting (KWS), image classification, and other edge AI applications
- ADCs: Dual 12-bit ADCs with configurable routing
- DACs: 16-bit sigma-delta DAC and 12-bit RDACs
- Operational Amplifiers: High gain-bandwidth and low-power op-amps
- Comparators: Precision and ultra-low-power comparators
- Instrumentation Amplifiers: Programmable gain amplifiers
- Analog Routing: Extensive switch matrix for signal routing
- GPIO: Multiple ports (A-I) with configurable modes
- Communication:
- 4x UART interfaces
- 2x SPI controllers
- 2x I2C controllers
- I2S audio interface
- USB CDC (Device)
- CAN controller (CTU CAN)
- Timing:
- 6x 32-bit timers
- Watchdog timer
- RISC-V timer
- Storage: QSPI Flash controller with XIP support
- DMA: Direct Memory Access controller
- Multiple clock sources:
- External clock (xclk)
- Internal RC oscillators (500kHz, 16MHz)
- High-speed crystal oscillator (HSXO)
- Low-speed crystal oscillator (32.768kHz)
- Flexible clock routing and gating
- Power-on-reset and external reset support
- Datasheet: See
docs/frigate_datasheet.pdffor complete hardware specifications - ChipIgnite Overview: See
docs/chipIgnite Frigate Overview (1).pdffor program details - Web Resources: chipIgnite ML Platform
frigate-os/
├── verilog/
│ ├── rtl/ # RTL source code
│ │ ├── frigate_soc.v # Main SoC integration
│ │ ├── frigate_core.v# Core wrapper
│ │ ├── hazard3/ # RISC-V CPU core
│ │ ├── ahbl_*/ # AHB bus infrastructure
│ │ └── ...
│ ├── gl/ # Gate-level netlists
│ ├── dv/ # Design verification
│ │ └── firmware/ # Firmware and APIs
│ │ ├── APIs/ # Peripheral driver APIs
│ │ │ ├── nnom/ # Neural network library
│ │ │ ├── conv2d.h # Conv2D accelerator API
│ │ │ └── ...
│ │ └── ...
│ └── vip/ # Verification IP
├── mag/ # Magic layout files
├── scripts/ # Build and configuration scripts
├── ip/ # IP dependencies
└── docs/ # Documentation
0x0000_0000-0x3FFF_FFFF: Flash XIP region0x4000_0000-0x4FFF_FFFF: AHB Bus 1 (peripherals)
0x4000_0000-0x400F_FFFF: APB0 Peripherals0x4000_0000: GPIO Port A0x4001_0000: GPIO Port B0x4002_0000: GPIO Port C0x4003_0000: GPIO Port D0x4004_0000: GPIO Port E0x4005_0000: GPIO Port F0x4006_0000: GPIO Port G0x4007_0000: GPIO Port H0x4008_0000: GPIO Port I0x4009_0000: I2S00x400A_0000: I2S10x400B_0000: ADC00x400C_0000: DAC00x400D_0000: RISC-V Timer
0x4200_0000-0x42FF_FFFF: APB1 Peripherals0x4200_0000: UART00x4201_0000: UART10x4202_0000: UART20x4203_0000: UART30x4204_0000: TMR00x4205_0000: TMR10x4206_0000: TMR20x4207_0000: TMR30x4208_0000: TMR40x4209_0000: TMR50x420A_0000: Watchdog Timer0x420B_0000: SPI00x420C_0000: SPI10x420D_0000: I2C00x420E_0000: I2C1
0x4800_0000: 4KB SRAM0x4900_0000: ML Registers (Conv2D Accelerator)0x4A00_0000: USB CDC
- Python 3.6+
- Make
- Git
- Docker (for precheck)
- PDK installation (sky130A/B or gf180mcuC)
-
Clone the repository:
git clone <repository-url> cd frigate-os
-
Install dependencies:
make install-repos
This will install:
- Management SoC (caravel_mgmt_soc)
- Panamax
- Analog blocks (frigate_analog)
- IP dependencies
-
Install IP packages:
make install-ips
-
Set up PDK (if using volare):
make pdk-with-volare
make install-repos: Install all repository dependenciesmake install-ips: Install IP packagesmake precheck: Install MPW precheck toolsmake run-precheck: Run design precheck validationmake clean: Clean build artifacts
PDK_ROOT: Path to PDK installationPDK: PDK variant (sky130A, sky130B, or gf180mcuC)MGMT_ROOT: Path to management SoCANALOG_ROOT: Path to analog blocksPANAMAX_ROOT: Path to Panamax
The Conv2D accelerator is accessible via the API in verilog/dv/firmware/APIs/conv2d.h:
#include "conv2d.h"
#define CONV2D_BASE 0x49000000
// Configure convolution parameters
CONV2D_setDataSize(CONV2D_BASE, width, height);
CONV2D_setKernelSize(CONV2D_BASE, kernel_w, kernel_h);
CONV2D_setStrideSize(CONV2D_BASE, stride_x, stride_y);
CONV2D_setReluEnable(CONV2D_BASE, 1);
// Start convolution
CONV2D_Start(CONV2D_BASE, 1);The NNOM (Neural Network on Microcontroller) library provides a complete framework for running neural networks:
#include "nnom/nnom.h"
// Create and configure model
nnom_model_t *model = nnom_model_create();
// ... configure layers ...
// Run inference
nnom_predict(model, &label, &probability);See verilog/dv/firmware/APIs/nnom/ for complete API documentation.
GPIO pins can be configured via verilog/rtl/user_defines.v. The configuration is applied using:
python3 scripts/gen_gpio_defaults.pyThis script generates the necessary layout files and gate-level netlists based on GPIO configuration.
RTL simulation can be performed using the testbenches in verilog/dv/. The project includes:
- Firmware test suites
- Peripheral driver tests
- ML workload examples
Before tapeout, run the MPW precheck:
make run-precheckThis validates the design against MPW requirements.
Licensed under the Apache License, Version 2.0. See LICENSE file for details.
Contributions are welcome! Please ensure:
- Code follows the existing style
- All files include proper SPDX license headers
- Changes are tested and validated
- Documentation is updated as needed
For questions and support:
- Check the documentation in
docs/ - Review the ChipIgnite resources at chipfoundry.io
- Consult the ChipFoundry community forums
- ChipFoundry for the chipIgnite MPW solution and infrastructure
- chipIgnite program for ML platform support
- Hazard3 CPU developers
- NNOM library contributors
Note: This is an active development project. Specifications and features may change. Refer to the datasheet and ChipIgnite documentation for the latest information.