tag 标签: fpga配置

相关博文
  • 热度 14
    2014-6-3 14:57
    2898 次阅读|
    0 个评论
            最近的一个项目里有一项功能是,用ARM来配置FPGA,配置模式是FPP模式。这么做的目的是,ARM可以实现通过网络来实现FPGA配置文件的远程升级,从而实现FPGA的远程配置。          参考FPGA的芯片手册中关于其FPP配置的描述,FPGA要想实现FPP配置,需要完成三步:         第一步:硬件连接。硬件连接只要按照FPGA芯片手册中提供的参考电路连接即可,要注意手册中关于FPGA的模式选择的配置电路。         第二步:配置文件的生成。测试的时候我们使用的配置文件时.rbf格式的,由Quartus II软件直接生成,也可由.sof转换得来。         第三步:按照FPP配置时序来写入配置文件。FPGA芯片手册中给出了FPP配置的时序图,按照这个时序图来编写实现FPGA配置的程序(这里是ARM程序)。         在完成第三步以后,FPGA并不能初始化成功,测量FPGA引出来的CONF_DONE引脚,也是一直为低(CONF_DONE为低,说明FPGA在配置阶段就没有成功)。起初怀疑是FPP配置的连接电路有问题,检查排除了这个可能。后猜测可能是发送的数据不对的原因,可能是ARM这边发送一个数据,但FPGA这边接收的确实错误的数据,因为这块电路板上,ARM部分的最高电压是1.8V,而FPGA这边的最高电压是3.3V。打算编写程序测试一下是否是由于传输过程中数据不能正常接收的,但是由于一些原因,最终没有测试。而是一直在测是不是ARM的配置程序有问题,问题没有找到原因。偶然一个测试发现,在ARM发送.rbf文件的数据给FPGA时,nSTATUS信号会被拉低,而不是正常写入数据是的拉高。猜测nSTATUS被拉低的原因是由于nCONFIG信号被置低了,用示波器测量在写入配置数据期间nCONFIG的变化情况,果然nCONFIG被置低,导致FPGA重新开始配置过程。为什么写入.rbf的配置数据时,nCONFIG会被置低呢?测试发现,当不写入任何数据时,只用ARM拉高nCONFIG信号,nCONFIG不会变低。我们把写入的数据换成足够多数量的0x55数据组成的数组,重新写入到FPGA中,nCONFIG信号不会被置低。由此推断nCONFIG被置低应该是写入.rbf配置文件导致的。写入.rbf文件的过程是这样的,在ARM中读取.rbf文件,把读出的数据放到一个buffer里,然后发送给FPGA。因此我们就直接把.rbf文件中的数据读出并打印出来,然后做成一个数组,重新写入FPGA,nCONFIG依然会被置低。由于之前测试过把这个数组里的数据换成0x55,nCONFIG不会被置低,因此应该不是.rbf文件的读取并写入到FPGA的过程引发的问题,而是.rbf文件本身的问题导致nCONFIG被置低的。重新在Quartus II里 设置配置模式(Configure Scheme) , 把AS模式更改为FPP模式 ,并且设置成配置文件不压缩的方式,重新编译生成.rbf文件。把更改后的.rbf文件写入到FPGA中,问题就解决了,FPGA也可以正常配置并正常进入到用户模式,自此,应用ARM对FPGA进行FPP配置就大功告成了。可是,问题虽然解决了,但是还有一些疑问没有消除,如果说只是.rbf文件的格式不对,那为什么只写入0x55时nCONFIG不被置低呢?还有为什么更改后的.rbf文件就可以实现FPGA的正常配置,而之前的.rbf不能实现FPGA的配置,而且会出现nCONFIG被置低的问题?猜测问题可能的原因是,没更改的.rbf文件由于生成的时候,在Quartus II中设置的配置模式是AS模式,因此在把这个.rbf文件数据写入的时候,FPGA被引导成AS模式,所以nCONFIG会被置低。写入更改后的.rbf文件到FPGA,在这个文件中FPGA的配置模式被设成了FPP模式,所以可以实现FPGA的正常配置。写入0x55,nCONFIG不被置低,有可能是因为0x55组成的数组中,并没有FPGA配置模式的引导数据,所以nCONFIG不会被FPGA置低,而是由ARM控制,被一直拉高。
  • 热度 15
    2014-3-13 18:43
    4241 次阅读|
    1 个评论
           近期项目的板卡焊接回来,开始进行硬件调试。在调试FPGA最小电路能否正常工作的时候,出现了这样一个问题:用JTAG烧写器往FPGA中烧写配置文件的时候,文件可以正常烧写,但是FPGA并没有相应的反应,就是FPGA并没有工作。又尝试了一下AS模式配置FPGA,同样,配置文件也可以烧写进去,FPGA同样不工作。而且重新上电之后FPGA也同样不能正常工作,只有当烧写器连在AS配置接口的时候,重新上电FPGA才能成功重配置并且正常工作。        首先检查的是FPGA供电电路,测量供电电路正常供电。        其次检查的是FPGA的配置电路,包括JTAG配置电路和AS配置电路。用万用表测量相关配置引脚的电平值,发现相比起FPGA正常起来时候各配置引脚的电平值,起不来时候的引脚电平异常。检查FPGA的配置电路,发现配置相关的引脚nCONFIG、nSTATUS、CONF_DONE、DCLK、DATA0、ASDO这六个引脚通过一个阻排跟ARM部分的电路连接到了一起,问题可能就出在这里。把ARM部分与FPGA的配置电路断开,FPGA就可以正常配置正常工作了。       ARM电路影响FPGA配置的原因是:ARM的IO引脚直接跟FPGA的配置引脚相连,在上电的时候ARM的IO引脚默认为输出状态,在FPGA配置引脚受ARM的IO引脚电平影响的情况下,配置引脚电平被拉低,导致FPGA无法完成配置。nCONFIG被拉低,配置文件可以写入,nSTATUS和CONF_DONE被拉低导致虽然配置文件写入到FPGA中,但FPGA却无法完成配置,FPGA自然就不能正常工作了。 下图是FPGA的配置过程: 下图是FPGA的配置流程:  
  • 热度 14
    2014-2-19 11:20
    2132 次阅读|
    0 个评论
    告别AS下载模式 一 直以来,一般人下载FPGA 的配置芯片,都是用ASP下载模式,USB Blaster接口要插来插去,真的是麻烦,其实,下载FPGA 的配置芯片,还有另外的方法,那就是仍然通过JTAG下载,二换一种配置模式,下载jic文件或者是jam 文件,对然这样做,对实际开发来说,对一般实验意义不怎么大,但是若是批量开发,不仅可以减少板子的费用(因为不用ASP下载接口了,面积减少),而且省 去了不少器件,应该有效益。 具体做法,在下面我会详细说明,让开发变得更简单。 告别ASP(主动串行编程)下载模式... 1 ——JTAG---EPCS1. 1 序... 1 一、ASP、JTAG两种模式下子EPCS的比较... 2 流程图... 2 Serial Flash Loader 2 二、 配置下载的全过程... 3 1、新建工程... 3 2、编写Water_Led.v. 3 3、加入Serial Flash Loader的IP. 4 4、添加程序... 4 5、把sof文件转换为jic文件... 4 6、把jic文件转换为jam文件或者svf文件... 7 7、编程串行配置器件,下载程序... 7 9、效果... 7 三、 结论感受... 7 AS、JTAG两种模式下子EPCS的比较   Serial Flash Loader The Serial Flash Loader, SFL, provides the ability to program an active serial configuration device through the FPGA’s JTAG pins. The SFL creates a bridge between the FPGA JTAG pins and the FPGA ASMI interface. The SFL, which consumes ~188 logic elements, must be included in the design as this instantiates the bridge. The SFL bridge is instantiated using the Quartus II MegaWizard Plug-In Manager. 二、配置下载的全过程 1、新建工程 2、编写Water_Led.v module JTAG_EPCS1( input clk, //50MHZ on the board output reg Water_Led ); reg cnt; reg clk_led;//10HZ always@(posedge clk) begin if(cnt22'd2500000) cnt=cnt+1'b1; else begin cnt=0; clk_led=~clk_led; end end always@(posedge clk_led) begin case(Water_Led) 8'b00000000 : Water_Led=8'b00000001; 8'b00000001 : Water_Led=8'b00000011; 8'b00000011 : Water_Led=8'b00000111; 8'b00000111 : Water_Led=8'b00001111; 8'b00001111 : Water_Led=8'b00011111; 8'b00011111 : Water_Led=8'b00111111; 8'b00111111 : Water_Led=8'b01111111; 8'b01111111 : Water_Led=8'b11111111; 8'b11111111 : Water_Led=8'b11111110; 8'b11111110 : Water_Led=8'b11111100; 8'b11111100 : Water_Led=8'b11111000; 8'b11111000 : Water_Led=8'b11110000; 8'b11110000 : Water_Led=8'b11100000; 8'b11100000 : Water_Led=8'b11000000; 8'b11000000 : Water_Led=8'b10000000; 8'b10000000 : Water_Led=8'b00000000; endcase end endmodule 3、加入Serial Flash Loader的IP 4、添加程序 Serial_Flash_Loader u_S( .noein(1'b0) ); endmodule 5、把sof文件转换为jic文件 (1) (2) 选择JTAG Indirect Configuration File、EPCS1,以及保存的jic文件名 选择Memory Map File (3) 选择目标板器件 (4) 在SOF DATA添加工程中sof文件,用来转换为mif文件 (5) 选择压缩sof文件的模式,以减少空间 转换成功 6、把jic文件转换为jam文件或者svf文件 Alternatively,这部可以不选,直接第7部下载程序,我都不知道这有什么意义,有兴趣的人,可以参照文档Configuring EPCS Devices via JTAG v1.0 7、编程串行配置器件,下载程序 9、效果 重启之后,流水灯就开始流动,说明程序已经通过JTAG下载到EPCS芯片中,实现了想要的功能。 三、结论感受 刚接触到这个东西的 时候,我用的Q II 版本是9.1 的,当时测试了好多,看了好多的pdf ,可是就是下载不进去,当时还以为是板子电路的原因,或者是自己配制方法不对,工夫不到家,于是那时候也因为别的事情,再也没有碰过了。 后 来,记得去年年底,有个网友告诉我Q II 9.1有bug,固化程序上有问题,所以无论是通过ASP下载模式,还是通过JTAG下载模式配置下载到EPCS都不能成功,后来又Fans直接向 Altera求助,最后,很快,出来了Q II 9.1 SP1,大概是个补丁吧,要覆盖安装的,不是很小也不是很大,现在,果然可以了,纠结了那么久的时间原来不是我的错,是软件的错啊。 现在好了,呵呵,告诉大家我的心得,也希望不要像我这样走歪路,还在用Q II 9.1 的朋友,还是赶紧去ftp://ftp.altera.com/outgoing/release/ 下载Q II 9.1 SP1吧,省的走歪路,呵呵。
  • 热度 11
    2012-10-6 20:57
    2049 次阅读|
    1 个评论
      FPGA配置学习笔记                                                 2012-10-04 西安 JTAG和AS下载电路图3和图4所示 图3 JTAG 图4 AS FPGA配特殊引脚的含义 1.I/O, ASDO 在AS 模式下是专用输出脚,在PS 和JTAG 模式下可以当I/O 脚来用。在AS 模式下,这个脚是CII 向串行配置芯片发送控制信号的脚。也是用来从配置芯片中读配置数据的脚。在AS 模式下,ASDO 有一个内部的上拉电阻,一直有效,配置完成后,该脚就变成三态输入脚。ASDO 脚直接接到配置芯片的ASDI 脚(第5 脚)。 2.I/O,nCSO 在AS 模式下是专用输出脚,在PS 和JTAG 模式下可以当I/O 脚来用.在AS 模式下,这个脚是CII 用来给外面的串行配置芯片发送的使能脚。在AS 模式下,ASDO 有一个内部的上拉电阻,一直有效。这个脚是低电平有效的。直接接到配置芯片的/CS 脚(第1 脚)。 3.I/O,CRC_ERROR 当错误检测CRC 电路被选用时,这个脚就被作为CRC_ERROR 脚,如果不用默认就用来做I/O。但要注意,这个脚是不支持漏极开路和反向的。当它作为CRC_ERROR 时,高电平输出则表示出现了CRC 校验错误(在配置SRAM 各个比特时出现了错误)。CRC 电路的支持可以在setting 中加上。这个脚一般与nCONFIG 脚配合起来用。即如果配置过程出错,重新配置. 4.I/O,CLKUSR 当在软件中打开Enable User-supplled start-up clock(CLKUSR)选项后,这个脚就只可以作为用户提供的初始化时钟输入脚。在所有配置数据都已经被接收后,CONF_DONE 脚会变成高电平,CII 器件还需要299 个时钟周期来初始化寄存器,I/O 等等状态,FPGA 有两种方式,一种是用内部的晶振(10MHz),另一种就是从CLKUSR 接进来的时钟(最大不能超过100MHz)。有这个功能,可以延缓FPGA 开始工作的时间,可以在需要和其它器件进行同步的特殊应用中用到。 5.I/O,VREF 用来给某些差分标准提供一个参考电平。没有用到的话,可以当成I/O 来用。 6. DATA0 专用输入脚。在AS 模式下,配置的过程是:CII 将nCSO 置低电平,配置芯片被使能。CII然后通过DCLK 和ASDO 配合操作,发送操作的命令,以及读的地址给配置芯片。配置芯片然后通过DATA 脚给CII 发送数据。DATA 脚就接到CII 的DATA0 脚上。CII 接收完所有的配置数据后,就会释放CONF_DONE 脚(即不强制使CONF_DONE 脚为低电平),CONF_DONE 脚是漏极开路(Open-Drain)的。这时候,因为CONF_DONE 在外部会接一个10K 的电阻,所以它会变成高电平。同时,CII 就停止DCLK 信号。在CONF_DONE 变成高电平以后(这时它又相当于变成一个输入脚),初始化的过程就开始了。所以,CONF_DONE 这个脚外面一定要接一个10K 的电阻,以保证初始化过程可以正确开始。 DATA0,DCLK,NCSO,ASDO 脚上都有微弱的上拉电阻,且一直有效。在配置完成后,这些脚都会变成输入三态,并被内部微弱的上拉电阻将电平置为高电平。在AS 模式下,DATA0就接到配置芯片的DATA(第2 脚)。 7. DCLK PS 模式下是输入,AS 模式下是输出。在PS 模式下,DCLK 是一个时钟输入脚,是外部器件将配置数据传送给FPGA 的时钟。数据是在DCLK 的上升沿把数据,在AS 模式下,DCLK脚是一个时钟输出脚,就是提供一个配置时钟。直接接到配置芯片的DCLK 脚上去(第6脚)。无论是哪种配置模式,配置完成后,这个脚都会变成三态。如果外接的是配置器件,配置器件会置DCLK 脚为低电平。如果使用的是主控芯片,可以将DCLK 置高也可以将DCLK 置低。配置完成后,触发这个脚并不会影响已配置完的FPGA。这个脚带了输入Buffer,支持施密特触发器的磁滞功能。 8. nCE 专用输入脚。这个脚是一个低电平有效的片选使能信号。nCE 脚是配置使能脚。在配置,初始化以及用户模式下,nCE 脚必须置低。在多个器件的配置过程中,第一个器件的nCE 脚要置低,它的nCEO 要连接到下一个器件的nCE 脚上,形成了一个链。nCE 脚在用JTAG编程模式下也需要将nCE 脚置低。 这个脚带了输入Buffer,支持施密特触发器的磁滞功能。 9. nCONFIG 专用的输入管脚。这个管脚是一个配置控制输入脚。如果这个脚在用户模式下被置低,FPGA就会丢失掉它的配置数据,并进入一个复位状态,并将所有的I/O 脚置成三态的。nCONFIG从低电平跳变到高电平的过程会初始化重配置的过程。如果配置方案采用增强型的配置器件或EPC2,用户可以将nCONFIG 脚直接接到VCC 或到配置芯片的nINIT_CONF 脚上去。这个脚带了输入Buffer,支持施密特触发器的磁滞功能。实际上,在用户模式下,nCONFIG信号就是用来初始化重配置的。当nCONFIG 脚被置低后,初始化进程就开始了。当nCONFIG脚被置低后,CII 就被复位了,并进入了复位状态,nSTATUS 和CONF_DONE 脚被置低,所有的I/O 脚进入三态。nCONFIG 信号必须至少保持2us。当nCONFIG 又回到高电平状态后,nSTATUS 又被释放。重配置就开始了。在实际应用过程中可以将nCONFIG 脚接一个10K 的上拉电阻到3.3V. 10. DEV_OE I/O 脚或全局I/O 使能脚。在Quartus II 软件中可以使能DEV_OE 选项(Enable Device-wideoutput Enable),如果使能了这一个功能,这个脚可以当全局I/O 使能脚,这个脚的功能是,如果它被置低,所有的I/O 都进入三态。 11. INIT_DONE I/O 脚或漏极开路的输出脚。当这个脚被使能后,该脚上从低到高的跳变指示FPGA 已经进入了用户模式。如果INIT_DONE 输出脚被使能,在配置完成以后,这个脚就不能被用做用户I/O 了。在QuartusII 里面可以通过使能Enable INIT_DONE 输出选项使能这个脚。 12. nCEO I/O 脚或输出脚。当配置完成后,这个脚会输出低电平。在多个器件的配置过程中,这个脚会连接到下一个器件的nCE 脚,这个时候,它还需要在外面接一个10K 的上拉电阻到Vccio。多个器件的配置过程中,最后一个器件的nCEO 可以浮空。如果想把这个脚当成可用的I/O,需要在软件里面做一下设置。另外,就算是做I/O,也要等配置完成以后。 13. nSTATUS 这是一个专用的配置状态脚。双向脚,当它是输出脚时,是漏极开路的。在上电之后,FPGA立刻将nSTATUS 脚置成低电平,并在上电复位(POR)完成之后,释放它,将它置为高电平。作为状态输出脚时,在配置过程中如果有任何一个错误发生了,nSTATUS 脚会被置低。作为状态输入脚时,在配置或初始化过程中,外部控制芯片可以将这个脚拉低,这时候FPGA就会进入错误状态。这个脚不能用作普通I/O 脚。nSTATUS 脚必须上拉一个10K 欧的电阻。 14. CONF_DONE 这是一个专用的配置状态脚。双向脚,当它是输出脚时,是漏极开路的。当作为状态输出脚时,在配置之前和过程中,它都被置为低电平。一旦配置数据接收完成,并且没有任何错误,初始化周期一开始,CONF_DONE 就会被释放。当作为状态输入脚时,在所有数据都被接收后,要将它置为高电平。之后器件就开始初始化再进入用户模式。它不可以用作普通I/O来用。这个脚外成也必须接一个10K 欧的电阻。 15. MSEL 这些脚要接到零或电源,表示高电平或低电平。00 表示用AS 模式,10 表示PS 模式, 01是FAST AS 模式.如果用JTAG 模式,就把它们接00, JTAG 模式跟MSEL 无关,即用JTAG模式,MSEL 会被忽略,但是因为它们不能浮空,所以都建议将它接到地。 16 DEV_CLRn I/O 或全局的清零输入端。在QuartusII 里面,如果选上Enable Device-Wide Reset(DEV_CLRn)这个功能。这个脚就是全局清零端。当这个脚被置低,所有的寄存器都会被清零。这个脚不会影响到JTAG 的边界扫描或编程的操作。   FPGA配置引脚的应用 对于FPGA应用而言需要知道如下几点就可以了。 nCONFIG、nSTATUS、CONF_DONE需要接10K的上拉电阻,nCE需要接10K的下拉电阻; nCONFIG为配置控制专用输入引脚,置低FPGA丢失数据;nSTATUS为FPGA专用双向引脚,为0表示FPGA处于忙状态,释放后在上拉作用下为1,FPGA开始处于配置状态。 CONF_DONE专用配置双向脚,FPGA配置时为0,配置完成后,释放,在外部上拉的作用下为1。nCE配置使能专用输入引脚。在配置,初始化以及用户模式下,nCE 脚必须置低。 MSEL为模式配置引脚; TDI、TMS接10K的上拉电阻,TCK接10K的下拉电阻,用于JTAG; ASDO、nCSO、DCLK、DATA0用于FPGA与配置芯片的通信,内部有弱上拉无需外加电阻上拉。 时钟引脚只能输入,不能输出。 6、上拉/下拉电阻作用:   1)保证电路的初始值.比如TCK信号采用下拉电阻.为什么采用下拉电阻,而不采用上拉电阻呢?因为下拉电阻使TCK信号的初始值为0,由于是时钟信号,可以保证时钟信号在初值后第一个边沿为上升沿,而JTAG控制电阻正是以TCK的上升沿向FPGA内部写配置数据的.   2)这里的上/下拉电阻仅仅属于推荐值,并非确定值,目的是保证信号质量.以上拉电阻为例,如果上拉电阻为10K以上,由于管脚对地有一个等效电容,由于T=RC,C由器件的工艺决定,电阻越大,充放电时间越长,信号的上升沿就越缓慢,斜率就越小.上升时间如果超过JTAG控制电路的要求,向FPGA内部写数据就可能出错.那么,如果上拉电阻越小呢?会不会上升时间变小呢?是的.电阻变小,上升时间变小,斜率变大,但是却带来了另一个严峻的问题,如果电阻小到一定程度,信号将在上升沿出现上冲现象,情形严重时会出现信号的振铃.如果电阻太小,产生的倒灌电流超过器件IO的容限,JTAG控制电路会烧坏.那么,这个电阻究竟多大才满足一般PCB的要求呢?一般情况使用4.7K. 3)保证信号的驱动能力.前面提到,电阻越小,信号的斜率越小,同时信号的驱动能力越强.电阻越大,信号斜率越大,同时信号的驱动能力越弱.这一点在JTAG菊花链电路中有及其重要的重要.  
