目录

一、概要

二、FPGA配置

2.1 Tandem方法

2.2 Tandem PROM

2.3 Tandem PCIe

三、在K7中启用Tandem


一、概要

PCI Express®规范要求PCIe®链路在电源稳定后120毫秒内做好连接准备。由于可用编程比特流的大小和配置速率,对采用闪存存储器配置的大型FPGA而言要想满足这个要求的确是一个挑战。赛灵思的串列配置法(Tandem Configuration)是缩短FPGA配置时间以满足120毫秒PCIe链接时间要求的一种现实可行的方法。

本应用指南介绍了如何将运行在KC705评估板(采用Kintex-7 XC7K325T FPGA)上的Kintex®-7 Connectivity Targeted Reference Design(TRD)与Tandem PROM和Tandem PCIe配置法结合使用。设计描述了TRD调节以适应串列配置法的情况。采用该方法,当使用Tandem PROM时基本比特流大小以及初始配置时间可减少85%以上,而使用Tandem PCIe时可减少80%以上。


二、FPGA配置

PCI Express规范规定,在电源有效后,基本复位必须保持至少100ms。它还规定设备必须在基本复位释放20ms后进入检测状态(为链路训练做好准备)。因此,PCI Express核必须准备好120ms后开始链路连接的良好信号。由于PCI Express规范的遗留问题,这个时间通常被称为PCI Express的100 ms启动时间要求。实际上,一个PCIe核心链路连接做准备的时间是120毫秒。
FPGA通过将bitstream装入内部FPGA内存来配置FPGA,有关配置的详细讨论可参阅7系列FPGAs配置用户指南(UG470)。FPGA配置时间是一个函数带宽的编程方法,主要受数据宽度和编程时钟频率影响。

随着FPGA器件容量的增加,满足PCIe规范的120ms要求变得更加困难。传统上,为了减少配置时间会使用更快和带宽更大的BPI闪存,但这种方法会增加硬件BOM成本,增加系统复杂度。而且即使使用带宽更大的闪存,也需要更高的时钟频率来满足120ms的要求。

例如,K7 XC7K325T FPGA配置位流长度为91,548,896位(87.3 Mb), TPOR为50 ms(最坏情况)。如果BPI flash位宽为16bit,并且通过同步读配置在主BPI模式,即使是EMCCLK的频率为50 MHz,FPGA进入检测状态的时间也在160 ms,这并不足够快来满足120 ms的要求。

作为传统方法的替代,Xilinx提供了两种快速配置方法—Tandem PROM和Tandem PCIe。

2.1 Tandem方法

Tandem方法方便快速,能够满足PCIe 120 ms link培训的要求,配置主要为两个阶段:

阶段1:确保设备发现配置所需的最小PCIe功能。此阶段需要非常小的位流,可以在远远小于120 ms的时间内配置,并且能够在枚举期间处理所有事务。

阶段2:PCIe块激活后,FPGA的其余部分按照用户设计进行配置。串联方法不是部分重构,与部分重新配置不同,串联方法从不重新配置帧,设备中的每帧都只配置一次。如果需要对用户应用程序进行动态更新,则应该使用传统的部分重新配置。

Tandem方法有两种:Tandem PROM和Tandem PCIe。

2.2 Tandem PROM

图1展示了Tandem PROM方案。阶段1和阶段2的位流以单个位流的形式背靠背打包在同一个PROM中。
 

Tandem PROM流程与标准流程相似,在实现结束后会生成单个位流,并对相应的闪存进行编程,PROM文件和位流都是独立的。PCIe块在第一阶段位流编程结束时激活,当PCIe枚举正在进行时,设备使用相同的编程路径继续对第2阶段的位流编程。
注意:双模式配置管脚必须为Tandem PROM配置预留用于设置PERSIST属性,这些IO不能用于用户设计。

2.3 Tandem PCIe

