0 参考资料

(1) Xilinx: Development System Reference Guide. dev.pdf, v10.1

在Xilinx的doc目录下有。

(2) Xilinx: Virtex FPGA Series Configuration and Readback. XAPP138 (v2.8) March 11, 2005

在Xilinx网站上有,链接https://www.xilinx.com/bvdocs/appnotes/xapp138.pdf

(3)Xilinx: Using a Microprocessor to Configure Xilinx FPGAs via Slave Serial or SelectMAP Mode.XAPP502 (v1.5) December 3, 2007

在Xilinx网站上有,链接https://www.xilinx.com/bvdocs/appnotes/xapp502.pdf

注:此外xapp139和xapp151也是和配置相关的。

(4)Xilinx: Virtex-4 Configuration Guide. UG071 (v1.5) January 12, 2007

(5) Tell me about the .BIT file format.

1 Xilinx配置过程

主要讲一下Startup Sequence。

Startup Sequence由8个状态组成.

除了7是固定的之外,其它几个的顺序是用户可设置的,而且Wait for DCM和DCI是可选的。

其中默认顺序如下:

这些在ISE生成bit文件时通过属性页设定。

这几个状态的具体含义如下:

Release_DONE : DONE信号变高

GWE : 使能CLB和IOB,FPGA的RAMs和FFs可以改变状态

GTS : 激活用户IO,之前都是高阻。

EOS : 表示配置结束

DCI_MATCH : 表示所有的DCI(Digitally Controlled Impedance)控制器已经把内部电阻和外部参考电阻匹配完毕。

DCM_LOCK : 表示所有的DCM已经锁定。这个选项默认是选中的。

因此,我们可以得出如下结论:

(1)FPGA最后的Startup过程有8个周期,其中DONE变高仅仅是第4个周期。因此,在DONE变高之后还需要再给3个CCLK。否则DONE虽然变高了,FPGA程序并没有正确运行。

(2)ISE 会在设计中搜索用户是否使用了DCI,如果是,FPGA会使用2个周期的Start Up Phase,等待DCI匹配上。即FPGA会在那儿等待,直到DCI匹配上。如果我们在上位机读取了配置文件,获得了文件大小,我们把它写到负责加载V4 的SP3里,然后CCLK时钟就不给了。这就产生问题,因为DCI匹配需要时间,我们的问题就是,过了一段时间,DCI匹配完毕了,但是CCLK却没有 了,因此FPGA一直处在Start UP的前2个Phase上,不会到DONE。导致无法配置成功。

看xilinx Development System Reference Guide(dev.pdf)中,写到

BitGen Match_cycle

The BitGen Match_cycle setting specifies a stall in the Startup cycle until digitally

controlled impedance (DCI) match signals are asserted.DCI matching does not begin on the Match_cycle that was set in BitGen. The Startup sequence simply waits in this cycle until DCI has matched. Given that there are a number of variables in determining how long it will take DCI to match, the number of CCLK cycles required to complete the Startup sequence may vary in any given system. Ideally, the configuration solution should continue driving CCLK until DONE goes high. When the Auto setting is specified, BitGen searches the design for any DCI I/O standards.

If DCI standards exist, BitGen uses Match_cycle:2. Otherwise, BitGen uses Match_cycle:NoWait.

关于DCI_MATCH的设置,在生成bit文件的StartUP Options里有个Match Cycle的选项,默认是Auto。含义是ISE会去确认用户是否使用了DCI,没有的话,Startup Sequence直接跳过这一步,否则会等待DCI匹配完毕。

2 bit文件的格式

.bit是二进制文件,可以分为三个部分:头部冗余信息,配置数据,尾部冗余信息。

头部信息

配置数据

尾部信息

其中头部信息的格式可以参见《Tell me about the .BIT file format》.它里面包含了当前ISE工程名字、编译时间等信息,因此头部信息的长度是不确定的,72个字节左右。

第二部分是配置数据流,以0xFF FF FF FF AA 99 55 66开头,AA 99 55 66是Xilinx指定的同步字符。配置数据流的具体格式及含义可以参见参考文献,比如ug071.pdf的P95的Configuration Sequence,基本格式就是指令+数据,很清晰地给出哪个字节是什么命令,用来干什么。例如bit文件中,加载数据帧之后,有CMD寄存器的命令: START 0x5(0101b) 表示开始Start-Up Sequence。

