您的位置 首页 开关

FPGA烧写的方法和详细进程剖析

FPGA烧写的方式和具体过程分析-但是这次项目是个小型手持测量设备,JTAG接口只有在设备拆散状态下通过扩展板才能使用。组装好后FPGA只能通过Flash来编程。由于是个精密仪器,每次拆开再组装,整个设备都需要重新校准,非常费事费力。组装后更新Flash里面的配置文件只能用别的办法了。这种情况下常用的方法是通过一个和外界有通信能力的微控制器将image发送给FPGA, 再由FPGA写入Flash。

做了三年四个项目最近才第一次需求深化的搞一下FPGA 烧写。在这里简略总结一下FPGA烧写的详细进程和玩的把戏

咱们常用的办法

关于大部分人来说,至少入门时会用到的烧写办法就两种:

① 经过JTAG直接将bitsteam 烧录到FPGA。 断电后信息丢掉。这种办法多用于发开调试阶段,板子一向连着电脑。经过ISE 或许 Vivado (2020年开端估量还有Vitis)运用JTAG接口烧录。

② 在规划release今后,到产品上一般都是把装备文件经过IDE东西保存存在Nor Flash里。上电后主动编程FPGA。

较为进阶的一种办法

一般状况下这两种办法也就能够满意大部分需求了。开发调试直接JTAG。产品出货前,装备文件经过JTAG接口,用VIVADO或许SDK等东西烧进Flash。之后把接口封起来。产品需求更新的时分,派技术支持去,从头翻开接口,插上JTAG,把新的装备文件烧入Flash。

可是这次项目是个小型手持丈量设备,JTAG接口只要在设备离散状态下经过扩展板才干运用。拼装好后FPGA只能经过Flash来编程。由所以个精密仪器,每次拆开再拼装,整个设备都需求从头校准,十分费事吃力。拼装后更新Flash里边的装备文件只能用其他办法了。这种状况下常用的办法是经过一个和外界有通讯才能的微控制器将image发送给FPGA, 再由FPGA写入Flash。

FPGA烧写的办法和详细进程剖析

这种remote update Xilinx供给了一种解决计划,相对应的ApplicaTIon Note 是 :

QuickBoot Method for FPGA DesignRemote Update (文档号码XAPP1081)

选用这种计划的条件是了解FPGA经过Flash装备的细节,所以以7系FPGA为例先需求看一下这个文档:

7 Series FPGAsConfiguraTIon (UG470) 主要是看第五章:Chapter 5 ConfiguraTIon Details

Xilinx 长途烧录FPGA办法

长途烧录一般是为了设备出厂今后还需对FPGA进行更新或许晋级。为了避免在烧录进程中新的装备文件损坏,导致FPGA不能正常发动。一般采纳的是双保险战略,有个gold bitstream,是出厂是写入Flash的,是测验过肯定能够发动FPGA的,还有一个是update bistream,出厂时便是一个gold bitstream的copy,FPGA每次发动都是默许写读取这个update bitstream。之后的更新也便是去重写这个 update bitstream, 一旦在更新进程出了问题,比方忽然断电。update bistream危害或许残损,FPGA在测验从update bitstream发动失利后就会去读取gold bitstream。这种办法确保了一个相对安全的update办法,所以也是一种十分经典的办法。

去掉废话来归纳这种办法

每一个bitstream都长这样:

FPGA会先去找synchro word (7系列的spi接口的话便是0xAA995566)找到今后读取首地址,然后跳到首地址,开端读取一切的装备数据。

此文介绍的这种双保险战略便是在Flash中存入两个bitstream。可是精华地点是这两个Bitstream在内存中怎样放。

如下图所示,update的bitstream会被拆成两段,synchron word和首地址会被存在goldbitstream前面,然后其他部分存在goldstream之后。并且update bitsteam尾部还会人为参加一个CRC。

这种鬼畜结构的意图

