特权同学

从Technology Map Viewer分析Clock Setup Slack

0
阅读(2116)

特权同学对于时序分析也还只是个初学者,前阵子被Quartus II的Classic Timing Analyzar折腾的焦头烂额之际,无意中看到了ripple兄过去写的一些关于TimeQuest的一些博文,可谓受益匪浅。虽然ripple兄只是对Quartus II handbook里关于TimerQuest的基本概念做了一些翻译 (当然也对容易混淆的概念做了一些解释),更重要的是ripple兄指明了一个方向,还 是先扎扎实实的弄懂基本概念。这不,特权同学本着好记性不如烂笔头的菜鸟思想,把自己的零星感悟一一呈上。

既然要说Clock Setup Slack,那么不得不从最基本 的概念说起。简单的说,建立时间Tsu无非是指在时钟的上升沿 到来前多久数据必须到达,只有满足这个时间的数据才会被正确锁存。那么Clock Setup Slack就是指建立时间余量, 它为正时表示满足建立时间要求,当它为负时表示不满足时序要求。

公式如下:(有三种情况,这里只讨论寄存器到寄存器的建立时序余量,具体大家可以参考http://blog.ednchina.com/riple/24489/message.aspx)

Clock Setup Slack Time = Data Required Time – Data Arrival Time

Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + Input Maximum Delay of Pin + Pin-to-Register Delay

Data Required Time = Clock Arrival Time – μtsu

Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register

从上面的公式可以知道,建立时间余量=数据需要到达的时间-数据实际到达的时间。 换句话说,就是数据实际到达的时间比需要到达的时间早,那么建立时间余量就为正,达到要求,反之亦然。(本文不对公式里的基本概念做太对阐述了,还请感兴 趣的朋友看上面给了链接的博文。)

那么步入主题吧,下面要给出的一个Technology Map Viewer下的视图背景大体是这样 的,一个时钟约束为10ns的工程,实际只跑到了91.5MHz,也就是说出现了未满足时序余量要求的路径。而下面就是一个Worst Case Slack的例子。


从report里可以看到,Data Arribal Time="14".175,Data Required Time="13".348,通过上面公式得出结论 是slack=-0.827,也就是没有满足时序要求。那么现在就用Technology Map Viewer来看看这个路径为何不满 足建立时间的要求。

先罗列出Data Arrival Path:

Total Incr RF Type Fanout Location Element

0.000 0.000 launch edge time

3.681 3.681 R clock network delay

4.057 0.376 uTco 2 LC_X5_Y5_N8 wr_gene:wr_gene|over_addr[10]

4.057 0.000 RR CELL 1 LC_X5_Y5_N8 wr_gene|over_addr[10]|regout

6.051 1.994 RR IC 3 LC_X3_Y5_N0 wr_gene|Add2~144|datab

6.798 0.747 RR CELL 1 LC_X3_Y5_N0 wr_gene|Add2~144|cout0

6.798 0.000 RR IC 2 LC_X3_Y5_N1 wr_gene|Add2~134|cin0

6.921 0.123 RR CELL 1 LC_X3_Y5_N1 wr_gene|Add2~134|cout0

6.921 0.000 RR IC 2 LC_X3_Y5_N2 wr_gene|Add2~140|cin0

7.044 0.123 RR CELL 1 LC_X3_Y5_N2 wr_gene|Add2~140|cout0

7.044 0.000 RR IC 2 LC_X3_Y5_N3 wr_gene|Add2~142|cin0

7.167 0.123 RR CELL 1 LC_X3_Y5_N3 wr_gene|Add2~142|cout0

7.167 0.000 RR IC 2 LC_X3_Y5_N4 wr_gene|Add2~138|cin0

7.982 0.815 RR CELL 1 LC_X3_Y5_N4 wr_gene|Add2~138|combout

9.689 1.707 RR IC 1 LC_X5_Y5_N8 wr_gene|over_addr[10]|datad

9.889 0.200 RR CELL 1 LC_X5_Y5_N8 wr_gene|over_addr[10]|combout

11.024 1.135 RR IC 1 LC_X4_Y5_N0 wr_gene|Equal2~88|datab

11.764 0.740 RR CELL 1 LC_X4_Y5_N0 wr_gene|Equal2~88|combout

12.069 0.305 RR IC 1 LC_X4_Y5_N1 wr_gene|Equal2~89|datad

12.269 0.200 RR CELL 2 LC_X4_Y5_N1 wr_gene|Equal2~89|combout

12.574 0.305 RR IC 1 LC_X4_Y5_N2 wr_gene|Selector5~116|datad

12.774 0.200 RR CELL 1 LC_X4_Y5_N2 wr_gene|Selector5~116|combout

13.079 0.305 RR IC 1 LC_X4_Y5_N3 wr_gene|Selector5~117|datad

13.279 0.200 RR CELL 1 LC_X4_Y5_N3 wr_gene|Selector5~117|combout

13.584 0.305 RR IC 1 LC_X4_Y5_N4 wr_gene|current_state.IDLE|datad

14.175 0.591 RR CELL 1 LC_X4_Y5_N4 wr_gene:wr_gene|current_state.IDLE

再来看Technology Map Viewer里从over_addr[10]到current_state.IDLE的路径。


绿色圈起来的就是两个由时钟控制的触发器端,也就是这个时序的 起始端和结束端,那么只要你仔细沿着起始路径一直观察到结束路径,就会发现正如上面Data Arrival Path所描述的。呵呵,显然这个时序路径有些长了,大部分的时间都消耗在了这上面,所以导致了时序余量达不到要求。那么解 决的办法有两个,其一是把两个时序逻辑之间的大组合逻辑分为两个小的逻辑,即所谓的流水线思想;其二是进行时序约束。

Baidu
map