5-DE10-Nano的HDMI方块移动案例——基于FPGA的I2C控制模块设计

I2C_WRITE_WDATA.v模块实现I2C写时序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.v模块,同时增加了I2C数据线SDA的三态缓冲电路。I2C_HDMI_Config.v 是顶层模块,该模块例化了I2C_Controller模块,对系统时钟进行了分频,并控制寄存器的配置。

1 I2C写操作的Verilog实现

I2C_WRITE_WDATA.v是一个I2C写数据模块,用于通过I2C总线向从设备ADV7513写入数据。

该模块接口定义如下:

该模块实现了一个状态机,其功能是向从设备写入多个字节数据。它按照I2C协议生成起始条件、发送从设备地址(包括读/写位)、发送数据字节以及产生停止条件。同时,它还会检测从设备的应答信号,并在传输完成后给出结束信号。具体过程如下图:

为了能更好的理解这个状态机的控制逻辑,下面画出I2C传输某个寄存器的过程波形如下:

2 I2C的三态门电路Verilog实现

I2C_Controller.v里面例化了一个I2C_WRITE_WDATA.v模块:

该模块将I2C_WRITE_WDATA.v模块的SDAI 和SDAO 之间增加了一个三态门电路:

在I2C_WRITE_WDATA模块中,SDAO是输出信号,用于控制数据线的输出状态。当需要输出高电平时,SDAO设置为1,使得I2C_SDAT为高阻,由上拉电阻拉高;当需要输出低电平时,SDAO设置为0,将I2C_SDAT拉低。同时,I2C_WRITE_WDATA模块还接收SDAI(即I2C_SDAT)作为输入,用于读取总线上的实际状态(例如检测ACK信号)。

3 I2C配置寄存器的Verilog设计

这是一个HDMI的寄存器配置模块,它使用了一个查找表(LUT)来存储配置数据,然后通过I2C控制器(实现了I2C协议)对HDMI transmitter的寄存器逐个进行写入配置。

时钟分频

一般FPGA开发板板载系统时钟是50MHz, 但是I2C 的时钟不能太高,从手册上看, 最大不能超过400KHz,所以设计代码的时候需要分频。

Verilog代码里面将50MHz时钟分频为20KHz时钟:

配置寄存器

寄存器配置的值通过查找表(LUT)来存储, 代码里面主要配置了31个寄存器,其他的没有配置的就表示使用的是默认的配置,有关于ADV7513的寄存器查找请参考2 ADV7513寄存器配置章节。

寄存器数据的配置采用一个三状态的状态机去控制:

状态机完整代码如下:

这个状态机确保了HDMI配置数据的可靠传输,具备完整的错误处理和重试机制,是HDMI初始化过程中的核心控制逻辑。

I2C设备地址

ADV7513的PD引脚接2K电阻到地:

参考ADV7513_Hardware_User's_Guide_R0.pdf文档可知其I2C读、写地址是0x72/0x73:

HDMI_TX_INT信号

HDMI_TX_INT信号低电平有效,具体描述可以参考ADV7513_Hardware_User's_Guide_R0.pdf的第17页:

在DE10-Nano的开发板电路中,

该引脚默认被拉高到3.3V,当触发中断事件发生时,由软件控制该信号发生电平变化。

I2C_HDMI_Config.v文件里面设置若HDMI_TX_INT信号为低电平,则重新配置寄存器:

往期阅读

1-DE10-Nano的HDMI方块移动案例------显示器时序(DMT)标准介绍

2-DE10-Nano的HDMI方块移动案例------HDMI接口介绍(含TMDS)

3-DE10-Nano的HDMI方块移动案例------ADV7513芯片解读

4-DE10-Nano的HDMI方块移动案例------I2C通信协议

相关推荐
Zevalin爱灰灰11 小时前
能源与电源管理电路——防倒灌电路
单片机·嵌入式硬件·电源管理
jianqiang.xue13 小时前
ESP-IDF保姆级入门02|Ubuntu24.04搭建EIM-GUI开发环境,打通Windows_Linux双平台统一开发
stm32·单片机·物联网
无垠的广袤14 小时前
【工业树莓派 CM0 Dev Board】扩展板设计
linux·python·嵌入式硬件·pcb设计·模块化·传感器
ARM+FPGA+AI工业主板定制专家14 小时前
国产化RK3576+FPGA架构|晶圆传输机器人高速定位+AI瑕疵检测一体化方案
fpga开发·架构·机器人·嵌入式·fpga·工控·机器人运控
嵌入式-老费14 小时前
esp32开发与应用(添加数据分区)
单片机·嵌入式硬件
嵌入式-老费15 小时前
esp32开发与应用(OTA升级)
嵌入式硬件
CYLAM202518 小时前
STC32G 单片机0.96“OLED 西历农历可调万年历 (1901-2100)
单片机·嵌入式硬件·stc32g·万年历·西历农历·0.96”oled 12864·4x4 矩阵键盘
Discipline~Hai18 小时前
ARM03-蜂鸣器和中断
c语言·arm开发·单片机·嵌入式硬件·嵌入式
KaifuZeng19 小时前
电源面试问题汇总一
单片机·嵌入式硬件·面试·电路
驱动探索者21 小时前
RISC-V PLIC 深度解析:从 Spec 到 Zephyr 驱动实现
单片机·嵌入式硬件·中断控制器