logo资料库

Xilinx-FPGA配置的一些细节.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
Xilinx FPGA 配置的一些细节 2010 年 07 月 03 日 星期六 14:26 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 网站上有,链接 http://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 网站上有,链接 http://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. 链接:http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm 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 才能拉高。 10 关于 ISE 中的 Bitstream Compression Xilinx ISE 生成 bit 文件的属性页里有 Enable BitStream Compression 的选项,比如 V5SX50T, 原本生成的 bit 文件大约 2.38MB,选上这个之后生成的文件是 1.32MB,一下压缩了那么多。 疑问:这种压缩方法压缩比率是多少?压缩之后是 FPGA 自己来解压缩并完成加载,对用 户透明呢,还是用户必须自己解压缩? 回答:http://www.xilinx.com/support/answers/16996.htm 原来,这种“压缩”方法并不是真正的压缩了 bit 文件。它是基于 MultiFrame Writes,意思是 说如果有配置帧(帧的概念参见上文)有相同的数据,那么它们可以使用同一个命令写入。 这样,也就回答了另一个问题,它的压缩比取决于 ISE 工程设计本身。如果你只使用了 FPGA 很小的一部分资源,压缩比率很达到很高;反之,使用了 FPGA 绝大多数资源,那么基本 没有压缩空间了。 具体的细节看这个上面那个链接即可。 因此,用户可以不用关心怎么实现的“压缩”,放心用就是了。我把上面生成的 1.32MB 的 bit
文件加载 V5SX50T,工作正常。 -w -g compress tag ppc440_0 test.ncd -bd .\\processor\\src\\executable.elf 存在一个问题是使用了 EDK,在 ISE 中 Update Bitstream,如果选择了 Enable BitStream Compression,会报错。 http://www.xilinx.com/support/answers/22364.htm 这 个 问 答 页 中 说 , Xilinx Data2Mem is currently unable to update encrypted or compressed bitstreams.(一一 b,很典型的 Xilinx 作风。。。。。) 它给出了解决方法。 简单的说,就是 ISE 中不去点击 Update Bitstream,也不去点击 Generate Programming File。 在 ISE 的 Tcl Shell 中输入如下命令: bitgen.exe mydownload.bit test.pcf 如果语法没有错误,会弹出一个 DOS 对话框,光标闪啊闪,然后经过耐心等待(反正时间 挺长的),然后会在 Tcl Shell 中显示: Creating bit map... Saving bit stream in "mydownload.bit". Bitstream compression saved 25277472 bits. Bitstream generation is complete. % 现在,解释一下 bitgen.exe 后面几个参数。可以在 Shell 中敲入 bitgen –help virtex5 查看此命 令的帮助内容,virtex5 可以换成其它 architecture,比如 virtex4,spartan3 等。-bd 表示更新 BlockRAM 的内容,从 executable.elf 中,命令中的.\\processor\\src\\表示工程 PPC 的 elf 文件 放在 ISE 工程下的 processor\src 目录里。ppc440_0 是使用的 CPU 类型,可以打开 ISE 工程 目录下的 edkBmmFile.bmm 文件,ADDRESS_MAP 之后的字段就是。test.ncd,test 是 ISE 工程名字,根据用户自己的工程名修改。mydowload.bit 是生成的 bit 文件的名字,因此可以 随意选取。test.pcf,test 也是 ISE 工程名字。
分享到:
收藏