All Projects → oetr → FPGA-I2C-Minion

oetr / FPGA-I2C-Minion

Licence: MIT license
A simple I2C minion in VHDL

Programming Languages

VHDL
269 projects
Makefile
30231 projects

Labels

Projects that are alternatives of or similar to FPGA-I2C-Minion

verilog-vcd-parser
A parser for Value Change Dump (VCD) files as specified in the IEEE System Verilog 1800-2012 standard.
Stars: ✭ 46 (-8%)
Mutual labels:  vhdl
ESP8266-I2C-Driver
Fixed built-in I2C driver for Arduino ESP8266 core
Stars: ✭ 74 (+48%)
Mutual labels:  i2c
SiaFpgaMiner
VHDL FPGA design of an optimized Blake2b pipeline to mine Siacoin
Stars: ✭ 58 (+16%)
Mutual labels:  vhdl
arduino-esp32
Arduino core for the ESP32
Stars: ✭ 38 (-24%)
Mutual labels:  i2c
stm32 i2c to usb hid multitouch
i2c to usb hid multi touch with stm32
Stars: ✭ 55 (+10%)
Mutual labels:  i2c
ssd1306-esp-idf-i2c
Sample code for driving 128x64 OLED display (SSD1306 driver) via ESP-IDF's I2C master driver
Stars: ✭ 93 (+86%)
Mutual labels:  i2c
xeda
Cross EDA Abstraction and Automation
Stars: ✭ 25 (-50%)
Mutual labels:  vhdl
embedded-sht
Embedded SHT Drivers for Sensirion Temperature and Humidity Sensors - Download the Zip Package from the Release Page
Stars: ✭ 53 (+6%)
Mutual labels:  i2c
BenEaterVHDL
VHDL project to run a simple 8-bit computer very similar to the one built by Ben Eater (see https://eater.net)
Stars: ✭ 30 (-40%)
Mutual labels:  vhdl
BME680
Arduino Library to access the Bosch BME680 - temperature, pressure, humidity and gas sensor
Stars: ✭ 30 (-40%)
Mutual labels:  i2c
MPU-9250-Sensors-Data-Collect
MPU9250 (MPU6500 + AK8963) I2C Driver in Python for Raspbery PI
Stars: ✭ 51 (+2%)
Mutual labels:  i2c
PCF8574 library
i2c digital expander for Arduino, esp32, SMT32 and ESP8266. Can read write digital values with only 2 wire. Very simple to use and encoder support.
Stars: ✭ 145 (+190%)
Mutual labels:  i2c
vhdl-hdmi-out
HDMI Out VHDL code for 7-series Xilinx FPGAs
Stars: ✭ 36 (-28%)
Mutual labels:  vhdl
miniboot
🏗️ An I2C bootloader for Arduino.
Stars: ✭ 62 (+24%)
Mutual labels:  i2c
SpinalCrypto
SpinalHDL - Cryptography libraries
Stars: ✭ 36 (-28%)
Mutual labels:  vhdl
go-bsbmp
Golang library to interact with Bosch Sensortec BMP180/BMP280/BME280/BMP388 temperature, pressure and humidity sensors via I2C-bus from Raspberry PI.
Stars: ✭ 41 (-18%)
Mutual labels:  i2c
arduino-mcp23017
Complete support of MCP23017
Stars: ✭ 44 (-12%)
Mutual labels:  i2c
vboard
Virtual development board for HDL design
Stars: ✭ 32 (-36%)
Mutual labels:  vhdl
Cache
Simple implementation of cache using VHDL
Stars: ✭ 17 (-66%)
Mutual labels:  vhdl
rpi
Microcontroller projects (RPi, Arduino, ATTiny85, ESP, Pico, STM8/32)
Stars: ✭ 76 (+52%)
Mutual labels:  i2c

This is a simple I2C minion written in VHDL. The minion supports single and repeated reads/writes, as well as quick read/writes (master can switch between read and write commands while also addressing different minions in quick succession without having to write STOP command on the bus). Clock stretching is not implemented, so make sure that data to master is ready upon request.

Usage

The module can be used through the following interface:

read_req         : out std_logic;
data_to_master   : in  std_logic_vector(7 downto 0);
data_valid       : out std_logic;
data_from_master : out std_logic_vector(7 downto 0));

When read_req is high, the minion fetches the data data_to_master in the same clock cycle, so make sure to set the correct data in advance. When data_valid becomes high, data_from_master provides valid data in the same clock cycle.

The minion ignores all master commands directed at addresses that do not match MINION_ADDR generic. The 7 bits of the MINION_ADDR are usually given in the most significant bit (MSB) first format on the master side. For example, a 7 bit address “0000011” corresponds to decimal 3 on the minion, is actually a 6 on the master because the LSB is never sent.

Simulation

Two testbenches are provided with the design: one under ideal conditions; and another one with a noisy SCL signal that has short random spikes that flip th SCL at random, for a random duration. To simulate using ghdl run:

$ make

The simulation traces can be viewed using GTKWave:

$ gtkwave sim/I2C_minion_TB_001_ideal.ghw
$ gtkwave sim/I2C_minion_TB_002_noisy_scl.ghw

The testbenches should also work in ModelSim.

Here is an example of a single write: ./pics/single-write.png

And here, an example of 3 quick writes followed by a quick read. Quick means that the minion address is given only once in the beginning of the first “quick” operation. ./pics/consecutive-3xwrite-and-read.png

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].