一,FPGA配置引脚说明
1,配置相关电源
如果VCCO0连接至2.5V或3.3V,CFGBVS连接至VCCO0。
如果VCCO0连接至1.5V或1.8V,CFGBVS连接至GND。
建议bank0、bank14、bank15的VCCO电压一致,避免出现I/O Transition at the End of Startup

2,配置流程
二,FPGA开启启动加载的方式
1,上电自动加载:就是在FPGA完成上电初始化完成后,由FPGA主导从外部存储器读取位流,此时CCLK为输出;或者由其它主控制器来主导从外部存储器读取位流到FPGA中,此时CCLK为输入,从而完成上电自动加载。

2,Program_B复位加载(input):就是在通过短暂拉低Program_B管脚来开启FPGA配置,等到INIT_B释放拉高后,由FPGA主导从外部存储器读取位流,此时CCLK为输出;或者由其它主控制器来主导从外部存储器读取位流到FPGA中,此时CCLK为输入,从而完成Program_B复位加载。
3,Boot加载:实际上就是通过JTAG发出JProgram指令,实现FPGA加载功能。JTAG发出JProgram指令后,待INIT_B释放拉高后,由FPGA主导从外部存储器读取位流,此时CCLK为输出。Boot加载关系图类似短暂拉低Program_b来开启加载。
4,IPROG指令加载:用于Multiboot场景,实现多重加载。IPROG指令可以通过调用ICAPE2原语发出。通过外部切换开关,更改WBSTAR寄存器来实现多重加载。
三,FPGA加载失败原因
1,系统上电顺序
在主加载模式下,FPGA为主控制器,控制整个位流的加载过程。FPGA在上电及上电复位(TPOR)完成后,init_b信号拉高,FPGA开始使能FCS信号,开始从外部位流存储器FLASH中读取位流,这时候就要求外部存储器FLASH已完成上电并具备可读写操作。因此若FLASH与FPGA分开供电,则要求FLASH供电不能晚于FPGA的VCCO_0完成;若FLASH的VCC与FPGA的VCCO_0共电时,则此电应该不要太缓慢。因为FPGA的VCCO阈值电压比FLASH的VCC电压要低,FPGA的阈值电压到达1.2V差不多就可以工作了,但是FLASH必须要达到2.7V才可正常工作。因此若当FPGA已完成上电及初始化,而FLASH还没达到阈值电压,则会出现上电加载失败的现象。根据Xilinx的init_b释放时间,推荐在主加载模式下,FLASH的VCC与FPGA的VCCO_0共电时,上电时间不要大于init_b释放时间,大约为10ms。在从模式加载下,为保证加载成功,在主控制器开始加载前,FPGA和外部存储器均已完成了上电初始化。为了保险起见,建议FLASH供电和FPGA供电要早于主控制器供电,或另加一个上电复位电路来控制主控制器的上电加载功能,从而达到在开始加载前,所有器件的上电均已完成。当出现因为系统上电顺序导致的加载失败的现象,一般可以通过Program_b复位加载成功或Boot加载成功。
举例:
某XC7K325T电路板上电后,出现SPI加载失败的现象,而使用program_b复位可以加载成功。检查电路图,发现FLASH和FPGA共用3.3V。
示波器测试3.3V上电时间长达180ms。示波器检测下来,发现初始化完成标志信号INIT_B已变高,3.3V还没有到2.7V。通过加快3.3V上电时间以及通过给init加大对地电容实现延迟init释放的方法,上电加载成功,故障现象消失。
这个加载失败,从加载流程上来看,在第4步检测同步头环节闯关失败了。
2,PUDC_B悬空
PUDC_B这个管脚决定在FPGA配置期间,非配置IO的电平状态。当PUDC_B为低电平时,非配置IO为弱上拉;当PUDC_B为高电平时,非配置IO为高阻状态。PUDC_B这个管脚是不被允许悬空,否则会引起配置不稳定。通常情况下,建议使用不超过1KΩ电阻上拉或下拉。同时若同时使用上拉和下拉,也会造成加载失败的现象,也许常温下能加载成功,但是低温下加载就无法保证了。当出现因为PUDC_B悬空或同时上下拉导致的加载失败,一般状态寄存器上GHIGH显示为高电平,说明位流已完全导入FPGA了。这样就会导致内部的部分P管和N管打开,存在部分电流,对外部管脚存在一定的干扰作用,因此对于后续传输的数据具有一定的干扰。若此时PUDC_B管脚处在高阻状态或电平不确定状态,就有可能导致配置管脚易受干扰,后续数据导入错误,从而导致加载失败。
举例:
某XC7VX690T电路板,出现低温时无法BPI加载的现象,而在常温和高温下,均是能够正常加载的。这个现象不管是上电自动加载、或Program_b复位加载,还是Boot加载,都能复现。加载失败后,通过回读状态寄存器发现ghigh值为高,Done值为低。 此时根据现象,基本定位是PUDC_B管脚的问题。检查硬件电路发现,PUDC_B信号同时使用了4.7K电阻上拉和4.7K电阻下拉。去掉上拉电阻,并同时直接0欧姆电阻下拉后,低温下加载成功。这个加载失败,从加载流程上来看,在第6步导入配置位流环节闯关失败了。