最 后一部分是尾部信息,由16个32bit的空操作指令:0x20 00 00 00组成。大家可以打开bit文件看,有很多20 00 00 00。这些表示空操作。这部分信息可以不用加载到FPGA。我认为Xilinx把bit文件后面加上这些空操作,是为了在SelectMAP时能让用户多 给一些CCLK,完成StartUp。

3 bit文件和bin文件的区别

.bin文件和.bit的区别就在于,.bin只包含配置数据,没有前面的header inforamtion。

4 SelectMAP文件是加载.bit呢还是.bin?

既然.bit和.bin仅仅是header information不一样,配置数据是一样的,所以两个文件都可以加载。

但 是,当用户在ISE中调用了EDK(比如使用microblaze或者powerpc),ISE生成.bin文件并不会把用户的.elf文件初始化到 FPGA内部的数据和程序存储器中,造成用户的microblaze或ppc代码不运行。至少当前ISE版本(<=10.1)是这样的,不知道以后 的版本Xilinx会不会解决这个bug。

因此,推荐使用.bit文件。

5 EDK生成的.bit和ISE生成的.bit文件有什么区别吗?

我们发现,EDK的工程中,生成的.bit文件通过SelectMAP加载到FPGA,程序运行不正常,如果用JTAG加载这个.bit文件,则程序运行正常。

如果把EDK的工程作为ISE的子模块调用,生成的.bit可以通过SelectMAP加载。

那么,EDK生成的.bit和ISE生成的.bit有什么区别吗?

有!原因就在于ISE和EDK的StartUp Clock默认属性设置的不一样。

在ISE-> Generate Programming File的属性-> Startup Options -> FPGA Start-Up Clock的Value是CCLK;

在EDK-> Project Files -> Bitgen Options File: etc/bitgen.ut里头写着 -g StartUpClk:JTAGCLK,把它修改为-g StartUpClk:CCLK,重新生成download.bit,SelectMAP加载,FPGA工作正常!

查Xilinx关于SelectMAP的说明(v4的配置手册ug71.pdf),发现一句话:

The BitGen startup clock setting must be set for CCLK for SelectMAP configuration.

6 xapp138.pdf

比较详细的介绍了FPGA配置细节;

(1) 在Master Serial 模式,FPGA输出的CCLK开始是2.5MHz,在同步字符后第60个字节CCLK的频率切换为用户指定的时钟。我们可以在ISE中选择配置时钟的频率,单位是MHz,

需要注意的是,CCLK的周期有-30%~+45%的偏差。ISE不同版本、不同FPGA系列,它默认的配置时钟是不一样的。此外,还需要注意选择的CCLK频率能被PROM支持。

我曾经遇到过这个问题:用Virtex5 SX50T作为PCI接口芯片,默认的配置时钟选择了6MHz。完成整个加载超过1s的时间,结果是PCI设备无法识别。解决方法就是在生成bit文件的时候,把CCLK设置为20MHz,这样SX50T很快就能完成加载。

(2)在bit文件末尾有一些关于startup的配置命令。

(3) /PROGRAM 低有效的持续时间不能小于300ns,最长时间没有限制。所以,我们在用SelectMAP配置的时候,要注意拉低此信号的持续时间。

(4) CRC校验,在整个配置过程中会校验两次。The first check is just before the last configuration frame is loaded, and the second is at the very end of configuration.

(5) selectMAP模式,BUSY仅在CCLK频率大于50MHz时才是必需的。(BUSY is only necessary for CCLK frequencies above 50MHz. If the CCLK frequency is less,than 50 MHz, this can be done without handshaking.)

(6) Completion of the configuration process requires 8 to 16 clock cycles after the final CRC is loaded.这个参见第1节。

7模式信号

Xilinx的Configuration Guide上面说,M0M1M2 Can be either 0 or 1, but must not toggle during and after configuration.

好像在配置完后切换应该没有什么关系,因为M0M1M2是在Init_b上升沿被采样。

8关于部分重加载(xapp290.pdf)

生 成bit文件的时候 加上-g ActiveReconfig:Yes。则FPGA在加载的时候仍然会正常工作。同时,必须设置-g Persist:Yes,这个选项表示在SelectMAP模式下,加载的管脚在配置成功后仍然是加载管脚,不会变为用户IO,这样就可以用来部分重加 载。此外,-g security:none必须设置。

