![252a9b8d8c364e443f035805d8ba4f5f.gif](https://i-blog.csdnimg.cn/blog_migrate/3430281aa1edce70addc684389ed6355.gif)
目录
一、前言
二、软硬件平台
软件平台
硬件平台
三、IIC与EEPROM
IIC简介
1. 写操作大致步骤
2. 读操作大致步骤
3. IIC总线有以下几种状态
1. 空闲状态
2. 起始信号和结束信号
3. 数据传输状态
4. 应答信号/非应答信号
5. 从机地址
EEPROM简介
EEPROM从机地址EEPROM数据地址EEPROM的五访问方式
1. 字节写(BYTE WRITE)
2. 页写(PAGE WRITE)
3. 当前地址读(CURRENT ADDRESS READ)
4. 随机读(RANDOM READ)
5. 连续读(SEQUENTIAL READ) EEPROM写入周期
四、模块设计
1.功能目标参考资料
2.IIC驱动模块(iic_driver)
3.IIC驱动模块的接口定义IIC驱动模块信号设计
1.竞争冒险
2.为什么要倍频
3.下降沿触发与多重驱动
4.IIC多时钟域数据同步
5.IIC驱动模块(iic_driver)最终实现
五、仿真与测试
六、总结
正文
![9d4b1590e8b27cdcf2c14d4b3e8c2fa2.png](https://i-blog.csdnimg.cn/blog_migrate/2cc1c9f6708ece863b892ad60e8e90a1.jpeg)
一、前言
笔者是一名FPGA资深小白,跟着正点原子已经编写了不少Verilog代码,但是始终没有找到Verilog 的感觉。在大佬的推荐下,遂决定按照自己的思路重新进行历程的编写,以增强对Verilog的应用能力。恰巧正点原子的历程中EEPROM未曾亲手编写,于是决定自己设计信号以实现iic协议。
iic协议并不复杂,但笔者近乎用了半个月的时间(别说了,我太菜了!!!)才彻底实现EEPROM 的随机读/写操作。本文会记录笔者的思路以及实现方式,故会贴出笔者写过的但不能用的Verilog代码。最终可以使用的iic协议代码会贴在文章最末,以供指正批评。
虽然本代码是笔者自己设计实现的,但参考了多种历程的思路与实现方式,笔者会在文中提及处注明所参考文章的链接。iic协议并不复杂,实现方式也多种多样,但通过使用Verilog描述iic的硬件逻辑电路确实是一件很有意思的事。
![9d4b1590e8b27cdcf2c14d4b3e8c2fa2.png](https://i-blog.csdnimg.cn/blog_migrate/2cc1c9f6708ece863b892ad60e8e90a1.jpeg)
二、软硬件平台
软件平台
1. 操作系统:win10
2. 开发套件:Vivado 2019.2
3. 仿真工具:Vivado自带仿真工具
硬件平台
1. FPGA型号:Xilinx公司的zynq7020
2. EEPROM型号:Microchip公司的AT24LC04B
![9d4b1590e8b27cdcf2c14d4b3e8c2fa2.png](https://i-blog.csdnimg.cn/blog_migrate/2cc1c9f6708ece863b892ad60e8e90a1.jpeg)
三、IIC与EEPROM
IIC简介
IIC(Inter-Integrated Circuit) 其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在上世纪80年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。
所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的S