基于FPGA的SPI接口Flash控制器设计及其在存储配置数据中的应用

2014-09-06 08:34赵庆平李素文杜伟宁姜恩华
吉林大学学报(理学版) 2014年5期
关键词:开发板上位时钟

赵庆平,李素文,杜伟宁,姜恩华

(1. 淮北师范大学 物理与电子信息学院,安徽 淮北 235000; 2. 空军航空大学 飞行训练基地,长春 130062)

基于FPGA的SPI接口Flash控制器设计及其在存储配置数据中的应用

赵庆平1,李素文1,杜伟宁2,姜恩华1

(1. 淮北师范大学 物理与电子信息学院,安徽 淮北 235000; 2. 空军航空大学 飞行训练基地,长春 130062)

针对现场可编程门阵列(FPGA)丰富的逻辑资源及产生精确时序的能力,给出一种基于FPGA的SPI控制器的设计方法. 可方便地对SPI flash进行读写、 擦除等操作,从而能快速、 准确地存储数据. 在SPI控制器设计过程中使用Modelsim进行仿真验证,并用VHDL硬件描述语言进行编程,下载到FPGA开发板上进行测试,对SPI接口flash进行操作,证明了系统设计方法的正确性和可靠性,该方法对flash存储控制系统的设计具有普遍适用性,实现了对以FPGA为控制核心的系统数据长时间存储.

串行外设接口控制器; 现场可编程门阵列; VHDL设计; Modelsim仿真

现场可编程门阵列(field programmable gate array,FPGA)是在PAL,GAL,EPLD和CPLD等可编程逻辑器件基础上发展的产物[1]. 由于FPGA芯片需要被反复烧写,因此只能采用一种易于反复配置的结构. 目前主流的FPGA都采用基于SRAM工艺的查找表结构,由于FPGA采用SRAM工艺,芯片无易失性,所以掉电后易丢失其内部的逻辑配置.

串行外设接口(serial peripheral interface,SPI)是一个快速、 多双工、 支持串行通信的接口,主要用于微型处理芯片、 小控制器及与外围扩展器件间进行连接[2-3]. 利用SPI flash大容量、 读写速度快、 成本低廉及数据在断电后不丢失的特点,可将FPGA的配置数据存储于SPI flash中.

本文采用美国Xilinx公司的Virtex-5和意法半导体公司的M25P16进行设计. 对SPI控制器进行仿真,符合SPI时序要求. 与PC机进行通信测试表明,写入和读出的数据相符. 将FPGA配置数据存储在M25P16中,实现了FPGA配置数据的掉电不丢失.

1 系统总体设计

设计使用美国Digilent公司出品的开发板Genesys,该开发板使用的FPGA芯片是Xilinx公司的Virtex-5,Virtex-5系列采用第二代高级芯片组合模块(ASMBLTM)列式架构,采用65 nm铜工艺技术,支持330 000个逻辑单元,6个时钟管理模块,1 200个用户接口,提供从1.2~3.3 V的广泛I/O标准范围,16.4 Mb的集成模块存储器,与SelectIO技术配合使用,简化源同步接口. Flash芯片采用意法ST Microelectronics公司的M25P16. 该芯片是16 Mb(2 M×8)串行flash存储器,兼容高速SPI接口. M25P16包含32个扇区,每个扇区有256页,每页256个字节. 该芯片由2.7~3.6 V单电源供电,最大50 MHz工作时钟,100 000次的擦除和重写,可保持20年时间. 系统的总体设计框图如图1所示. 图1中,FPGA作为电路核心,连接上位机和SPI flash存储器. 一方面接收来自上位机PC串口的数据,并将数据存储到flash中; 另一方面,从flash中读出数据并通过串口发送到上位机.

在FPGA芯片中需要构建3个模块,分别是UART控制器、 FIFO模块及SPI控制器,如图2所示.

图1 系统总体方案设计Fig.1 Overall designment of system

图2 FPGA内部模块设计Fig.2 Designment of FPGA internal module

