APP下载

基于FPGA的极简在系统编程设计

2017-09-03叶兵唐智慧贺孟

单片机与嵌入式系统应用 2017年8期
关键词:配置文件串口指令

叶兵,唐智慧,贺孟

(中国电子科技集团公司 第三十研究所,成都 610041)

基于FPGA的极简在系统编程设计

叶兵,唐智慧,贺孟

(中国电子科技集团公司 第三十研究所,成都 610041)

针对FPGA程序在线编程与加载问题,提出一种极其简单的基于PicoBlaze6的FPGA高可靠性在系统编程方法。基于此方法,实现了一个通过串口对SPI Flash在系统编程的设计,该设计着重阐述整个设计的工作原理与实现方法,并给出了带电重启与选择加载的实现时序仿真图与在系统编程的调试结果。调试结果表明,在系统编程得到成功实现,本设计已在工程实践中得到应用。

FPGA;PicoBlaze6;在系统编程;SPI;多重启动;自动回滚

引 言

在很多系统中,可编程逻辑器件(FPGA)的应用需要外置处理器配合实现,然而,对于小系统应用来说,外置处理器资源浪费多,成本开销大。FPGA 内嵌8位单片机PicoBlaze,应用简单[1],消耗资源极少,为上述问题提供了一个有效的解决途径。

目前业界FPGA在系统编程设计趋于多样化发展,例如模拟联合测试行为组织(JATG)接口、模拟串行外设接口(SPI)、模拟并行外设接口(BPI)等[2-4],但是基本都需要外置处理器配合实现,甚至需要软件程序启动之后才能进行,存在实现方法复杂、接口多、设计麻烦、冗余性差、通用性差、可移植性差、程序配置文件更新麻烦等一些问题。

针对上述问题,提出了一种支持串口在线更新FPGA配置文件的在系统编程方法。系统设计支持计算机串口在系统编程更新FPGA程序配置文件:一方面,不需要外置处理器,单独通过终端串口更新FPGA配置文件,应用简单;另一方面,系统对软件应用层只提供简单的标准串口,接口简单实用,可靠性强,应用广泛,通用性强。同时,设计冗余性特别强,支持FPGA程序更新加载配置文件失败后,自动回滚加载升级前一个版本的配置文件工作,能够避免FPGA升级更新失败所导致的死机问题,用户通过查询FPGA版本号能够快速知道FPGA升级成功与否。本系统的在系统编程设计可移植性强,可移植应用到包含PicoBlaze6的Xilinx FPGA平台系统[5]。

1 FPGA加载简介

FPGA支持多种加载模式,如Master Serial/SPI、Master SelectMAP/BPI、JTAG、Slave SelectMAP和Slave Serial等。

部分Xilinx FPGA支持多个配置文件的多重启动加载,FPGA通过多重启动可从FLASH内存储的多个配置文件中选择加载。FPGA自身可触发多重启动功能,重启FPGA配置过程,重新加载一个新的FPGA 配置文件,同时,部分Xilinx FPGA支持FPGA配置文件加载失败后自动回滚加载回滚存储区域配置文件。

2 PicoBlaze6基本原理

PicoBlaze68位微控制器KCPSM6是Xilinx公司推出的一款FPGA内嵌处理器软核,适用于Xilinx公司的Spartan6、Virtex6和7系列FPGA应用,只需要26个Slice和1个BRAM,消耗资源只相当于XC6SLX4的4.3%与XC6SLX150T的0.11%,资源占用率非常低。

KCPSM6支持52~119 MIPS的指令执行速度,指令执行速度与FPGA器件和器件速度等级有关系。KCPSM6的原理框图如图1所示,主要由以下部分组成:① 暂存寄存器:64字节、128字节与256字节;② 两块寄存器A和B:16个,8位位宽;③ 算术逻辑处理单元;④ 程序存储模块:最大支持4 KB指令存储;⑤ 译码与控制模块;⑥ I/O接口模块。

图1 KCPSM6原理框图

KCPSM6为用户工程开发提供VHDL/verilog源文件,同时,KCPSM6在线调试可使用Jtagloader迅速更新RAM中存在的KCPSM6程序执行文件,采用指令jtagloader-l your_program.hex即可实现KCPSM6程序运行指令的在线更新。

3 总体设计

系统设计主要分为三部分:硬件电路设计、FPGA逻辑设计与软件设计。设计实现了以PicoBlaze6为控制枢纽的FPGA 在系统编程功能。本设计通过计算机串口把需要更新的FPGA程序配置文件与Header头文件(记录FPGA配置文件启动信息与回滚信息)编程写入FPGA的SPI Flash中存储[6-8];FPGA重启后,检测文件版本,若版本正确,编程配置文件更新成功;若版本错误,编程配置文件更新失败,需重新通过计算机串口编程更新FPGA的程序配置文件。头文件、更新的配置文件与自动回滚的配置文件分别存储于Flash内三个不同的存储区域;配置文件启动区域和自动回滚区域是动态相互切换的;Header头文件决定了启动区域和回滚区域。整个在系统编程流程不用对FPGA重新上电或者复位操作。此外,设计实现多重启动选择加载功能,可通过指令操作控制ICAP实现完成。

