Xilinx-FPGA配置的一些细节
Xilinx spartan3e FPGA掉电配置及应用程序引导

Xilinx spartan3e FPGA掉电配置及应用程序引导Xilinx公司的spartan3e开发板上面有丰富的外围器件,就存储器来说有一个16M并行flash,一个4Mbits串行flash,还又一个64M的DDR,在嵌入式开发中,一般我们可能会在FPGA中嵌入cpu软核,让C语言程序在里面运行。
这就涉及到FPGA配置文件的引导,如果C语言程序太大,需要在DDR里面运行的话也涉及到应用程序的引导的问题。
我刚接触到xinlinx的spartan3e开发板时,只会将FPGA配置文件(.bit)直接通过JTAG口下载到芯片里。
后来编写的程序大了,如果将程序直接放到内部的RAM里面就装不下了,这时就只有将程序放到DDR里面运行,如果仅仅是调试应用程序不需要重启开发板后程序也可以运行,那么可以直接用EDK里面的XDM工具通过dow命令直接下载到DDR里面,然后就可以执行了。
但是但我们的应用程序和硬件配置调试通过,达到了我们的要求以后我们就想到可不可以将让程序在板子上电时就可以自动运行呢。
因为FPGA是掉电要丢失的,重新上电就必须重新配置。
我们通过查找相关资料,找到了解决烧写问题的解决办法。
首先是配置文件的烧写。
spartan3e提供了3个掉电不丢失的外部存储器,就是上面提到的并行flash,串行flash和Flash PROM。
配置文件都可以烧写到其中任何一个储存器里面。
但是,在我看来,一般的配置问件都是烧写到Flash PROM里面。
烧写方法有很多,可以用Xilinx公司的专门的烧写.mcs文件的工程烧写,也可以用iMPACT烧写。
一般用iMPACT工具烧写,烧写过程如下:打开iMPACT,弹出新建工程时选择Cancle,然后双击窗口左边的PROM File Formater如下图:弹出的窗口中选择Xilinx PROM文件格式选择mcs,PROM File name为:test.mcs,选择好保存路径点击下一步如下图:上步中点击Next,Select a PROM(bits)选择xcf->xcf04s,点击Add,然后点下一步如下图:上图中点击Next后出现窗口中点击filinsh,弹出消息框点OK,会有一个选择bit问件的窗口,选择一个已经编写好的EDK或者ISE工程生成的.bit文件,OK后提示是否加入其他器件,选择NO,然后双击窗口右边的Generate File,生成.mcs文件如下图所示:然后,双击Boundary Scan,在中间空白处,点击鼠标右键,选择Initialize chain,弹出的第一个窗口中选择Bypass,第二个选择刚才生成的.mcs文件,第三个也选择Bypass,然后选中中间那个模块,点击窗口左下角的program如下图:弹出窗口中选中OK就可以了,烧写完后会看到,Program Successful 提示。
fpga主要参数

fpga主要参数FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,具有灵活可重新配置的硬件特性。
它可以被程序员用于实现特定的电路功能,适用于各种不同的应用领域。
在选择使用FPGA时,有一些主要参数需要考虑。
以下是一些重要的FPGA参数及其详细说明。
1.逻辑单元数量:逻辑单元是FPGA的基本构建块,用于实现不同的逻辑功能。
逻辑单元的数量决定了FPGA的运算能力和复杂性。
当应用需要进行大规模的并行计算时,逻辑单元数量是一个关键参数。
2. 查找表数量:查找表(Look-Up Table,LUT)是FPGA中最小的逻辑单元。
它可以存储逻辑函数,并在需要时提供输出。
查找表数量越大,FPGA的灵活性就越高,可以实现更复杂的逻辑功能。
3.存储单元数量:存储单元用于存储数据和程序。
它可以是寄存器、存储器或分布式RAM等形式。
存储单元的数量决定了FPGA的数据处理能力和存储容量。
对于需要大量数据存储的应用,存储单元数量是一个重要的考虑因素。
4.I/O接口数量:输入/输出(I/O)接口用于与其他外部设备进行数据交互。
I/O接口数量决定了FPGA连接外部设备的能力,如传感器、存储设备、网络接口等。
对于需要大量连接的应用,例如通信系统或数据采集系统,I/O接口数量是一个重要的指标。
5.时钟频率:时钟频率表示FPGA在单位时间内完成的操作次数。
它决定了FPGA的工作速度和响应性能。
高时钟频率可以使FPGA更快地执行计算任务,但对电路设计和功耗管理提出了更高的要求。
适当选择时钟频率可以平衡FPGA的性能和功耗。
6.资源利用率:资源利用率是指FPGA上实际使用的逻辑资源占总资源的比例。
对于系统设计,资源利用率越高,系统的性能就越好。
低资源利用率可能意味着设计不充分或存在冗余。
因此,在选择FPGA时,需要考虑资源利用率,以确保最佳性能和资源利用。
7.功耗:功耗是FPGA运行时所消耗的能量。
FPGA上电配置过程及状态分析