相关资源
  • 所需E币: 3
    时间: 2019-12-25 17:28
    大小: 133.33KB
    上传者: wsu_w_hotmail.com
    ALTERA公司SRAM工艺可编程器件应用广泛,专用配置器件比较昂贵。在具有微处理器的系统中,使用微处理器系统的存储器来存储配置数据,并通过微处理器配置FPGA,这种方法几乎不增加成本。微处理器根据不同的程序应用,采用不同的配置数据对FPGA进行配置,使FPGA实现与该应用有关的特定功能。详细介绍了微处理器系统中连接简单的被动串行配置方法和被动并行异步配置方法。……
  • 所需E币: 4
    时间: 2019-12-24 20:30
    大小: 1.11MB
    上传者: quw431979_163.com
    Cyclone_II系列FPGA配置[pic]杨宁1041121665CycloneII系列FPGA配置杨宁1041121665摘要:由于CycloneII系列器件是用易失性的SRAM结构单元来存储配置数据的,所以在每次系统上电时都要进行重配置。用户可以使用DCLK频率高达40MHz的AS(主动串行)模式、PS(被动串行)模式或是JTAG对FPGA器件进行配置操作。另外,为了减小存储需求和配置时间,CycloneII系列器件能够使用压缩数据进行配置。本文的目的是让用户了解CycloneII器件的配置特点,让用户掌握如何使用CycloneII器件所支持的配置方式对此系列FPGA进行配置。同时,也会介绍配置管脚的使用及配置文件的格式等相关信息。关键词:CycloneII;FPGA;配置第一节、CycloneII器件配置概述:用户可以使用AS、PS和JTAG模式配置CycloneII系列FPGA。选择何种配置方式取决于MSEL管脚的电平状态,请参照表1-1。表1-1CycloneII配置模式……