近期FPGA测试问题小结
0赞前一阵子做了两个FPGA工程的测试任务, 做完了代码走读和功能仿真。发现了不少的问题,从问题报告里找了几条比较具有代表性的问题,有些问题确实很低级,但是不得不老调重弹。因为这些问题对于很 多设计者来说都是共性的。希望列出来能给他人有一些的警示。
1. 代 码中的逻辑运算符和算术运算符没有区分清楚,即便是对于做软件的来说,这也算是很低级的错误了,尽管大多数时候这样的混淆不会影响功能的实现,但还是要规 范。
例如a = b || !c;
显然应 该更改为a = b | ~c;
2. 代 码中的有些时钟信号既非FPGA外部晶振输入的时钟信号,也非FPGA内部专用时钟管理 单元(如PLL或者DLL)产生的时钟。严格 来说,这些信号是不适合作为内部时钟使用的,尽管它可能会节约一些资源,降低一些功耗。一来这些信号不走全局时钟网络或经过特别优化,时钟网络延时势必很 大,也不利于做时序约束;二来若这样的时钟钟控的信号存在跨时钟域处理的需要,那么就有潜在的读写冲突可能。门控时钟的使用总归是有利也有弊的,设计者应 该权衡,如果后面说的两个问题都不存在(也许你要做的这个设计时序要求很低),那么但用无妨。
3. 不 要为了分模块而分模块。分模块是为了更有利于设计分工、优化以及日后的代码维护、升级。如果有些逻辑的划分只是仅仅因为它们是一类相似的逻辑而分到一块, 却不考虑数据流以及功能甚至优化的需要,那么这种模块划分方式也许只会得到是得其反的效果。
4. 对 于复位的设计,有条件使用两级的寄存器进行“异步复位,同步释放”的处理比一级要来得可靠些。
5. 为 了更好的进行时序约束和分析,如果可能,需求分析或是设计说明中有必要体现所有和FPGA接口的信号的一些 时序参数。如建立时间和保持时间,甚至是信号电平的上升时间、下降时间等参数,这对于设计者采用怎样的降低亚稳态的设计策略是有帮助的。