APP下载

基于FPGA的SPI Flash配置存储器复用的实现

2018-01-05陈燕文莫璧铭

测试技术学报 2017年6期
关键词:存储空间扇区存储器

陈燕文, 韩 焱, 徐 磊, 莫璧铭

(中北大学 信息探测与处理技术山西省重点实验室, 山西 太原 030051)

基于FPGA的SPIFlash配置存储器复用的实现

陈燕文, 韩 焱, 徐 磊, 莫璧铭

(中北大学 信息探测与处理技术山西省重点实验室, 山西 太原 030051)

FPGA是一种基于SRAM技术制造的可编程器件, 内部数据具有掉电即失的特点. 因此, 配置电路是FPGA系统中必不可少的部分. 本文提出一种复用FPGA配置存储器的方法:配置存储器既能满足FPGA系统的配置需要, 又可以作为通用存储器满足用户存储数据的需求, 提高了配置存储器的利用率, 使得采集存储系统小型化、 集成化成为可能. 制定了SPI Flash复用的方案, 分析了复用配置存储器的可行性. 并且编写基于FPGA的SPI接口控制程序, 实现对配置存储器的擦除、 读写等操作. 利用Modelsim, Chipscope等调试工具验证了控制程序的可靠性.

FPGA; 配置存储器复用; SPI接口控制; Chipscope

FPGA(现场可编程门阵列)是在PAL, GAL, CPLD等可编程器件的基础上进一步发展的产物[1]. 目前主流的FPGA制造工艺均是基于SRAM技术, 这种技术使得FPGA能够实现较高的工作频率, 但是也决定了FPGA中数据掉电即失的特点[2-3]. 因此, 配置电路是FPGA系统中必不可少的一部分. 随着存储技术的快速发展, 存储颗粒密度越来越高, 储存器向大容量、 小体积方向发展[4-7]. FPGA的配置存储器往往在满足存储自身配置程序的同时, 仍富余较大的存储空间. 本文提出一种复用FPGA配置存储器的方案, 提高了存储器的利用率.

本系统采用Xilinx公司的Spartan6-LX16作为主控芯片、 华邦公司的W25Q128BV作为数据存储和配置芯片、 MAX1308作为数据转换模块, 设计构建了存储采集系统. 制定了SPI Flash配置芯片的复用方案, 编写了存储器控制程序, 并且对程序功能和复用方案进行了验证, 最终实现了对配置芯片的复用.

1 系统设计

图 1 系统框图Fig.1 System diagram

系统组成如图 1 所示, 本系统中使用的MAX1308模数转换芯片拥有8个采样通道、 最高采样率为1 MPS. MAX1308为并行数据传输, 采集一次产生的12 bit数据被同时输出至数据端口. FIFO1与FIFO2是位宽为8、 深度为1 024的数据缓冲器. 在采集完成之后, 数据的低8 b被写入数据FIFO1, 通道标识号(4 bit)和数据的高4 b被写入数据FIFO2. 在SPI读写控制器的协调下, 数据被有序地从FIFO中读出并写入SPI FLASH. 系统中的SPI FLASH为复用存储器, 既能满足FPGA系统的配置需要, 又可以作为通用存储器满足用户存储数据的需求.

2 复用方案设计

2.1 FPGA配置方式

按照主从关系划分, FPGA中常用的配置方式有主动配置、 被动配置和JTAG配置[8], 按照数据总线的位宽又可分为串行配置和并行配置[9-10]. 本文中使用SPI Flash作为程序存储器的配置方案是主动串行配置方式的一种. Xilinx公司Spartan6系列芯片程序加载过程如图 2 所示.

图 2 程序加载过程Fig.2 Program loading process

Spartan 6系列FPGA程序加载方式可以通过模式控制引脚M[1∶0]进行选择. 在采用SPI主动串行配置方式时, M[1∶0]应被设置为10. 在FPGA系统上电之后, 外部向FPGA的PROGRAM_B引脚送入一个宽度不小于500ns的低脉冲, 清除配置空间, 重启配置过程[11]. 接下来初始化标志位INT_B拉低并对模式控制引脚进行采样, 当初始化完成之后INT_B拉高. 随后FPGA通过CCLK引脚将时钟送入存储控制器, 并且向FLASH发送读命令及数据起始地址[12]. 在接受到读命令和地址信息之后, FLASH将配置信息有序地放入DOUT引脚供FPGA读取[13].

2.2 SPI FLASH的复用

