概述:
针对复旦微对标xilinx的690T FPGA芯片进行程序固化,对不同方法的固化流程及固化时间对比,同时对固化后的加载过程进行测试并对比。通过使用不同方法固化及程序加载的对比分析,选出效率最高的一种方法。
一、程序固化方法
复旦微对标xilinx 690T芯片,使用xilinx相同的开发工具开发,目前使用Vivado 2018.3版本。通常在工程生成bit流文件以后,将bit文件转换为MCS文件或bin文件,可以直接使用vivado进行固化。但是根据复旦微描述,在直接使用vivado固化,在这个过程中编程flash不稳定,通过多次测试,确实存在这个问题,尤其是文件较大、固化到flash的时间较长时,容易固化失败,最后的校验结果通常会提示字节不匹配的报错信息。因此复旦微提供了一种专门解决此问题的插件,结合相应的文档说明按照流程可以实现程序的稳定固化。
1、复旦微固化方法:
参考《SPI_BPI编程工具使用说明_V1p5.pdf》文档,使用JFM_Kits插件,即可完成对bit文件转MCS文件后的固化。
2、使用vivado自带功能直接固化:
固化流程不在赘述。
3、固化前准备工作:
首先要通过vivado生成bit文件,在进行这个过程的操作前,首先要明确flash的型号,如果是国产对标型号,要先在vivado开发工具中找到对标的详细型号,确认flash的接口类型(x1/x2/x4),根据接口类型在工程中针对性进行修改,否则最后生成的bit可能和要生成的mcs/bin文件对标的flash SPI接口类型不同,最后报错。例如,flash的SPI接口是x4接口,但是vivado工程默认的SPI接口可能是x1,如果不提前设置,最后生成的bit属性为支持x1的SPI接口类型,这样在将bit文件转换为MCS或bin文件时,由于要选择flash型号和SPI接口x4类型,这时文件类型转换操作就会报错。为了避免不必要的麻烦,建议在编译工程前先根据原理图进行配置。
上述配置过程不在赘述。
二、不同固化方法测试对比
针对测试工程不做任何处理生成的未压缩的bit文件以及生成压缩后的bit文件,将其转换为MCS/bin文件后,分别使用复旦微和vivado固化流程进行固化,记录如下表。
总结:
1、固化文件较大时,复旦微提供的方法下载比较稳定,文件较小时可以使用vivado下载mcs或者bin文件。
2、在测试过程中发现,固化完成后PC连接JTAG不断开的情况下,对板卡重新断电上电,FPGA均无法正常从flash加载bit流,只有在PC断开JTAG的情况下对板卡断电上电后等待10几秒后在连接JTAG,才能检测到FPGA已从flash加载完bit。
三、高效固化程序建议
为提高效率,加快固化速度和提高固化稳定性,建议如下:
1、将工程中SPI接口时钟由3MHHz修改为50MHz。
2、在编译工程前修改生成bit配置,改为生成压缩bit。
3、连上JTAG,在Hardware Target Properties JTAG时钟由默认的6MHz修改为12MHz。
4、选用稳定的下载器:固化较小文件时可以使用vivado下载,下载mcs或bin文件时间相差不大;下载较大文件时,可以使用复旦微提供方法,比较稳定,时间稍微比vivado方法长一点,但是稳定。
四、一点小技巧
1、生成bit文件前在vivado Bitstream Settings...上配置flash SPI时钟为50MHz;设置Bitstream Properties的Enable Bitstream Compression为TRUE。
2、连接上JTAG后,在Tcl Console执行set_param labtools.auto_update_hardware 0命令,可以解决FPGA断电后无法正常从flash加载bit的问题;将JTAG时钟由默认的6MHz修改为12MHz。
3、第一条技巧中可以通过约束实现:
set_property BITSTREAM.CONFIG.CONFIGRATE 3 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS FALSE [current_design]
第二条可以通过新建一个Vivado_init.tcl脚本,添加一下内容:
set_param labtools.auto_update_hardware 0
将脚本放到:installdir/Vivado/version/scripts/Vivado_init.tcl实现。
也可通过在CMD中运行行指令:hw_server -e "set jtag-poll-delay 3600000000" 调整硬件管理器的刷新周期实现。