时序分析(4):时钟约束

时间:2024-02-22 07:41:30

  以 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教程