《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > EDA與制造 > 設(shè)計(jì)應(yīng)用 > 約束設(shè)置與邏輯綜合在SoC設(shè)計(jì)中的應(yīng)用
約束設(shè)置與邏輯綜合在SoC設(shè)計(jì)中的應(yīng)用
來源:電子技術(shù)應(yīng)用2010年第7期
張華棟,龐志勇,,陳弟虎
中山大學(xué) 專用集成電路設(shè)計(jì)中心,,廣東 廣州510275
摘要: 介紹了約束設(shè)置與邏輯綜合在SoC設(shè)計(jì)中的應(yīng)用,,并以一款SoC芯片ZSU32的設(shè)計(jì)為例,,詳細(xì)討論了系統(tǒng)芯片的約束設(shè)置與邏輯綜合策略,。
中圖分類號(hào): TN402
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2010)07-0069-04
Application of constraint setting and logic synthesis in SoC design
ZHANG Hua Dong,,PANG Zhi Yong,,CHEN Di Hu
ASIC Design Center, Sun Yat-sen University, Guangzhou 510275,China
Abstract: This paper presents the application of constraints setting and logic synthesis in SoC design, and presents a case study for the SoC ZSU32 with detail discussion about the strategies of constraint setting and logic synthesis for SoC.
Key words : SoC,;logic synthesis,;constraint setting;timing

    系統(tǒng)芯片SoC是目前超大規(guī)模集成電路設(shè)計(jì)的發(fā)展趨勢,,其集成度高,、功能復(fù)雜、時(shí)序要求嚴(yán)格,。邏輯綜合是SoC設(shè)計(jì)不可缺少的一環(huán),,它是將抽象的以硬件描述語言所構(gòu)造的模型轉(zhuǎn)化為具體的門級(jí)電路網(wǎng)表的過程,。邏輯綜合的質(zhì)量直接影響芯片所能達(dá)到的性能,,因而在綜合過程中必須根據(jù)設(shè)計(jì)要求在時(shí)序、面積和功耗方面設(shè)置正確的約束,。
    本文針對(duì)中山大學(xué)ASIC設(shè)計(jì)中心自主開發(fā)的一款系統(tǒng)芯片ZSU32,,以Synopsys公司的Design Compiler為綜合工具,探索了對(duì)SoC芯片進(jìn)行綜合的設(shè)計(jì)流程和方法,,特別對(duì)綜合過程的時(shí)序約束進(jìn)行了詳細(xì)討論,,提出了有效的綜合約束設(shè)置方案,。
1 時(shí)序約束原理
    同步電路是大多數(shù)集成電路系統(tǒng)的主流選擇。同步電路具有工作特性簡單,、步調(diào)明確,、抗干擾能力強(qiáng)等特點(diǎn)。但是,,因?yàn)樗械臅r(shí)序元件受控于一個(gè)特定的時(shí)鐘,,所以數(shù)據(jù)的傳播必須滿足一定的約束以便能夠保持與時(shí)鐘信號(hào)步調(diào)一致。
    圖1是一個(gè)典型的局部路徑,,它需要滿足兩方面的條件:防止數(shù)據(jù)太遲到達(dá)目的寄存器導(dǎo)致數(shù)據(jù)不能正確保存,;防止新的數(shù)據(jù)過早到達(dá)導(dǎo)致覆蓋了前一數(shù)據(jù)。

    設(shè)置建立時(shí)間(setup time)約束可以滿足第一個(gè)條件:
  
2 ZSU32系統(tǒng)芯片的結(jié)構(gòu)
    ZSU32芯片內(nèi)置32 bit MIPS體系處理器作為CPU,,具備兩路獨(dú)立的指令和數(shù)據(jù)高速緩存,,CPU內(nèi)部有獨(dú)立的DSP協(xié)處理器和浮點(diǎn)協(xié)處理器,同時(shí)集成了LCD控制器,、MPEG硬件加速器,、AC97控制器、SRAM控制器,、NAND Flash控制器,、SATA高速硬盤控制器、以太網(wǎng)MAC控制器等,,并具有I2C,、I2S、SPI,、,、UART、GPIO等多種接口模塊,。圖2是ZSU32的總體結(jié)構(gòu),。

3 ZSU32系統(tǒng)芯片的約束設(shè)置與邏輯綜合
    采用Design Compiler工具對(duì)ZSU32進(jìn)行邏輯綜合的基本流程如圖3所示。

    ZSU32系統(tǒng)芯片的綜合采取自底向上的策略,,先局部后整體,。首先將當(dāng)前工作層次設(shè)置為系統(tǒng)芯片的某個(gè)子模塊,然后對(duì)該子模塊添加各項(xiàng)具體約束,,接著完成子模塊的綜合,。依次對(duì)各子模塊重復(fù)上述綜合流程,當(dāng)各個(gè)模塊都順利通過了初次綜合后,,通過set_dont_touch_