图2展示了Tandem PCIe解决方案。Tandem PCIe与Tandem PROM类似---第一阶段的FPGA位流编程使PCIe功能能够快速可用。但是,使用Tandem PCIe,第二阶段BIN文件是通过PCIe链接下载,并使用FPGA中的内部配置访问端口(ICAP)硬件,通过为PCI Express IP提供的7系列集成IP进行配置。这个过程需要一个软件驱动程序通过PCIe链接加载第二阶段BIN文件。请注意,串联PCIe在第二阶段使用BIN文件而不是位流文件。BIN文件已正确对齐,以便与ICAP一起使用。
 


三、在K7中启用Tandem

本节主要描述在Kintex-7连接TRD中如何修改Tandem配置流程。
图3展示了TRD中的Tandem配置,每个配置方法都会生成7系列的PCIe IP,并且该IP内部会添加下列Tandem配置所需的逻辑:
Tandem PROM:包括隔离多路复用器、串联完成器和握手逻辑,以完成建立阶段2的配置。
Tandem PCIe:包括用于配置第二阶段的ICAP、隔离多路复用器、串联完成器和握手逻辑,以完成建立第2阶段的配置。Tandem PCIe还需要一个驱动程序通过PCIe链接来下载第二阶段BIN文件。
 

与此应用程序说明关联的设计有一个USE_TANDEM_FLOW宏用于标识Tandem流程所需的改动。对于Tandem PCIe流程,在顶层设计文件k7_connectivity_trd.v的USE_TANDEM_PCIE宏下还包含一个额外的BUFG用于提供ICAP时钟。此外,还要对TRD进行以下改动来实现Tandem配置:

【设计改动】对于Tandem,PERST#(系统提供的来自PCIe插槽的复位)所在的整个I/O bank被配置为第一阶段位流的一部分。在顶层的非Tandem设计中,用户应用程序块(如MIG、10G Ethernet MAC和10GBASE-R等)使用PERST#进行重置,这种方式使用PERST#意味着所有这些逻辑都应该是第一阶段位流的一部分,因为更多的逻辑添加到了复位分支,这违背了Tandem配置的目的。为了保持第一阶段的位流较小,需要将用户应用程序块的复位逻辑改为使用来自PCIe块的寄存器信号user_lnk_up的反信号,这需要在顶层文件k7_connectivity_trd.v的不同位置使用USE_TANDEM_FLOW宏来确定。

【IP升级】7系列的PCIe IP也需要重新生成来适配Tandem PROM和Tandem PCIe流程。相关的XCI文件可以在ip_catalog目录下找到,IP配置的其余部分与非Tandem流程相同。

【约束改动】主要要修改两个约束:

(1)k7_conn_pcie.xdc,IP中提供的示例设计XDC文件,包含PCIe的tandem-specific约束

(2)k7_conn_pcie_tandem.xdc,包含PCIe的tandem-specific约束;k7_conn_trd_tpcie.xdc和k7_conn_trd_tprom.xdc,包含配置BPI flash的额外约束。

其他的约束和非Tandem流程是一样的。

Tandem PROM流程如果要用位流压缩,可以设置如下:

set_property bitstream.general.compress true [current_design]

Tandem PROM流程如果要生成分离位流,可以设置如下:

set_property bitstream.config.tandem_writebitstream separate [current_design] write_bitstream -force separate.bit

这样会为Tandem PROM流程阶段1和阶段2分别生成位流。不然默认情况下,Tandem PROM流程还是会生成一个单独的包含两个阶段的位流文件,Tandem PCIe流程默认情况下则是分别为阶段1和阶段2生成单独的BIT和BIN文件。

最后,利用promgen将得到的位流文件生成MCS文件进行后续处理。

