XilinxFPGA配置的一些细节文档格式.docx
《XilinxFPGA配置的一些细节文档格式.docx》由会员分享,可在线阅读,更多相关《XilinxFPGA配置的一些细节文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
在Xilinx网站上有,链接
(3)Xilinx:
UsingaMicroprocessortoConfigureXilinxFPGAsviaSlaveSerialorSelectMAPMode.XAPP502(v1.5)December3,2007
GTS:
激活用户IO,之前都是高阻。
EOS:
表示配置结束
DCI_MATCH:
表示所有的DCI(DigitallyControlledImpedance)控制器已经把内部电阻和外部参考电阻匹配完毕。
DCM_LOCK:
表示所有的DCM已经锁定。
这个选项默认是选中的。
因此,我们可以得出如下结论:
(1)FPGA最后的Startup过程有8个周期,其中DONE变高仅仅是第4个周期。
因此,在DONE变高之后还需要再给3个CCLK。
否则DONE虽然变高了,FPGA程序并没有正确运行。
(2)ISE会在设计中搜索用户是否使用了DCI,如果是,FPGA会使用2个周期的StartUpPhase,等待DCI匹配上。
即FPGA会在那儿等待,直到DCI匹配上。
如果我们在上位机读取了配置文件,获得了文件大小,我们把它写到负责加载V4的SP3里,然后CCLK时钟就不给了。
这就产生问题,因为DCI匹配需要时间,我们的问题就是,过了一段时间,DCI匹配完毕了,但是CCLK却没有了,因此FPGA一直处在StartUP的前2个Phase上,不会到DONE。
导致无法配置成功。
看xilinxDevelopmentSystemReferenceGuide(dev.pdf)中,写到
BitGenMatch_cycle
TheBitGenMatch_cyclesettingspecifiesastallintheStartupcycleuntildigitally
controlledimpedance(DCI)matchsignalsareasserted.DCImatchingdoesnotbeginontheMatch_cyclethatwassetinBitGen.TheStartupsequencesimplywaitsinthiscycleuntilDCIhasmatched.GiventhatthereareanumberofvariablesindetermininghowlongitwilltakeDCItomatch,thenumberofCCLKcyclesrequiredtocompletetheStartupsequencemayvaryinanygivensystem.Ideally,theconfigurationsolutionshouldcontinuedrivingCCLKuntilDONEgoeshigh.WhentheAutosettingisspecified,BitGensearchesthedesignforanyDCII/Ostandards.
IfDCIstandardsexist,BitGenusesMatch_cycle:
2.Otherwise,BitGenusesMatch_cycle:
NoWait.
关于DCI_MATCH的设置,在生成bit文件的StartUPOptions里有个MatchCycle的选项,默认是Auto。
含义是ISE会去确认用户是否使用了DCI,没有的话,StartupSequence直接跳过这一步,否则会等待DCI匹配完毕。
2bit文件的格式
.bit是二进制文件,可以分为三个部分:
头部冗余信息,配置数据,尾部冗余信息。
头部信息
配置数据
尾部信息
其中头部信息的格式可以参见《Tellmeaboutthe.BITfileformat》.它里面包含了当前ISE工程名字、编译时间等信息,因此头部信息的长度是不确定的,72个字节左右。
第二部分是配置数据流,以0xFFFFFFFFAA995566开头,AA995566是Xilinx指定的同步字符。
配置数据流的具体格式及含义可以参见参考文献,比如ug071.pdf的P95的ConfigurationSequence,基本格式就是指令+数据,很清晰地给出哪个字节是什么命令,用来干什么。
例如bit文件中,加载数据帧之后,有CMD寄存器的命令:
START0x5(0101b)表示开始Start-UpSequence。
最后一部分是尾部信息,由16个32bit的空操作指令:
0x20000000组成。
大家可以打开bit文件看,有很多20000000。
这些表示空操作。
这部分信息可以不用加载到FPGA。
我认为Xilinx把bit文件后面加上这些空操作,是为了在SelectMAP时能让用户多给一些CCLK,完成StartUp。
3bit文件和bin文件的区别
.bin文件和.bit的区别就在于,.bin只包含配置数据,没有前面的headerinforamtion。
4SelectMAP文件是加载.bit呢还是.bin?
既然.bit和.bin仅仅是headerinformation不一样,配置数据是一样的,所以两个文件都可以加载。
但是,当用户在ISE中调用了EDK(比如使用microblaze或者powerpc),ISE生成.bin文件并不会把用户的.elf文件初始化到FPGA内部的数据和程序存储器中,造成用户的microblaze或ppc代码不运行。
至少当前ISE版本(<
=10.1)是这样的,不知道以后的版本Xilinx会不会解决这个bug。
因此,推荐使用.bit文件。
5EDK生成的.bit和ISE生成的.bit文件有什么区别吗?
我们发现,EDK的工程中,生成的.bit文件通过SelectMAP加载到FPGA,程序运行不正常,如果用JTAG加载这个.bit文件,则程序运行正常。
如果把EDK的工程作为ISE的子模块调用,生成的.bit可以通过SelectMAP加载。
那么,EDK生成的.bit和ISE生成的.bit有什么区别吗?
有!
原因就在于ISE和EDK的StartUpClock默认属性设置的不一样。
在ISE->
GenerateProgrammingFile的属性->
StartupOptions->
FPGAStart-UpClock的Value是CCLK;
在EDK->
ProjectFiles->
BitgenOptionsFile:
etc/bitgen.ut里头写着-gStartUpClk:
JTAGCLK,把它修改为-gStartUpClk:
CCLK,重新生成download.bit,SelectMAP加载,FPGA工作正常!
查Xilinx关于SelectMAP的说明(v4的配置手册ug71.pdf),发现一句话:
TheBitGenstartupclocksettingmustbesetforCCLKforSelectMAPconfiguration.
6xapp138.pdf
比较详细的介绍了FPGA配置细节;
(1)在MasterSerial模式,FPGA输出的CCLK开始是2.5MHz,在同步字符后第60个字节CCLK的频率切换为用户指定的时钟。
我们可以在ISE中选择配置时钟的频率,单位是MHz,
需要注意的是,CCLK的周期有-30%~+45%的偏差。
ISE不同版本、不同FPGA系列,它默认的配置时钟是不一样的。
此外,还需要注意选择的CCLK频率能被PROM支持。
我曾经遇到过这个问题:
用Virtex5SX50T作为PCI接口芯片,默认的配置时钟选择了6MHz。
完成整个加载超过1s的时间,结果是PCI设备无法识别。
解决方法就是在生成bit文件的时候,把CCLK设置为20MHz,这样SX50T很快就能完成加载。
(2)在bit文件末尾有一些关于startup的配置命令。
(3)/PROGRAM低有效的持续时间不能小于300ns,最长时间没有限制。
所以,我们在用SelectMAP配置的时候,要注意拉低此信号的持续时间。
(4)CRC校验,在整个配置过程中会校验两次。
Thefirstcheckisjustbeforethelastconfigurationframeisloaded,andthesecondisattheveryendofconfiguration.
(5)selectMAP模式,BUSY仅在CCLK频率大于50MHz时才是必需的。
(BUSYisonlynecessaryforCCLKfrequenciesabove50MHz.IftheCCLKfrequencyisless,than50MHz,thiscanbedonewithouthandshaking.)
(6)Completionoftheconfigurationprocessrequires8to16clockcyclesafterthefinalCRCisloaded.这个参见第1节。
7模式信号
Xilinx的ConfigurationGuide上面说,M0M1M2Canbeeither0or1,butmustnottoggleduringandafterconfiguration.
好像在配置完后切换应该没有什么关系,因为M0M1M2是在Init_b上升沿被采样。
8关于部分重加载(xapp290.pdf)
生成bit文件的时候加上-gActiveReconfig:
Yes。
则FPGA在加载的时候仍然会正常工作。
同时,必须设置-gPersist:
Yes,这个选项表示在SelectMAP模式下,加载的管脚在配置成功后仍然是加载管脚,不会变为用户IO,这样就可以用来部分重加载。
此外,-gsecurity:
none必须设置。
[meaningthatthedeviceremainsinfulloperationwhilethenewpartialbitstreamisbeingdownloaded.IfActiveReconfig:
Yesisnotspecified(or-gActiveReconfig:
Noisspecified),thenthepartialbitstreamcontainstheShutdownandAGHIGHcommandsusedtodea