排行榜 统计
  • 文章总数:1688 篇
  • 评论总数:5 条
  • 分类总数:8 个
  • 最后更新:一天前

如何利用SPI Flash配置Xilinx 7系列FPGA器件

本文阅读 13 分钟
首页 常用工具 正文

引言:本文我们介绍下使用串行SPI Flash配置Xilinx 7系列FPGA的优点以及相应的配置方案实现细节,包括FPGA和SPI Flash之间的信号连接及如何选择恰当的SPI Flash。

1.简介

图1显示了利用Vivado开发工具间接编程SPI Flash和SPI Flash配置FPGA的示意图。

图1、SPI Flash配置和Vivado间接编程

Xilinx FPGA由于其非易失特性,上电后需要一个配置比特流完成芯片内部逻辑配置。SPI Flash使用4线同步串行数据总线接口。SPI Flash只要求4个管脚来传输配置比特流,允许1bit或者2bit数据位宽。市面上较新的SPI Flash可选的支持6个管脚,4bit数据位宽,因此可以有效的降低配置时间。利用SPI Flash接口配置FPGA是一种非常低的引脚数配置解决方案,许多供应商都有各种密度的器件。

其他FPGA配置方案,如BPI接口NOR Flash,支持x8或者x16位宽配置方案,可以提供更快的配置速度,但是需要占用至少25个器件管脚。

由于并行NOR Flash设备比SPI Flash具有更高的密度选项,因此如果应用程序需要大量非易失性数据存储,或者需要存储多个FPGA位流,则应考虑BPI Flash。

2.SPI Flash基础

本小节我们回顾下SPI Flash的管脚功能和它们和7系列FPGA的硬件连接。图2显示了x1模式下基本的SPI Flash和FPGA之间的信号连接。

图2、基本的SPI Flash到FPGA连接-x1模式


读命令和地址指令通过主输出从输入(MOSI)管脚从FPGA发送至SPI Flash,配置数据通过主输入从输出(MISO)管脚从SPI Flash返回至FPGA。SCK为同步时钟管脚,SS为低有效信号,为从器件片选信号。在x2数据位宽模式中,信号连接和图2相同,此时,MOSI管脚变为双向管脚,用作附加的数据管脚。

除了上述管脚之外,SPI Flash还有附加的管脚用于特殊用途。这些附加管脚随着SPI Flash供应商的不同而不同,但是有两个常见的功能管脚,保持(hold)和写保护(write protect)管脚。这两个特殊的管脚可选择作为附加的数据输出管脚,从而使SPI Flash数据位宽可以实现4bits,即x4模式。

表1 SPI Flash管脚定义


2.1 SPI Flash选型

选择SPI闪存的第一个标准是密度。对于许多设计来说,这意味着选择一个足够大的flash设备来存储目标FPGA的配置比特流。对于某些设计,其他考虑因素缩小了使用闪存的选择范围,例如需要存储多个比特流,或者需要配置FPGA菊花链,或者配置速度。

1.器件密度:FPGA配置比特流的大小UG470: 7 Series FPGAs Configuration User Guide 文档中给出了每种FPGA器件所需的配置比特流文件大小。如果设计需要多个比特流,则相应地乘以比特的大小。Xilinx工具允许比特流压缩,但是在确定SPI flash大小时不建议依赖压缩,因为压缩会随用户的设计而变化很大,而且是不可预测的。

2.配置时间:有些设计要求FPGA在指定的时间内完成配置。在这种情况下,设计者应考虑使用该闪存允许最快的读取时钟速率,并确保支持x4数据宽度的读取操作(有时在SPI flash数据表中称为x4输出为快速读取)。

3.I/O电压兼容性:设计者还必须考虑I/O电压兼容性。Aritx™-7和Kintex™-7系列支持高达3.3V的配置I/O电压,Virtex®-7系列支持高达1.8V的配置I/O电压。SPI Flash供应商通常为核心电压和I/O电压使用相同的电压源。但是,有些供应商可以使用单独的I/O电压引脚。

