張華棟,龐志勇,陳弟虎
(中山大學(xué)專用集成電路設(shè)計中心,廣東廣州510275)
系統(tǒng)芯片SoC是目前超大規(guī)模集成電路設(shè)計的發(fā)展趨勢,其集成度高、功能復(fù)雜、時序要求嚴(yán)格。邏輯綜合是SoC設(shè)計不可缺少的一環(huán),它是將抽象的以硬件描述語言所構(gòu)造的模型轉(zhuǎn)化為具體的門級電路網(wǎng)表的過程。邏輯綜合的質(zhì)量直接影響芯片所能達到的性能,因而在綜合過程中必須根據(jù)設(shè)計要求在時序、面積和功耗方面設(shè)置正確的約束。
本文針對中山大學(xué)ASIC設(shè)計中心自主開發(fā)的一款系統(tǒng)芯片ZSU32,以Synopsys公司的Design Compiler為綜合工具,探索了對SoC芯片進行綜合的設(shè)計流程和方法,特別對綜合過程的時序約束進行了詳細討論,提出了有效的綜合約束設(shè)置方案。
同步電路是大多數(shù)集成電路系統(tǒng)的主流選擇。同步電路具有工作特性簡單、步調(diào)明確、抗干擾能力強等特點。但是,因為所有的時序元件受控于一個特定的時鐘,所以數(shù)據(jù)的傳播必須滿足一定的約束以便能夠保持與時鐘信號步調(diào)一致。
圖1是一個典型的局部路徑,它需要滿足兩方面的條件:防止數(shù)據(jù)太遲到達目的寄存器導(dǎo)致數(shù)據(jù)不能正確保存;防止新的數(shù)據(jù)過早到達導(dǎo)致覆蓋了前一數(shù)據(jù)。
設(shè)置建立時間(setup time)約束可以滿足第一個條件:
設(shè)置保持時間(hold time)約束可以滿足第二個條件:
式(1)、式(2)中:Tclk是寄存器工作時鐘周期;tclk-q是從時鐘沿到達至信號傳輸?shù)絈端的延時;tlogic是組合邏輯的傳輸延時;twire是互連線的傳輸延時;tskew是時鐘偏差;tsetup是建立時間,即時鐘沿到達之前,D端數(shù)據(jù)必須已經(jīng)穩(wěn)定的最短時間。thold是保持時間,即時鐘沿到達后,D端數(shù)據(jù)仍需保持穩(wěn)定的最短時間。
ZSU32芯片內(nèi)置32 bit MIPS體系處理器作為CPU,具備兩路獨立的指令和數(shù)據(jù)高速緩存,CPU內(nèi)部有獨立的DSP協(xié)處理器和浮點協(xié)處理器,同時集成了LCD控制器、MPEG硬件加速器、AC97控制器、SRAM控制器、NAND Flash控制器、SATA高速硬盤控制器、以太網(wǎng)MAC控制器等,并具有I2C、I2S、SPI、、UART、GPIO等多種接口模塊。圖2是ZSU32的總體結(jié)構(gòu)。
采用Design Compiler工具對ZSU32進行邏輯綜合的基本流程如圖3所示。
ZSU32系統(tǒng)芯片的綜合采取自底向上的策略,先局部后整體。首先將當(dāng)前工作層次設(shè)置為系統(tǒng)芯片的某個子模塊,然后對該子模塊添加各項具體約束,接著完成子模塊的綜合。依次對各子模塊重復(fù)上述綜合流程,當(dāng)各個模塊都順利通過了初次綜合后,通過set_dont_touch_network命令將模塊中的關(guān)鍵路徑和時鐘線網(wǎng)保護起來,然后做一次全局優(yōu)化,檢查是否滿足時序等各方面的設(shè)計要求,達到要求就可以輸出最終的網(wǎng)表和各項綜合報告。
設(shè)置Design Compiler運行所使用的庫:目標(biāo)庫(target_library)、鏈接庫(link_library)、可綜合庫(synthetic_library)、符號庫(symbol_library)。其中的目標(biāo)庫中包含了標(biāo)準(zhǔn)單元庫、RAM單元庫、I/O單元庫、PLL單元庫等,通常是由芯片代工廠家提供。系統(tǒng)芯片ZSU32采用的是中芯國際的0.18 μm CMOS工藝庫,所以在設(shè)置時就把目標(biāo)庫指向該工藝庫。
#設(shè)置目標(biāo)工藝庫
set target_librarySMIC.db
讀入RTL設(shè)計通常有自頂向下或者自底向上2種方式。因為ZSU32模塊眾多,所以采用自底向上的讀入方式。首先讀入各個子模塊,并分別編譯;然后更改層次,編譯上一層的模塊;最后會合成整個系統(tǒng)。
讀入設(shè)計后,首先設(shè)置芯片的工作環(huán)境,根據(jù)采用的工藝庫提供的環(huán)境和線網(wǎng)負載模型,可以通過set_operating_condition和set_wire_load_model命令進行設(shè)置。以下是ZSU32綜合環(huán)境的頂層環(huán)境設(shè)置:
3.3.1 時鐘定義
時鐘是整個時序約束的起點。系統(tǒng)芯片ZSU32將外部輸入時鐘和PLL模塊輸入時鐘作為源時鐘:ext_clk_i和pll_clk_i。通過對這2個源時鐘信號的分頻或者倍頻,產(chǎn)生了各個子模塊的時鐘信號。
在SoC芯片內(nèi)部,子模塊的時鐘實際是經(jīng)過源時鐘分頻或者倍頻得到的,使用create_generated_clock命令來建立子模塊時鐘。
3.3.2 多時鐘域約束
時序檢查默認以一個時鐘周期為界,但對于ZSU32系統(tǒng)芯片,存在著一些多周期路徑,在這些路徑上,數(shù)據(jù)不需要在單時鐘周期內(nèi)到達終點。例如,clk30mhz和clk10mhz是同源的同步時鐘,前者頻率是后者的3倍,對從clk10mhz時鐘域向clk30mhz時鐘域傳輸數(shù)據(jù)的路徑,采用如下命令:
對于異步時鐘域之間的路徑,不用進行同步的時序檢驗,應(yīng)該將其定義為偽路徑(false path),這樣在邏輯綜合時就不必浪費資源去優(yōu)化。
#將異步時鐘e_clk和p_clk之間的路徑設(shè)置為偽路徑
3.3.3 時鐘偏移
芯片中時鐘經(jīng)過不同的傳輸路徑,由于每條路經(jīng)延時不一,導(dǎo)致從時鐘源到達各個寄存器的始終輸入端的相位差。這種由于空間分布而產(chǎn)生的偏差叫做時鐘傾斜(clock skew)。此外,由于溫漂、電子漂移的隨機性,使時鐘信號的邊沿可能超前也可能滯后。這種具有時間不確定性的偏移稱為時鐘抖動(clock jitter)。偏移導(dǎo)致時鐘信號到達各個觸發(fā)器的時鐘引腳的時間不一致,需要給予約束。#設(shè)置時鐘偏移為0.4 ns
SoC芯片通過大量輸入和輸出端口與外界進行信息的傳輸,端口約束主要用于約束頂層端口相連的片內(nèi)組合邏輯,包括確定輸入延時、輸出延時、輸出負載、輸出扇出負載、輸入信號躍遷時間等。
3.4.1 端口延時
輸入延時是指外部邏輯到電路輸入端口的路徑延時。輸出延時是指輸出端口到外部寄存器的路徑延時。圖4是輸入輸出延時示意圖。
設(shè)置范例如下:
端口的驅(qū)動和負載特性通過設(shè)置輸入驅(qū)動單元、輸入輸出負載值以及信號躍遷時間等來描述。范例如下:#設(shè)置端口a7的驅(qū)動單元是BUFX2
Design Compiler的綜合以時序優(yōu)先,即優(yōu)化完約束后才根據(jù)約束優(yōu)化面積和功耗。初次綜合時很難對面積進行評估,所以在第一次綜合時設(shè)置優(yōu)化目標(biāo)為0,表示在滿足時序約束的情況下最大努力地減小面積。待綜合報告出來之后,根據(jù)初步的面積和功耗報告,修改數(shù)值,從而進一步優(yōu)化。
根據(jù)上述綜合流程和約束設(shè)置,ZSU32系統(tǒng)芯片在邏輯綜合后滿足了時序約束,同時為后續(xù)物理設(shè)計提供了較好的起點。圖5是ZSU32時序分析報告的一部分。
從報告中看到,該路徑起點是i_ZSU32_top/i_eth2_top/miim1/clkgen/U42/Y,終點是i_ZSU32_top/i_eth2_top/miim1/shftrg/ShiftReg_reg_1_,路徑的時序裕量是2.96 ns。
ZSU32采用中芯國際0.18 μm CMOS標(biāo)準(zhǔn)單元庫進行了邏輯綜合和版圖設(shè)計實現(xiàn),6層金屬布線,已成功流片。電路綜合規(guī)模為200萬門,所有cell的面積為19 195 460 μm2,芯片總面積小于5 mm×5 mm。
[1]Synopsys.Design Compiler User Guide,Version Y-2008.06,Synopsys.
[2]BHATNAGAR H.Advanced ASIC chip synthesis using synopsys design compiler physical compiler and prime time(second edition).Kluwer Academic Publishers,2002.
[3]RABAEY J M.Anantha chandrakasan,borivoje nikolic.Digital Integrated CircuitsA Design Perspective(Senond Edition)(影印版).北京:清華大學(xué)出版社,2004,3.