除了奋斗,我别无选择!
分类: IT业界
2011-03-11 17:58:19
有些人对于FPGA下JTAG的下载方式有些迷惑,为什么出现配置芯片了,为什么要用不同的下载电缆,不同的下载模式?通过在网上查阅相关资料做了总结和整理如下:
1 FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。
AS模式(active serial configuration mode):FPGA器件每次上电时作为控制器,由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,从配置器件EPCS主动发出读取数据信号,从而把EPCS的数据读入FPGA中,实现对FPGA的编程配置数据通过DATA0引脚送入 FPGA,配置数据被同步在DCLK输入上,1个时钟周期传送1位数据。
PS模式(passive serial configuration mode):则由外部计算机或控制器控制配置过程。通过加强型配置器件(EPC16,EPC8,EPC4)等配置器件来完成,EPCS作为控制器件,把FPGA当作存储器,把数据写人到FPGA中,实现对FPGA的编程。该模式可以实现对FPGA在线可编程。在下载配置的时候对于Cyclone II的器件,如EP2C8,在JTAG下载方式对应.sof,AS下载方式对应.pof。
JTAG:JTAG是直接烧到FPGA里面的 由于是SRAM 断电后要重烧,AS是烧到FPGA的配置芯片里保存的 每次上电就写到FPGA里。
一般情况下,Cyclone II开发板上应该有两种下载模式,AS和JTAG。
AS就是下载.pof文件到EPCS中。而JTAG就是下载.sof文件到FPGA中的RAM中。
关于JTAG的原理,大家可以参考OPEN-JTAG 开发小组写的《ARM JTAG 调试原理》。JTAG、BDM 都比较类似,实际上是将仿真功能嵌入到芯片内部,接上比较简单的调试工具就可以进行开发了,省掉了高价的仿真器。
JTAG 调试用到了 TCK、TMS、TDI、TDO 和 TRST这几个脚。其中 TRST 是用来对TAP 进行复位的,它不是必须的。通过在 TMS脚也可以使 TAP 复位。
Test Clock Input (TCK)
TCK为 TAP的操作提供了一个独立的、基本的时钟信号,TAP 的所有操作都是通过这个时钟信号来驱动的。TCK在 IEEE 1149.1 标准里是强制要求的。
Test Mode Selection Input (TMS)
TMS信号用来控制 TAP状态机的转换。通过 TMS信号,可以控制 TAP在不同的状态间相互转换。TMS信号在 TCK的上升沿有效。TMS在 IEEE 1149.1 标准里是强制要求的。
Test Data Input (TDI)
TDI 是数据输入的接口。所有要输入到特定寄存器的数据都是通过 TDI 接口一位一位串行输入的(由 TCK驱动)。TDI在 IEEE 1149.1 标准里是强制要求的。
Test Data (TDO)
TDO 是数据输出的接口。所有要从特定的寄存器中输出的数据都是通过 TDO 接口一位一位串行输出的(由 TCK驱动)。TDO在 IEEE 1149.1 标准里是强制要求的。
Test Reset Input (TRST)
TRST 可以用来对 TAP 进行复位(初始化)。不过这个信号接口在 IEEE 1149.1标准里是可选的,并不是强制要求的。因为通过 TMS也可以对 TAP 进行复位(初始化)。
FPGA在正常工作时,它的配置数据存储在SRAM中,加电时须重新下载。在实验系统中,通常用计算机或控制器进行调试,因此可以使用PS。在实用系统中,多数情况下必须由FPGA主动引导配置操作过程,这时FPGA将主动从外围专用存储芯片中获得配置数据,而此芯片中FPGA配置信息是用普通编程器将设计所得的.pof格式的文件烧录进去。
专用配置器件:EPC型号的存储器
常用配置器件:EPC1,EPC2,EPC4,EPC8,EPC1441(现在好像已经被逐步淘汰了)等,对于Cyclone II系列器件,ALTERA还提供了针对AS方式的配置器件,EPCS系列.如EPCS1,EPCS4配置器件也是串行配置的。注意,他们只适用于cyclone系列。
除了AS和PS等单BIT配置外,现在的一些器件已经支持PPS,FPS等一些并行配置方式,提升配置了配置速度。当然所外挂的电路也和PS有一些区别。还有处理器配置比如JRUNNER 等等,如果需要再百度吧,至少不下十种。比如Altera公司的配置方式主要有Passive Serial(PS),Active Serial(AS),Fast Passive Parallel(FPP),Passive Parallel Synchronous (PPS),Passive Parallel Asynchronous (PPA),Passive Serial Asynchronous(PSA),JTAG等七种配置方式,其中Cyclone支持的配置方式有PS,AS,JTAG三种。
2 对FPGA芯片的配置中,可以采用AS模式的方法,如果采用EPCS的芯片,通过一条下载线进行烧写的话,那么开始的"nCONFIG ,nSTATUS"应该上拉,要是考虑多种配置模式,可以采用跳线设计。让配置方式在跳线中切换,上拉电阻的阻值可以采用10K。
3 在PS模式下tip:如果你用电缆线配置板上的FPGA芯片,而这个FPGA芯片已经有配置芯片在板上,那你就必须隔离缆线与配置芯片的信号。一般平时调试时不会把配置芯片焊上的,这时候用缆线下载程序.只有在调试完成以后,才把程序烧在配置芯片中, 然后将芯片焊上,或者配置芯片就是可以方便取下焊上的那种,这样出了问题还可以方便地调试。
在AS模式下tip:用过一块板子用的AS下载,配置芯片一直是焊在板子上的,原来AS方式在用线缆对配置芯片进行下载的时候,会自动禁止对FPGA的配置,而PS方式需要电路上隔离。
4 一般是用JTAG配置epc2和flex10k,然后 epc2用PS方式配置flex10k.这样用比较好.(这是我在网上看到的,可以这样用吗?怀疑中)望达人告知.
5 下载电缆,Altera下的下载电缆分为ByteBlaster和ByteBlasterMV,以及ByteBlaster II,现在还推出了基于USB-blaster.由于BB基本已经很少有人使用,而USB-Blaster现在又过于昂贵,这里就说一下BBII和 BBMV的区别.
BBII支持多电压供电5.5v,3.3v,2.5v,1.8v;
BBII支持三种下载模式:AS,可对Altera的As串行配置芯片(EPCS系列)进行编程;PS可对FPGA进行配置 ;JTAG,可对FPGA,CPLD,即Altera配置芯片(EPC系列)编程;而BBMV只支持PS和JTAG。
6 一般在做FPGA实验板,(如Cyclone系列)的时候,用AS+JTAG方式,这样可以用JTAG方式调试,而最后程序已经调试无误了后,再用 AS模式把程序烧到配置芯片里去,而且这样有一个明显的优点,就是在AS模式不能下载的时候,可以利用Quartus II自带的工具生成JTAG模式下可以利用的.jic文件来验证配置芯片是否已经损坏,方法详见附件(这是骏龙的人写的,摘自坛子,如有版权问题,请包涵).
7 Altera的FPGA可以通过单片机,CPLD等加以配置,主要原理是满足datasheet中的时序即可,这里我就不多说了,有兴趣的朋友可以看看下面几篇文章,应该就能够明白是怎么回事了。
8 配置时,Quartus软件操作部分:
(1).assignment-->device-->device&pin options-->选择configuration scheme, configuration mode, configuration device
注:意在不支持远程和本地更新的机器中configuration mode不可选择,而configuration device中会根据不同的配置芯片产生pof文件,如果选择自动,会选择最小密度的器件和适合设计;
(2).可以定义双口引脚在配置完毕后的作用,在刚才的device&pin option-->dual-purpose pins-->,可以在配置完毕后继续当I/O口使用;
(3).在general菜单下也有很多可钩选项,默认情况下一般不做改动,具体用法参见Altera configuration handbook,volume2,sectionII.
(4)关于不同后缀名的文件的适用范围:
.sof(SRAM Object File)当直接用PS模式下将配置数据下到FPGA里用到,USB BLASTER,MASTERBLASER,BBII,BBMV适用,Quartus II会自动生成,所有其他的配置文件都是由sof生成的。
.pof(Programmer Object File)也是由Quartus II自动生成的,BBII适用,AS模式下将配置数据下到配置芯片中
.rbf(Raw Binary File)用于微处理器的二进制文件。在PS,FPP,PPS,PPA配置下有用处。
rpd(Raw Programming Data File)包含bit stream的二进制文件,可用AS模式配置,只能由pof文件生成。
.hex(hexadecimal file)这个就不多说了,单片机里很多。
.ttf(Tabular Text File)适用于FPP,PPS,PPA,和bit-wide PS配置方式。
.sbf(Serial Bit stream File)用PS模式配置Flex 10k和Flex6000的。
.jam(Jam File)专门用于program, verify, blank-check。