[meaning that the device remains in full operation while the new partial bitstream is being downloaded.If ActiveReconfig:Yes is not specified (or -g ActiveReconfig:No is specified), then the partial bitstream contains the Shutdown and AGHIGH commands used to deassert DONE.

Additionally, the -g Persist:Yes switch is required when utilizing partial reconfiguration through the SelectMAP mode. This switch allows the SelectMAP pins to persist after the device is configured, which allows the SelectMAP interface to be used for partial reconfiguration. The -g Persist:Yes setting is also required for the initial bitstream. The -g security:nonesetting must also be set for the initial bitstream.]

命令行加上-r参数。(A difference-based partial reconfiguration bitstream can be created with the BitGen utility using the -r switch.)

例子:

Examples

Generic Example:

bitgen -g ActiveReconfig:Yes -g Persist:yes -r

Test Example:

bitgen -g ActiveReconfig:Yes -g Persist:Yes -r and_test.bit and_test2.ncd and_test2_partial.bit

Create a Partial Bitstream to Restore the Original Design:

bitgen -g ActiveReconfig:Yes -g Persist:yes -r and_test2.bit and_test.ncd and_test_partial.bit

来自互联网的资料:

据我所知到目前为止只有xilinx的FPGA支持动态局部重配置(DPR)。

FPGA的重配置(也叫重构)分为全重构和局部重构,全重构是将整体bitstream 文件download 到FPGA中。局部重构相对复杂,这项技术允许在FPGA内固定逻辑(fixed logic)正常运行时,对重构区域中的逻辑进行动态局部重配置。DPR可以使FPGA内的硬件资源实现分时复用,提高资源的使用率……(还有很多好处, 我在这里就不一一列举了,从现在对这项技术研究的人越来越多,就知道这项技术很好的)

动态局部重配置(DPR)基于FPGA的模块化设计,将整体设计划分为若干模块,这些模块中有些是不可重构的,有些是可重构的。DPR中各个模块所占的硬 件区域划分还有一些要求。由于Xilinx多数系列FPGA的配置bitstream的最小寻址单位是frame(1bit宽,以芯片高为长),所以配置 的最小单位必须是frame,这样就限制了重构区域的划分必须是纵向的一维划分(芯片的左下是坐标原点,纵向划分指划分X轴,不划分Y轴),因为如果横向 的划分,一个frame就会被分开,在配置时无法寻址。

各个模块实现在各自的区域中,那么各模块间的通信是怎样实现的那?在FPGA内信号的传递是通过布线资源实现的,两个模块A、B要实现通信既是将A的信号 线与相映的B的信号线相连,由于ise的自动布线无法指定某条信号线布在哪里,所以相邻两个模块的信号线不能保证相连。这样在DPR中就需要一个固定的结 构跨居在两个模块边界上,使各模块在各自的区域内分别与这个固定的结构相连,这样各个模块既可以在规定的区域内实现又可以与邻近模块进行通信。这个固定结 构就是“总线宏”(bus macro)。

9 bitstream中的“frame”

Xilinx FPGA bitstream中的配置数据是由帧(frame)组成的。帧是配置数据中的最小单元(参见第8节).

Ug071.pdf给出了Virtex4的所有FPGA的帧数。例如FX60是17,916。而FX100是28,350。

知道这些帧数有什么用处呢?——帧数跟init_B信号的低电平保持时间有关。

PROG_B 拉高之后,INIT_B需要TPL的时间然后才会拉高。TPL的时间在ds302.pdf(See Table 41: Configuration Switching Characteristics in the Virtex-4 Data Sheet.)中给出。

可以看出,TPL是0.5us/frame,那么对于FX100来说,INIT_B需要28,350×0.5us=14.175ms才能拉高。