上位机和FPGA间通过RS232进行通信. RS232是PC机通信常用的接口,遵循异步传输标准. RS232采用UART协议,需要在FPGA内构建UART模块,实现数据在上位机和FPGA间的传输. 在FPGA中构建SPI控制器,为flash提供时钟,并对其进行擦除和读写操作. UART和SPI模块的时钟不同,因此需要添加FIFO(即先进先出队列)作为两者间的数据缓冲. 因为接收的串口数据被串并转换为8字节,与之相连的FIFO位宽定为8字节,深度设为256个单元.

2 SPI接口工作原理

图3 SPI接口Fig.3 SPI interface

SPI接口可分为主机(master)和从机(slave)两部分,其结构框图如图3所示. 主机和从机间用4根数据线进行连通,分别为CS,SDK,MDSI和MISD[4],其中: CS为从机片选信号,由主机控制输出; SDK为同步时钟数据线,用于对主机及从机的内容传输实现同步,由主机向外发出控制输出,下位机则在SDK的上升沿及下降沿进行接收或发送数据; MDSI为主机用于输出、 从机用于输入信号,主机在下降沿时(或上升沿)由此信号线发数据给从机,而从机在上升沿时(或下降沿)由此信号线接收发来的内容; MISD为主机用于输入、 从机用于输出信号,从机在上升沿时(或下降沿)使用此信号线发送内容给主机,主机在下降沿时(或上升沿)使用此信号线接收该内容[5-6].

SPI工作原理: 当没有数据需要传输在主机和下位机间时,主机由控制SDK输出低电压,CS则输出高电压,SPI总线则处于不忙状态; 如果有内容需要进行传输时,主机可控制CS输出为高电压,SDK则输出为时钟信号,SPI总线则处于工作状态; 在某个时钟的边沿,从机或主机会并行发送数据,将内容各自传输到MDSI及MISD上; 而在下一个时钟沿时,从机或主机同时接收内容,各自将MISD及MDSI上的内容接收并进行存储; 而当内容全部传输完成后,主机就会控制SDK输出为空闲的电平,而CS则输出无效电位,SPI总线又回到空闲状态,至此,完成一个完整的SPI数据总线传送过程[7-9].

3 SPI控制器

SPI控制器的设计采用Verileg HDL硬件描述语言[10-11]. Verileg描述的器件在编译和综合时适应能力强,系统可自动优化[12]处理. 虽然对应语言的解读性能较弱,但仿真后的纠错能力较强. 本文设计的SPI控制器主要完成以下任务:

1) 写flash: 将上位机发送来的256字节数据写入flash的某页中;

2) 读flash: 从flash写有数据的一页中读出并传送到上位机显示;

3) 将FPGA配置数据存储在flash芯片内,重新上电,读取flash中数据对FPGA重新配置.

写flash操作首先要对flash进行擦除操作,输入擦除指令并等待3 s,然后进行写操作. 写操作要输入8位wren指令、 8位pp指令、 24位地址,随后输入数据,流程如图4所示. 由图4可见,写操作开始时处于检测输入状态idle,当有数据从上位机发送过来时,立即进入SPI工作模式; wren指令将写寄存器的写使能位WEL置1,输入擦除指令se和要擦除页的地址,等待3 s,这时写使能位WEL复位为0,重新输入wren指令并将WEL位置1; 输入页写指令、 页写地址和页写数据; 完成后回到检测状态. 读操作相对简单,输入读指令和读地址后,数据即从flash中输出,状态如图5所示. 由图5可见,读操作开始处于检测读使能状态,当允许读时,发送读指令和读地址,数据即从flash中输入到FPGA芯片内,经过FIFO传送到上位机进行显示.

图4 写操作Fig.4 Writing operation

图5 读操作Fig.5 Reading operation

4 仿真与调试