FPGA上电后,FPGA加载头文件规定的启动信息区域的配置文件工作;如果启动信息区域的配置文件加载失败,FPGA自动回滚加载回滚区域的配置文件工作;当需要更新配置文件时,系统发指令更新FPGA回滚区域的配置文件并更新头文件,修改以前的启动信息地址为回滚区域的地址,以前回滚区域的地址为启动信息地址,实现了两个区域配置文件的交替更新并保存更新前一个版本的程序配置文件作为回滚区域配置文件。

FPGA程序配置文件加载流程如图2所示,上电工作,FPGA加载区域X的配置文件,串口在系统编程更新区域Z的配置文件与头文件,更新成功以后断电重启,若加载成功,FPGA加载区域Z的配置文件工作;加载失败,FPGA自动回滚加载区域X的配置文件工作。系统设计可以通过串口发指令读取程序版本号,判断FPGA程序是否更新成功。

图2 配置文件更新与加载流程图

在设计中,Header头文件、区域X和区域Z的Flash存储空间如表1所列。Header头文件存储启动地址的信息,决定了启动区域是X还是Z;如果启动区域是X,那么启动地址信息是0x01 0000,回滚地址信息是0x40 0000;如果启动区域地址是Z,那么启动地址信息是0x40 0000,回滚地址信息是0x01 0000。如果更新加载的是区域X的文件,那么设计更新区域Z存储的配置文件,并更新头文件修改启动信息地址为0x40 0000,回滚地址信息为0x01 0000;如果更新加载的是区域Z的文件,那么设计更新区域X存储的配置文件,并更新头文件(Header)修改启动信息地址为0x40 0000,回滚地址信息为0x01 0000。

表1 Flash存储区域划分

4 硬件设计

4.1 电路设计

如图3所示,系统硬件架构电路主要包括电源模块、FPGA、FPGA外围电路、串口芯片电路[9]、Flash电路、晶振电路等。

图3 系统硬件架构

在本系统的设计中,FPGA采用Spartan6系列的XC6SLX150T,串口芯片采用MAX3232,配置文件存储芯片采用SPI Flash M25P64;电源模块为FPGA提供了工作所需要的核电压、I/O电压与辅助电压等;晶振提供100 MHz时钟给FPGA;串口芯片实现FPGA I/O与计算机终端的电平匹配;设计通过SPI接口更新与加载程序配置文件;设计实现了串口与SPI接口数据通信协议的转换[10-11]。

4.2 FPGA逻辑设计

FPGA逻辑主要由串口模块、KCPSM6模块、执行指令RAM模块、ICAP模块组成,如图4所示。

图4 FPGA逻辑框图

串口模块分为串口收模块与串口发模块,实现115 200波特率的传输速率[12]。串口模块对外接口应用简单,只有收发数据两个接口,串口模块包括Xon/Xoff 软流控设计[13-16]。

KCPSM6模块是整个系统的工作枢纽,控制实现串口数据与SPI数据的相互转换。KCPSM6模块按照执行指令RAM模块里面存储的指令信息来运行的;执行指令RAM模块是由软件汇编代码编译后转化生成的FPGA代码文件;执行RAM模块按设计嵌入整个工程文件中。KCPSM6模块与执行指令RAM模块软件设计的相关信息将在下一节中详细介绍。

此外,设计实现了多重启动选择加载功能,通过重启指令操作控制ICAP的配置信息写入FPGA中,实现FPGA重启选择加载规划的两个区域内任意一个区域的配置文件。ICAP配置信息写入时序如图5所示,MLTBT_STRT_ADDR_H是启动地址信息,FLBK_STRT_ADDR_H是回滚信息地址,使能信号CONFIG_EN(KCPSM6模块输出)由低电平变为高电平,启动ICAP模块写入ICAP配置信息上电重启加载MLTBT_STRT_ADDR_H设置的启动区域的FPGA配置文件工作。

图5 ICAP配置信息写入时序仿真图

5 软件设计

PicoBlaze采用的是精简指令集,包括程序控制指令、算术指令、逻辑指令、移位和旋转指令、中断指令、存储指令和I/O指令等。

在该设计中系统软件分为三层:驱动层、内核层、事务层。驱动层负责访问外围硬件设备,这里指串口、 Flash接口、ICAP接口;事务层负责和上层软件接口,从上层应用程序接收或发送信息;内核层在驱动层和事务层之间,负责两层信息的字符转义和用于烧写Flash的MCS文件处理。具体架构如图6所示。

图6 软件架构框图