3.SPI Flash配置接口

图3显示了SPI Flash配置要求的FPGA管脚。这些管脚中的许多管脚对于其他配置方案也是需要的,并不是SPI Flash专用的管脚。

图3、FPGA SPI Flash配置接口


表2详细说明了SPI Flash配置期间FPGA引脚的功能。除了SPI Flash基础部分中提到的管脚外,还显示了其他配置接口信号,这些信号提供了FPGA配置的状态信息和控制。

表2 SPI Flash配置管脚


图4和图5几乎相同。图4说明了x1或x2数据宽度模式下SPI Flash配置解决方案的连接。图5显示了x4数据宽度模式下SPI Flash配置解决方案的连接。图4和图5之间的唯一区别是如何处理HOLD和W引脚,它们在x1和x2数据宽度模式下上拉至VCCO_0,在x4数据宽度模式连接到7系列FPGA。

图4、7系列FPGA SPI Flash x1/x2配置方案


在图4SPI Flash x1/x2配置方案注意:

  1. DONE默认为开路输出,推荐连接外部上拉电阻;
  2. INIT_B是双向开路管脚,推荐外部上拉电阻;
  3. CCLK信号完整性非常管脚,需要当作高速信号处理;
  4. 从SPI Flash到FPGA的数据路径应考虑串联电阻,以尽量减少过冲。通过仿真可以确定合适的电阻值;
  5. FPGA配置I/O电压必须与SPI Flash I/O电压兼容;
  6. VCCBATT用于给SRAM供电,用于保存AES密钥。
图5、7系列FPGA SPI Flash x4配置方案


在图5 SPI Flash x4配置方案注意:

  1. DONE默认为开路输出,推荐连接外部上拉电阻;
  2. INIT_B是双向开路管脚,推荐外部上拉电阻;
  3. CCLK信号完整性非常管脚,需要当作高速信号处理;
  4. 从SPI Flash到FPGA的数据路径应考虑串联电阻,以尽量减少过冲。通过仿真可以确定合适的电阻值;
  5. FPGA配置I/O电压必须与SPI Flash I/O电压兼容;
  6. VCCBATT用于给SRAM供电,用于保存AES密钥。

3.1 SPI Flash上电考虑

上电时,FPGA和SPI Flash之间存在竞争条件。FPGA完成自我初始化后,向SPI Flash发送读取命令,以检索配置数据,此时SPI Flash必须准备好,并对此作出响应命令。参考SPI Flash数据表中Flash完成自身初始化所需的时间。一般来说,7系列FPGA的自初始化时间(也称为上电复位)比SPI Flash(数百微秒)多一个数量级(毫秒),但设计者应评估时间。如果SPI Flash和FPGA位于不同的供电轨道上,这一点无疑更为重要。

3.2 SPI Flash配置FPGA

FPGA完成自初始化后,INIT管脚被释放,FPGA对模式管脚(M[2:0])采样,以确定使用哪种配置模式。当模式管脚M[2:0]=001时,FPGA在CCLK管脚输出大约3MHz的时钟频率 。很快之后,FCS_B驱动低电平,接着是x1快速读取指令和地址的操作码出现在D[00]引脚上,如图6所示。

图6、7系列FPGA SPI Flash时序


数据最初以x1模式从SPI Flash传输到FPGA。在数据流早起部分,命令切换到外部时钟、x2或x4总线宽度或其他选项的命令。在读取这些选项之后,FPGA进行中间配置调整。

默认行为是从CCLK下降沿的SPI flash输出数据,并由FPGA在CCLK上升沿捕获数据。通过启用SPI_FALL_edge BitGen选项,可以将默认行为更改为在下降沿捕获。

4.SPI Flash配置时间计算

公式1应用于确定SPI Flash可以安全运行并且仍然可靠地传送比特流的最大频率。SPI Flash在时钟下降沿传输数据。7系列FPGA的默认设置是在时钟上升沿捕获数据。为了使下面的等式成立,假设启用了使FPGA能够在下降沿上捕获数据的SPI flash配置选项(-g SPI_fall_dege:yes). 这允许利用整个时钟周期,因此可以达到更高的频率。