本文设计采用ISE+Modelsim的方法进行联合设计. ISE是Xilinx公司推出的EDA设计软件,它集成HDL代码编辑、 原理图编辑、 代码编译、 综合、 工程仿真及锁定管脚和下载程序的功能. ISE提供了设计开发工具的所有功能,支持Xilinx的全系列逻辑器件产品,并集成了XST综合工具,支持核生成工具和PACE. 明导国际公司的Modelsim是目前广泛使用的HDL硬件描述语言的仿真软件,能很好地仿真测试环境,可以单内核支持VHPL和Veralog HDL混合仿真的软件[10]. 写操作的仿真结果如图6所示.

图6 写操作仿真结果Fig.6 Simulation result of writing operation

由图6可见,当上位机有数据发送到FPGA时,接收并放在FIFO中. FIFO存储满后,FPGA使能SPI控制器开始工作. 在scl信号的下降沿准备指令、 地址,并从FIFO中读出数据,逐位在scl上升沿输入到flash中.

读操作的仿真结果如图7所示. 由图7可见,当要读取flash中的数据,使能读信号start_read,然后SPI控制器进入读数据状态. 在scl的下降沿flash输出数据,在scl上升沿采集到FPGA芯片中,缓存在FIFO中. FIFO写满后,由串口回传给PC机,进行核对.

图7 读操作仿真结果Fig.7 Simulation result of reading operation

由仿真结果可见,该设计方案满足了时钟和数据的建立和保持时间,可避免毛刺的产生. 在仿真通过后,将工程下载到开发板上进行运行测试. 本文使用的开发板是Digilent公司的Xilinx FPGA开发板. 下载测试: 上位机发送到FPGA写入flash芯片的256字节数据,再用FPGA读出flash中刚存储的数据并返回到上位机. 若结果完全相同,则表明SPI flash读写测试成功,如图8所示.

图8 读取SPI flash数据Fig.8 SPI flash data reading

最后,将FPGA编译产生的数据下载到该SPI flash芯片中,重新上电,系统动加载硬件数据,实现了FPGA配置数据的掉电不丢失功能.

综上所述,本文介绍了基于FPGA的SPI控制器设计方法,并使用Digilent公司的FPGA开发板Genesys进行了验证. 结果表明,该方法能完成SPI flash控制器的逻辑仿真,可以对SPI flash的读写进行验证,利用此flash实现了对FPGA重新上电的自动配置功能. 本文设计在FPGA芯片上实现,具有较高的可移植性,控制器经过简单修改即可应用于控制其他型号的SPI flash芯片,具有广泛的适用性.

[1]蔚接锁. 基于FPGA与流水线CORDIC算法的FFT处理器的实现 [D]. 天津: 天津大学,2009. (WEI Jiesuo. The Implementation of a FFT Processor Based on FPGA and CORDIC Algorithm [D]. Tianjin: Tianjin University,2009.)

[2]罗莉,夏军,邓宇. 通用SPI Flash控制器的设计与验证 [J]. 计算机工程,2011,37(8): 22-24. (LUO Li,XIA Jun,DENG Yu. Design and Verification of General SPI Flash Controller [J]. Computor Engineering,2011,37(8): 22-24.)

[3]郑川. Step by Step现场可编程门阵列设计入门与进阶 [M]. 西安: 西安电子科技大学出版社,2008. (ZHENG Chuan. Design of Step by Step Field-Programmable Gate Array [M]. Xi’an: Xidian University Press,2008.)

[4]唐琳,方方,张保静,等. 基于ARM的多通道SPI Flash控制器设计 [J]. 核电子学与探测技术,2012,32(5): 583-586. (TANG Lin,FANG Fang,ZHANG Baojing,et al. Design of a Multi-channel SPI Flash Controller Based on STM32 [J]. Nuclear Electronics & Detection Technology,2012,32(5): 583-586.)

[5]关珊珊,周洁敏. 基于Xilinx FPGA的SPI Flash控制器的设计与验证 [J]. 电子器件,2012,35(2): 216-220. (GUAN Shanshan,ZHOU Jiemin. Design and Verification of SPI Flash Controller Based on Xilinx FPGA [J]. Chinese Journal of Electron Devices,2012,35(2): 216-220.)