FPGA上电配置过程及状态分析1 概述在进行FPGA硬件设计时,引脚分配是非常重要的一个环节,特别是在硬件电路上需要与其他芯片通行的引脚。
Xilinx FPGA从上电之后到正常工作整个过程中各个阶段引脚的状态,会对硬件设计、引脚分配产生非常重要的影响。
这篇专题就针对FPGA从上电开始 ,配置程序,到正常工作整个过程中所有IO的状态进行分析。
从时间阶段可以分为两部分,第一阶段是从FPGA上电开始直到配置(Configuration)完成之前。
第二个阶段是配置完成之后,FPGA开始正常工作开始。
从引脚类型上分,可以分为三大类:第一类是普通的IO,其中又分为程序设计中使用到的IO和程序设计中没有使用的IO(即在ucf或者XDC文件中没有进行约束的IO);第二类是专用下载配置引脚(Dedicated Pins),这类引脚只用于专用的功能,包括有M[2:0]、TCK、TMS、PROGRAM_B、INIT_B等。
第三类为功能复用引脚,这类引脚在使用特定的功能时使用,例如在使用BPI配置模式时,D[00-31]和A[00-28]需要使用。
如果使用SYSMON 时,I2C_SDA和I2C_SCL需要使用。
但在当前没有使用该功能的情况下,功能复用引脚可以看成普通IO。
2 FPGA IO的基本结构在《IO输入输出的各种模式》介绍了处理器IO的各种输入输出模式以及原理,那么FPGA的IO是什么样的结构和原理?图 1为Xilinx文档中提供的IOB的内部结构,可以看出:在FPGA IOB内部,Pad输出之前,内置上下拉电阻。
且可以通过Passive Pull-up/Pull-down模块控制两个MOS管的导通与否来控制是否使能上下拉电阻。
内部连接Pad的分别有一个Input Buffer和Output Buffer。
其中Input Buffer对外应该始终呈现高阻状态,同时可以将Pad上的电平通过Input Buffer传到I1和I2,或者是下部的FF。
vivado布线参数

vivado布线参数
Vivado是Xilinx公司推出的一款集成化的FPGA设计软件,其中包含了布线功能。
在Vivado中,布线参数通常包括了一系列设置和选项,用于控制FPGA的布线过程以达到设计的性能、功耗和面积等要求。
以下是一些常见的Vivado布线参数:
1. 约束文件,约束文件是描述设计约束的文件,其中包括时序约束、布局约束等。
在Vivado中,可以通过约束文件来指定布线的一些参数,如时钟频率、时序要求等。
2. 布线策略,Vivado提供了多种布线策略,如快速布线、综合布线、时序驱动布线等。
不同的布线策略会影响到布线的速度和质量,设计者可以根据实际需求选择合适的布线策略。
3. 布线优化选项,Vivado中还提供了一些布线优化选项,如时序优化、布局优化、功耗优化等。
这些选项可以帮助设计者在布线过程中优化设计的性能和功耗。
4. 布线约束,除了约束文件外,Vivado还提供了一些布线约束选项,如布线分区约束、时序分组约束等。
这些约束可以帮助设
计者更精细地控制布线的过程。
5. 布线报告,Vivado会生成布线报告,其中包括了布线结果、时序分析、资源利用情况等信息。
设计者可以通过布线报告来评估
设计的性能和资源利用情况,从而调整布线参数以达到更好的设计
效果。
总的来说,Vivado的布线参数涵盖了约束文件、布线策略、布
线优化选项、布线约束和布线报告等方面,设计者可以通过合理设
置这些参数来控制和优化FPGA的布线过程,从而达到设计的性能和
功耗要求。
Xilinx-FPGA器件管脚说明doc

弱上拉
I/O
内部有弱上拉。可以随逻辑需要配置成输入或输出。在配置完成前,这些引脚有内部上拉电阻(25K-100K)至高电平。
在配置模式,这些引脚有弱上拉电阻。对大多数流行的配置模式来而言,在从动串行模式下,模式引脚不需要连接。在有或没有弱上拉或上拉电阻的情况下,三个模式输入引脚可以独自配置。推荐上拉电阻值为4.7K。在特殊定义时,这些引脚只能被作为输入或输出。为应用这些引脚,必须使用库元件MD0、MD1和MD2代替通常的PAD,同时必须使用输入输出缓冲器。
管脚名称
I/O
配置
配置
后I/O
管脚描述
专用管脚
VCC
I
I
有多个VCC管脚,每个都必须连接+5V电源,且每个引脚最好连接一个0.01-0.1UF的电容到地。
GND
I
I
有多个GND管脚,每个都必须接地。
CCLK
I or O
I
配置期间,主动配置方式时为输出或异步外围模式;从配置方式时为输入或同步外围模式。配置完后,CCLK有一个弱上拉电阻,并能够被选为回读时钟。
HDC
O
I/O
在配置期间为高电平,表示配置正在执行。配置完成后,HDC可以用作一个用户可编程I/O口。
/LDC
O
I/O
在配置期间为低电平,表示配置正在执行。配置完成后,LDC可以用作一个用户可编程I/O口。
/INIT
I/O
I/O
在配置前或配置中,/INIT是一个双向信号,需要一个1K-10K的外部上拉电阻。作为一个低电平有效输出,/INIT在电源稳定和清除内部配置内存期间保持低电平。作为一个低电平有效输入,/INIT能在开始配置前保持FPGA在内部WAIT状态。主动模式下,在/INIT变高后,器件将在WAIT状态保持30+300US。在配置期间,输出为低表示配置数据错误。当I/O有效后,/INIT为一个用户可编程I/O引脚。
XilinxFPGA介绍