在完成配置程序的加载之后, CCLK, DIN, DOUT, CSO等引脚恢复成为普通的用户引脚, 这使得在不改变硬件连接的前提下, 利用配置FLASH余下的存储空间成为可能.

图 3 配置空间与用户通用存储空间分配Fig.3 Allocation of space and user general storage space allocation

对于确定型号的FPGA来讲, 配置文件所需要的储存空间是一定的. 厂家会在芯片手册中对配置文件的大小进行说明. 以Spartan 6 系列中LX16型芯片为例, 配置的bit文件的大小为3 731 264 bit, 约为456 KB. 为了满足第三方存储器对数据格式的要求, 开发工具还需要将bit文件转换为MCS文件. 在转换过程中, 加入了校验及地址信息, 因此转换之后文件所占的空间变大, 转换之后的文件大小为2 MB. 本课题中用到的W25Q128BV配置存储器容量为16 MB, 按照配置程序在存储器中的存放规则, 将前2 MB的空间作为程序的配置空间, 后14 MB作为用户的通用存储空间. 配置空间与通用存储空间对应地址关系如图 3 所示.

3 SPI FLASH接口控制程序的实现

设计中使用的W25Q128BV型SPI FLASH存储空间为128 Mbit, 由65 536页组成. 页是该Flash最基本的组成单元, 一页的容量为256 Byte. 16页组成一个扇区sector(4 KB), 8个扇区组成一块block(32 KB). 该芯片具有先进的写保护机制, 并且具有整体擦除和扇区擦除、 灵活的页编程指令和写保护功能.

3.1 FLASH读写操作

本节重点介绍页编程操作、 数据读取操作、 扇区擦除操作的过程. 本设计中供用户存放数据的地址区间为200 000H-FFFFFFH, 因此存储器的读写及擦除操作均是以200 000h为起始地址.

3.1.1 页编程操作

在片选信号CS拉低之后, 外部向FLASH写入页编程令码02H, 随后写入所要目标区域的地址. 地址的一般格式为一个标准的页地址, 即数据位的低8 b全为‘0’. 当写入地址的低8 b不为‘0’时, 若数据写入时钟周期数多于剩余的字节位数, 则在完成从当前位置写到结束位置之后重新回到开始位置进行数据写入, 若数据写入时钟周期数小于或者等于剩余的字节位数, 则在时钟结束之后就停止数据的写入.

在写入地址之后, 向FLASH发送256B的数据. 在数据编程期间BUSY信号为1. 在FLASH完成数据编程后, 状态寄存器WEL位转换为‘0’. 若要进行下一页数据的编程, 需要在BUSY信号拉低之后向FLASH写入写使能命令将WEL位置至1. 图5是读操作程序的仿真图形. 对比图 4 与图 5 可以发现, 二者时序操作一致.

图 4 页编程操作时序Fig.4 Page programming sequence

图 5 页编程仿真波形Fig.5 Programming simulation waveform

3.1.2 数据读取操作

该FLASH支持数据单字节读出和多字节读出. 在片选信号CS拉低之后, 向FLASH写入数据读取命令码03H, 然后写入所要读取区域的地址. 在地址写入之后, FLASH在下一个时钟下降沿时将目标地址的数据加载到数据输出端口. 若片选信号和时钟信号一直有效, FLASH的地址会自动递加并且将数据加载到数据输出总线, 直到将FLASH中所有数据读出. 设计中使用此种模式对SPI FLASH进行读操作. 图 7 是Verilog程序仿真图.

图 6 读操作时序图Fig.6 Reading operation sequence diagram

图 7 读操作仿真图Fig.7 Read operation simulation

3.1.3 擦除操作

擦除操作可以将存储器中的存储字节由‘0’置为‘1’, 而写数操作只能将‘1’置为‘0’. 因此, 擦除操作是数据写入FLASH之前必须要进行的步骤. W25Q128BV型FLASH支持3种擦除方式: 扇区擦除、 块擦除和双块擦除. 本设计中使用扇区擦除方式对FLASH进行格式化.

图 8 扇区擦除操作时序Fig.8 Sector erase operation sequence

由图 8 可以看出, 在片选信号有效之后向FLASH中写入擦除命令码20 H. 随后写入所要擦除区域的地址即可. 数据擦除期间BUSY为1. 在擦除命令执行之后, 状态寄存器WEL位转换为‘0’. 若要进行下一地址的擦除, 需要在BUSY信号拉低之后向FLASH写入写使能命令将状态寄存器的WEL标志位至1. 图 9 是程序仿真图.

