特权同学

FPGA实战演练逻辑篇56:VGA驱动接口时序设计之3时钟约束

0
阅读(1413)

VGA驱动接口时序设计之3时钟约束

本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》

配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt

 

如图8.26所示,FPGA产生的数据data_out和时钟clk_out的理想波形是时钟上升沿锁存到稳定可靠的数据。(特权同学,版权所有)

1.jpg

8.26 源同步接口寄存器和时序波形关系

下面我们来探讨如何对这个设计进行约束。首先,对系统的输入时钟(25MHz)、PLL产生的时钟进行约束。约束脚本如下。(特权同学,版权所有)

create_clock -name {clk} -period 40.000 -waveform { 0.000 20.000 } [get_ports {clk}]

 

derive_pll_clocks –use_tan_name

derive_pll_clocks语句将会自动且准确覆盖PLL产生的所有时钟路径。在本实例中,以上的约束将会覆盖如图8.27所示的时钟。(特权同学,版权所有)

2.jpg

8.27 时钟约束可覆盖路径

接着,对lcd_clk这个时钟进行约束,它需要约束为虚拟(virtul)时钟,将会被用于output port上的数据锁存时钟。因为我们这个工程可能会用到25MHzlcd_clk,也会用到50MHzlcd_clk,因此我们以频率更高的50MHz为例进行说明。系统的50MHzPLLclk[1]输出的,因此我们约束这个虚拟时钟如图8.28所示。(特权同学,版权所有)

3.jpg

8.28 虚拟时钟约束

对应的脚本如下。(特权同学,版权所有)

create_generated_clock -name LCD_CLK -source  [get_ports {vga_clk}]

这个虚拟时钟将会在FPGA内部对tx_datareg2pin进行时序分析时作为latch时钟。实际对于一般的reg2reg路径的分析,由于他们的launchlatch时钟都在FPGA内部,若像前面一样做过时钟的约束,那么FPGA对这些内部的时钟就已心知肚明,无需什么虚拟时钟。而对于pin2regreg2pin的路径分析,则一般都需要用户指定一个符合相关时钟要求的虚拟时钟,这个虚拟时钟就作为pin端的时钟来分析时序,我们这里所约束的虚拟时钟对应的路径如图8.29所示。(特权同学,版权所有)

4.jpg

8.29 虚拟时钟路径

如图8.30所示,有了时钟lcd_clk,我们才能对数据路径进行合适的约束。本例中,有两条关于时钟的路径延时,我们假设PLL输出的时钟是源和目的时钟的起点,以这个点为基准,时钟到达源寄存器,其路径延时为Tc2t;时钟到达目的寄存器,即ADV7123芯片的引脚输入端,其路径延时为Tc2r,这个延时包括了时钟从PLL输出到FPGA引脚的延时以及时钟从FPGA的引脚到ADV7123引脚的延时,后者的延时是PCB走线产生的延时。再来看数据路径,数据首先进入源寄存器的输入端口后,在源寄存器内部经过延时Tco,接着数据从源寄存器的输出端口到FPGA引脚上的延时Tr2p,还有就是数据在PCB上的延时Tdpcb,最后在计算ADV7123的时序时,我们必须将数据的建立时间Tsu和保持时间Th考虑在内。(特权同学,版权所有)

5.jpg

8.30 时序路径模型