最近开发一个项目,由于FPGA的资源有限,编译工程资源利用高达85%。在每次编译后可能会有不同的编译的结果,具体表现在数据读取时序不满足要求,有时候数据的某些位在时钟的不稳定时间被采样了。具体表现,FPGA内部的时钟和数据输出,时序不好,到外围传输芯片的接收,为不稳定的状态,上位机收到就是不是FPGA的实际内部输出理想值。所以在进行复杂设计或FPGA资源利用比较多时,或者说FPGA内部逻辑设计不好,就会出现和外部芯片交互不稳的状态。
解决方法:
1、优化FPGA逻辑设计,避免可能会出现的不稳的状态,依据外围芯片数据手册,多留余量;
2、FPGA资源要多些,资源紧张,EDA自动约束可能达不到想要的结果;
3、时序约束,理清interface和FPGA的时序,让EDA依据约束编译。
对第三点有很多人资料阐述,但是基本都会在基本理论意义方面大费周折,让人看后云里雾里,不知实际工程如何约束。这般束之高阁,和普通人说,就是这么回事,你自己不懂,怪谁,汗一个。
对于如何时序约束,我推荐一下Altera 论坛上的一个帖子,个人感觉非常接地气。
【潘文明至简设计法】系列连载教程 FPGA时序约束视频教程
http://www.alteraforum.com.cn/forum.php?mod=viewthread&tid=14203