目前FPGA芯片仍是基于查找表技术的,但其概念和性能已经远远超出查找表技术的限制,并且整合了常用功能的硬核模块(如块RAM、时钟管理和DSP)。
图1-1所示为Xilinx公司FPGA的内部结构示意图(由于不同系列的应用场合不同,所以内部结构会有一定的调整),从中可以看出FPGA芯片主要由 6部分组成:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。
图1-1 FPGA芯片的内部结构每个模块的功能如下:1.可编程输入输出单元(IOB)可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求,提供输入缓冲、输出驱动、接口电平转换、阻抗匹配以及延迟控制等功能,其一般示意结构如图1-2所示。
FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O标准。
通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。
目前,I/O口的频率也越来越高,一些高端的FPGA 通过DDR寄存器技术可以支持高达2Gbps的数据速率。
外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA 内部。
当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(Hold Time)的要求可以降低,通常默认为0。
为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同。
只有相同电气标准的端口才能连接在一起,VCCO 电压相同是接口标准的基本条件。
2.可配置逻辑块(CLB)CLB是FPGA内的基本逻辑单元。
CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。
Xilinx-FPGA配置的一些细节

Xilinx-FPGA配置的一些细节Xilinx FPGA配置的一些细节2010年07月03日星期六 14:260 参考资料(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网站上有,链接/bvdocs/appnotes/xap p138.pdf(3)Xilinx: Using a Microprocessor to Configure Xilinx FPGAs via Slave Serial or SelectMAP Mode.XAPP502 (v1.5) December 3, 2007在Xilinx网站上有,链接/bvdocs/appnotes/xap p502.pdfGTS : 激活用户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时钟就不给了。
Xilinx7系列FPGA架构之器件配置(一)

Xilinx7系列FPGA架构之器件配置(一)引言:本系列博文描述7系列FPGA配置的技术参考。
作为开篇,简要概述了7系列FPGA的配置方法和功能。
随后的博文将对每种配置方法和功能进行更详细的描述。
本文描述的配置方法和功能适用于所有7系列家族器件,只有少数例外。
1.概述Xilinx®7系列FPGA通过将特定于应用程序的配置数据(位流)加载到内存中进行配置。
7系列FPGA可以主动从外部非易失性存储设备加载,也可以通过外部智能源(如微处理器、DSP处理器、微控制器、PC或板测试仪)被动进行配置。
在任何情况下,都有两个通用配置数据路径。
第一个是串行数据路径,这种情况需要最少的硬件管脚连接。
第二个数据路径是8位、16位或32位数据路径,用于更高性能或访问(或链接)行业标准接口,非常适合外部数据源,如处理器或x8或x16并行闪存。
与处理器和处理器外围设备一样,Xilinx FPGA可以在线重新编程,编程次数无限制。
由于Xilinx FPGA配置数据存储在CMOS配置锁存器(CCL)中,因此必须在断电后对其进行重新配置。
每次通过专用配置引脚将比特流加载到FPGA器件中。
这些配置引脚可以用作多种不同配置模式的接口:•主动-串行配置模式•从(或被动)-串行配置模式•主动-并行(SelectMAP)配置模式(x8和x16)•主动-并行(SelectMAP)配置模式(x8,x16和x32)•JTAG边界扫描模式•主动-串行SPI Flas配置模式(x1,x2,x4)•主动-字节BPI Flash配置模式(x8,x16),使用并行NOR Flash这些配置模式通过输入管脚M[2:0]设置不同的电平进行模式选择。
M2,M1和M0应该连接至DC电压常量,可以直接接GND或者VCCO_0或者通过上拉或下拉电阻(≤1kΩ)连接至GND或者VCCO_0。
上述几种配置模式中主或者从是以配置时钟管脚CCLK的方向为参考的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Xilinx FPGA配置的一些细节2010年07月03日星期六 14:260 参考资料(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网站上有,链接(3)Xilinx: Using a Microprocessor to Configure Xilinx FPGAs via Slave Serial or SelectMAP Mode.XAPP502 (v1.5) December 3, 2007在Xilinx网站上有,链接注:此外xapp139和xapp151也是和配置相关的。
(4)Xilinx: Virtex-4 Configuration Guide. UG071 (v1.5) January 12, 2007(5) Tell me about the .BIT .链接: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_cycleThe BitGen Match_cycle setting specifies a stall in the Startup cycle until digitallycontrolled 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 》.它里面包含了当前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节。