Cyclone III原型开发调试
最近设计的Cyclone III原型板是特权同学第一次接触Cyclone III的器件。原理图、PCB绘制、管脚分配上都碰到了一些问题,这些问题或多或少都是由于个人对新器件不熟悉、设计的时候有一些粗心大意造成的。主要针对板级的硬件设计,这里凌乱的罗列一下,做一点总结,今后要多吸取教训,低级的失误要尽量避免。
1. 首先要提一个没有解决的问题,EP3C5E144/EP3C10E144/ EP3C16E144/ EP3C25E144(是管脚完全兼容的不同资源的器件,Altera在这一点上是非常值得称道的)器件的PIIN11和PIN12存在不可同时使用的问题,这个问题出现在架构了一个NIOS2系统里集成了EPCS控制器的时候,在Cyclone II中是不需要分配这个EPCS控制器的管脚的(内部自动映射),而Cyclone III则需要手动分配(事先需要到Setting里动动手脚)。EPCS的DCLK需要分配到PIN12上,工程中分配了一个SDRAM的D0脚给PIN11,编译到Fitting阶段就Error了。在handbook里海找没什么成效,求助于搜索引擎,最终看到有人遇到相同的问题,但是给出的却是不是办法的解决办法:不用PIN11或者不用PIN12。这个问题上特权同学也很是无可奈何,估计是Cyclone III器件的这两个脚做了一些信号耦合之类的检查,也不知道是否在工具选项里做一些设置可以取消此类检查。也很期待有相同遭遇的朋友现身说法,告诉特权如何解决问题。
2. 再说两个很低级的错误,错的很傻,没有什么技术含量,只能给自己敲个警钟:干活的时候脑子一定要清醒。两个错误分别和BOM表和网络标号有关。先说和BOM表有关的,这个错误源于原理图上两个三端稳压器-1.2和-2.5的标示刚好反过来了,因为管脚定义和封装都一样所以也没留意,好在最后只影响BOM表的标示,但这也导致了第一块样板焊接的时候出现了1.2V和2.5V互换位置的惨剧,结果可想而知,EP3C10E144C7就这样挂了,非常的心疼。另一个失误有点让人啼笑皆非,特权同学做板子一般都习惯加个LED灯到闲置端口,FPGA初始调试的第一件事就是让他闪起来,平时工作的时候也习惯让LED闪烁着作为工作运行的指示。绘制原理图的时候直接copy了以前的一份图纸,没有注意网络标号,结果这个LED的GND和系统通用的DGND根本没有连上,最终调试的时候居然怀疑Cyclone III的输出电流太小以致连个灯都要罢工。
3. Cyclone III的几档电压也是和之前系列器件有所区别,VCCIO不提了,主要根据用户需求设计;VCCINT是1.2V,和Cyclone II是一样的;特别需要留意的是PLL的供电部分,即VCCA和VCCD,VCCD与核压一样供1.2V没有问题,VCCA通常需要加一些推荐的去耦电路,它不是1.2V,必须供2.5V,这里特权同学也犯错了,好在两个VCCA的电源入口都通过磁珠了,因此在发现问题后及时飞了两条线出来算是临时应急。还有JTAG电路的电压也和以往有别,这个地方下面一个点谈。
4. Cyclone III的标准JTAG推荐接口电压是2.5V,当然貌似3.3V的时候也能够下载,不过大家还是按照官方推荐的电压来工作,以免出现一些不必要的麻烦。
5. 还有,就是要说原型设计的一些电路调试顺序,也许不仅仅是原型设计需要这样做,很多时候用我们熟悉的东西重新搭系统调试的第一块板子也是需要有调试顺序讲究的。简单的说,一般从电源开始入手,首先要保证各档电压正常;其次,焊接晶振和复位电路、FPGA以及下载电路,然后进行板级验证,保证FPGA的配置电路和器件正常工作;最后焊接其它外围电路。
6. Cyclone III器件底部有个大大的接地焊盘,方形的。特权同学画板的时候没有注意,直接调用了Altium Designer库里的封装。拿到板子有一点发愁了,因为通常习惯制板的时候把过孔都覆油埋起来,以免一些意外金属物掉落板子连接过孔照成短路,而Cyclone III器件封装的底部打了很多小孔,焊接的时候却变得一筹莫展,没法给焊盘底部加热,也无法保证器件底部的GND被有效的连接上了。最终只能出下策,拿个钻孔工具打了个洞,焊接的时候过了些锡才确保把地连接上。因此,将来应该考虑将这个焊盘下面的孔打大一些,保证其可焊接性。
7. 学会使用丰富的开发文档,如对第一次上手Cyclone III的用户,Altera官方的《an 466: Cyclone III Design Guidelines》就是一篇非常不错的参考文档,网络上翻译中文的版本也是漫天飞舞。特权同学也是到后来出问题了才找到这篇文章,有点相见恨晚的感觉,准备下载的时候才发现其实这篇application note已经在自己的硬盘里躺着没有翻过而已,确实应该早早的拜读这篇应用笔记。
8. PLL相位补偿默认为c0,在其他系列器件里c0一般不会是用于输出外部管脚的时钟,而Cyclone III的c0是唯一的可以用于直接输出给外部管脚做时钟的PLL输出。特权同学在实践中发现这个c0不可以作为相位补偿,如果使用了默认的c0作为补偿管脚,那么除了Quartus II会给个warning外,更可怕的是很可能会给系统中这个c0输出的时钟控制的芯片带来一些时序上的麻烦。应该改用其他PLL输出内部驱动时钟作为相位补偿。具体的原因特权同学还不太清楚,后面有空希望研究一下PLL相位补偿的机理,再写篇文章论述下自己的理解。
用户1031924 2015-6-23 22:21
用户307947 2011-4-6 21:48
ilove314_323192455 2011-4-2 11:40
用户411603 2011-4-2 07:06