图 9 擦除操作仿真图Fig.9 Erase operation simulation diagram

3.2 SPI接口设计

该型FLASH支持3种SPI模式, 本设计中使用标准SPI模式. SPI的时钟为25 MHz, 使用的是模式3, 即在不工作时时钟线是低电平, 在时钟下降沿时将数据锁存进设备. 为了便于程序的编写, 现对命令码进行分类编码, 如表 1 所示.

根据SPI的基本控制时序及FLASH对于时序的要求, 编写控制程序. 控制状态机如图 10 所示.

表 1 命令码编码

图 10 SPI控制状态机Fig.10 SPI control status machine

当前状态为IDLE时, 不断查询外部是否有命令码写入. 若有命令码写入跳转至cmd_send状态. cmd_send状态时, 首先让spi的片选及时钟使能信号有效, 并且完成命令码的接收. 然后根据接收命令码的类型判断状态机下一步的转向. 如果接收到命令码为写使能或写无效命令则直接转到完成状态fini_done; 如果是读状态命令跳转则到读等待状态, 并且把所要读的数据个数置为1(读一个字节)、 位数置为7(8 b); 若是为其它命令码, 则转至地址发送状态addr_send. 在地址发送完成之后, 再次对命令码类型cmd_type进行判断. 处于写状态writ_data时, FIFO控制器将数据从FIFO1和FIFO2中读出并完成并串转换, 在时钟时加载至数据输入总线. 在完成读写数之后, 转向完成状态fini_done. 处于完成状态fini_done时, spi的片选及时钟使能信号均转成无效.

4 调试与分析

程序是在ISE14.2环境下编写的, 结合自带的嵌入式逻辑分析仪Chipscope进行在线调试分析. 调试时对系统输入的模拟信号为峰值为5 V、 直流偏置为+2.5 V、 频率为1 kHz的正弦波, 将AD的采样率设置为400 KPS. 通过设置触发条件抓取不同采集通道上的数据. 图 11, 图 12 给出的是采集通道为1时的板级信号.

图 11 板级信号Fig.11 Board level signal

图 12 数据波形Fig.12 Data waveform

在写入读命令和地址(200000H), 测试时采集线连接flash_addr的高16 b, 因此显示的是2000H)之后, SPI Flash在时钟下降沿时将目标地址的数据加载至数据输出端口. FPGA在上升沿时把数据锁存进读寄存器(mydata_o)并完成移位操作. 图12是以波形形式显示的读寄存器中数据. 对比模拟输入与的数据输出, 二者数据一致. 关闭系统电源之后, 重新给系统上电, FPGA将SPI Flash中的配置程序加载至片内. 此时程序同样能够实现预设的功能, 说明用户写入的数据并未对配置程序产生影响, 验证了复用方案的正确性.

5 结 论

本文设计了一种复用FPGA配置存储器方案, 并且经过仿真与在线调试验证了复用方案的可行性. 此种方案使得FPGA的配置存储器的存储空间得到充分利用, 并且节省采集卡板的空间, 使得采集存储系统小型化、 集成化成为可能. 此外, 本设计中采用的是模块化设计, SPI控制程序可以作为一个模块被例化进其他工程中, 因此具有很高的兼容性.

[1] 黄耀兴. 现场可编程门阵列性能初探[J]. 硅谷, 2011(5): 193.

Huang Yaoxing. Preliminary performance of field programmable gate array [J]. Silicon Valley, 2011(5): 193. (in Chinese)

[2] 李骞, 汪学刚, 李汉钊. 基于3-DES算法的FPGA加密应用[J]. 电子技术应用, 2008, 34(1): 132-134.

Li Qian, Wang Xuegang, Li Hanzhao. Application of FPGA encryption based on 3-DES algorithm[J]. Application of Electronic Technology, 2008, 34(1): 132-134.(in Chinese)

[3] 李艳, 张东晓, 于芳. RTL综合中FPGA片上RAM工艺映射[J]. 电子学报, 2016, 44(11): 2660-2667.

Li Yan, Zhang Dongxiao, Yu Fang. RTL synthesis, FPGA on chip RAM process mapping, Acta[J]. Acta Electronical Sinica, 2016, 44(11): 2660-2667.(in Chinese)

[4] 郑文静, 李明强, 舒继武. Flash存储技术[J]. 计算机研究与发展, 2010, 47(4): 716-726.

