一、约束PLL的位置:
可以发现我们现在的PLL是设置在左下角,我们要将它调整到右上角去。
首先,打开Assignment Editor,在To列中new一个节点
添加后,Assignment Name选择 Location点进Value列中,Element选择 OLL,Location选择 PLL_2。
Ctrl+ s保存,重新布局布线后,右上角才变成了绿色(综合分析后,尽管会自动弹出Chip Planner,但图中并未任何显示)。
且已经将线布到PLL_2上来了。此时,时序也必定会发生变化!PLL的变化会对时序造成冲击。
对比前文的结果(最开始运行成功无违逆的那次,0,0.025ns),可以发现时序还变好了!
二、寄存器的约束:
将某个寄存器(例如:cnt_base)约束到某个LAB里面去。
前两步和之前的PLL约束差不多。但在Value列中,其不同就体现出来了!
Location可以选择LAB,也可以选择Register cell。
查找为空,所以我们以上有步骤出错了!
我们暂时不用Register Cell,改为LAB。
看到左下角的颜色出来,成功了,已经约束进去了!
但经仔细观察发现,它周围并没有布线!而且搜索 cnt_base[0]时,依旧为空。我们猜想那个寄存器很可能是作为复用的被优化掉了!
我们再试着将cnt_base[0] 改为 cnt_base1[0]。
发现红点!
在Resource Property Editor中,可以看出:寄存器已经被用上了!
我们可以再来看看cnt_base1的Timing,看它与谁有关联。
出现一例违逆。
可以发现,从左下角处出去又回来,太远了!
做个小探究实验: 如果我们把次差的路径(0.418ns)中的两个寄存器全都约束到一个LAB里边,我们会发现Slack会变得很大!???(保持疑问)
但请注意:我们在工程中是绝对不可能这样去调试的,因为万一换了一个芯片,这些约束又该怎么加?就算是一样的约束,综合器会给你同样的布线吗?
就整体性能而言,是变差的!
结果,显示出的路径部分违逆了,很有可能两级寄存器间的组合逻辑,在外边(即:在其他的LAB中)。
果不其然。。
补充:这种约束到同一个LAB的方法适用于:不加任何逻辑的“打拍操作”的寄存器。
三、取消约束:
直接在Assignment Editor中,右击想要删除的行,选中delete即可。
四、LogicLock Region(时序分析、约束里最不常用的)
先点击选中Create LogicLock Region,再划出一块区域(可以自命名)
然后返回到工程面板Hierachy,将某个模块约束在里边
重新综合分析、布局布线,可以得到如下结果
结果的时序约束效果也还可以