張 麗,沈劍良,李沛杰
(中國人民解放軍戰(zhàn)略支援部隊信息工程大學(xué) 信息技術(shù)研究所,河南 鄭州 450002)
隨著片上系統(tǒng)的發(fā)展,出現(xiàn)了數(shù)千萬門級的ASIC電路,針對如此大規(guī)模的電路,有效準(zhǔn)確的驗證變得尤為重要。功能驗證和時序驗證是保證芯片功能符合設(shè)計需求的重要手段。20世紀(jì)90年代中期,靜態(tài)時序分析(Static Timing Analysis,STA)的概念被提出,其通過分析電路拓?fù)鋪盱o態(tài)計算電路中不同信號的時間,以判斷是否滿足時序要求[1-4]。靜態(tài)時序分析依賴于時序約束文件,好的時序約束設(shè)計可以正確體現(xiàn)芯片的設(shè)計需求,最終實現(xiàn)芯片的正常通信功能。
RapidIO互連技術(shù)是一種高性能、低引腳數(shù)、基于報文交換的互連體系結(jié)構(gòu),是唯一的嵌入式系統(tǒng)互連的國際標(biāo)準(zhǔn)[5-7]。2009年發(fā)布的RapidIO 2.1規(guī)范中,單通道最高速率支持到6.25 Gbaud,端口支持1x、2x、4x通道綁定;2014年發(fā)布RapidIO 3.1規(guī)范,單通道最高速率[8]支持到10.312 5 Gbaud;2016年發(fā)布RapidIO 4.0規(guī)范,單通道最高速率[9]支持到25.781 25 Gbaud。隨著RapidIO互連技術(shù)的發(fā)展,單通道支持的速率越來越高,意味著高速通道的正常通信在RapidIO交換芯片設(shè)計中需要重點關(guān)注。RapidIO交換芯片作為嵌入式RapidIO設(shè)備的核心芯片,其時序驗證的準(zhǔn)確性直接影響芯片的PVT(Production Verification Test)一致性及高速信號傳輸?shù)目煽啃浴?/p>
針對異步時鐘域設(shè)計中的CDC(Clock Domain Crossing)信號,文獻(xiàn)[10]提出了一種CDC信號滑動窗口時序分析方法;文獻(xiàn)[11]在導(dǎo)航基帶芯片中設(shè)計了多異步時鐘域的時序約束方法;文獻(xiàn)[12]針對數(shù)字電路中提高工作頻率的方法,介紹了通過消耗邏輯資源提高工作頻率的設(shè)計思路。32通道RapidIO交換芯片是一款滿足RapidIO v2.1協(xié)議的、低延遲、高帶寬的交換芯片,具有高速通道的高速時鐘頻率特征,存在多時鐘域、多通道綁定下的時鐘同步,及較多的跨異步時鐘處理的特點和問題。對此,本文提出并設(shè)計了一種多分組全芯片的時序約束設(shè)計,優(yōu)化解決了靜態(tài)時序分析中的時序違例,最終滿足芯片在全PVT下的時序要求。
靜態(tài)時序分析的工作原理是通過套用特定的時序模型,針對特定電路分析其是否違反設(shè)計者給定的時序約束。其中,時序模型依賴于特定工藝中的標(biāo)準(zhǔn)組件庫;時序約束由設(shè)計者給定,正確反映電路設(shè)計的時序需求。靜態(tài)時序分析策略包括基于模塊的方式和基于路徑的方式?;诼窂降臅r序分析方式[13]以路徑為單位,找出電路設(shè)計中所有的時序路徑,按照特定模型精確地計算每條時序路徑的延遲信息,以判斷是否滿足時序要求。每一條時序路徑都存在一個始發(fā)點和一個終止點[1,14]。始發(fā)點分為兩種:組合邏輯單元的數(shù)據(jù)輸入端口和時序單元的時鐘輸入端口。終止點也分為兩種:組合邏輯單元的數(shù)據(jù)輸出端口和時序單元的數(shù)據(jù)輸入端口。根據(jù)始發(fā)點和終止點的不同可分為4種類型的時序路徑:
1)觸發(fā)器到觸發(fā)器;
2)觸發(fā)器到輸出端;
3)輸入端到觸發(fā)器;
4)輸入端到輸出端。對時序路徑的建立時間(Setup time)和保持時間(Hold time)進行分析是靜態(tài)時序分析的主要工作。
時序約束由設(shè)計者結(jié)合芯片結(jié)構(gòu)及需求分析要求給出準(zhǔn)確的定義。時序約束通常以SDC(Synopsys Design Constraints)格式來描述電路的時序、面積等信息。時序約束設(shè)計屬于芯片功能的一個重要組成部分,包括時鐘約束、I/O的輸入輸出約束等。時鐘是最重要的一項時序約束,時鐘特性包括波形、延遲、時鐘不確定性。其中,網(wǎng)絡(luò)延遲和時鐘不確定性在布局布線前可用來預(yù)估時鐘信號的延遲時間,在布局布線后,則要根據(jù)實際的寄生電阻電容計算得到。
在此以觸發(fā)器到觸發(fā)器的時序路徑為例介紹靜態(tài)時序分析原理,如圖1所示。
圖1 Setup time/Hold time時序分析
Setup check,數(shù)據(jù)到達(dá)REG2的D端的時間,計算公式如下:
式中:Tco為REG1時鐘端到Q端的延遲;Tdata為REG1的Q端到REG2的D端間組合邏輯的延遲。時鐘到達(dá)REG2的時間計算公式為:
數(shù)據(jù)被鎖存在REG2需要的最小時間計算公式為:
若在REG2正確捕獲到從REG1發(fā)出的數(shù)據(jù),則需Data Arrival Time<Data Required Time,兩者差值稱為Setup slack。slack為正值表示時序滿足,否則發(fā)生時序違例。
Hold check要求當(dāng)前數(shù)據(jù)不會被下一個數(shù)據(jù)所覆蓋,Data Arrival Time為下一個數(shù)據(jù)到達(dá)REG2的D端的時間,如式(4)所示;數(shù)據(jù)被鎖存在REG2需要的最小時間,如式(5)所示;Hold slack由下一個數(shù)據(jù)的到達(dá)時間減去當(dāng)前數(shù)據(jù)的捕獲時間,計算公式如式(6)所示。
因此時序分析時,既要利用時序模型的信息,如單元延遲Tsu,Thold等,又要利用時序約束信息如時鐘周期信息等,最終計算路徑的延遲信息,以判斷是否滿足時序要求。
32通道RapidIO交換芯片主要由32個高速通道、14個端口、全交叉核心交換、I2C接口等組成。對外通道主要是32個高速通道,以及I2C接口、JTAG接口;時鐘主要涉及交換時鐘、端口時鐘、Serdes時鐘、配置時鐘及JTAG、I2C模塊時鐘。該交換芯片支持一路參考時鐘輸入,即REF_CLKP/N時鐘管腳為參考時鐘源;有一個獨立于Serdes的核PLL,是芯片核心時鐘源;在12個PMA的發(fā)送/接收端反饋時鐘在Serdes模擬部分進行門控時鐘設(shè)計;支持從PMA到SRIO的時鐘映射功能;JTAG時鐘作為接口隨路時鐘。具體的時鐘信息如圖2、表1、表2所示。
表2 內(nèi)部時鐘信息
圖2 Rapid IO交換芯片PLL時鐘結(jié)構(gòu)圖
表1 片外輸入時鐘信息
片外輸入時鐘由晶振產(chǎn)生的1組差分時鐘提供,在板級解決了12個Serdes級聯(lián)問題。芯片內(nèi)部包含13個PLL。12個Serdes的時鐘模塊各包含1個PLL,核時鐘處理包含1個PLL。核時鐘PLL經(jīng)倍頻分頻處理輸出一個312.5 MHz的單端時鐘pll_ck_sys,該時鐘經(jīng)2分頻產(chǎn)生156.25 MHz時鐘,后根據(jù)外部管腳FSEL0的配置,產(chǎn)生交換模塊所采用的功能時鐘sw_clk及12個RapidIO控制器采用的功能時鐘ip_clk;全芯片配置網(wǎng)絡(luò)采用的配置時鐘cfg_clk為差分轉(zhuǎn)單端后的單端時鐘的4分頻時鐘。
由以上分析可知,32通道RapidIO交換芯片在時序方面具有如下特點:
1)多時鐘域劃分。由表1、表2可以看出,該交換芯片存在如主時鐘sw_clk、高速Serdes的發(fā)送和接收時鐘、配置時鐘cfg_clk等較多的時鐘域劃分。
2)高速時鐘頻率需求。主時鐘sw_clk和Serdes時鐘需要滿足312.5 MHz的高速頻率需求,參考時鐘ref_clk需要滿足156.25 MHz的高速頻率需求。
3)Nx模式下N個lane的時鐘必須為同一速率。對于PMA的收發(fā)時鐘在不同模式下其頻率輸出需進行路徑切換,且保證Nx模式下N個lane的時鐘必須為同一速率,如4x模式下其4個lane的時鐘必須為同一速率。需考慮Nx模式下的時鐘同步問題。
4)較多的跨異步時鐘。由于存在多時鐘域,不同的時鐘域之間的數(shù)據(jù)交互需考慮跨異步處理問題。
3.1.1 時鐘約束的設(shè)計
1)時鐘和生成時鐘定義
芯片的片外輸入時鐘(見表1)的SDC指令為create_clock[1-3],對REF_CLKP/N等時鐘分別定義,包含其時鐘周期、時鐘源、時鐘名稱、占空比等。
create_clock-name REF_CLKP-period 6.4[get_ports REF_CLKP]
create_clock-name REF_CLKN-period 6.4[get_ports REF_CLKN]
create_clock-name TCK-period 40[get_ports TCK]
create_clock-name Debug_clk-period 6.4[get_ports Debug_clk]
以上時鐘定義其時鐘源點直接來自于時鐘端口。邏輯綜合階段根據(jù)負(fù)載模型的類型進行過約以留有余量,方便后端物理實現(xiàn)。通常針對ZERO RC采取將時鐘周期過約30%的方法實現(xiàn)余量。
內(nèi)部時鐘由時鐘PLL倍頻分頻產(chǎn)生,需要對PLL的輸出時鐘進行定義,如下:
create_clock-name PLL_sys_clk-period 3.2[get_pins PLL/pll_ck_sys]
PLL輸出時鐘pll_ck_sys經(jīng)過2分頻產(chǎn)生156.25 MHz時鐘,后經(jīng)過選擇器輸出到交換模塊和端口模塊,根據(jù)不同的工作模式選擇不同的時鐘,定義如下:
create_generated_clock-name GCK_ip_div2[get_pins U_ip_div2_inst/div2_ff_reg/Q]-edges{1 3 5}-master PLL_sys_clk-source[get_pins PLL/pll_ck_sys]
create_generated_clock-name GCK_ip156[get_pins U_IP_MUX/CKMUX2/Z]-edges{1 2 3}-master GCK_ip_div2-source[get_pins U_ip_div2_inst/div2_ff_reg/Q]-add
create_generated_clock -name GCK_ip312 [get_pins U_IP_MUX/CKMUX2/Z]-edges{1 2 3}-master PLL_sys_clk-source[get_pins PLL/pll_ck_sys]-add-combinational
GCK_ip_div2為核時鐘經(jīng)2分頻后的時鐘。GCK_ip156和GCK_ip312對應(yīng)選擇器CKMUX后的輸出時鐘,以上時鐘定義點均為邏輯單元的pin腳。由于GCK_ip312時鐘從其源引腳到生成時鐘的路徑不僅有純組合電路(pll_ck_sysàCKMUX),同時存在時序電路(pll_ck_sysàcrm_div2àCKMUX),因 此 在 定 義GCK_ip312時鐘時必須加上-combinational選項,以阻隔時序電路,讓組合電路始終有效;否則GCK_ip312時鐘定義會失效,引起異常時序路徑。
Serdes模塊的PLL的輸出時鐘tx_pclk、rx_pclk也需要進行時鐘定義,即4個象限,每個象限含3個serdes,每個serdes含4條lane,每條lane對應(yīng)一組tx/rx_pck時鐘,定義如下:
for{set n 0}{$n<4}{incr n}
{for{set j 0}{$<3}{incr j}
{for{set i 0}{$i<4}{incr i}{
create_clock-name quad${n}serdes${j}_tx${i}_pclkperiod 3.2[get_pins quad${n}/serdes${j}/PLL/tx_pclk]
create_clock-name quad${n}serdes${j}_rx${i}_pclkperiod 3.2[get_pins quad${n}/serdes${j}/PLL/rx_pclk]}}}
2)時鐘組定義
交換芯片的時鐘屬于不同時鐘域,有同步時鐘和異步時鐘兩類。異步時鐘不共享固定的相位關(guān)系,時序分析時,這類異步時序路徑不需要進行時序分析或串?dāng)_分析。為避免工具在滿足這類路徑的時序要求時造成無謂的時間開銷,通常采用set_clock_groups指令[1-3]定義不同的時鐘分組,對于沒有相位關(guān)系的多個時鐘,定為-asynchronous。上述時鐘,除GCK_ip_div2、GCK_ip156、GCK_ip312為PLL_sys_clk的生成時鐘,需定義到一個group,其他時鐘均為異步時鐘,分屬不同的group,定義如下:
set_clock_groups-asynchronous-name ASYNGRP
-group[get_clocks“REF_CLKP”]
-group[get_clocks“REF_CLKN”]
-group[get_clocks“TCK”]
-group[get_clocks“Debug_clk”]
-group[get_clocks“PLL_sys_clk GCK_ip_div2 GCK_ip156 GCK_ip312”]
-group[get_clocks“quad0serdes0_tx0_pclk”]
-group[get_clocks“quad0serdes0_rx0_pclk”]
…
時鐘GCK_ip156和GCK_ip312在實際電路中不存在兩個時鐘共存的情況,即物理上是獨立的,定義為:
set_clock_groups-physically_exclusive-name IPGRP-group“GCK_ip156”-group“GCK_ip312”
3)其他時鐘特性定義
由于時鐘本身存在時鐘抖動、時鐘偏斜、時鐘延遲等不確定特性,需定義clock_uncertainty加以考慮,定義如下:
set_clock_uncertainty-setup 0.15[all_clocks]set_clock_uncertainty-hold 0.1[all_clocks]
3.1.2 端口約束的設(shè)計
1)端口延遲
對于除寄存器到寄存器之外的三種時序路徑,需要對外部IO的延遲進行時序約束。RapidIO交換芯片的IO多數(shù)為靜態(tài)信號,不需要考慮IO延遲;而與JTAG相關(guān)的端口信號則必須定義端口延遲,如數(shù)據(jù)端口TDI、TDO,復(fù)位信號TRST,模式選擇信號TMS,定義如下:
set_input_delay-max 15-clock[get_clocks TCK][get_ports“TRST TDI TMS”]-clock_fall-add
set_input_delay-min 1-clock[get_clocks TCK][get_ports“TRST TDI TMS”]-clock_fall-add
set_output_delay-max 11-clock[get_clocks TCK][get_ports“TDO”]-add
set_output_delay-min 0-clock[get_clocks TCK][get_ports“TDO”]-add
2)其他端口約束
通過設(shè)置輸入、輸出端口信號的外部輸入驅(qū)動能力和輸出負(fù)載信息,將板級布線引入的不確定加以考慮,指導(dǎo)工具進行更符合實際情況的環(huán)境建模約束,對I2C接口和JTAG接口定義如下:
set_input_transition-max 4[get_ports“TDI TMS TRST SCL SDA”]
set_input_transition-min 1[get_ports“TDI TMS TRST SCL SDA”]set_load-max 15[get_ports“TDO SCL SDA”]set_load-min 5[get_ports“TDO SCL SDA”]
3.1.3 時序例外的設(shè)計
對于不需要進行時序分析的路徑,或不是單時鐘周期的路徑,通過定義時序例外來指導(dǎo)工具對這些特殊路徑做出正確分析。不需要做時序分析的路徑采用set_false_path指令[1-3]定義偽路徑來移除該路徑上的約束,則工具對該路徑停止時序分析。靜態(tài)端口信號由于上電后信號值是確定的,將這些端口信號關(guān)聯(lián)的路徑指定為偽路徑。對于有些單元不需要進行門控時鐘的檢查,可設(shè)置屏蔽時序弧,定義如下:
set_false_path -from [get_ports“RST_N FSEL0 FSEL1 fifo_bypass”]
set_false_path -to [get_ports“RST_N FSEL0 FSEL1 fifo_bypass”]
set_disable_clock_gating_check global_clock/u_test_sel/Ux
3.1.4 其他時序約束設(shè)計
除上述的時序約束定義外,對于工作條件、線負(fù)載模型等也可以進行設(shè)置,交換芯片在邏輯綜合階段通過設(shè)置負(fù)載模型以預(yù)估互連線延遲的信息,設(shè)置如下:
set_wire_load_modl-name wl0-lib u055ls*set_wire_load_mode top
上述時序約束設(shè)計完成后,在Prime Time(PT)工具中通過check_timing等命令以檢查約束的正確性和完整性。存在如“register clock pins with no clock”信息等,需要設(shè)計人員確認(rèn),以確保約束設(shè)計無誤。
32通道RapidIO交換芯片使用Synopsys的綜合工具Design Compiler,在UMC 55 nm的標(biāo)準(zhǔn)單元庫下進行電路邏輯綜合;采用Synopsys的靜態(tài)時序分析工具PT進行靜態(tài)時序驗證。
綜合階段主要關(guān)注建立時間的時序檢查,出現(xiàn)時序違例,根據(jù)其嚴(yán)重程度進行不同的優(yōu)化改進。較小的時序違例通過工具優(yōu)化等手段解決,如設(shè)置don′t_use列表,將負(fù)載過大的單元器件屏蔽掉;較大或嚴(yán)重的時序違例,則可能是代碼設(shè)計或約束設(shè)計的不合理造成的,需要修改設(shè)計代碼或者約束文件,重新進行綜合及靜態(tài)時序分析。如路徑中組合邏輯級數(shù)過長導(dǎo)致Setup time不滿足,在設(shè)計允許的條件下,通過插入觸發(fā)器將組合邏輯路徑打斷,以解決組合邏輯延遲過長的問題。布局布線階段主要關(guān)注保持時間的時序檢查,通過插入緩沖器單元、改變單元的大小、刪除緩沖器單元等手段,以優(yōu)化保持時間,且需反復(fù)迭代多輪,最終滿足時序要求。
PT通過窮舉法提取整個電路中所有的時序路徑,以檢查電路的時序是否滿足要求。這里以一條觸發(fā)器到觸發(fā)器的時序路徑的Setup check為例,查看其綜合后的時序報告report_timing,如圖3所示。工具分析方法同第1.2節(jié)的原理,將時序報告分成Data Arrival Time、Data Required Time、slack部 分。從 觸 發(fā) 器timebase_ack_time_base_reg的時鐘端口CK開始(綜合后STA,從時鐘源CLK_ip_clk到該觸發(fā)器的CK端的網(wǎng)絡(luò)延遲為0),從CK到Q的延遲為0.151 ns,再經(jīng)過一系列組合邏輯電路,到達(dá)觸發(fā)器port_capt_3_csr_reg_0__14的D端,Data Arrival Time為1.833 ns;CLK_ip_clk的時鐘周期為2.08 ns(實際周期為3.2 ns,過約35%),計算Data Required Time為1.882 ns,slack為-0.011 ns,時序違例。由于約束過約35%,該違例在綜合階段可忽略,后端STA,若slack為正值,表明該時序路徑滿足時序要求。
圖3 report_timing報告
交換芯片中所有路徑的時序分析結(jié)果如圖4所示,電路約束覆蓋率100%,所有類型check的slack均大于0,無時序違例,滿足時序要求。后續(xù)芯片流片后進行了PVT測試,驗證了芯片的時序正確性。
圖4 analysis_coverage報告
靜態(tài)時序分析是目前業(yè)界通用的芯片時序驗證的重要手段,PT也是業(yè)界認(rèn)可的時序sign-off工具。32通道RapidIO交換芯片采用靜態(tài)時序分析和關(guān)鍵路徑的動態(tài)仿真相結(jié)合的時序驗證方法,通過設(shè)置芯片的時鐘定義、端口定義及時序例外定義等時序約束設(shè)計,正確表述了芯片的時序設(shè)計要求,經(jīng)過時序約束檢查及時序優(yōu)化手段,最終實現(xiàn)了所有路徑均通過時序約束檢查,確保了芯片在時序上滿足設(shè)計要求,并順利通過芯片PVT測試。