[6]赵新雨,许忠仁,付贵增,等. 基于FPGA与单片机的SPI接口的实现 [J]. 工业仪表与自动化装置,2010(2): 32-33. (ZHAO Xinyu,XU Zhongren,FU Guizeng,et al. The Design of SPI Interface Connection Based on FPGA and MCU [J]. Industrial Instrumentation & Automation,2010(2): 32-33.)

[7]王松. 基于FPGA的串行外围接口SPI设计与实现 [J]. 微计算机信息,2010,26(11): 117-119. (WANG Song. Design and Implementation of Serial Peripheral Interface Based on FPGA [J]. Microcomputer Information,2010,26(11): 117-119.)

[8]杨翰文. 基于FPGA的单向网闸专用控制系统的设计与实现 [D]. 北京: 北京交通大学,2010. (YANG Hanwen. Design and Implementation of FPGA-Based One-Way GAP-Specific Control System [D]. Beijing: Beijing Jiaotong University,2010.)

[9]侯伟先. 基于FPGA的IP核设计技术在惯测系统中的应用与研究 [D]. 长沙: 国防科学技术大学,2009. (HOU Weixian. Research and Application of IPcore Design Technique Based on FPGA in Inertial Measurement System [D]. Changsha: National University of Defense Technology,2009.)

[10]张萍. 基于Verilog语言的DDS设计与仿真 [D]. 西安: 西安电子科技大学,2007. (ZHANG Ping. Design and Simulation of DDS Based on Verilog HDL [D]. Xi’an: Xidian University,2007.)

[11]程琤. 几种硬件描述语言HDL的现状与发展 [J]. 重庆工业高等专科学校学报,2004,19(5): 36-38. (CHENG Cheng. The Status Quo and Development of Several Hardware Description Languages [J]. Journal of Chongqing Polytechnic College,2004,19(5): 36-38.)

[12]孔昕,吴武臣,侯立刚,等. 基于Verilog的有限状态机设计与优化 [J]. 微电子学与计算机,2010,27(2): 180-183. (KONG Xin,WU Wuchen,HOU Ligang,et al. Verilog Design and Optimization of FSMs [J]. Microelectronics & Computer,2010,27(2): 180-183.)

(责任编辑: 韩 啸)

DesignofSPIInterfaceFlashControllerBasedonFPGAandApplicationinStoringConfigurationData

ZHAO Qingping1,LI Suwen1,DU Weining2,JIANG Enhua1(1.SchoolofPhysicsandElectronicInformation,HuaibeiNormalUniversity,Huaibei235000,AnhuiProvince,China;
2.FlightTrainingBasic,AviationUniversityofAirForce,Changchun130062,China)

The authors presented a designed method using serial peripheral interface controller based on field programmable gate array. Using logic resources of FPGA with the ability to produce accurate time series,we can expediently read-write and wipe SPI flash and store data rapidly and accurately. It also expounds the designing process of SPI controller,which utilizes the simulation and verification by Modelsim and uses VHDL hardware description language to programme. Then we downloaded the program to FPGA development board to test and verify the read-write and wipe SPI flash and finally operated the SPI interface flash. It is proved that the method is correct and reliable,and has general applicability to the system designment of the flash controller. This method with FPGA as the control core of system achieved data storage for a long time.

serial peripheral interface (SPI) controller; field programmable gate array(FPGA); VHDL design; Modelsim simulation

2014-04-11.

赵庆平(1972—),男,汉族,硕士,讲师,从事FPGA及嵌入式系统设计的研究,E-mail: zhaoqingping1215@163.com.

国家自然科学基金(批准号: 41275027)和安徽省高校自然科学研究项目(批准号: KJ2013Z228).

TP332.3

A

1671-5489(2014)05-1022-05

猜你喜欢
开发板上位时钟
别样的“时钟”
古代的时钟
特斯拉 风云之老阿姨上位
Microchip最新推出两款PIC32 Curiosity开发板
有趣的时钟
浅析单片机开发板的设计与制作
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
时钟会开“花”
以新思路促推现代农业上位