特权同学

【嵌入式】VGA接口时序约束-下

0
阅读(3155)

VGA接口时序约束-

SF-VGA模块购买地址:http://myfpga.taobao.com/

如此这般约束之后,我们可以重新编译一下系统,然后看看约束结果,我们拿到一条setup时间的分析报告。如图所示,数据路径的分析没有啥问题,我们约束的0.62nsmax set_output delay值出现在了data required path中,说明我们的约束生效了。

再来看hold报告,也是随便找一条路径。-1.28nsmin set_output_delay也已经生效了。

即便如此,细心的读者一定没有忘记,前面的分析中我们忽略了时钟偏斜的延时值。没错,下面我们就要将它也考虑到路径延时中去。因为,我们的LCD_CLK直接就是连接到了驱动FPGA内部模块的时序产生时钟信号,所以它的偏斜其实就是PLL输出的这个时钟信号到管脚的延时值。因为这个路径其实也应该算在了reg2pin的时序路径中,如果不做约束系统不会对其进行分析的。所以,为了获得这条路径的延时信息,我们势必需要对这条路径做一下约束。我们可以先试试将这条路径用set maximum delayset minimux delay约束在0~5ns之间(怎么?你还不了解这两条约束语句,你out了,赶紧回到SDRAM约束的章节中好好复习一下)。

set_max_delay -to [get_ports {vga_clk}] 5.000

set_min_delay -to [get_ports {vga_clk}] 0.000

约束完成后,我们重新编译下系统,再来看看约束的结果。Setup时间余量最小的路径如下。

Hold时间余量最小的路径如下。

从这份报告中,我们获得的信息是,从PLLclk[1]输出到LCD_CLK管脚的延时为2.116ns~2.598ns,那么给这个延时留一些余量,可以继续将他们的约束范围限制在2ns~2.7ns之间,即:

set_max_delay -to [get_ports {vga_clk}] 2.700

set_min_delay -to [get_ports {vga_clk}] 2.000

加上前面我们已经计算的LCD_CLKPCB上的走线延时,可以得到LCD_CLK的中偏斜时间约为2.44ns~3.14ns。留足余量,我们可以取LCD_CLK的时钟偏斜为2.4ns~3.2ns。其实在比较严谨的系统中,通常用于给外部芯片的时钟信号要走FPGApll输出专用管脚,并且也最好这个时钟信号是PLL直接输出供给的,满足这两个条件的时钟输出路径偏斜其实会限定在一个非常小的范围里,而不会像我们这个设计一样出现理论计算这么宽的时钟偏斜范围(大家领会精神就行,这个时钟速率还不算太高,不用苛刻的约束去做也就能够满足我们的系统要求)。我们这个设计实际上也是PLL直接供给的,虽然没有和数据驱动时钟没有做相位差调整。如果整个LCD_CLK连接到了FPGA的专用时钟输出管脚上,那么时钟偏斜会小很多,这也是只所以推荐走PLL专用输出时钟管脚的原因。

接下来,我们需要将LCD_CLK的时钟偏斜值代入output max delayoutput min delay的计算公式。原公式中,cd_alt参数实际上都出现在了时序分析的launch edge的时钟网络延时中(如图所示),所以我们无需再代入,直接取值为0ns即可。

output max delay = 1ns + 0.2ns + (0ns – 3.2ns) = -2.0ns

output min delay = 0ns – 1.5ns + (0ns – 2.4ns) = - 3.9ns

重新约束后如下:

set_output_delay -clock { LCD_CLK } -max -2.4 [get_ports {vga_b[0] vga_b[1] vga_b[2] vga_b[3] vga_b[4] vga_g[0] vga_g[1] vga_g[2] vga_g[3] vga_g[4] vga_g[5] vga_r[0] vga_r[1] vga_r[2] vga_r[3] vga_r[4] adv7123_blank_n}]

set_output_delay -clock { LCD_CLK } -min -3.9 [get_ports {vga_b[0] vga_b[1] vga_b[2] vga_b[3] vga_b[4] adv7123_blank_n vga_g[0] vga_g[1] vga_g[2] vga_g[3] vga_g[4] vga_g[5] vga_r[0] vga_r[1] vga_r[2] vga_r[3] vga_r[4]}]

最后,再次编译系统,查看时序报告。我们看到数据总线的SetupHold时间的余量都很充足,这样看来,我们的设计达到了时序收敛的目的。

为了帮助大家进一步的理解时序的概念,这里可以找一条路径,将他们的建立时间和保持时间波形图同时拉出来,如图所示,大家便可一目了然。建立时间和保持时间会分别使用他们最坏的情况进行分析,然后得出相应的时序余量。左图的蓝色线条是时钟的latch沿,我们看在它前面9.713ns数据都是保持稳定的,完全满足ADV7123芯片datasheet上的0.2ns建立时间要求;右图的蓝色是保持时间的latch沿,它和launch沿是对齐的,我们看到它以后大约3.9ns数据才会发生变化,也完全满足ADV7123芯片datasheet上的1.5ns保持时间要求。

SF-VGA模块购买地址:http://myfpga.taobao.com/

Baidu
map