0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的I2C控制模块设计

友晶FPGA 来源:友晶FPGA 2025-12-26 09:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

056ba96a-e06c-11f0-8c8f-92fbcf53809c.png

1 I2C写操作的Verilog实现

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

05c58b1a-e06c-11f0-8c8f-92fbcf53809c.png

该模块接口定义如下:

061e1a0a-e06c-11f0-8c8f-92fbcf53809c.png

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

06761aa2-e06c-11f0-8c8f-92fbcf53809c.png

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

06d086f4-e06c-11f0-8c8f-92fbcf53809c.png

2 I2C的三态门电路Verilog实现

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

072573ee-e06c-11f0-8c8f-92fbcf53809c.png

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

077e0f54-e06c-11f0-8c8f-92fbcf53809c.png

在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,所以设计代码的时候需要分频。

07d42948-e06c-11f0-8c8f-92fbcf53809c.png

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

082efeb8-e06c-11f0-8c8f-92fbcf53809c.png

配置寄存器

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

0885e85e-e06c-11f0-8c8f-92fbcf53809c.png

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

08e11fc6-e06c-11f0-8c8f-92fbcf53809c.png

状态机完整代码如下:

09382618-e06c-11f0-8c8f-92fbcf53809c.png

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

I2C设备地址

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

0994b0e0-e06c-11f0-8c8f-92fbcf53809c.png

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

09e8ba6e-e06c-11f0-8c8f-92fbcf53809c.png

HDMI_TX_INT信号

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

0a436310-e06c-11f0-8c8f-92fbcf53809c.png

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

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

0a99cac0-e06c-11f0-8c8f-92fbcf53809c.png

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

0af91b2e-e06c-11f0-8c8f-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1665

    文章

    22576

    浏览量

    640931
  • 寄存器
    +关注

    关注

    31

    文章

    5625

    浏览量

    130673
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114841
  • I2C控制
    +关注

    关注

    0

    文章

    6

    浏览量

    1864

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

文章出处:【微信号:友晶FPGA,微信公众号:友晶FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于FPGAI2C SLAVE模式总线的设计方案

    本文以标准的I2C 总线协议为基础,提出了一种基于FPGAI2C SLAVE 模式总线的设计方案。方案主要介绍了SLAVE 模式的特点。给出了设计的原理框图和modelsim 下的行为仿真时序图
    发表于 02-26 11:39 2.2w次阅读

    SM-IIC/2051模块用户说明(I2C 数据控制模块)

    SM-IIC/2051 模块用户说明简介:SM-IIC/2051 是一个基于2051 单片机的I2C 总线控制模块。上位机接口可直接与PC的RS232 连接,下位机可实现对应用电路中
    发表于 08-13 17:25 25次下载

    视频解码技术中I2C总线控制核的实现

    本文介绍了I2C总线的通讯特点,简要说明了I2C总线的协议规范和特点,并针对Philip公司视频解码系列芯片SAA7111A/SAA7121,从模块控制的角度说明了用
    发表于 05-27 11:55 17次下载

    I2C总线规范与I2C器件C51读写程序

    I2C总线规范与I2C器件C51读写程序:本文简要介绍了I2C总线,并给出了I2C器件的C51读
    发表于 08-22 17:51 95次下载

    用Verilog HDL实现I2C总线功能

    简述了I2C总线的特点;介绍了开发FPGAI2C总线模块的设计思想;给出并解释了用Verilog HDL实现部分I2C总线功能的程序,以及
    发表于 10-19 10:49 104次下载

    I2C总线接口模块设计

    本实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制
    发表于 11-02 17:01 41次下载

    基于EasyFPGA030的I2C总线接口模块

    本实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制
    发表于 03-11 15:37 29次下载

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    发表于 04-23 13:55 36次下载

    用Verilog HDL实现I2C总线功能

    摘要: 简述了I2C总线的特点;介绍了开发FPGAI2C总线模块的设计思想;给出并解释了用Verilog HDL实现部分I2C总线功能的程
    发表于 06-20 13:17 7205次阅读
    用Verilog HDL实现<b class='flag-5'>I2C</b>总线功能

    I2C模块arduinoio Simulink软件包

    I2C模块arduinoio Simulink软件包
    发表于 01-22 14:06 0次下载

    零基础学FPGA(十)初入江湖之i2c通信

    关键词:FPGA , i2c , verilog 相信学过单片机的同学对I2C总线都不陌生吧,今天我们来学习怎么用verilog语言来实现它,并在FPGA学习版上显示。
    发表于 09-14 09:46 1084次阅读

    Arduino教程之I2C模块使用教程资料免费下载

    为什么叫I2C模块?和一元硬币差不多大小的一块PCB上放了三个芯片,分管三个功能:时间计算、温度侦测、数据存储。这三个芯片都是通过I2C总线通信的。 我们知道,I2C理论上可以级联
    发表于 01-22 16:59 9次下载
    Arduino教程之<b class='flag-5'>I2C</b><b class='flag-5'>模块</b>使用教程资料免费下载

    硬件I2C与模拟I2C

    配置;而软件I2C是没有寄存器这个概念的。 软件I2C一般是使用GPIO管脚,用软件控制SCL,SDA线输出高低电平,模拟i2c协议的时序。例如下面这段
    发表于 12-28 19:14 83次下载
    硬件<b class='flag-5'>I2C</b>与模拟<b class='flag-5'>I2C</b>

    DA9062 PMIC I2C控制参考电路

    基于DA9062设计I2C控制PMIC 用于FPGA ZYNQ电源管理设计电路免费下载。
    发表于 05-25 15:26 7次下载

    I2C控制器驱动介绍

    控制器驱动 I2C 总线驱动重点是 I2C 适配器驱动,这里要用到两个重要的数据结构:i2c_adapter 和 i2c_algorithm
    的头像 发表于 07-22 15:38 3616次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>控制</b>器驱动介绍