串列配置(Tandem)在Kintex-7互联TRD中的实现相关推荐

  1. 在计算机网络互联设备中,网络互联设备

    数据在网络中是以"包"的形式传递的,但不同网络的"包",其格式也是不一样的.如果在不同的网络间传送数据,由于包格式不同,导致数据无法传送,于是网络间连接设备就充 ...

  2. 一文读懂Serverless,配置化思想复用到平台系统中

    写在前面 在SaaS领域Saleforce是佼佼者,其CRM的概念已经扩展到了Marketing.Sales.Service等领域.那么Saleforce靠什么变成了这三个行业的解决方案呢?得益于Sa ...

  3. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)

    [STM32-V7]STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22) 参考文章: (1)[STM32-V7]STM32H743XIH6开 ...

  4. Flutter配置好后,在Android Studio中找不到设备,no devices

    Flutter配置好后,在Android Studio中找不到设备,no devices 完成Flutter的Android配置之后,连上设备,运行flutter doctor,发现已经识别了一个可用 ...

  5. 【Android Gradle 插件】gradle.properties 中配置编译参数并在 Java 代码 BuildConfig 中调用该参数

    文章目录 一.gradle.properties 中配置编译参数 二.在 build.gradle 中配置 BuildConfig.java 生成信息 三.编译后生成的 BuildConfig 类 A ...

  6. 一文读懂 Serverless,将配置化思想复用到平台系统中

    简介: 搭建一个 aPaaS 平台是需要很长时间的,当然也可以基于一些公有云产品的 Serverless 方案实现现有系统的灵活性与扩展性,从而实现针对于不同客户的定制. 写在前面 在 SaaS 领域 ...

  7. 精简配置的虚拟磁盘在快照删除过程中膨胀为更大的大小(56608)

    精简配置的虚拟磁盘在快照删除过程中膨胀为更大的大小(56608) 最近更新时间: 6/10/2019分类:故障排除 1个 订阅  病征 如果执行以下步骤序列,精简配置的虚拟磁盘的磁盘使用量可能会增加: ...

  8. 树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译:

    树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译: LED warning flash codes Descr ...

  9. element 配置全局样式 例如:为项目中所有el-dialog弹窗添加分割线

    先看问题,设计图的el-dialog弹窗在提示文字下面都有一条横线, element框架自带的el-dialog弹窗缺少提示文字下面的那个分割横线. 为了避免重复编写样式,我们为el-dialog添加 ...

最新文章

  1. android interview 1
  2. 豆瓣评分 9.3,史上最好的 C 语言著作,竟然翻车了......
  3. 关于计算机三个人的英语对话,关于三个人的英语对话
  4. PaperWeekly给您拜年啦!
  5. 去掉控制台程序的黑框框
  6. node.js跨域问题
  7. vue sync用法
  8. 【SpringBoot 2】(三)SpringBoot相较于Spring的特点
  9. 蓝桥杯单片机DS18B20代码注释及部分时序图
  10. 关于spark structed stream 流中的触发trigger间隔的理解
  11. mysql子查询的语法,MySQL语法------13-----子查询(三)
  12. 跑monkey需要安装什么_智能门锁安装时需要注意什么?
  13. Android实训——图书管理系统
  14. Java开发快递物流项目(1)
  15. QQ坦白说解密(一)
  16. 【论文研读】Category-level Adversaries for Semantics Consistent Domain Adaptation(cvpr2019)
  17. 软件架构-redis特性和集群特性(下)
  18. DSP28335入门教程:ADC的使用
  19. 用TMS320c54x汇编语言求方差,TMS320C54x的指令.pdf
  20. 衣服裤子染色了怎么办

热门文章

  1. Android 强制设置横屏或竖屏
  2. mysql 1142 问题解决
  3. 【ML】Markov Chain Monte Carlo(MCMC)---Slice sampler(切片采样)和Hierarchical Models(层次模型)
  4. 如何干净、彻底地删除软件、文件夹
  5. 阿里云-云存储OSS
  6. php调用翻译,PHP调用有道词典翻译API实现翻译功能及代码
  7. 网易163vip邮箱、163.net邮箱、新浪vip邮箱、QQ邮箱,哪款更符合商务邮件的需求
  8. PCB多种特殊走线画法与技巧
  9. 哪个牌子的充电宝转化率高?转化率高的充电宝推荐
  10. 2019宁波本科计算机招聘工资,2019宁波银行校园招聘1421人:薪资待遇怎么样?值得报考吗?...