Zheng Wenjing, Li Mingqiang, Shu Jiwu. Flash storage technology[J]. Computer Research and Development, 2010, 47(4): 716-726. (in Chinese)

[5] Grupp L M, Caulfield A M, Coburn J, et al. Characterizing flash memory: anomalies, observations, and applications[C]. Ieee/acm International Symposium on Microarchitecture. IEEE, 2010: 24-33.

[6] 高剑, 郭士瑞, 蒋常斌. FLASH存储器的测试方法[J]. 电子测量技术, 2008, 31(7): 117-120.

Gao Jian, Guo Shirui, Jiang Changbin. Test methods for FLASH memory[J]. Electronic Measurement Technology, 2008, 31(7): 117-120. (in Chinese)

[7] Kang D, Jeong W, Kim C, et al. 256 Gb 3 b/Cell V-nand Flash Memory With 48 Stacked WL Layers[J]. IEEE Journal of Solid-State Circuits, 2017, 52(1): 210-217.

[8] 张立哲, 刘丽静. 适应远程升级的FPGA配置方法[J]. 计算机与网络, 2011(14): 56-59.

Zhang Lizhe, Liu Lijing. FPGA configuration method for remote upgrade[J]. Computer and Network, 2011(14): 56-59. (in Chinese)

[9] Wirthlin M, Johnson E, Rollins N, et al. The reliability of FPGA circuit designs in the presence of radiation induced configuration upsets[C]. IEEE Symposium on Field-Programmable Custom Computing Machines. IEEE Computer Society, 2003: 133.

[10] 宁李谱, 杨宾峰, 苗青林. FPGA器件的配置方式研究[J]. 河南科技学院学报(自然科学版), 2008, 36(3): 109-110.

Ning Lipu, Yang Binfeng, Miao Qinglin. Study of configuration schemes of FPGAs[J]. Journal of Henan Institute of Science and Technology (Natural Science Edition), 2008, 36(3): 109-110. (in Chinese)

[11] 李飞飞, 苏延川, 王鹏. 基于DSP的FPGA配置方法研究与实现[J]. 现代电子技术, 2011, 34(24): 60-62.

Li Feifei,Su Yanchuan,Wang Peng. Research and implementation of FPGA configuration with DSP[J]. Modern Electronics Technique, 2011, 34(24): 60-62. (in Chinese)

[12] Xie T T. A FPGA Configuration Method for Improving System Initial Efficiency[J]. Computer & Modernization, 2012, 203(7): 215-217.

[13] Gomez-Cornejo J, Zuloaga A, Villalta I, et al. A novel BRAM content accessing and processing method based on FPGA configuration bitstream[J]. Microprocessors & Microsystems, 2017, 49: 64-76.

ImplementationofMemoryMultiplexinginSPIFlashConfigurationBasedonFPGA

CHEN Yanwen, HAN Yan, XU Lei, MO Biming

(Key Laboratory of Information Detection and Processing Technology of Shanxi Province, North University of China, Taiyuan 030051, China)

FPGA is a programmable device based on SRAM technology, and the internal data in FPGA will be lost when the power fails. Therefore, the configuration circuit is an essential part of the FPGA system. This paper puts forward a method of multiplexing FPGA configuration memory: memory allocation can not only meet the needs of FPGA system configuration, but also be used as a universal memory data storage to meet needs of user. This method improves the utilization rate of the memory allocation, and makes it possible to make the acquisition storage system miniaturization and integration. Firstly, the scheme of SPI Flash reuse is worked out, and the feasibility of reusing configuration memory is analyzed. And the SPI interface control program based on FPGA is written to realize the erasure, reading and writing of configuration memory. The reliability of the control program is verified by using Modelsim, Chipscope and other debugging tools.

FPGA; the multiplexing of configuration memory; SPI interface control; Chipscope

1671-7449(2017)06-0491-07

2017-01-07

陈燕文(1994-), 男, 硕士生, 主要从事信息与通信工程、 智能信息处理等研究.

TN98

A

10.3969/j.issn.1671-7449.2017.06.005

猜你喜欢

存储空间扇区存储器
分阶段调整增加扇区通行能力策略
基于多种群协同进化算法的数据并行聚类算法
静态随机存储器在轨自检算法
苹果订阅捆绑服务Apple One正式上线
用好Windows 10保留的存储空间
管制扇区复杂网络特性与抗毁性分析
U盘故障排除经验谈
基于贝叶斯估计的短时空域扇区交通流量预测
存储器——安格尔(墨西哥)▲
基于Nand Flash的高速存储器结构设计