100Mhz。主要添加的约束有Period约束,Offset In和Offset Out约束。
以下为介绍解决时序违反的问题的方法和步骤:
一 分析时序报告
,找出时序违反的原因。经过分析时序报告发现有所有9处寄存器到寄存器之间的时序违反,即所添加的Period约束中有时序违反。其中有的是逻辑级数太多,有的是fanout太多造成的走线延迟太大。
二 设置选项
Systhesis Options和Implement Design Options选项框中对一些选项经行设置。希望通过这个选项的设置后,重新优化布局布线,对关键路径有一定影响,从而提升频率。
对一些关键选项的说明
Systhesis Options中:
Optimization Goal speed 设置综合优化的目标为速度
Optimization Effort High 设置综合为最高优化程度
Cross Clock Analysis √ 对不同的时钟域经行分析
Resource Sharing √ 对资源经行共享
Register Duplication √ 寄存器复制(可以减小fanout数目)
Equivalent Register Removal √ 相同功能的寄存器移除
Implement Design Options中:
Use LOC Constraints √ 使用LOC约束
Creat I/O Pads from Ports √ 从Ports中创建I/O pads
Allow Unexpanded Blocks √ 允许使用空闲的Blocks
Placer Effort Level High 设置布局努力程度最高
Placer Extra Effort Normal 设置布局额外努力程度一般
Combinatorial Logic Optimization √ 对组合逻辑经行优化
Register Duplication √ 寄存器复制
Global Optimization √ 全局优化
Equivalent Register Removal √ 相同功能的寄存器移除
Map Slice Logic into Unused Block RAMs √ 把Slice映射到没用到的RAMs上
Place&Route Effort Level High 设置布局布线程度为最高
三 重新布局布线
9个减少到3个。这些选项的设置可以在一定程度上对布局布线有影响,但是对一些严重的时序违反问题影响不大。所以想通过对这些选项的设置来解决那些严重的时序违反是不可行的。
四 寻找新的解决方案
新的解决方案有2个:
方案1:对关键路径经行手动布局布线;
方案2:添加AREA_GROUP约束,把关键路径所属的模块约束在一个GROUP中。
方案1:手动布局布线。在PlanAhead中查看关键路径,找出关键路径的寄存器和寄存器之间的组合逻辑。手动布局,把两个寄存器在物理位置上放的近一点,然后再重新编译。重新编译后查看时序报告发现,有更多的时序违反。这也说明ISE已经按照所添加的约束做了最大努力程度布局布线,手动布局可能解决出现的时序问题,但是从而产生新的时序问题。在解决某一个路径时序的同时,导致其相邻的寄存器之间的路径时序产生新的违反。手动布局布线是一个比较高级的用法,对器件和资源有很高的要求。
方案2:添加AREA_GROUP约束。对项目中的ddr_ctl模块和PHY模块分别添加AREA_GROUP,因为PHY中用到IDDR和ODDR,所以把PHY约束在比较靠近IO的一侧位置,把ddr_ctl约束在靠近PHY的位置。重新编译后,分析时序报告发现仍然有时序违反问题。把ddr_ctl模块和PHY模块的约束位置做了不同调整,发现时序反问题总是存在。
时序违反的情况:㈠ ddr_ctl和PHY之间的路径;
㈡ ddr_ctl模块和IO之间的路径;
PHY模块和IO之间的路径;
时序违反的原因:
1 虽然设置的基本时钟为100MHZ,但是工程中分别用到时钟的上升沿和下降沿。这相当于把频率提高了一倍。
2 因为用到IDDR和ODDR,而一些寄存器是在IO中的固定的位置,所以这些路径在添加Period约束后,只能移动路径另一端的寄存器。这也在一定程度上影响了布局的效果。
结论:
ISE的参数和添加约束可以在一定程度上提高系统的频率。如果只是靠设置ISE的参数和添加约束对频率的提高效果不是很明显。