图6的每个框图都是一个子程序,这个程序架构的好处是,更改或减少任何一个子程序不需要改动其他子程序和程序架构,由此可见只要增加减少或更换Flash接口子程序就可适配各种类型的FPGA和Flash,而对上层应用程序提供标准统一的交互指令格式,上层应用程序只需按照标准数据格式下发接收指令和发送烧写程序文件,就可实现FPGA程序配置文件的烧写更新、上电多重启动与选择重启加载等功能,完全不用关心FPGA和Flash的种类型号。而且该程序为了版本识别以及防止非法访问,还设置了口令保护和版本控制功能。

6 结果分析

如图7所示,设计的板卡连接串口,输入指令I,可以读取Flash的ID——0x20 2017,验证电路系统是否正常工作。输入指令S,可以扇擦除Flash;输入指令U,设计对Flash区域X或Z编程更新,要求将MCS文件写入Flash中;编程完成后,设计会返回OK信号提示编程成功;输入指令X,重启加载区域X文件;输入指令Z,重启加载区域Z文件。如图8所示,输入指令D,可读取当前启动区域信息,为bootX,提示启动区域为X;输入指令M,写头文件到Flash中,修改配置文件启动信息;更新头文件后,输入指令D,可读取启动区域信息bootZ,提示启动区域为Z。重启板卡后,计算机串口编程前后打印信息对比显示:如图7所示,更新前,FPGA程序版本Version是170320B1;如图8所示,更新后,程序版本Version是170320B3;FPGA在系统编程更新成功。

图7 更新前串口打印

图8 更新后串口打印

结 语

[1] 魏厚刚,杨宽泗,孙武,等.KCPSM6 PicoBlaze的原理与应用[J].单片机与嵌入式系统应用,2013(2):77-78.

[2] 张江伟.基于Virtex_5和FLASH实现FPGA的多重配置[J].计算机与网络,2012(3):130-132.

[3] 李磊,张春妹,赵翠华,等.一种FPGA配置加载管理电路的设计与实现[J].微电子学与计算机,2015,32(8):146-153.

[4] 晏勇.基于MCU的FPGA系统在线配置及实现[J].陕西科技大学学报,2013,31(4):122-126.

[5] 张坤.基于FPGA的PicoBlaze嵌入式通信系统设计[J].电子科技,2016,26(5):53-56.

[6] 薛宏亮.基于SPI总线FLASH时序控制的FPGA实现[J].电子制作,2016(8):12-13.

[7] 王永利.基于FPGA的带寄存器寻址SPI接口设计[J].物联网技术,2013(3):45-47.

[8] 关珊珊,周洁敏.基于XilinxFPGA的SPI Flash控制器设计与验证[J].电子器件,2012,35(2):216-220.

[9] 党俊博,李哲,李雅俊.基于FPGA的串口通信电路设计与实现[J].电子科技,2016,29(7):106-109.

[10] 殷安龙,张持健,陈林,等.基于FPGA的多串口通信设计与实现[J].电子设计工程,2016,24(17):45-47.

[11] 满忠昊,权国栋,徐钊.基于FPGA多协议转换网关设计[J].煤矿机械,2015,36(8):298-301.

[12] 于中权,王一诚,吴大庆,等.基于SystemGenerator的UART通讯[J].计算机与现代化,2015(1):96-101.

[13] 贺春芝,夏银水,王伦耀.UART IP核的设计及其FPGA实现[J].浙江大学学报,2012,39(5):535-540.

[14] 杨澜,戚秀真.UART微控制器设计方法及其FPGA实现[J].电子科技,2016,26(6):72-74.

[15] 谢谢.基于FPGA的UART设计[J].电子设计工程,2012,20(16):51-53.

[16] 于志翔.基于FPGA的UART设计与实现[J].电子测量技术,2015,38(3):77-81.

叶兵(工程师),主要研究方向为电子与通信工程、电路设计等。

Minimalist in System Programming Design Based on FPGA

Ye Bing,Tang Zhihui,He Meng

(The 30th Research Institute of China Electronic Technology Group Corporation,Chengdu 610041,China)

Aiming at the FPGA online program and load problem,a kind of extremely simple in system programming method based on PicoBlaze6 is proposed.Based on this method,the design of a serial port to the SPI Flash in system programming has been completed.The working principle of the design and implementation method are focused on.Finally the reboot application and selecting loading simulation diagram and the debugging results are given.The debugging results show that in system programming has been successfully implemented.This design has already been used in engineering practice.

FPGA;PicoBlaze6;in system programming;SPI;multiboot;automatic fallback

TN79

A

�士然

2017-05-08)

猜你喜欢

配置文件串口指令
浅谈AB PLC串口跟RFID传感器的通讯应用
互不干涉混用Chromium Edge
ARINC661显控指令快速验证方法
忘记ESXi主机root密码怎么办
为View桌面准备父虚拟机
杀毒软件中指令虚拟机的脆弱性分析
打印机设置
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
一种基于滑窗的余度指令判别算法