network命令將模塊中的關(guān)鍵路徑和時(shí)鐘線網(wǎng)保護(hù)起來,,然后做一次全局優(yōu)化,檢查是否滿足時(shí)序等各方面的設(shè)計(jì)要求,,達(dá)到要求就可以輸出最終的網(wǎng)表和各項(xiàng)綜合報(bào)告,。
3.1 設(shè)定工藝庫和參考庫
    設(shè)置Design Compiler運(yùn)行所使用的庫:目標(biāo)庫(target_library),、鏈接庫(link_library)、可綜合庫(synthetic_library),、符號(hào)庫(symbol_library),。其中的目標(biāo)庫中包含了標(biāo)準(zhǔn)單元庫、RAM單元庫,、I/O單元庫,、PLL單元庫等,通常是由芯片代工廠家提供,。系統(tǒng)芯片ZSU32采用的是中芯國際的0.18 ?滋m CMOS工藝庫,,所以在設(shè)置時(shí)就把目標(biāo)庫指向該工藝庫。
#設(shè)置目標(biāo)工藝庫
    set target_library  SMIC.db
3.2 讀入RTL設(shè)計(jì)與設(shè)置工作環(huán)境
    讀入RTL設(shè)計(jì)通常有自頂向下或者自底向上2種方式,。因?yàn)閆SU32模塊眾多,,所以采用自底向上的讀入方式。首先讀入各個(gè)子模塊,,并分別編譯,;然后更改層次,編譯上一層的模塊,;最后會(huì)合成整個(gè)系統(tǒng),。
    讀入設(shè)計(jì)后,首先設(shè)置芯片的工作環(huán)境,,根據(jù)采用的工藝庫提供的環(huán)境和線網(wǎng)負(fù)載模型,,可以通過set_operating_condition和set_wire_load_model命令進(jìn)行設(shè)置。以下是ZSU32綜合環(huán)境的頂層環(huán)境設(shè)置:
#設(shè)置工作環(huán)境
    set_operating_condition smic18_typ,;
#設(shè)置線網(wǎng)負(fù)載模型
    set_wire_load_model    smic18_wl30,;
3.3 時(shí)序約束
3.3.1 時(shí)鐘定義

    時(shí)鐘是整個(gè)時(shí)序約束的起點(diǎn)。系統(tǒng)芯片ZSU32將外部輸入時(shí)鐘和PLL模塊輸入時(shí)鐘作為源時(shí)鐘:ext_clk_i和pll_clk_i,。通過對(duì)這2個(gè)源時(shí)鐘信號(hào)的分頻或者倍頻,,產(chǎn)生了各個(gè)子模塊的時(shí)鐘信號(hào)。
#定義源時(shí)鐘ext_clk,,周期16 ns
    create_clock-name ext_clk-period\
    16  [get_ports {ext_clk_i}],;
    在SoC芯片內(nèi)部,子模塊的時(shí)鐘實(shí)際是經(jīng)過源時(shí)鐘分頻或者倍頻得到的,,使用create_generated_clock命令來建立子模塊時(shí)鐘,。
#設(shè)置一個(gè)2倍頻時(shí)鐘clk_main,
#其源時(shí)鐘是pll_clk_i
    create_generated_clock -name clk_main\
    -multiply_by 2 -source  pll_clk_i,;
3.3.2 多時(shí)鐘域約束
    時(shí)序檢查默認(rèn)以一個(gè)時(shí)鐘周期為界,,但對(duì)于ZSU32系統(tǒng)芯片,存在著一些多周期路徑,,在這些路徑上,,數(shù)據(jù)不需要在單時(shí)鐘周期內(nèi)到達(dá)終點(diǎn)。例如,,clk30mhz和clk10mhz是同源的同步時(shí)鐘,,前者頻率是后者的3倍,對(duì)從clk10mhz時(shí)鐘域向clk30mhz時(shí)鐘域傳輸數(shù)據(jù)的路徑,,采用如下命令:
#按照3個(gè)周期(clk30mhz)進(jìn)行
#建立時(shí)間約束
    set_multicycle_path 3 -setup  -start \
    -from  clk10mhz  -to  clk30mhz,;
    對(duì)于異步時(shí)鐘域之間的路徑,不用進(jìn)行同步的時(shí)序檢驗(yàn),,應(yīng)該將其定義為偽路徑(false path),,這樣在邏輯綜合時(shí)就不必浪費(fèi)資源去優(yōu)化。
#將異步時(shí)鐘e_clk和p_clk 之間的路徑設(shè)置為偽路徑
    set_false_path -from e_clk –to p_clk,;
    set_false_path -from p_clk -to e_clk,;
