FPGA/ASIC技术
最近自己做了一块FPGA板子,不慎将PROM的两根引脚连错,导致在配置时无法正确识别PROM的型号,颠三倒四地排除了一个星期问题最终幸运解决。之后感叹自己实在是不小心,导致如此低级错误,不过排错过程倒是逼着我把xinlin配置和Jtag相关的文档好好研究了一番,结合自己板子的错误,颇有感慨,特此记录,算是心得体会吧。
Density VCCINT VCCO Range VCCJ Range Packages JTAG ISP Serial Config. Parallel Config.
XCF01S 1 Mbit 3.3V 1.8V - 3.3V 2.5V - 3.3V VO20/VOG20 √ √ ×XCF02S 2 Mbit 3.3V 1.8V - 3.3V 2.5V - 3.3V VO20/VOG20 √ √ ×XCF04S 4 Mbit 3.3V 1.8V - 3.3V 2.5V - 3.3V VO20/VOG20 √ √ ×XCF08P 8 Mbit 1.8V 1.5V - 3.3V 2.5V - 3.3V VO48/VOG48 FS48/FSG48 √ √ √
XCF16P 16 Mbit 1.8V 1.5V - 3.3V 2.5V - 3.3V VO48/VOG48 FS48/FSG48 √ √ √
XCF32P 32 Mbit 1.8V 1.5V - 3.3V 2.5V - 3.3V VO48/VOG48 FS48/FSG48 √ √ √
XCFxxS是早期rom,不支持速度较快的并行配置,目前已经完全可被XCFxxP系列取代,并且XCFxxP还带有内部振荡器。
系列内具体型号的选择要看你的FPGA型号,关键在于生成的bit文件大小,不能大于PROM的容量。具体的FPGA推荐搭配的PROM可参见相关的芯片资料,或者PROM资料。值得一提的是一些大片子生成的文件可能会大于32M,这个时候必须要采用两片或以上的PROM级联起来才够用,具体连接后面再说。
目前spartan6、Vertex6系列FPGA可以支持多种配置方式:从配置时钟的来源可分为:Master Modes、Slave Modes,从数据读取方式可分为:Parallel、Serial Modes。这样排列组合以下就有如下配置方式:Master Serial、Slave Serial、Slave Parallel、Master Parallel另外Spartan 6等新片子还支持一种SelectMAP 模式,也可以分为Master SelectMAP和Slave SelectMAP两种,这次并没有尝试这两种新式的配置方式,所以没有发言权,所以这两种方式具体的特点参见相关datasheet:ug380等。另外还可以采用JTAG方式在线配置,不过掉电程序是不能保留的。
下面详细讲主串方式,如图是主串方式的连接图:
[[wysiwyg_imageupload:158:]]
主串方式是把FPGA、PROM等器件依照JTAG的标准,串接在同一个链路中,其中串接的含义是JTAG的TDI连接第一个器件的TDI,第一个器件的TDO又连接下一个器件的TDI,直到最后一个器件的TDO又连回到JTAG接口的TDO。这样就形成一个链状的回路,称为JTAG链路。其余两根线TMS(Test Mode Select.)、TCK(Test CLOCK)则分别与每个器件相连。这里TCK、TMS、TDI、TDO四条线均有内部上拉,所以不需要外接上拉电阻。接口上的电源VREF在datasheet上说是接VCCAUX,即2.5V,不过本人实际接到了3.3V也能工作,看了下网上其他人的心得以及实际测量得出该电源是为下载线里面的缓冲芯片HC244供电的,因此只要是能符合它的电平要求2.5~5V理论上都是可以工作的。在正确连接了这些引脚以后,利用jtag便可以识别链路上的芯片了。本人设计的板子在工作在主从模式下,经过JTAG识别到了FPGA芯片但是无法识别PROM,且读取的IDCODE全为“1”。在排除芯片问题之后,出问题的可能性就集中在这四根线上,结果发现PROM的TDI和TCK接反,导致无时钟输入,这样就解释得通了,改正过后果然一切正常了。
另外FPGA上还有两个比较重要的引脚:M0、M1,这两个引脚的高低电平组合不同代表了不同模式的选择,以Spartan6为例具体如下:
Configuration Mode M[1:0] Bus Width CCLK DirectionMaster Serial/SPI 01 1, 2, 4 OutputMaster SelectMAP/BPI 00 8, 16 OutputJTAG xx 1 Input (TCK)Slave SelectMAP 10 8, 16 InputSlave Serial 11 1 Input
所以这里M1接地,M0接高电平,采用主串模式读取。
当M0、M1引脚配置无误之后FPGA在上电时就可以从PROM里读取数据了,此时相关的几个引脚有:CCLK、INTB、DONE、ProgramB和DIN如图所示可以看到它们分别与clk、OE/RESET、CE、CF、D0相连。这几个引脚的定义可以参见PROM和相关型号FPGA文档,作用分别是配置时钟、复位和使能、配置完成、串行数据传输。这几个引脚除了D0不需要上拉外在datasheet上都要求上拉了,不过在许多开发板上CCLK信号时候不下拉的,本人尝试了未接下拉依然可以正常传输,不知这样有什么影响。
每次上电的操作时序如下:
[[wysiwyg_imageupload:159:]]
BUSY信号可以不接,在CE拉低和OE拉高之后开始传输数据,PROM中数据传输完成之后DONE拉高。
主要配置流程分4个阶段:存储器清除、初始化、装入配置数据、启动器件。
全部0条评论
快来发表一下你的评论吧 !