最大时钟频率:

在7系列FPGA中,内部振荡器(fMCCKTOL)的频率容差非常重要。如果最短配置时间很关键,建议设计者使用外部时钟(EMCCLK)。

在确定最佳配置速率后,设计者需要将总比特流大小除以配置速率来确定x1模式下的总配置时间。如果使用x2或x4数据宽度,则除以宽度。

4.1 配置时钟计算举例

本节演示确定SPI Flash解决方案的最大操作配置频率的步骤。

选择的SPI flash是N25Q128A13,目标是Kintex-7xc7k325t FPGA。

  1. 根据SPI flash数据表,SPI Flash clock to out有多个值,取决于VCC和输出引脚上的电容。根据N25Q128A13的数据表,这些值最快为5ns,慢至7ns。在这个例子中,取7ns表示SPI Flash在30pf或更小的负载下运行。
  2. 根据Kintex-7xc7k325t FPGA器件手册,FPGA的建立时间为3.0ns。
  3. 从CCLK到C管脚的走线传播延迟和任何数据管脚的最长传播延迟提供TTPD。在这个例子中,使用的经验法则是每英寸165 ps,从FPGA到SPI闪存的走线长度为6英寸。(为了获得更精确的结果,建议使用其他技术,如IBIS模拟法。)在165ps/inch下,12英寸的跟踪值给出2.0ns。
  4. 因此时钟频率为:1/(7ns+3.0ns+2.0ns)=83.3MHz。
  5. 设计者应考虑使用FPGA的内部振荡器,最接近83.3 MHz的值为66 MHz。但是,XC7K325T的频率容差(fMCCKTOL)为±50%(当前值请参考DS182,Kintex-7 FPGA数据表),因此该时钟频率可能为(66 MHz x 1.5)=99 MHz,这对于计算的最大值来说太快了。
  6. 下一个最快的配置速率是50MHz,其最大频率为(50MHz×1.5)=75MHz。该速率远低于计算的最大值,名义上在50MHz下工作,远低于所需的83.3MHz。
  7. Kintex-7xc7k325t FPGA的比特流大小为91548896 btis。因此,在50MHz时钟下,需要的配置时间为:91548896/50000000 = 1.83s。

假设一个80MHz的振荡器已经在板上为另一个应用或设备服务,因此可以将其作为FPGA配置的时钟。此时,91548896/80000000 = 1.144s,使用x4数据位宽模式时,配置时间为1.144/4 = 286ms。

4.2 外部主时钟(EMCCLK)考虑

当使用外部主时钟(EMCCLK)作为配置时钟源时,EMCCLK必须包含在用户的设计中。否则会导致FPGA无法完成启动。当使用内部振荡器进行FPGA配置时,不需要特殊的设计要求。

5.小结

本文我们对使用SPI Flash配置FPGA进行了详细的说明,包括SPI Flash与FPGA配置管脚的硬件设计,SPI Flash的选型以及配置时间计算等。对于自己项目设计,我们要根据实际需求,合理的选择对应的配置方案,以达到设计的最优化。


更多技术文章可欢迎关注“FPGA技术实战”公众号,持续更新原创!

本文来自投稿,不代表本站立场,如若转载,请注明出处:https://typecho.firshare.cn/archives/1782.html
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。避免网络欺诈,本站不倡导任何交易行为。如您私自与本站转载自公开互联网中的资讯内容中提及到的个人或平台产生交易,则需自行承担后果。本站在注明来源的前提下推荐原文至此,仅作为优良公众、公开信息分享阅读,不进行商业发布、发表及从事营利性活动。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。
-- 展开阅读全文 --
apkdowner-下载googleplay上的应用
« 上一篇 04-06
【发版公告】Virbox Protector 3.1.0.18222: 支持安卓 AAR 字符串加密
下一篇 » 04-26