FPGA Emulation移植中出现的一个小问题

在ASIC设计中,我们经常会用到FPGA来做一些流片之前的芯片测试,这个时候我们就需要将我们的Design porting到FPGA平台上来,一般我们都要手动将设计中的模拟模块去除,简化时钟设计,尽量减少门控时钟数量,毕竟FPGA并不喜欢门控时钟。还有一个比较大的改动就是padring,因为ASIC设计中,pad往往会有很多模拟相关的设计,比如ESD等东西,这个FPGA一般是无法支持的,所以我们就要对这一部分做一定的改动。

今天我们要聊的问题也就是出现在pad上,不过并不是模拟部分改动造成的问题。首先我们来看看现象:在我们porting好我们的design之后,上板测试时候,FPGA所有引脚没有输入和输出,也就是所有的pad都没有反应,设计前仿和后仿均无问题,一时无从下手,不过通过FPGA内部内嵌的逻辑分析仪,发现FPGA内部功能正常,看起来似乎也不是时序上的问题。

其实这个问题现象上是非常有意思的,因为是所有的pad都不能正常输出,并且偶尔还会出现一个正常工作的bit,工作正常的时候,所有pad都完全没有问题。毕竟还是缺乏经验呀,年轻的我们总是觉得是timing的问题。其实对于这种现象,有经验的人一眼就能看出问题,解决了这个问题之后,我也算是有这方面的经验了。

这个问题的根本原因还是不定态导致的,以前我一直觉得Xilinx FPGA里面很少会有不定态的问题,毕竟这个FPGA里面有个类似全局复位的功能,并且FPGA嘛,都是硬件,非零即一,哪有啥不定态。现在我才发现了,这个不定态也是玄学问题的一个根本原因。另外一个就是根据所有pad都不工作这一点推断的,因为所有的pad步调惊人的一致,这就说明大家都用了同一个有问题的模块。综合起来就是所有的pad都用了一个有不定态信号的模块,这个模块会锁住pad的所有正常功能。

后面查了Design,我们发现所有的pad都会有一个扫描链的功能,通过这个功能我们可以测试芯片生产时会不会有一些工艺上的缺陷。因为这个功能所有pad都会有,所以一旦开启,所有pad都是处于测试模式,所以正常功能也就失效了。这个测试模式就是JTAG模式,涉及所有pad的例化,所以一旦这个模块出了问题,所有的pad看起来功能都会被锁在测试上,正常功能也就无从谈起。

FPGA上找到这个问题之后,解决方法也就非常简单了,我们可以直接在出问题的模块中将测试相关逻辑去除,只留功能逻辑即可,比较FPGA也没啥实现测试的能力。

相关文章

发表新评论