基于FPGA的AT24C32控制电路设计

时间:2022-05-16 05:47:22

基于FPGA的AT24C32控制电路设计

中图分类号:TP 文献标识码:A 文章编号:1007-0745(2012)12-0048-02

摘要:本文介绍了现场可编程门阵列FPGA与AT24C32器件的接口设计方法。其特点是用VHDL语言编程,利用FPGA的普通I/O口模拟产生IIC总线协议的接口信号时序,实现FPGA与AT24C32的数据通信。本文给出了FPGA与IIC总线存储器件AT24C32连接的硬件和软件设计的应用实例。

关键词:FPGA IIC总线 VHDL I/O口

1、引言

现场可编程门阵列FPGA(Field Programmable Gate Array)是新一代可编程逻辑器件。FPGA功能强大,可以实现所有数字电路功能,具有结构灵活,设计周期短,密度高,性能好等多种优点,广泛应用于数字设计和电子生产中。

IIC总线(Intel IC Bus)是由Philips公司推出的一种串行扩展总线,它与并行总线相并,有如下突出的优点:规范完整,结构简单,易于实现用户系统软硬件的模块化、标准化等,因此IIC总线在简单的数字通信中应用十分普遍。IIC总线器件必须由一个主器件控制,在传统设计中以单片机或CPU作为主器件,本设计中采用可编程逻辑器件FPGA作为主器件,用FPGA的普通I/O口模拟IIC总线与器件AT24C32直接相连,实现FPGA与IIC总线器件的数据通信。二者实现数据通信的最关键地方是需要严格遵守IIC总线协议来进行设计。

2、IIC总线协议

IIC总线有严格的规范,IIC总线有两条串行接口,即SDA串行数据线和SCL串行时钟线。SDA是一个双向数据端口,用于传输地址和数据进入器件或从器件发出数据。SCL串行时钟端用于同步进入器件或从器件发出数据。

(1)开始(START)和停止(STOP)数据传送

当时钟线SCL为高,SDA线由高到低变化决定开始条件。所有的命令都必须在开始条件以后进行。当SCL线为高,SDA线由低到高变化决定停止条件。所有的操作都必须在停止条件以前结束。总线开始和停止数据传送的时序见图1。

(2)数据有效

在开始条件以后,时钟信号SCL的高电平周期期间,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作。在时钟信号SCL的低电平周期期间,数据线上数据才允许改变。每位数据需要一个时钟脉冲。IIC总线的数据位传输时序见图2。

(3)确认(ACKNOWLEDGE)

在每一个字节接收后,当寻址时,接收器件必须产生一位确认信号位(ACK)。主器件产生一个与确认位相应的额外时钟脉冲(第九个脉冲),发送器在这一时钟位上释放数据线,使其处于高电平状态,接收器须将SDA线拉为稳定的低电平,可确认器件。IIC总线的应答信号时序见图3。

(4)从器件地址

总线规范中采用了七位地址,总线上每个从器件地址由四位器件编号地址和三位引脚地址给定,七位地址数据D7 ~ D1位,D7 ~ D4为器件码,D3 ~ D1为片选码。D0为数据传输方向位,高电平为主器件从从器件读取数据,低电平为主器件将数据写入从器件。ATMEL公司的IIC总线器件AT24C32的控制字节配置见表1。其中片选为该器件输入引脚A2A1A0的状态,本设计中这三位均接地,即都为低电平。

3、应用实例

3.1 硬件设计

FPGA芯片选用XILINX公司的XC2V250作为主器件。FPGA的普通I/O口11脚和12脚分别模拟时钟线和数据线与AT24C32的SCL和SDA相连,AT24C32的A2A1A0引脚接地。另外,FPGA还与计算机的ISA插槽相连,计算机主要是用来给FPGA发送数据。硬件连接图见图4。

3.2 软件设计

FPGA主要完成两个功能:①接收计算机送来的相关数据并存储在FPGA内。②根据IIC通信协议的时序要求完成与AT24C32的数据交换。本设计中IIC总线接口分为两个模块:IIC控制模块和IIC数据传输模块。为实现计算机对AT24C32的控制和采集AT24C32的数据,一方面用C语言编写对AT24C32读写数据的界面程序,另一方面用VHDL语言编写实现IIC总线协议的程序。计算机通过ISA插槽往AT24C32写控制数据的顺序是:先送AT24C32的器件地址,再送AT24C32内部某个寄存器的地址,最后送控制数据。因为本系统是一主一从的IIC总线系统,分配3个计算机的I/O口(0200H、0201H、0202H)给FPGA上的IIC控制模块,0200H写器件地址(7位)和R/W位;0201H写AT24C32内部某个寄存器地址;0202H写这个寄存器的控制字。以下主要介绍IIC控制模块和IIC数据传输模块的实现方案。

本系统是基于ISE7.1平台开发的,其总体框图见图5。

3.2.1 IIC控制模块

该模块主要完成FPGA与ISA的数据交换。它主要由3个数据寄存器和1个控制/状态寄存器构成。其写操作过程是:当isa_addr为0200H时,此模块将isa_data上的数据存放到device_addr中;isa_addr为0201H时,isa_data上的数据存放到iic_addr中;isa_addr为0202H时,isa_data上的数据存放到iic_data中;isa_addr为0203H时,ISA往模块控制/状态寄存器的controller(0)写‘1’,使iic_process=‘1’开始IIC传送;当error=‘1’时,controller(1)=‘1’,告诉计算机IIC传输出错,进行出错处理。读操作过程是:当read_data_en=‘1’时,IIC控制模块将read_data送来的AT24C32数据送到isa_data上。

实现IIC控制模块的技术关键是:

①isa_data是双向引脚,我们可利用isa_read和isa_write做方向控制,当isa_read=‘0’时,isa_data做输出;当isa_write=‘0’时,isa_data做输入。

②因为ISA要在大约4个isa_clk后才动作,所以从isa_data输出的数据一定要在4个isa_clk后才送到isa_data上。

3.2.2 IIC数据传输模块

通过IIC数据传输模块可实现IIC严格的通信协议,其关键是严格遵守IIC的时序要求来发开始信号、停止信号和确认信号。在本设计中当iic_process=‘1’时,完成一个完整的IIC的读操作过程或写操作过程。注意一定要在SCL为高时,SDA出现下降沿发出启始信号;并且在传完一个字节后,主器件一定要将SDA线拉高,等待从器件发出响应信号;在SCL为高时,将SDA从低拉到高,发停止信号。另外,在实现过程中,还要注意SCL的时钟频率不能太高,否则会影响IIC传输的稳定性。

3.3 FPGA的实现

整个设计采用VHDL语言描述,在ISE7.1平台上完成了系统的仿真、综合、映射、布局。在仿真结果正确后,通过器件编程(即通过编程器将设计下载到实际芯片中)进行系统调试,直到最后实现。

4、结束语

本文介绍了一种简易的基于FPGA的AT24C32的控制电路设计方法。VHDL语言的可移植性和不依赖器件的特性,较之传统的设计方法,设计者能在更抽象的层次上把握和描述系统电路的设计结构和功能特性,使设计更具灵活性。

参考文献:

[1]侯伯亨 顾新. VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社.1999

上一篇:基于城市景观的道路网美学研究 下一篇:赤泥在煤矿井下巷道喷射混凝土中的应用分析