xilinx芯片管脚使用限制_【转载】 Xilinx FPGA配置的一些细节相关推荐

  1. xilinx芯片管脚使用限制_修复焊接BGA芯片过程

    我们能够享受现代电子设备小巧玲珑但又功能强大的优点,得益于芯片的小型封装的优势,其中一个最为优秀的封装形式就是锡球阵列封装(BGA).这种封装形式芯片的管脚是分布于芯片底部的一系列点阵排列的焊盘,通过 ...

  2. xilinx芯片管脚使用限制_FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)

    FPGA 管脚分配时需注意的一些事项(以 xilinx xc4vsx55 为例) FPGA 管脚分配时需注意的一些事项(以 xilinx xc4vsx55 为例) 平台: XC4VSX55 ISE10 ...

  3. cfd软件对电脑配置要求_[转载]不同电脑配置运行fluent的对比

    想当年在学校的时候,用奔三跑个程序是吭哧吭哧的,还得跟别人分着用,看看师兄们都奔四了,只有羡慕的份啊.好不容易等到师兄走人,屁颠屁颠的搬到奔四电脑前,大师兄们又换成了超线程了,居然一下能算两个程序,感 ...

  4. xilinx管脚差分端接_高速串行总线设计基础(八)揭秘SERDES高速面纱之CML电平标准与预加重技术...

    前言 物理信号 预加重 差分传输线 参考资料 前言 对于数字工程师来说,我们可能关注的仅仅是本文中的差分信号电平标准以及预加重技术,CML电平标准是Transceiver技术的首选,在Xilinx的G ...

  5. Xilinx芯片太贵,我选择国产替代!聊聊国产FPGA芯片选型

    01  前言 本文来聊聊目前国内FPGA发展到了什么水平?都有哪些做得比较好的公司?FPGA国产替代所需要考虑哪些因素? 部分内容和数据参考自网络和官方网站,有不对或不准确的地方,希望能和各位大佬一起 ...

  6. 快速提高英语口语和听力水平的办法_转载

    快速提高英语口语和听力水平的办法_转载 掌握技巧 学好口语 有没有机会在美国生存.发展下去,关键是要看有没有机会去表达自己,和别人交流.如果你学的是哑巴英语,到了美国你将十分困 难.而目前我们的大学英 ...

  7. 芯片管脚工作在各个模式的特点和优缺点(持续更新)加上下拉电阻的作用

    一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.         推挽电路是两个参数 ...

  8. Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

    给力星 追逐内心的平和 首页 笔记 搜藏 代码 音乐 关于 Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 2014-08-09 (updated: 2016 ...

  9. 【转载】FPGA功耗的那些事儿

    [转载]FPGA功耗的那些事儿 在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的. 笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为2 ...

最新文章

  1. 博为峰Java技术题 ——JavaSE Java 方法Ⅲ
  2. git rebase -i 汇合提交
  3. [改善Java代码]在接口中不要存在实现代码
  4. 牛客 - 张老师的旅行(dp)
  5. C++封装常用对象和对头文件以及预编译机制的探索
  6. shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构
  7. 常用知识总结——模板Template
  8. view.post(Runnable)
  9. 用代码建立与数据库的连接 c#连sqlserver
  10. 推荐系统学习(二)基于用户/物品的协同过滤算法(User-CF / Item-CF)
  11. java int数组任何数之间间隔不能对于指定数,内付极速排序
  12. (转)Clang 比 GCC 编译器好在哪里?
  13. 一劳永逸解决latex的字体问题
  14. 威富通支付接口用到的操作类(记录下)
  15. 企业微信开发实战(三、OA审批之回调通知、获取审批单号、审批详情)
  16. 分数统计设计java程序_(windows综合程序)设计一个学生平时成绩统计软件 最后的Java作业...
  17. 项目文档的流程图,ER图,用例图
  18. javaScript 上传图片(oss阿里云)
  19. Unity3D游戏开发之网络游戏服务器架构设计(如何做一名主程)
  20. 【代码】网易云音乐(周杰伦-晴天)评论的爬取

热门文章

  1. iptables必知必会用法
  2. asp.net 读取excel文件的一些方法,NPOI方法
  3. QZone V8改版之“相册从模糊到清晰”
  4. java.sql.SQLException: Before start of result set
  5. linux命令备记(一)
  6. Flex的动画效果与变换(1)
  7. 邮箱回执怎么看_考研复试联系导师邮件怎么写?
  8. php聊天室禁止提交,phpcms v9禁止提交信息到官网方法详解
  9. 阿里云mysql本地可以连接数据库_本地电脑连接阿里云服务器上搭建的MySQL数据库...
  10. java 模拟post上传文件_Java模拟post请求上传文件