• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

EEPROM测试试验设计Verilog代码VIVADO ARTIX-7开发板

05/08 10:59
1266
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24110Q95312B8.docx

共1个文件

名称:EEPROM测试试验设计Verilog代码VIVADO? ARTIX-7开发板

软件:VIVADO

语言:Verilog

代码功能:

EEPROM测试试验。

EEPROM掉电缓存数据,并观察数据读写。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:ARTIX-7开发板.png

 

设计文档:

1 实验简介

本实验通过使用开源软件opencores上的I2C master控制器去控制I2C接口的EEPROM读写,练习如何有效的使用开源代码提升开发效率。

2 实验原理

硬件电路

在开发板上,FPGA芯片通过I2C总线连接EEPROM24LC04,I2C的两根总线各上拉一个4.7K的电阻到3.3V,所以当总线上没有输出时会被拉高,24LC04的写保护没有使能,不然FPGA会无法写入数据。因为在电路上A0~A2都为低,所以24LC04的设备地址为0xA0。

开发板部分电路

I2C的总线协议和时序

I2C标准速率为100kbit/s,快速模式400kbit/s,支持多机通讯,支持多主控模块,但同一时刻只允许有一个主控。由数据线SDA和时钟SCL构成串行总线;每个电路和模块都有唯一的地址。

在这里以AT24C04为例说明I2C读写的基本操作和时序,I2C设备的操作可分为写单个存储字节,写多个存储字节,读单个存储字节和读多个存储字节。存储方式如下图所示:

下面对I2C总线通信过程中出现的几种信号状态和时序进行分析。

①?总线空闲装填

I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

②启动信号(Start)

在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线的启动信号,它标志着一次数据传输的开始。启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态,如下图所示。

③停止信号(Stop)

在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。

④数据位传送

在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。只有在SCL为低电平期间,才允许SDA上的电平改变状态。

⑤应答信号(ACK和NACK)

I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。

如果接收器是主控器,则在它收最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号。

3 程序设计

我们根据EEPROM手册,需要按照I2C读写的要求,完成设备地址、寄存器地址、数据等读写。

i2c_master_top模块是对i2c_master_byte_ctrl模块的再次封装,完成一个寄存器的读写,由于不同的设备寄存器可能是8bit,也可能是16bit,这里i2c_addr_2byte信号来控制寄存器地址是8位还是16位。

i2c_master_top模块状态机,如果是写寄存器操作,先写一个字节设备地址(写操作),再写1个字节或2个字节的寄存器地址,再写一个字节的数据;如果是读操作,先写一个字节的设备地址(写操作),再写1个字节或2字节的寄存器地址,完成地址的写入,再次写设备地址(读操作),然后读取一个字节的数据。不管怎么说,程序设计都是要满足芯片时序要求的,所以在阅读程序之前最好先把芯片的数据手册仔细阅读一遍。

 

i2c_master_top状态机

i2c_eeprom_test模块完成EEPROM的读写,EEPROM设备地址是A0,程序中将地址00的数据读出,然后通过LED显示,在KEY2按下时,数字加一并再次写入EEPROM并显示出来。在I2C控制器中,代码的大部分功能在备注中也有很多批注。

4 实验现象

下载实验程序后,可以看到LED显示一个二进制数字,这个数字是存储在EEPROM中00地址的数据,数据是随机的,这个时候按键SW1按下,数字加一,并写入了EEPROM,再次下载程序,可以看到led灯直接显示掉电之前的数值。

部分代码展示:

//?Copyright?1986-2017?Xilinx,?Inc.?All?Rights?Reserved.
//?--------------------------------------------------------------------------------
//?Tool?Version:?Vivado?v.2017.4?(win64)?Build?2086221?Fri?Dec?15?20:55:39?MST?2017
//?Date????????:?Thu?Apr?18?10:37:27?2019
//?Host????????:?LAPTOP-NMQVIF8I?running?64-bit?major?release??(build?9200)
//?Command?????:?write_verilog?-force?-mode?synth_stub
//???????????????D:/xilinx_work/at7_prj/at7_prj_08/at7_prj/eeprom_test.srcs/sources_1/ip/ila_0/ila_0_stub.v
//?Design??????:?ila_0
//?Purpose?????:?Stub?declaration?of?top-level?module?interface
//?Device??????:?xc7a50tcsg324-1
//
  • 2-24110Q95312B8.docx
    下载

相关推荐