FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
Login
Home-技术文章/快讯-技术分享-正文

FPGA通信双雄:手把手教你玩转I2C与SPI的Verilog实现

FPGA小白FPGA小白
技术分享
10天前
0
0
32

嗨,各位FPGA探索者!今天我们来聊聊项目开发中几乎绕不开的两个“老朋友”——I2CSPI。你是不是也经常需要让FPGA跟各种传感器、存储芯片或者显示屏“对话”?没错,I2CSPI就是实现这种板级“悄悄话”最经典、最常用的两种串行通信协议。掌握它们,就像拿到了打开外部世界大门的钥匙,是从爱好者迈向专业工程师的必经之路。

这篇文章,我们就一起把这两个协议掰开揉碎,从核心原理到Verilog代码实现,再到仿真验证,给你讲得明明白白。准备好了吗?我们开始吧!

先看本质:I2C和SPI,到底有啥不一样?

在动手写代码之前,咱们得先搞清楚这俩兄弟各自的脾气。简单来说,I2C像是个“节约派”,用最少的线办最多的事;而SPI则是个“速度派”,追求极致的通信效率。下面这个表格帮你快速抓住重点:

特性I2CSPI
线路数量2根线搞定(SCL时钟线,SDA数据线)通常4根线(SCLK, MOSI, MISO, SS片选),也可以精简到3根
聊天方式半双工,一根数据线来回用(像对讲机)全双工,可以同时发和收(像打电话)
连接方式“总线式”,一根线上可以挂很多设备,靠地址找人“点对点式”,一个主人(Master)带多个小弟(Slave),靠片选信号点名
速度标准模式100kbps,快速模式400kbps等通常快得多,轻松跑到几十Mbps
协议复杂度稍高,有起始、停止、应答等“礼节”相对简单,主要关心时钟极性和相位
FPGA实现关键状态机设计、处理双向IO(三态门)是核心时钟域处理、管理多个从设备的片选信号是关键

动手实战:I2C Master的Verilog实现要点

在FPGA里,我们通常扮演“主人”(Master)的角色,去控制外部的“客人”(Slave设备)。实现I2C Master的核心,就是设计一个靠谱的有限状态机(FSM)

状态机怎么设计?
想象一下一次完整的I2C通信流程:空闲 -> 发出开始信号 -> 发送设备地址 -> 等待对方应答 -> 发送或接收数据 -> 发出停止信号。我们的状态机就要严格遵循这个剧本,典型状态包括:IDLE, START, SEND_ADDR, CHECK_ACK, SEND_DATA, RECV_DATA, STOP 等。

难点攻克:双向SDA线怎么处理?
这是I2C Verilog实现中最容易卡壳的地方。SDA这根线很“忙”,它有时候要输出数据,有时候又要读取从机发来的数据。怎么办呢?标准做法是使用“三态门”控制:

  • 定义两个寄存器:sda_out(要输出的数据)和 sda_oe(输出使能信号)。
  • 在顶层模块,用一行条件赋值实现三态门:
    assign SDA = (sda_oe == 1'b1) ? sda_out : 1'bz; // oe为1时输出数据,为0时呈高阻态(相当于断开,让从机控制)
  • 再定义一个信号来读取SDA线上的实际电平:
    assign sda_in = SDA;

时钟SCL的生成
SCL时钟完全由主机产生。通常是从系统主时钟分频得到。记住黄金法则:在SCL为高电平期间,SDA上的数据必须保持稳定;数据的变化只能发生在SCL为低电平的时候。这样才能满足建立和保持时间的要求。

来看一段状态机的核心代码片段(感受一下节奏):

always @(posedge clk) begin
    case(state)
        START: begin
            if (clk_cnt == DIVIDER) begin
                sda_oe <= 1'b1; // 使能输出
                sda_out <= 1'b0; // 拉低SDA,产生起始条件
                // ... 状态转移和其他逻辑
            end
        end
        // ... 其他状态
    endcase
end

看到这里,你对I2C的实现是不是有了更具体的画面?别急,关于SPI的实现精要、仿真验证的“组合拳”怎么打,我们下回接着聊。记住,理解协议是骨架,写出健壮的代码是血肉,而充分的验证则是给你的设计穿上盔甲。一步步来,你一定能搞定!

Tags:
本文原创,作者:FPGA小白,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/28302.html
FPGA小白

FPGA小白

初级工程师
成电国芯®的讲师哦,专业FPGA已有10年。
22219.26W7.09W34.38W
Share:
成电国芯FPGA赛事课即将上线
FPGA验证新思路:用UVM-Lite轻松搭建高效测试平台
FPGA验证新思路:用UVM-Lite轻松搭建高效测试平台Previous
FPGA状态机设计:玩转高效安全的单热码(One-Hot)Next
FPGA状态机设计:玩转高效安全的单热码(One-Hot)
相关文章
Total: 260
SystemVerilog验证:如何构建高效可复用的FPGA模块验证平台

SystemVerilog验证:如何构建高效可复用的FPGA模块验证平台

本文旨在提供一套从零构建高效、可复用FPGA模块验证平台的完整实施路径。…
技术分享
1天前
0
0
12
0
FPGA学习四大误区深度解析——金牌培训师教你避坑突围

FPGA学习四大误区深度解析——金牌培训师教你避坑突围

误区一:盲目敲代码,却对FPGA底层架构视而不见症状表现:…
技术分享, 行业资讯
1年前
0
0
385
0
FPGA入门基础之Testbench仿真文件编写示例

FPGA入门基础之Testbench仿真文件编写示例

引言:在编写完HDL代码后,往往需要通过仿真软件Modelsim或者Vi…
技术分享
4个月前
0
0
265
0
评论表单游客 您好,欢迎参与讨论。
Loading...
评论列表
Total: 0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
No relevant content