这种结构能够供给一种十分安全可靠的update形式。为什么会安全可靠。先来说一下这种结构下的update流程:

当咱们想要update bistream的时分:

① 首要 update synchro word和首地址地点的sector(Flash里能够擦除的最小单元)会被擦除。

② 然后开端在update地点的当地擦除一切内容,写入新的bitstream。包含CRC。(这个CRC是生成bitstream的时分参加的。详细操作看下一章)。

③ 当写入完毕后整个新写入的内容会被读出来核算CRC,然后和嵌入的CRC来做比较。当CRC共同时,阐明在传输和写入进程没有呈现问题。新写入的装备内容完好,有用。这时update的synchro word和首地址才会写入最开端被擦除sector。

这样一来,假如CRC不共同,阐明这是个bad update,新写入的装备内容不可用。那么被擦除的synchro word 和首地址不会被写入。第一个sector是空的。当FPGA上电后,它是在这个sector里找不的update image的同步字和首地址的,继续读下去会读到归于goldbitstream的同步字和首地址。

如下图所示:

实际操作过程和文档中的坑

首要好消息是,上述的这些Flash擦除,写入,各种地址,sector,page等等Xilinx现已写好了VHDL的模块。能够直接拿来用。自己需求完成的是remote端往FPGA的数据传输。详细如下图:

详细完成过程如下:

① 完成remote端的update程序,该程序需求读取update image 然后经过某种接口和通讯协议将image发送给FPGA。这一步该需求和状况自由发挥。例如物联网的能够用蓝牙或许WIFI。

② 完成FPGA端的数据接纳。该模块将数据写入Xilinx供给的FlashProgrammer

③ 下载XAPP1081文档中的比如 KC705 Board DemonstraTIons, page 33。比如中两个VHDL模块按下图实例化。留意 这两个模块有必要共用一个时钟,并且这个时钟便是SPI的时钟,所以留意不要太快。一般20Mhz一下。

④ 集成前三条完成的模块,调试。能够完成将数据从remote端发送给FPGA,经过SPiFlashProgrammer写入Flash。

⑤ 把bitstream格局转化成mcs格局。将gold bistream。bit格局转化成mcs格局。VIVADO下运用tcl 指令write_cgfmen -format mcs -interface spix1。一定要加 -interface spix1,否则一切的bits都会被swap!

⑥ 经过Xilinx比如中供给的Perl Script生成 gold init image。script的输入便是方才转化的mcs格局的goldbitstream.mcs。输出之一是gold init image这个image便是图4中描绘的那种鬼畜布局的双bitstream,只不过两个bitstream是相同的。update bitstream是gold的copy。

⑦ 将gold inital.mcs经过VIVADO 或许PROMgen用JTAG直接烧入Flash

⑧ 相同的办法用Perl Script生成 update image。 输入是xxx.mcs。输出之一是xxx_update.mcs。这个便是上文所属的加了CRC的update image。生成进程中perl script会给出Flash的首地址和完毕地址。将SpiFlashProgrammer中的首尾地址改成这两个地址。留意:由于首尾地址是写在VHDL里的,也便是说Image的巨细是固定的。为了避免在未来,update image变大。能够预留一部分出来。例如:现在的巨细是3.3MB。咱们预留0.7MB给未来或许呈现的更新。那么咱们需求生成的image需求4MB大。这是要给perl script一个附加的agrument: -imagesize 32

⑨ 将xxx_update.mcs转化成.hex文件。网上有不少东西能够。真实不可谷歌一下mcs格局,自己写个script转化一下。

⑩ FPGA上电,撤销SpiFlashProgrammer的reset。 remote的软件读取xxx_update.hex,传输给FPGA,经由SpiFlashProgrammer写入Flash。

⑪ 写入后,查看Programmer的Status. Done输出1,一切Error Port输出是0的话,阐明update成功!

⑫ FPGA从头上电,查看FPGA内是否是由新的image装备的

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/85903.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部