3.3.3 時(shí)鐘偏移
    芯片中時(shí)鐘經(jīng)過不同的傳輸路徑,由于每條路經(jīng)延時(shí)不一,,導(dǎo)致從時(shí)鐘源到達(dá)各個(gè)寄存器的始終輸入端的相位差,。這種由于空間分布而產(chǎn)生的偏差叫做時(shí)鐘傾斜(clock skew)。此外,,由于溫漂,、電子漂移的隨機(jī)性,使時(shí)鐘信號(hào)的邊沿可能超前也可能滯后,。這種具有時(shí)間不確定性的偏移稱為時(shí)鐘抖動(dòng)(clock jitter),。偏移導(dǎo)致時(shí)鐘信號(hào)到達(dá)各個(gè)觸發(fā)器的時(shí)鐘引腳的時(shí)間不一致,需要給予約束,。
#設(shè)置時(shí)鐘偏移為0.4 ns
    set_clock_uncertainty 0.4 [all_clocks],;
3.4 端口約束
    SoC芯片通過大量輸入和輸出端口與外界進(jìn)行信息的傳輸,端口約束主要用于約束頂層端口相連的片內(nèi)組合邏輯,,包括確定輸入延時(shí),、輸出延時(shí)、輸出負(fù)載,、輸出扇出負(fù)載,、輸入信號(hào)躍遷時(shí)間等。
3.4.1 端口延時(shí)
    輸入延時(shí)是指外部邏輯到電路輸入端口的路徑延時(shí),。輸出延時(shí)是指輸出端口到外部寄存器的路徑延時(shí),。圖4是輸入輸出延時(shí)示意圖。

    設(shè)置范例如下:
#設(shè)置端口pci_ad13的輸入延時(shí)為4.8 ns
    set_input_delay  4.8 -clock clk_main \
    [get_ports {pci_ad13}],;
#設(shè)置端口pci_ad16的輸出延時(shí)為3.6 ns
    set_output_delay 3.6 -clock clk_main \
    [get_ports{pci_ad16},;
3.4.2 端口的驅(qū)動(dòng)與負(fù)載
    端口的驅(qū)動(dòng)和負(fù)載特性通過設(shè)置輸入驅(qū)動(dòng)單元、輸入輸出負(fù)載值以及信號(hào)躍遷時(shí)間等來描述。范例如下:
#設(shè)置端口a7的驅(qū)動(dòng)單元是BUFX2
    set_drive_cell -lib_cell BUFX2 -pin \
    [get_ports {a7}],;
#設(shè)置端口d17的負(fù)載值為20 pf
    set_load -pin_load 20 [get_ports {d17}],;
#設(shè)置端口d0的輸入信號(hào)上升時(shí)間是0.5 ns
    set_input_transition -rise -min  0.5 \
    [get_ports {d0}];
3.5 面積和功耗約束
    Design Compiler的綜合以時(shí)序優(yōu)先,,即優(yōu)化完約束后才根據(jù)約束優(yōu)化面積和功耗,。初次綜合時(shí)很難對(duì)面積進(jìn)行評(píng)估,所以在第一次綜合時(shí)設(shè)置優(yōu)化目標(biāo)為0,,表示在滿足時(shí)序約束的情況下最大努力地減小面積,。待綜合報(bào)告出來之后,根據(jù)初步的面積和功耗報(bào)告,,修改數(shù)值,,從而進(jìn)一步優(yōu)化。
#面積設(shè)置
    set_max_area 0,;
#功耗的約束做類似的處理:
    set_max_total_power  0,;
3.6 綜合結(jié)果
    根據(jù)上述綜合流程和約束設(shè)置,ZSU32系統(tǒng)芯片在邏輯綜合后滿足了時(shí)序約束,,同時(shí)為后續(xù)物理設(shè)計(jì)提供了較好的起點(diǎn),。圖5是ZSU32時(shí)序分析報(bào)告的一部分。

    從報(bào)告中看到,,該路徑起點(diǎn)是i_ZSU32_top/i_eth2_top/miim1/clkgen/U42/Y,,終點(diǎn)是i_ZSU32_top/i_eth2_top/miim1/shftrg/ShiftReg_reg_1_,路徑的時(shí)序裕量是2.96 ns,。
    ZSU32采用中芯國際0.18 um CMOS標(biāo)準(zhǔn)單元庫進(jìn)行了邏輯綜合和版圖設(shè)計(jì)實(shí)現(xiàn),,6層金屬布線,已成功流片,。電路綜合規(guī)模為200萬門,,所有cell的面積為19 195 460 um2,芯片總面積小于5 mm×5 mm,。
參考文獻(xiàn)
[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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。