,, ,,
(上海航天電子技術(shù)研究所,上海 201109)
基于鎖存器路徑的靜態(tài)時序分析在第三方驗(yàn)證中的應(yīng)用
劉國斌,左麗麗,陳云,祝周榮,劉偉
(上海航天電子技術(shù)研究所,上海201109)
隨著可編程邏輯門陣列(FPGA)設(shè)計(jì)規(guī)模的擴(kuò)大,靜態(tài)時序分析可有效減輕時序仿真的負(fù)擔(dān),縮短項(xiàng)目周期;常見的靜態(tài)時序分析(STA)多是基于觸發(fā)器(FF_Based STA),對觸發(fā)器的STA算法研究已經(jīng)比較成熟;但FPGA綜合后網(wǎng)表可能會產(chǎn)生鎖存器,而鎖存器的STA與觸發(fā)器的STA在算法上存在差異;為保證在FPGA產(chǎn)品第三方驗(yàn)證工作中對STA路徑分析覆蓋率達(dá)到100%,有必要對基于鎖存器的時序分析(Latch_Based STA)做研究;闡述了鎖存器“時間借入”與“時間借出”的概念;分析了“鎖存器寬裕時間(slack time)”特性,繪制了其函數(shù)圖;在某FPGA第三方驗(yàn)證項(xiàng)目中使用STA 工具Prime Time(一種計(jì)算機(jī)模型分析工具),分別對由“時間借入”、“時間借出”而導(dǎo)致“時序松弛”和“時序收緊”兩種情況做了計(jì)算和分析,對STA路徑分析覆蓋率達(dá)到了100%,滿足了第三方驗(yàn)證要求。
鎖存器時序分析; 計(jì)算機(jī)模型仿真; 時間借入; 時間借出; 第三方驗(yàn)證
FPGA的結(jié)構(gòu)特性要求數(shù)據(jù)流在其內(nèi)部傳輸時滿足時序上的要求[1-2]。在FPGA驗(yàn)證工作中,單純的功能仿真不能保證硬件描述語言在綜合及布局布線后能正確地實(shí)現(xiàn)功能。隨著FPGA結(jié)構(gòu)工藝的發(fā)展,F(xiàn)PGA的規(guī)模已經(jīng)可以達(dá)到千萬門級別,相應(yīng)的設(shè)計(jì)變得也愈加復(fù)雜[3]。時序仿真固然可以檢查加入延時信息后的網(wǎng)表文件能否正確實(shí)現(xiàn)功能,但時序仿真的速度通常較慢,其工作量及工作時長往往會對項(xiàng)目周期產(chǎn)生難以承受的影響,特別是一旦在時序仿真后期發(fā)現(xiàn)問題,項(xiàng)目的按時交付會出現(xiàn)重大危機(jī),為此有必要在進(jìn)行時序仿真前先進(jìn)行靜態(tài)時序分析[4]。
靜態(tài)時序分析(static timing analysis,STA)是將FPGA布局布線后產(chǎn)生的延時信息反標(biāo)到網(wǎng)表文件中,借用一定的時序分析工具,根據(jù)設(shè)定的約束文件,窮盡搜索所有的路徑,并分析每條路徑的延時信息,通過搜尋延時最大的路徑來檢查建立時間是否滿足要求,通過搜尋最小路徑來檢查保持時間是否滿足要求[5]。傳統(tǒng)的靜態(tài)時序分析一般將路徑分為四類:(1)從輸入端口到觸發(fā)器數(shù)據(jù)管腳;(2)從觸發(fā)器時鐘管腳到觸發(fā)器數(shù)據(jù)管腳;(3)從觸發(fā)器時鐘管腳到輸出端口;(4)從輸入端口到輸出端口[6]??梢钥闯鲆陨响o態(tài)時序路徑的分類方式主要是基于觸發(fā)器(FF_Based STA),但在實(shí)際設(shè)計(jì)中,根據(jù)功能需要,源代碼綜合后的電路會出現(xiàn)鎖存器。第三方驗(yàn)證工作要求STA的路徑覆蓋率達(dá)到100%,故有必要對基于鎖存器的靜態(tài)時序分析(Latch_Based STA)做研究[7]。
鎖存器的出現(xiàn)是一種設(shè)計(jì)的折中,它通過一種稱為“時間借入(Time Borrowed)”的技術(shù)可以平衡相鄰鎖存器對時序的要求。一方面鎖存器降低了設(shè)計(jì)對時序的要求,另一方面由于其電平敏感的特性,它無法對數(shù)據(jù)流的傳輸做到精確的控制[8-9]。針對鎖存器物理特性,分析其特點(diǎn),為基于鎖存器路徑的靜態(tài)時序分析(Latch_Based STA)做理論準(zhǔn)備。
第三方測評機(jī)構(gòu)使用Synopsys公司STA工具Prime Time對FPGA做靜態(tài)時序分析。Prime Time檢查的對象是*.v文件和*.sdf文件[9]。其中*.v文件是FPGA的網(wǎng)表文件,是由源代碼經(jīng)FPGA開發(fā)環(huán)境進(jìn)行綜合及布局布線后形成的,由寄存器傳輸級(RTL)的代碼信息轉(zhuǎn)換為邏輯門級別的物理信息,是對FPGA布局布線后物理結(jié)構(gòu)的計(jì)算機(jī)語言描述[10]。*.sdf文件是延時文件,是*.v網(wǎng)表文件中所有邏輯門在FPGA硬件中的走線延時。*.v文件和*.sdf文件結(jié)合起來,模擬實(shí)際FPGA硬件物理信息。
Prime Time有靈活的使用方式。通過編寫*.tcl文件可控制FPGA網(wǎng)表文件的工況、檢查類型等。通過編寫*.sdc文件可以對FPGA工作時鐘、信號與時鐘關(guān)系、輸入延時、輸出延時等情況進(jìn)行約束。
在使用Prime Time進(jìn)行Latch_Based STA時,需要先識別*.v網(wǎng)表文件中的鎖存器,對鎖存器的G端(時鐘端)分析,如果端口不是源代碼中的時鐘,需要根據(jù)實(shí)際情況對其進(jìn)行合適的約束。另外,可以在*.tcl文件通過指令打開或關(guān)閉“時間借入”、約束最大可借入時間。具體操作方法下文有詳細(xì)描述。
在時鐘有效期的全部時間里,鎖存器的數(shù)據(jù)輸入端能直接改變數(shù)據(jù)輸出端的狀態(tài)。在一條路徑中,如果本級鎖存器數(shù)據(jù)端信號到來的時刻滯后于時鐘有效狀態(tài)起始時刻,則可以從下一級邏輯單元借入一段時間,這就是所謂的“時間借入(Time Borrowed)”。以圖1所示的路徑為例說明此問題。
圖1 基于鎖存器的路徑
圖1中包含兩個鎖存器,它們均為高電平有效,時鐘周期為10 ns。靜態(tài)時序分析工具Prime Time將時鐘上升沿作為參考時鐘沿,假設(shè)工具庫中鎖存器的建立時間為零,鎖存器開通期間數(shù)據(jù)延時(數(shù)據(jù)從D端傳輸?shù)絈端)為零。如圖1所示,在鎖存器U1與U2之間存期組合邏輯P1,其延時時間為8.92 ns,在鎖存器U2與U3之間存在組合邏輯P2,其延時時間為0.77 ns。數(shù)據(jù)到達(dá)U2數(shù)據(jù)端的時刻為8.92 ns,滯后于U2時鐘Phi2上升沿到來的時刻。對于觸發(fā)器而言,這違反了數(shù)據(jù)建立時間,但對于鎖存器,路徑P1可以從U2與U3之間的路徑“借入”一段時間,即借入時間(3.92 ns)。并且P1與P2延時之和為9.69 ns,小于10ns,數(shù)據(jù)到達(dá)U3數(shù)據(jù)輸入端D的時刻早于U3時鐘Phi1上升沿到來時刻,不違背U3鎖存器的時序要求。
以下對寬裕時間(slack time)的分析均未考慮鎖存器的建立時間(setup time)、時鐘延時(clock latency)、時鐘不確定性(clock uncertainty)、最差移除時鐘重匯聚CRPR(clock reconvergence pessimism removal)。如果數(shù)據(jù)到達(dá)后級鎖存器的時刻早于時鐘有效開始的時刻,Prime Time會將此行為抽象為觸發(fā)器,并在時鐘有效的時刻(上升沿)將數(shù)據(jù)采樣,同時在下一路經(jīng)中將此時刻作為發(fā)送沿(launch edge)將數(shù)據(jù)發(fā)送,此時寬裕時間(slack time)為正實(shí)數(shù),如圖2所示;如果數(shù)據(jù)到達(dá)的時刻位于后級鎖存器開通期間(上升沿之后,下降沿之前,即時鐘高電平時間段),Prime Time會將此行為抽象為從鎖存器數(shù)據(jù)端有效開始作為下一路經(jīng)的發(fā)送沿(launch edge),而不是將時鐘端有效作為發(fā)送沿(launch edge),此時不存在時序違背,且slack time 為零,如圖2所示。如果數(shù)據(jù)到達(dá)后級鎖存器的時刻滯后于時鐘下降沿到來的時刻,則存在時序違背,slack time為負(fù)實(shí)數(shù),如圖2所示[12]。
圖2 slack time函數(shù)圖
可從后級鎖存器路徑中借入的最大時間(TBImax)主要由兩個因素確定:一是有效時鐘寬度(Twidth),二是后級鎖存器的建立時間(Tset),TBImax = Twidth - Tset。如果考慮時鐘延時(clock latency)、時鐘不確定性(clock uncertainty)、最差移除時鐘重匯聚CRPR(clock reconvergence pessimism removal),則TBImax = Twidth - clock latency + clock uncertainty - CRPR - Tset。前級觸發(fā)器后面的路徑可借入時間TBImax越長,后級觸發(fā)器路徑的可容忍延時時間就越短。所以,在Prime Time的時序約束文件*.sdc中,如果指定clock latency、CRPR,則會使靜態(tài)時序分析的時序松弛,如果指定clock uncertainty,則會使靜態(tài)時序分析的時序收緊[12]。
STA工具Prime Time計(jì)算實(shí)際的借入時間分兩步走:首先考慮到傳輸路徑上的clock uncertainty與CRPR來調(diào)整時鐘有效沿到來的時刻,然后檢測數(shù)據(jù)信號到達(dá)鎖存器數(shù)據(jù)端的時刻,令后者減去前者即得到實(shí)際的借入時間。如果考慮clock uncertainty與CRPR的存在,則本級鎖存器前面組合邏輯的實(shí)際借入時間將與該鎖存器的實(shí)際借出時間不相等。實(shí)際借出時間TBO,與實(shí)際借入時間TBI的關(guān)系為:TBO =TBI - clock uncertainty + CRPR[12]。
把數(shù)據(jù)達(dá)到鎖存器時刻記為tD,時鐘到達(dá)鎖存器時刻記為tG。在大多數(shù)情況下,如果數(shù)據(jù)早于時鐘有效沿(opening edge)到達(dá)(tDlt;tG),則路徑中不會出現(xiàn)“時間借入”的現(xiàn)象,如果數(shù)據(jù)滯后于時鐘有效沿到達(dá)(tDgt;tG),則路徑中會出現(xiàn)“時間借入”的現(xiàn)象。發(fā)生“時間借入”時,如果以該鎖存器作為路徑的結(jié)束點(diǎn),則可認(rèn)為是“從終點(diǎn)借入(TBFE)”;如果以該鎖存器作為路徑的起始點(diǎn),則可認(rèn)為是“借出給起始點(diǎn)”(TGTS)。
在某些情況下,即使數(shù)據(jù)早于時鐘有效沿(opening edge)到達(dá)(tDlt;tG),仍然會產(chǎn)生“時間借入”的現(xiàn)象。如當(dāng)鎖存器的D-to-Q(數(shù)據(jù)輸入端到數(shù)據(jù)輸出端)延時遠(yuǎn)遠(yuǎn)大于G-to-Q(時鐘輸入端到數(shù)據(jù)輸出端)延時,且數(shù)據(jù)到達(dá)鎖存器數(shù)據(jù)端的時刻很接近與時鐘沿到達(dá)鎖存器的時刻時,即使數(shù)據(jù)到達(dá)D端時刻稍早于時鐘到達(dá)G端時刻,但由于D-to-Q延時大于G-to-Q延時,仍然發(fā)生“時間借入”現(xiàn)象。此時,數(shù)據(jù)在后級路徑的發(fā)送時間主要由數(shù)據(jù)到達(dá)該鎖存器的時間及D-to-Q延時確定,而不是由發(fā)生在非“時間借入”模式下的G-to-Q延時確定。
如果在Prime Time約束文件*.sdc中設(shè)定允許“時間借入”,數(shù)據(jù)到來時刻減去時鐘有效長度即為“時間借入”,此時該值為負(fù)。如果以該鎖存器作為路徑的結(jié)束點(diǎn),則可認(rèn)為是“借出到路徑終點(diǎn)”(TGTE);如果以該鎖存器作為路徑的起始點(diǎn),則可認(rèn)為是“從起始點(diǎn)借入”(TBFS)。TBFE與TGTS,TGTE與TBFS,分別是對同一種路徑計(jì)算方式從不同角度的描述。根據(jù)時序關(guān)系,分別從路徑的起點(diǎn)和終點(diǎn)角度梳理“時間借入”與“時間借出”關(guān)系,結(jié)論如表1所示。
表1 借入時間與借出時間關(guān)系
在Prime Time約束文件中使用命令set_max_time_borrow設(shè)定可借入的最大時間,remove_max_time_borrow撤銷設(shè)定的最大借入時間[10][11];如果default_max_time_borrow為零,則不允許存在“時間借入”現(xiàn)象,Prime Time將鎖存器當(dāng)做觸發(fā)器來做時序檢查;如果default_max_time_borrow為負(fù)值,則要求信號早于時鐘沿到達(dá)鎖存器。
在某型號FPGA產(chǎn)品第三方驗(yàn)證工作中,在Prime Time約束文件中若只約束輸入時鐘,Prime Time 只檢查FF_Based STA,由于網(wǎng)表文件存在鎖存器,STA路徑覆蓋率達(dá)不到100%,存在未覆蓋路徑(Untested)。如表2所示。
經(jīng)分析,造成STA覆蓋率達(dá)不到100%的原因是網(wǎng)表文件中生成了鎖存器(Latch), DL1 data_in[14] (.D(N_180), .G(un1_data_in7_buf_net_1), .Q(
data_in[14]_net_1 )); 生成鎖存器的源代碼如下所示:
表2 STA覆蓋率不足100%
always @ (fpga_data,io_data,mcu_addr[15:12]) begin
case (mcu_addr[15:12])
4'b0000: data_in = io_data;
4'b0001: data_in = io_data;
4'b1111: data_in = fpga_data;
default: data_in = data_in ;
endcase
end
為使STA覆蓋率達(dá)到100%,不僅需要進(jìn)行FF_Based STA,還需要進(jìn)行Latch_Based STA。通過Prime Time 約束文件*.sdc,對鎖存器data_in時鐘端約束衍生時鐘。語法如下:create_generated_clock -name vclk1 -source [get_ports { i_clk_16m }] -divide_by 1 [get_pins { data_in[*]/G }]。之后運(yùn)行Prime Time,覆蓋率達(dá)到100%,如表3所示。
表3 STA覆蓋率達(dá)100%
比較表2與表3,可看出表3中對setup和hold的檢查增加了16條基于鎖存器的路徑。通過增加對鎖存器路徑的分析,STA覆蓋率達(dá)到100%,滿足第三方驗(yàn)證要求。Latch_Based STA中的 “時間借入”、“時間借出”分別會造成時序松弛和時序收緊,以下選取Latch_Based STA路徑做計(jì)算說明。
選取鎖存器路徑做數(shù)據(jù)分析,如圖3所示,該圖是鎖存器時序波形及路徑信息。數(shù)據(jù)到達(dá)鎖存器DL1(data_in[14])的D端時刻為latency + path delay = 0.978 + 21.213 = 22.191,時鐘到達(dá)鎖存器DL1(data_in[14])的G端時刻為latency =6.749。數(shù)據(jù)到達(dá)時刻滯后于時鐘到達(dá)時刻,實(shí)際滯后 22.191- 6.749 = 15.442。由圖2 slack 函數(shù)圖可知,該鎖存器可以向后級路徑執(zhí)行“時間借入”,借入的時間值不可大于最大可借入時間(max time borrow)。通過1.2節(jié)分析可知,最大可借入時間(max time borrow)與時鐘周期(pulse width)、時鐘延遲(latency)、后級觸發(fā)器建立時間(setup time)有關(guān),故最大可借入時間為 時鐘周期pulse width (31.25) -latency (6.75) -setup time(0.91) = 23.60。故進(jìn)行Latch_Based STA時,該鎖存器是路徑的終點(diǎn),從后級觸發(fā)器實(shí)際借入時間(TBFE)為15.442ns。上述計(jì)算分析過程符合圖3所提供的路徑信息。
圖3 “時間借入”正值,時序松弛
由1.2分析可知,當(dāng)時鐘延遲(latency)大于時鐘周期時,最大可借入時間(max time borrow)是負(fù)值,由表1可知,此時“時間借入”轉(zhuǎn)變?yōu)椤皶r間借出”,即借出到路徑終點(diǎn)(TGTE)。鎖存器通過“時間借出”后,未緩解slack緊張度,反而對其實(shí)行了負(fù)面影響(negative effect),導(dǎo)致時序進(jìn)一步收緊。舉例分析如下。
選取鎖存器路徑做數(shù)據(jù)分析,如圖4所示,該圖是鎖存器時序波形及路徑信息。數(shù)據(jù)到達(dá)鎖存器DL1(data_in[5])的D端時刻為44.59,時鐘到達(dá)鎖存器DL1(data_in[5])的G端時刻為36.57。數(shù)據(jù)到達(dá)時刻滯后于時鐘到達(dá)時刻,實(shí)際滯后 44.59- 36.57 = 8.02。經(jīng)計(jì)算最大可借入時間(max time borrow)為 時鐘周期(pulse width)- lantency -setup time = 31.25 - 36.57 -0.45 = -5.77。該值為負(fù),稱作time given to endpoint(TGTE),表示鎖存器無法執(zhí)行有效的“時間借入”,而是“時間借出”。Prime Time進(jìn)行STA時,對時鐘的要求時序(requried time )進(jìn)一步收緊,其值為 lantency + max time borrow = 36.57 + (-5.77) = 30.80,故寬裕時間(slack time) 為- 44.59 + 30.80 = -13.79。說明執(zhí)行“時間借出”后,slack值由 -5.77變?yōu)?13.79,時序情況進(jìn)一步收緊。
圖4 “時間借入”負(fù)值(時間借出),時序收緊
目前靜態(tài)時序分析已成為FPGA第三方驗(yàn)證的標(biāo)準(zhǔn)環(huán)節(jié),對基于鎖存器路徑的分析是靜態(tài)時序分析的一個重要方面。通過計(jì)算分析Latch_Based STA,使STA的路徑覆蓋率達(dá)到了100%,滿足了第三方驗(yàn)證要求。隨著FPGA技術(shù)的發(fā)展,需要不斷完善對超大規(guī)模FPGA硬件結(jié)構(gòu)的計(jì)算機(jī)語言描述,以提高其對物理結(jié)構(gòu)的精確映射。將來靜態(tài)時序分析會變得愈加復(fù)雜,這對STA工具提供商及第三方驗(yàn)證機(jī)構(gòu)均提出了更高的要求,對STA模型及算法的研究還將有很長的路要走。
[1] 吳 丹, 劉三清, 徐維鋒. 深亞微米ASIC設(shè)計(jì)中的時序約束與靜態(tài)時序分析[J]. 電子工程師,2004(3):16-20.
[2] 關(guān)俊強(qiáng),左麗麗,吳維林. 基于FPGA和CAN控制器軟核的CAN總線發(fā)送系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2016(24):281-284.
[3] 許天一, 張乃通.FPGA靜態(tài)時序分析的研究與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2016.
[4] 陳 敏, 殷瑞祥, 郭 瑢.靜態(tài)時序分析在數(shù)字ASIC設(shè)計(jì)中的應(yīng)用[J].重慶工學(xué)院學(xué)報(bào),2005(8):52-56.
[5] 廖軍和,葉 兵.深亞微米ASIC設(shè)計(jì)中的靜態(tài)時序分析[J].半導(dǎo)體技術(shù),34(1):45-48.
[6] 孟祥志,來金梅,楊 萌.FPGA的靜態(tài)時序分析與設(shè)計(jì)[D].上海:復(fù)旦大學(xué),2013(3).
[7] Synopsys, Prime Time Suite Quick Reference[S]. Version C- 2009.06.
[8] Synopsys, Prime Time Modeling user guide[S]. Version C- 2009.06.
[9] Synopsys, Prime Time Error Messages[S]. Version C- 2009.06.
[10] 閻 石. 數(shù)字電子技術(shù)基礎(chǔ) -5版[M].北京:高等教育出版社,2006.
[11] 郝玉虹, 付宇卓, 魯 欣. SoC芯片STA的時鐘約束問題研究[J]. 計(jì)算機(jī)工程,2005(18):50-52.
[12] Synopsys, Prime Time Advanced Timing Analysis User Guide[S]. Version C- 2009.06.
ApplicationofLatch_BasedSTAAnalysisinIndependentVerification
Liu Guobin,Zuo Lili,Chen Yun,Zhu Zhourong,Liu Wei
(Shanghai Aerospace Electronic Technology Institute,Shanghai 201109,China)
With the expansion of FPGA design scale,STA can relieve the stress of timing simulation,shorten project cycle.The common STA is usually FF_Based ,but after synthesis,unexpected Latch can be generated. The calculating algorithm between Latch_Based STA and FF_Based STA is different. In order to achieve a 100% coverage rate of SAT path analysis,it is necessary for the Independent Verification Authority to do some research on Latch_Based STA. The conceptions of “Time Borrowed”,”Time Given”were explained.The feature of “Latch slack time” was analysed and its function graph was plotted.. In order to describe “Timing Loosen”and “Timing Tighten” separately effected by “Time Borrowed” and ”Time Given” ,two separate examples were analysed by Prime Time( a tool of Computer model simulation used for STA). A 100% coverage rate of STA path analysis was achieved, and the requirement of Independent Verification was satisfied.
latch_based STA; computer model simulation; time borrowed; time given; independent verification
2017-03-20;
2017-04-13。
劉國斌(1986-)男,上海人,工學(xué)碩士,工程師,主要從事FPGA第三方驗(yàn)證方向的研究。
1671-4598(2017)09-0203-03
10.16526/j.cnki.11-4762/tp.2017.09.052
TP273
A