3,配置状态管脚被拉低
FPGA的配置状态管脚有Program_b、INIT_b和Done信号,若这3个信号中的任何一个信号在加载前、加载中或加载后出现低电平,都会导致加载失败。
举例:
某XC7VX690T电路板,出现上电BPI加载失败,Program_b复位加载失败,Boot加载也失败的现象。在BPI加载失败后,示波器测试Done信号状态,结果done电压一直是0.7V,相当于低电平。检查硬件电路设计,发现Done信号在330欧姆上拉的同时,还使用了三极管来点亮LED,如下图所示。在FPGA加载成功后,Done释放,同时由于三极管导通,导致Done最后的压降就是三极管的be结的压降0.7V,从而状态寄存器中的Done为低。将三极管拆除后,加载成功,功能正常。这个加载失败,从加载流程上来看,在第8步启动序列环节闯关失败了

4,加载频率CCLK过高或不稳定
在主加载模式下,位流设置中的CCLK的频率需要考虑FLASH支持的最高频率,位流设置的CCLK频率不能超过FLASH所支持的最高频率。对于SPI加载方式,在FLASH能支持的频率范围内,若想使用更高的加载频率,比如加载频率大于50MHz,建议使用下降沿模式,从而保证FPGA从FLASH读位流有大约一个时钟周期的建立时间裕量。
举例;
某XC7K325T电路板,出现无法实现SPI加载的现象,经测试加载模式是SPIx4,加载频率CCLK是50MHz,而使用的FLASH在X4下,查手册后确认最高支持速率为33MHz,更改加载速率后,现象消失,加载成功。
5,电源限流
当供电电源VCCINT的驱动电流不够时,会导致无法启动或者短暂启动后,又因为VCCINT掉电而加载失败的现象。因此为保证能够正常配置加载成功,在设计VCCINT电源时充分考虑上电电流和启动后动态电流指标。上电电流可以查阅器件手册资料,动态电流可以通过XPE来估算。
举例:
某XC7K325T电路板在加载完成后,done信号在高了200多ms后又掉下来了,同时当Done为高时,检测到1V的VCCINT掉电了。重新烧写功能小一点的mcs文件后,可以加载成功。此现象充分说明VCCINT供电电源的驱动电流不够,经过检查,发现VCCINT被限流了,解除VCCINT限流后,再次加载成功。这个加载失败,从加载流程上来看,在第8步启动序列环节闯关失败了。
6,未等到INIT_B变高就启动加载
这种现象基本都是发生在从模式加载中,因为在主模式加载中,FPGA会自动等到INIT_B变高才会开启加载。但是在从模式加载模式中,若主控制器不是检测FPGA的INIT_B信号,而是采用计数的方式启动加载,这就会由于个体器件INIT_B释放时间的差异而导致的加载失败。因此在从加载方式,强烈要求使用FPGA的INIT_B信号高电平来开启加载。
举例:
XC7VX690T电路板,出现SelectMAP x16上电加载失败的现象。使用Program_b复位加载同样失败。查看用户主控制器程序发现,客户采用的是发program_b后固定等待一段时间后直接发配置数据,并没有判读INIT_B信号。由于器件的个体差异性,导致此7VX690T加载失败。更改主控制器程序,在program_b后,判读FPGA输出的INIT_B状态,当INIT_B为高后才开始加载,现象消失,问题解决。这个加载失败,从加载流程上来看,在第2步配置初始化未完成,导致闯关失败了。
7,发生了Abort事件
由于Abort事件导致加载失败的现象通常发生在从模式加载中。当FPGA处于从加载时,CSI_B和RDWR_B期望均为低电平。若当CSI_B管脚为低,RDWR_B从低电平到高电平跳变,则会触发Abort事件,导致本该往FPGA的写位流变为从FPGA读位流,从而导致加载失败。为了避免Abort事件,主控制器应该在CSI_B有效前,确保RDWR_B有效。
举例:位流存储器失效导致的加载失败
某XC7VX690T电路板,出现SelectMAP x16上电加载失败的现象。使用Program_b复位加载同样失败。查看用户主控制器程序发现,客户采用的是发program_b后固定等待一段时间后直接发配置数据,并没有判读INIT_B信号。由于器件的个体差异性,导致此7VX690T加载失败。更改主控制器程序,在program_b后,判读FPGA输出的INIT_B状态,当INIT_B为高后才开始加载,现象消失,问题解决。这个加载失败,从加载流程上来看,在第2步配置初始化未完成,导致闯关失败了。
8,专用IO当作用户IO
比如RS0和RS1管脚,当有Multiboot功能需求、回滚触发条件需求时,不运行RS0和RS1作为用户IO使用,否则会导致加载失败。为了保险起见,有足够用户IO前提下建议配置专用管脚CSI_B、RDWR_B、DOUT_CSO_B也不要作为用户IO使用。
其它:
A,连上JTAG仿真器导致的加载失败
在大多数情况下,在连上JTAG仿真器及打开HW后,会出现加载失败的现象,出现这个现象的原因是由于JTAG的优先级高,导致JTAG上有任何操作行为(扫链成功后,JTAG链会自动检测和/或读寄存器)可能会中断配置。因此解决这个现象的方法就是拔掉JTAG仿真器或者关闭Vivado的HW。下图列举各种情况下的逻辑分析仪抓到的SPI波形和JTAG波形。
连上JTAG+打开HW后,上电加载失败,如下图所示,可以看到JTAG端口不停地发出数据。
展开JTAG波形发现,在配置期间,JTAG首次发了一个USER指令(100010),后续一直不停地发出ISC_PROGRAM指令(010001),这个状态持续FCS整个低电平期间,这说明JTAG在不停地抢占配置总线,由于JTAG配置模式的优先级高,导致SPI加载失败。连上JTAG+关闭HW后,上电加载成功,如下图所示,可以看到JTAG端口没有发出任何数据。拔掉JTAG后,上电加载成功.
B,不连上JTAG仿真器导致的加载失败
某XC7VX690T电路板,出现必须要连上JTAG仿真器才能加载成功,若不连上JTAG仿真器就会加载失败。查看电路发现,FPGA的INIT_B连接到FLASH的RST_B上了。而此FLASH的RST_B是低电平有效,当检测RST_B维持低电平时,FLASH内部就会重复复位,复位时间约为60us。所以当FPGA的INIT_B连接到FLASH的RST_B后,就会出现FPGA开始启动加载了,而此时FLASH还在复位,从而无法执行FPGA发来的读指令。
在不连上JTAG仿真器时,FPGA不会收到任何外来的重加载指令,因此直接中止加载了。当插上JTAG及打开Vivado后,Vivado会默认读FPGA中寄存器的值,会发CFGIN, CFGOUT指令,这时候JTAG退出,会从上一个op_code开始操作。上电默认的op_code是0B,若长期未加载成功,会重发0B或6C,从而出现当连上JTAG仿真器后,加载成功,实际上是多次加载。
某XC7VX690T器件在出现SPI无法加载的情况下,连上JTAG后能加载的SPI波形,如下图所示,出现了多个0B和多个6C情况(0B就是默认的3字节X1读模式,6C就是4字节X4读模式)。

展开0B和6C前的JTAG波形,发现在FPGA重发0B或6C前,JTAG都会发出CFGIN指令(000101)和CFGOUT指令(000100),具体波形如下图所示。

更改硬件电路,断开FPGA的INIT_B与FLASH的RST_B的连接,在不插上JTAG或关闭VVD的情况下,加载成功,一次性加载,逻辑分析仪抓取SPI端口数据,发现在整个配置器件,FPGA只发出了1个0B和1个6C。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty