6.4.2. 合理地提取逻辑分支到FFs的控制端可提高设计性能 针对本例高逻辑级数的代码,可以采用以下两种方式优化,以降低逻辑级数和减少布线延迟,从而提高设计的时序性能: 1) 提取表达式中的逻辑分支,使表达式结果为'0'的分支,可采用FFs的Reset控制引脚实现;使表达式结果为'1'的分支,可采用FFs的Set控制引脚实现。 但应注意的是:FFs的Reset控制引脚和Set控制引脚之间有优先级关系,Reset控制引脚的优先级高于Set引脚(具体可查阅Xilinx UG331),将表达式的逻辑分支提取至FFs控制引脚时一定要与原表达式的逻辑分支的优先级保持一致。 另:提取的逻辑分支的逻辑输入数量应控制在4以内,确保提取至FFs控制引脚的逻辑表达式可以采用单级LUT或不使用LUT来实现(见前文6.3章节的分析)。 2) 使用Slice内专用MUX,结合LUT实现逻辑表达式。依据Xilinx UG331的介绍,在Slice内部,从LUT输出端到其专用MUX之间有极低(或零)延迟的内部连线,并且MUX的输入到输出的门延迟低于LUT输入到输出的门延迟。从而,大于4输入的逻辑表达式,如果能通过LUT4+MUXF5的方式实现,其逻辑延迟将低于两级LUT级联的逻辑延迟,相应设计可获得更高的时序性能。 依据UG331的介绍,一个Slice内的2个LUT4+1个MUXF5可实现任意5输入的逻辑表达式,如下图(摘自Xilinx UG331): 依据UG331的介绍,一个Slice内的2个LUT4+1个MUXF5可实现特定的9输入逻辑表达式,如下图(摘自Xilinx UG331): 采用上述两种方式,可将本例高逻辑级数的代码优化为如下的代码: 查看XST对优化后的代码综合结果如下图: 综合后的资源消耗和整体时序性能见前文(6.2.2)章节,可以看到,FSM1_IsUpdate到TsrIsLoaded这个路径不再是整个设计的关键时序路径,同时,优化后的代码还可减少两个LUT资源的消耗。
|