从Technology Map Viewer分析Clock Setup Slack
0赞特权同学对于时序分析也还只是个初学者,前阵子被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所描述的。呵呵,显然这个时序路径有些长了,大部分的时间都消耗在了这上面,所以导致了时序余量达不到要求。那么解 决的办法有两个,其一是把两个时序逻辑之间的大组合逻辑分为两个小的逻辑,即所谓的流水线思想;其二是进行时序约束。