从去年开始一直在搞国产化,这是第二次使用国徽的FLASH芯片了。采用国徽的FPGA芯片加国徽的FLASH加载芯片SM25QH256M。
第一次使用XILINX的FPGA加SM25QH256M,在VIVADO中生成MCS文件,使用Hardware manager下载程序,添加FLASH,下载失败。当时直接更换了镁光的FLASH直接下载成功。但是问题还在这个地方,并没有解决。
最近又开始使用国徽的SM25QH256M,也有时间来看这个问题。
阅读厂家提供的文件手册,其中有这么一段话说明了使用该芯片的注意事项。
在SPI FLASH的用途中,部分客户会用来作为FPGA的配置芯片使用,但是不是所有公司的SPI FLASH都在FPGA厂家所支持的器件列表内,我司器件亦是如此。所以如果客户需要这样使用,需要采取以下方法来进行处理。
- 对于 altera 公司的 FPGA,必须先将配置程序通过烧录器离线完成烧录后才能焊接到系统板上使用,我司 SPI Flash 不支持 altera FPGA 配置芯片的在线烧录。
- 对于 Xilinx公司的FPGA,需要通过 Xilinx 公司的 iMPACT 工具进行烧录。Xilinx 的 iMPACT 工具在选择对应支持的 SPI 设备列表时,需要检测其 device ID是否是其所支持的产品列表中的设备,由于我司 SPI Flash 不在其支持列表内,所以必须绕过其检测 device ID 的流程,才能进行后续的操作,流程如下:
- 添加计算机系统环境变量(以 Win7 为例),右键计算机,点击属性;
- 在左边选择高级系统设置,进入系统属性,再选择高级中的环境变量;
- 新建环境变量,变量名为 XIL_IMPACT_SKIPIDCODECHECK,变量值为 1;
- 点击确定并重启电脑。
- 重新启动 iMPACT 工具,选择容量一致的镁光公司的 N25Q 系列产品进行烧录,如下图所示:
- 通过以上操作过程,我司 SPI Flash 可支持 Xilinx FPGA 配置芯片的在线烧录,正常使用。
在按照文件所示的操作进行设置后,对FLASH进行烧录,第一次烧录过程中出现了如下错误导致烧录失败。
done.'1': Verification completed.'1':Programming in x4 mode.PROGRESS_END - End Operation.Elapsed time = 1070 sec.// *** BATCH CMD : setMode -pff// *** BATCH CMD : setMode -pff// *** BATCH CMD : setMode -pff// *** BATCH CMD : setMode -bs// *** BATCH CMD : setMode -bs// *** BATCH CMD : setMode -bs'1': Configuration data download to FPGA was not successful. DONE did not go high, please check your configuration setup and mode settings.
‘1’配置数据下载到FPGA不成功。 DONE没有拉高,请检查您的配置设置和模式设置。
程序下载不成功,观察FPGA的DONE信号,在impact下下载FLASH。失败后DONE信号一直拉低,LED灯未闪烁。一直不知道原因。在官网下载xapp586 Using SPI Flash with 7 Series FPGA 。阅读对比原理图。
- M[2:0]信号,应该设置为FPGA为SPI主机,即M[2:0]=001。一致。
- DONE信号,高指示配置完成。0,FPGA未配置,1,FPGA已配置。观察,DONE信号需要使用外部上拉电阻。已使用。
- INT_B,需要使用外部上拉电阻。已使用。
- CCLK信号必须为干净的信号。直接从FPGA到FLASH信号,一致。
- 7系列FPGA的VCCO必须与SPI的VCC兼容。一致。
这些情况都是一致的。问题可能出现在SPI FLASH配置选项中。
原配置中,对SPI的配置使用了如下配置。
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
设置电源为3.3v。
SPI模式为SPIx4传输。
设置SPI传输的时钟为50mhz
设置从SPI闪存读取时使用的数据宽度为4位。
未使用的引脚全部上拉。
在时钟下降沿采样数据。
在软件中自动压缩BIT文件。
对比XAPP586里面的资料。
对于SPI FLASH为256Mb或者更大时,这个-g spi_32bit_addr需要设置为YES,这指示FPGA传输更大的闪存设备所需的更大的地址空间。我们使用FLASH空间为256Mbits,即32MB的,大于等于256Mb。添加XDC设置。
下面在XDC文件中加入这句话。
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]
生成bit流成功后,使用VIVADO生成MCS文件。
启动IMPACT下载MCS文件。下载成功。