FPGA控制AT24C02C EEPROM读写模块

FPGA控制AT24C02C EEPROM读写模块

【下载地址】FPGA控制AT24C02CEEPROM读写模块 本设计使用Verilog语言,通过FPGA控制AT24C02C EEPROM。在硬件连接时,需要注意根据芯片的A2、A1、A0电平来编写Device Address字节内容。本设计中使用的配置为A2=0,A1=0,A0=1。该设计由两个子模块和一个顶层模块组成:1. **iic.v**:这是一个I2C通讯子模块,能够实现特定地址的读写功能。每次读写一个字节。2. **iic_ctrl.v**:这是一个上层的应用子模块,主要通过VIO控制8个字节接口,使能后将数据写入预先编辑好的8个地址中(地址范围为0x00~0xFF,共256字节)。上电时,rst_置1后,从EEPROM中读取这8个字节的数据,用于配置其他功能模块。用户可以根据实际使用情景自行修改。3. **TOP.v**:这是顶层模块,外接线路只有rst复位、sys_clk系统时钟、I2C_SDA数据线和I2C_SCL时钟线 【下载地址】FPGA控制AT24C02CEEPROM读写模块 项目地址: https://gitcode.com/open-source-toolkit/72df0

本资源文件提供了一个使用Verilog语言实现的FPGA控制AT24C02C EEPROM的读写功能模块。该模块已经通过上板测试,可以放心下载使用。

资源描述

本设计使用Verilog语言,通过FPGA控制AT24C02C EEPROM。在硬件连接时,需要注意根据芯片的A2、A1、A0电平来编写Device Address字节内容。本设计中使用的配置为A2=0,A1=0,A0=1。

该设计由两个子模块和一个顶层模块组成:

  1. iic.v:这是一个I2C通讯子模块,能够实现特定地址的读写功能。每次读写一个字节。

  2. iic_ctrl.v:这是一个上层的应用子模块,主要通过VIO控制8个字节接口,使能后将数据写入预先编辑好的8个地址中(地址范围为0x00~0xFF,共256字节)。上电时,rst_置1后,从EEPROM中读取这8个字节的数据,用于配置其他功能模块。用户可以根据实际使用情景自行修改。

  3. TOP.v:这是顶层模块,外接线路只有rst复位、sys_clk系统时钟、I2C_SDA数据线和I2C_SCL时钟线。

使用说明

  1. 硬件连接:根据实际硬件连接情况,配置A2、A1、A0的电平,并相应修改Device Address字节内容。

  2. 模块配置:在iic_ctrl.v模块中,可以根据需要修改写入和读取的地址范围。

  3. 调试建议:建议使用VIO作为控制输入,并结合ILA观察相关时序控制,以确保读写操作的正确性。

  4. 工程生成:在生成工程时,记得添加VIO模块以进行控制和调试。

开发心得与注意事项

稍后会整理一些开发心得和调试过程中的注意事项,帮助用户更好地理解和使用该模块。

祝开发顺利!

【下载地址】FPGA控制AT24C02CEEPROM读写模块 本设计使用Verilog语言,通过FPGA控制AT24C02C EEPROM。在硬件连接时,需要注意根据芯片的A2、A1、A0电平来编写Device Address字节内容。本设计中使用的配置为A2=0,A1=0,A0=1。该设计由两个子模块和一个顶层模块组成:1. **iic.v**:这是一个I2C通讯子模块,能够实现特定地址的读写功能。每次读写一个字节。2. **iic_ctrl.v**:这是一个上层的应用子模块,主要通过VIO控制8个字节接口,使能后将数据写入预先编辑好的8个地址中(地址范围为0x00~0xFF,共256字节)。上电时,rst_置1后,从EEPROM中读取这8个字节的数据,用于配置其他功能模块。用户可以根据实际使用情景自行修改。3. **TOP.v**:这是顶层模块,外接线路只有rst复位、sys_clk系统时钟、I2C_SDA数据线和I2C_SCL时钟线 【下载地址】FPGA控制AT24C02CEEPROM读写模块 项目地址: https://gitcode.com/open-source-toolkit/72df0

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

FPGA读写EEPROM芯片AT24C02实验Verilog逻辑源码Quartus11.0工程文件, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module iic_com( clk,rst_n, sw1,sw2, scl,sda, dis_data ); input clk; // 50MHz input rst_n; //复位信号,低有效 input sw1,sw2; //按键1、2,(1按下执行写入操作,2按下执行读操作) output scl; // 24C02的时钟端口 inout sda; // 24C02的数据端口 output[7:0] dis_data; //数码管显示的数据 //按键检测 reg sw1_r,sw2_r; //键值锁存寄存器,每20ms检测一次键值 reg[19:0] cnt_20ms; //20ms计数寄存器 always @ (posedge clk or negedge rst_n) begin if(!rst_n) cnt_20ms <= 20'd0; else cnt_20ms <= cnt_20ms+1'b1; //不断计数 end always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin sw1_r <= 1'b1; //键值寄存器复位,没有键盘按下时键值都为1 sw2_r <= 1'b1; end else if(cnt_20ms == 20'hfffff) begin sw1_r <= sw1; //按键1值锁存 sw2_r <= sw2; //按键2值锁存 end end //--------------------------------------------- //分频部分 reg[2:0] cnt; // cnt=0:scl上升沿,cnt=1:scl高电平中间,cnt=2:scl下降沿,cnt=3:scl低电平中间 reg[8:0] cnt_delay; //500循环计数,产生iic所需要的时钟 reg scl_r; //时钟脉冲寄存器 always @ (posedge clk or negedge rst_n) begin if(!rst_n) cnt_delay <= 9'd0; else if(cnt_delay == 9'd499) cnt_delay <= 9'd0; //计数到10us为scl的周期,即100KHz else cnt_delay <= cnt_delay+1'b1; //时钟计数 end always @ (posedge clk or negedge rst_n) begin if(!rst_n) cnt <= 3'd5; else begin case (cnt_delay) 9'd124: cnt <= 3'd1; //cnt=1:scl高电平中间,用于数据采样 9'd249: cnt <= 3'd2; //cnt=2:scl下降沿 9'd374: cnt <= 3'd3; //cnt=3:scl低电平中间,用于数据变化 9'd499: cnt <= 3'd0; //cnt=0:scl上升沿 default: cnt <= 3'd5; endcase end end `define SCL_POS (cnt==3'd0) //cnt=0:scl上升沿 `define SCL_HIG (cnt==3'd1) //cnt=1:scl高电平中间,用于数据采样 `define SCL_NEG (cnt==3'd2) //cnt=2:scl下降沿 `define SCL_LOW (cnt==3'd3) //cnt=3:scl低电平中间,用于数据变化 always @ (posedge clk or negedge rst_n) begin if(!rst_n) scl_r <= 1'b0; else if(cnt==3'd0) scl_r <= 1'b1; //scl信号上升沿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尤钧竹Edwina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值