以 GigE_DDR3_HDMI 工程为例,进行时序分析的整理。
一、基准时钟和生成时钟
- 基准时钟,通俗点说就是 top 层的输入时钟,如 FPGA_clk,PHY_rx_clk。
- 生成时钟,通俗点说就是基准时钟通过PLL或自分频后的输出时钟。
1、约束法则
(1)经过PLL的输入时钟(基准时钟)、输出时钟(生成时钟)会自动进行时钟约束,不用再手动约束。
(2)未经过PLL的基准时钟,无论分不分频的给内部模块使用,都需要添加基准时钟约束和生成时钟约束。
2、基准时钟约束
原工程中,PHY_rx_clk 经过 PLL 相移 90 度后生成 PHY_rx_clk_90,为进行时钟约束,因此改成不经过PLL。
(1)点击 Implementation,完毕后点击 Edit Timing Constraints
(2)进入时序约束界面后,可以点击 Timing 查看时序报告,也可以关闭该窗口。
(3)将窗口放大,开始进行进行时钟约束,如下所示:
(4)Tcl Console 中输入【report_clocks】可以看到所有的 clock,输入【report_clocks PHY_rx_clk】可以指定查看某个时钟。
3、查看时序分析结果
(1)Timing中可以看到一些选项
(2)点击 Report Timing,生成一份报告。
(3)这样就看到时序报告了,双击某条报告可以看到更细致的建立时间和保持时间的分析。
注意,此时的只是报告,如果有很多飘红,则说明时序违例,但我们已经进行了时序约束,重新综合一遍后再打开这个报告,即可看到时序情况大大改善,飘红减少。
二、生成时钟
和基准时钟的约束类似,例如 ODDR 原语的时钟输出,属于生成时钟,需要人工约束。
1、时钟约束界面选中 Create Generated Clock,点击添加新约束。
2、设置生成时钟约束,和基准时钟不同的是要找准生成时钟的源和目的。
三、虚拟时钟
虚拟时钟,一般是系统同步时用,系统同步基本已经淘汰了。虚拟时钟即 FPGA 内部不存在的时钟,主要用于辅助做一些分析。
比如上图这个红色的时钟,默认没有约束情况下上游的时钟和 FPGA 的 system clock 认为延迟是一样的,那么这样我们就不能表示上游时钟和 system clock 的延时差了,我们可以创建一个虚拟时钟代表上游时钟,并且把这个时钟的 input latency 设置一个值就表示这个时钟进到芯片前有多少延迟。创建虚拟时钟的方法很简单,就是创建一个时钟但是不实际指向一个 fpga 内部或者 IO 上的对象。
设置方法:点击 Create Clock,新增时钟约束,Source objects为空,点击 OK 即可。
参考资料:V3学院FPGA教程