Open-Source FPGA Implementation of an I3C Controller
Abstract
:1. Introduction
2. Materials and Methods
2.1. Background
2.1.1. Standard Data Rate
2.1.2. In-Band Interrupt
- The controller initiates a transfer with a start, followed by the I3C broadcast address or a target device address; the interrupt sender drives the SDA with its own address.
- The bus is in the bus-available condition and the interrupt issuer pulls the SDA line low; the controller notices, pulls the SCL line low (completing a start), and provides clock cycles for the peripheral to send its address.
2.1.3. Dynamic Address Assignment
2.1.4. Hot-Join
- The device is connected to the bus and remains unpowered until it is needed. This is useful in applications where power usage management is critical.
- The device is connected physically to the bus after the bus has been configured.
2.1.5. High Data Rate Modes
- Double data rate.
- Bulk transfer.
2.2. Implementation
2.2.1. Project Structure
2.2.2. Selected I3C Features
- Single Data Rate mode.
- In-Band Interrupt.
- Dynamic address.
- I2C backward compatibility.
2.2.3. Hardware and Tools
2.2.4. HDL Implementation
2.2.5. Linux Solution
3. Results and Discussion
4. Conclusions
Author Contributions
Funding
Institutional Review Board Statement
Informed Consent Statement
Data Availability Statement
Conflicts of Interest
Abbreviations
ACK-bit | acknowledge bit |
ARM | Advanced RISC Machine |
AXI | Advanced eXtensible Interface |
CCC | common command code |
DAA | dynamic address assignment |
DMA | direct memory access |
FPGA | field-programmable gate array |
HDL | hardware description language |
I2C | inter-integrated circuit |
I3C | improved inter-integrated circuit |
IBI | in-band interrupt |
IP | intellectual property |
LUT | lookup table |
MDB | mandatory data byte |
MIPI | mobile industry processor interface |
PID | provisioned ID |
PWM | pulse-width modulation |
RnW-bit | read-or-write bit |
SCL | serial clock |
SDA | serial data |
SDR | single data rate |
SoC | system-on-a-chip |
SPI | serial peripheral interface |
T-bit | parity bit. |
References
- I2C Quick Guide. Available online: https://www.analog.com/media/en/technical-documentation/product-selector-card/i2Cb.pdf (accessed on 12 October 2024).
- MIPI I3C Slave. Available online: https://github.com/NXP/i3c-slave-design (accessed on 12 October 2024).
- LPC553x. Available online: https://www.nxp.com/docs/en/data-sheet/LPC553x.pdf (accessed on 12 October 2024).
- STM32H503xx. Available online: https://www.st.com/resource/en/datasheet/stm32h503eb.pdf (accessed on 12 October 2024).
- DRA829 Jacinto Processors. Available online: https://www.ti.com/lit/ds/symlink/dra829v.pdf (accessed on 12 October 2024).
- Mahale, A.; Kariyappa, B.S. Architecture Analysis and Verification of I3C Protocol. In Proceedings of the 2019 3rd International Conference on Electronics, Communication and Aerospace Technology (ICECA), Coimbatore, India, 12–14 June 2019; pp. 930–935. [Google Scholar] [CrossRef]
- Chauhan, S.N.; Andurkar, G.K. Development of UVM Testbench for I3C protocol. In Proceedings of the 2023 14th International Conference on Computing Communication and Networking Technologies (ICCCNT), Delhi, India, 6–8 July 2023; pp. 1–4. [Google Scholar] [CrossRef]
- Gao, P.; Xu, N.; Zheng, X.; Gong, J.; Zhong, X. Design Implementation and Verification of a Flexible I3C Hardware Architecture. In Proceedings of the 2024 13th International Conference on Communications, Circuits and Systems (ICCCAS), Xiamen, China, 10–12 May 2024; pp. 148–153. [Google Scholar] [CrossRef]
- Golubic, M.; Kundrata, J.; Baric, A. Verification of the Legacy Compatibility of the MIPI I3C Master. In Proceedings of the 2021 44th International Convention on Information, Communication and Electronic Technology (MIPRO), Opatija, Croatia, 27 September–1 October 2021; pp. 160–165. [Google Scholar] [CrossRef]
- Krishnan, Y.S.; Bhakthavatchalu, R. Design and Implementation of MIPI I3C master controller SubSystems. In Proceedings of the 2023 3rd International Conference on Intelligent Technologies (CONIT), Hubli, India, 23–25 June 2023; pp. 1–6. [Google Scholar] [CrossRef]
- I3C Core. Available online: https://github.com/chipsalliance/i3c-core (accessed on 18 January 2024).
- I3C Core—Documentation. Clock Speed and Oversampling. Available online: https://chipsalliance.github.io/i3c-core/timings.html#clock-speed-and-oversampling (accessed on 18 January 2024).
- I3C Core—Documentation. FPGA Validation Platform. Available online: https://chipsalliance.github.io/i3c-core/testing.html (accessed on 18 January 2024).
- Zynq UltraScale+ MPSoC ZCU106 Evaluation Kit. Available online: https://www.xilinx.com/products/boards-and-kits/zcu106.html (accessed on 18 January 2024).
- MIPI I3C Basic Specification Version 1.1.1. Available online: https://www.mipi.org/specifications/i3c-sensor-specification (accessed on 12 October 2024).
- I3C MDB Values—Implementers Table. Available online: https://www.mipi.org/MIPI_I3C_mandatory_data_byte_values_public (accessed on 29 July 2023).
- Generic Device Tree Bindings for I3C Busses. Available online: https://github.com/torvalds/linux/blob/54820b4a6627e87afc0425c8b4ce338d3dbdbb80/Documentation/devicetree/bindings/i3c/i3c.txt (accessed on 27 October 2024).
- I3C—Improved Inter-Integrated Circuit Module, 37.2.8 Hot-Join Mechanism. Available online: https://onlinedocs.microchip.com/oxy/GUID-598A6CC5-BA9B-433D-BAFE-893E2A72A7A3-en-US-14/GUID-25CE5360-2033-447B-BF99-7739E1365410.html?hl=hot-join (accessed on 12 October 2024).
- Coraz7s Reference Manual. Available online: https://digilent.com/reference/programmable-logic/cora-z7/reference-manual (accessed on 12 October 2024).
- Zynq-7000 SoC Data Sheet: Overview. Available online: https://docs.xilinx.com/v/u/en-US/ds190-Zynq-7000-Overview (accessed on 12 October 2024).
- DE10-Nano User Manual (rev. B2/C Hardware). Available online: https://www.terasic.com.tw/cgi-bin/page/archive_download.pl?Language=English&No=1046&FID=f1f656bb5f040121c36f2f93f6b107ff (accessed on 12 October 2024).
- Cyclone V Device Overview. Available online: https://cdrdv2.intel.com/v1/dl/getContent/666729?fileName=cv_51001-683694-666729.pdf (accessed on 12 October 2024).
- ADALM2000—Advanced Active Learning Module. Available online: https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/ADALM2000.html (accessed on 12 October 2024).
- SPI Engine Offload FPGA Peripheral. Available online: https://analogdevicesinc.github.io/hdl/library/spi_engine/spi_engine_offload.html (accessed on 12 October 2024).
- Interrupts, High-Speed DMA Controller Peripheral. Available online: https://analogdevicesinc.github.io/hdl/library/axi_dmac/index.html (accessed on 12 October 2024).
- Vivado Design Suite 7 Series FPGA and Zynq 7000 SoC Libraries Guide (UG953). Available online: https://docs.xilinx.com/r/en-US/ug953-vivado-7series-libraries/OBUFT (accessed on 12 October 2024).
- Vivado Design Suite Properties Reference Guide (UG912). Available online: https://docs.xilinx.com/r/en-US/ug912-vivado-properties/IOB (accessed on 12 October 2024).
- ALTIOBUF IP Core User Guide. Available online: https://cdrdv2-public.intel.com/666402/ug_altiobuf-6PWM83471-666402.pdf (accessed on 12 October 2024).
- MMCM and PLL Dynamic Reconfiguration (XAPP888). Available online: https://docs.xilinx.com/v/u/en-US/xapp888_7Series_DynamicRecon (accessed on 12 October 2024).
- Linux Kernel. i3c-master-cdns.c. Available online: https://github.com/torvalds/linux/blob/master/drivers/i3c/master/i3c-master-cdns.c (accessed on 29 July 2023).
- Linux Kernel. SPI-Engine SPI Controller Driver. Available online: https://github.com/torvalds/linux/blob/master/drivers/spi/spi-axi-spi-engine.c (accessed on 26 January 2024).
- I3C Controller. Control Interface. Available online: http://analogdevicesinc.github.io/hdl/library/i3c_controller/interface.html (accessed on 12 October 2024).
- Linux Kernel. Register Map Access API. Available online: https://github.com/torvalds/linux/blob/master/include/linux/regmap.h (accessed on 12 October 2024).
- Kuiper Linux. SD Card Flashing. Available online: https://analogdevicesinc.github.io/documentation/linux/kuiper/sdcard/index.html (accessed on 12 August 2024).
- scp(1)—Linux Man Page. Available online: https://linux.die.net/man/1/scp (accessed on 12 October 2024).
- Analog Devices Inc. Libiio. Available online: https://analogdevicesinc.github.io/documentation/software/libiio/index.html (accessed on 27 October 2024).
- Analog Devices Inc. PULSAR_ADC HDL Project. Available online: https://github.com/analogdevicesinc/hdl/tree/main/projects/pulsar_adc (accessed on 15 January 2024).
Name | Range | Description |
---|---|---|
31:23 | Reserved. | |
Is CCC | 22:22 | Indicate if it is a CCC transfer (1) or not (0). |
Bcast. header | 21:21 | Include the broadcast header in private transfer (1) or not (0). |
Sr | 20:20 | Yield a repeated start (1) or stop (0) at the end of the transfer. |
Buffer length | 19:08 | Unsigned 12-bit payload length; direction depends on RnW-bit value. |
DA | 07:01 | 7-bit device address (does not care in broadcast mode). |
RnW | 00:00 | It should retrieve data from the device (1) or not (0). |
Name | Range | Description |
---|---|---|
Type | 07:07 | Direct (1) or broadcast (0), except SETXTIME and VENDOR. |
ID | 06:00 | CCC to transfer; identifier matches the payload to be sent in the bus. |
File | Description |
---|---|
adi-i3c-controller.c | I3C Controller driver; methods for the I3C Linux abstractions. |
dev/dev_core.c | Test device driver, agnostic to the communication protocol. |
dev/dev_i3c.c | Test device driver, specific to the I3C variant. |
adi,adi-i3c-controller.yaml | I3C Controller driver documentation. |
*-*-dev-i3c.dts | devicetree file (template). |
Available | I3C | SPI | I3C | SPI | |
---|---|---|---|---|---|
Resource | Resources | Utilization | Utilization | Utilization % | Utilization % |
Slice LUTs | 14,400 | 1714 | 678 | 11.9% | 4.7% |
Slice Registers | 28,800 | 677 | 899 | 2.3% | 3.1% |
Block RAM Tile | 50 | 1.5 | 3.5 | 3% | 7% |
MMCME_ADV | 2 | 0 | 1 | 0% | 50% |
Disclaimer/Publisher’s Note: The statements, opinions and data contained in all publications are solely those of the individual author(s) and contributor(s) and not of MDPI and/or the editor(s). MDPI and/or the editor(s) disclaim responsibility for any injury to people or property resulting from any ideas, methods, instructions or products referred to in the content. |
© 2025 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (https://creativecommons.org/licenses/by/4.0/).
Share and Cite
Gastmaier Marques, J.A.; Arpadi, S.; Luppe, M. Open-Source FPGA Implementation of an I3C Controller. Chips 2025, 4, 6. https://doi.org/10.3390/chips4010006
Gastmaier Marques JA, Arpadi S, Luppe M. Open-Source FPGA Implementation of an I3C Controller. Chips. 2025; 4(1):6. https://doi.org/10.3390/chips4010006
Chicago/Turabian StyleGastmaier Marques, Jorge André, Sergiu Arpadi, and Maximiliam Luppe. 2025. "Open-Source FPGA Implementation of an I3C Controller" Chips 4, no. 1: 6. https://doi.org/10.3390/chips4010006
APA StyleGastmaier Marques, J. A., Arpadi, S., & Luppe, M. (2025). Open-Source FPGA Implementation of an I3C Controller. Chips, 4(1), 6. https://doi.org/10.3390/chips4010006