本文介紹了一種SoC芯片架構,及其在0.18um CMOS工藝上以talus為主導EDA工具的物理實現。該芯片包含41個時鐘域,4種低功耗工作模式,2個相互隔離的1.8v內部電源域,約有65萬個標準單元,94個宏模塊,250個pad,合計約900萬個邏輯等效門,3600萬個晶體管,芯片面積10.5mmx10.5mm。 關鍵字索引: 約束設計、布局規劃、時鐘樹設計 第一章 芯片結構及物理實現流程介紹 該芯片主要由32位處理器、靜態隨機存儲器、以太網MAC接口、SPI接口、USB1.1 Device接口、USART同異步通信接口、SCI智能卡接口、片外存儲器控制器等模塊組成。該芯片具備高處理能力、低功耗等特點。其結構框圖如圖1所示: 圖1 SoC芯片的結構框圖 我們采用以Magma工具為主,Mentor、Cadence、Synopsys工具為輔的工具套件來完成RTL2GDSII的整個后端流程,如圖2所示: 圖2 SoC后端實現流程 邏輯實現階段:用Magma Blast Rtl 來進行邏輯綜合,綜合完成后利用Mentor DFT進行掃描鏈的插入。 某算法模塊在進行物理綜合時,無論采取何種措施(包括優化宏模塊位置,添加blockage,加大庫單元的outline尺寸等),std cell 部分的Congestion都很嚴重,如圖3所示。而采用Magma Blast Rtl進行邏輯綜合,再采用Magma Talus Vortex來進行物理綜合時,std cell部分的congestion可以消除。 圖3 某算法模塊congestion圖 物理實現階段:用Magma Talus Vortex來進行布局規劃和電源網絡規劃、物理綜合、時鐘樹插入及布線工作。 在整個實現過程中,我們采用Magma工具內嵌的靜態時序分析引擎和RC參數提取引擎來進行MMMC(Multi-Mode Multi-Corner,多模式多功能角)時序分析,參數提取,信號完整性的分析、避免和修復工作;使用Quartz Rail工具來進行功耗分析,以及包括電子遷移和電壓降在內的電源完整性分析。 第二章 時序約束設計 本SoC芯片時序約束設計的關鍵在于功耗管理控制模塊的時序約束。 2.1 功耗管理控制(Power Management Controller, PMC)模塊簡介 整個設計中首先考慮的是PMC模塊的約束。PMC模塊是系統用來控制系統功耗的的控制器,可以通過寄存器配置,使SoC芯片在不同工作模式之間進行切換:Slow、Normal、Idle 和Sleep。這些工作模式可以讓用戶根據芯片不同的應用,通過動態地管理芯片內部各子模塊的時鐘源供給和系統的工作頻率來控制芯片的整體功耗。另外,PMC 還包含了各個子模塊的初粒度的時鐘門控電路,通過寄存器配置可以集中控制、關閉不必要打開的模塊,從而達到降低功耗的目的。模塊具有以下性能指標: ?內置鎖相環、可動態變頻; ? 支持Slow、Normal、Idle、Sleep等4種工作模式; ? 支持模塊工作時鐘集中控制策略,芯片各模塊的時鐘可以通過PMC來關閉和打開; ? 低功耗sleep模式下支持DRAM/SDRAM 的數據自刷新,使得DRAM 中的數據可以得到保持; ? 內部具有完整的reset 解決方案,提供3 種reset 選擇:hard reset、soft reset、watchdog reset; ? 內部具有完整的喚醒功能。 PMC模塊包含了異步時鐘動態選擇電路、同步時鐘動態選擇電路、時鐘分頻電路、時鐘門控電路、跨時鐘域電路,既存在輸入時鐘,又存在輸出時鐘,是一個與時鐘高度相關、時序違例集中、時序分析較為復雜的電路。PMC模塊的時鐘生成電路結構示意圖如圖4所示: 圖4 時鐘生成圖 系統時鐘經過可配置參數的系統PLL和動態選擇邏輯后分頻(有1:1、1:2、1:3、1:4四種)。選擇默認的2分頻為CPU 提供時鐘,動態選擇默認的3分頻為高速總線提供時鐘,高速總線時鐘通過分頻后(有1:1、1:2、1:4、1:8四種),動態選擇默認的2分頻為低速總線提供時鐘。 2.2 時序約束的一些策略 一個完整的時序約束文件包含時鐘的創建、時鐘的約束、輸入輸出端口的約束及時序違例等。SDC格式的約束可以采用豐富的語法表達出上述內容。而Magma后端工具可以比較容易地識別出該格式的約束。我們采用SDC v1.7格式編寫時序約束,這樣既能為后端實現工具blast、talus識別,又能被靜態時序分析工具PrimeTime識別。 首先根據設計規格要求確定時鐘周期,在整個后端設計過程中的不同階段加以調整和修改。為保守計,我們采取冗余設計,最終設定的周期值比規格要求的值嚴格。Clock latency和clock skew的設置也要根據實際的時鐘樹結構不斷地進行調整和修改。最終合理的時序約束文件是經過反復地實驗不斷地修正而得到的。 復雜的時鐘,復雜的功能模式,必然帶來復雜的時序約束。對其正確、完備的約束施加,是保證后端設計時序分析和優化有效的關鍵所在。 而PMC模塊的主要電路,如時鐘門控電路、分頻電路,動態選擇電路等,采用例化的標準單元以網表的形式直接給出,在用Magma Blast Rtl進行邏輯綜合前,將這些以網表形式存在的單元使用force keep命令,保證時序約束施加點的固定。 在Fix Time前設置時序約束時,采用的方法是3分頻PLL后的源時鐘作為高速總線上的時鐘,低速總線時鐘與高速總線時鐘頻率一致,這樣在邏輯綜合階段時因為還沒有真正的時鐘樹,而設置的約束又比較保守,使綜合結果的時序有較大的冗余,又加快了綜合的速度。 在時鐘樹優化時,采用MMMC來進行。我們僅以功耗模式中Normal模式里的兩種在應用時較常用的時鐘使用模式來設置MMMC:一種是3分頻PLL后的源時鐘作為高速總線上的時鐘,低速總線時鐘是高速總線時鐘的2分頻;另外一種模式是使用 1分頻PLL后的源時鐘作為高速總線時鐘,低速總線時鐘與高速總線時鐘頻率及PLL后的源時鐘頻率一致,此時低速總線時鐘頻率高于前一種模式下的時鐘頻率,達到低速總線上模塊能達到的最高頻率。其他模式僅用來分析及優化。這樣可以有效加速時鐘樹創建的時間及分析效率。 在約束設計過程中,不可避免的會涉及到各種模式下時鐘間異步關系的設置,我們采用SDC v1.7里面的set_clock_group命令來進行,該命令能有效的表征各個時鐘之間的異步關系,避免了set_false_path繁瑣的設置,并且能夠被Magma Talus軟件轉換為force timing clockgroups命令。下面是該設計中的兩個clock group設置的例子: set_clock_group -name func_async_ck1 -logically_exclusive \ -group [get_clocks "fck2_n"] \ -group [get_clocks "hck3_n hck2anu3_n"] \ -group [get_clocks "hck2anu4_n"] set_clock_group -name func_async_ck2 -asynchronous \ -group [get_clocks "usb_dev_ck"] \ -group [get_clocks "usb_pll_ck" 另外分頻時鐘與源時鐘關系的設置上,我們根據仿真波形來確定分頻時鐘與源時鐘之間的相位關系,從而為create_generated_clock命令在-divide_by,-edges,-invert,-combinational間選擇不同的選項,使分頻時鐘和源時鐘之間的source latency關系很容易就能確定下來,簡化了時序分析。 下面是該設計中幾個分頻時鐘約束的例子: create_generated_clock -name usb_dev_ck \ -divide_by 4 -invert \ -source [get_pins "…/OR2CLK_Inst/Z"] \ -master_clock [get_clocks "pllout48m"] -add \ [get_pins "…/clk_1x_reg/Q"] create_generated_clock -name rngck8\ -edges "7 15 23" \ -source [get_pins "…/OR4CLK_Inst/Z"] \ -master_clock [get_clocks "pck_n"] -add \ [get_pins "…/CLK_CNT_reg/Q"] create_generated_clock -name pck8_n \ -edges "3 11 19" \ -source [get_pins "…/OR4CLK_Inst/Z"] \ -master_clock [get_clocks "hck3_n"] -add \ [get_pins "…/PCLK_DIV8_reg/Q"] create_generated_clock -name hck_out \ -combinational \ -source [get_pins "…/OR2CLK_Inst/Z"] \ -master_clock [get_clocks "hck3_n"] -add \ [get_ports "hclk"] 2.3非時序邏輯時序弧(data-to-data timing arc)的處理 SoC中使用到的EE模塊是一個異步IP,時序模型存在非時序邏輯的時序弧(non-sequential library arc,也即data-to-data timing arc):輸入的數據或控制信號與輸入pin——CEN、WEN之間有data-to-data 的時序弧存在、其中的控制信號CHER、CHWR、ER_ONLY、WR_ONLY與輸出pin——READY之間也存在著data-to-data 的時序弧。綜合工具并不區分時序邏輯與非時序邏輯的時序弧,只要設計中有時序弧的單元存在,綜合工具就認為應該在相應pin腳設置時鐘,因此在綜合的過程中會認為在CEN、WEN、READY這幾個信號pin應設置時鐘。如果不設置,在綜合過程中,綜合工具的時序分析引擎是報不出任何經過或到CEN、WEN、READY的路徑。而一旦設置為時鐘,就會產生很多false path。我們最后的做法是不在邏輯綜合階段將其設為時鐘,而是將該問題留到時鐘樹優化時,使用config timing check data_to_data on 將data-to-data check選項打開,并使用force timing check命令約束相應的時序關系。 第三章 布局規劃 該設計采用flatten的方式進行布局規劃,使用2P/6M EE工藝,包含Hard Macros 94個,共占面積50.3mm2。其中有13種81個由memory compiler生成的memory、7個定制模擬/數模混合模塊、2個PLL以及其它IP模塊。為兩個同為1.8v相互隔離的電壓域創建兩個floorplan,并使用polygon相關的命令為primary flloorplan創建多邊形形狀。另外,以data create cluster region命令將PMC模塊中除PLL部分外的其他邏輯以region的形式固定到布局的中央位置。 在IO布局上,除了由memory compiler生成的memory IP不需單獨供電,其余宏模塊均需單獨供電,其中為RTC供電定制的電源切換模塊所需的電源PAD的隔離還更加復雜。 由于需要單獨供電的模擬/數模混合模塊較多,電源域較多,在布局規劃階段就確定了各模擬/數模混合模塊在芯片中的大致位置及其供電pad在pad環上的順序。 7個定制的模擬/數模混合模塊及2個PLL均位于pad環和電源環之間;位于內部的存儲器模塊和CPU core由于數量眾多,其位置的擺放首先考慮的是固定幾個尺寸較大的IP模塊的位置,并使用force plan clearance添加blockage;然后使用Magma Talus Vortex中的run place cluster命令來自動擺放余下較小存儲器,確定初步的布局規劃,而后微調各存儲器的相對位置,做到規則規整,控制各個存儲器模塊之間的布線通道的布局利用率,在較窄的地方不允許任何標準單元擺放,在一些較寬的布線通道我們設置了50%-100%不等的blockage利用率。最后的布局規劃如圖5所示: 圖5 布局規劃 第四章 時鐘樹設計 時鐘樹設計的內容包括時鐘樹約束的設置、MMMC、OCV(On Chip Variation)及 CPPR (Clock Path Pessimism Removal,或稱 Clock Reconvergence Pessimism Removal)的考慮等。 本芯片時鐘樹設計的難點在于基于latch的時鐘門控單元、時鐘分頻電路以及動態選擇電路帶來的時鐘樹平衡問題而導致的時鐘樹約束的復雜性。 4.1 分離時鐘門控單元的時鐘樹約束 由于PMC模塊中存在大量的由latch和and標準單元構成的非集成的時鐘門控單元, latch的D端具有endpoint屬性,如果不做特殊處理,在時鐘樹生成時會與其它具有endpoint屬性的觸發器、鎖存器一起進行平衡。這不是我們想要的結果,我們想要的平衡是把latch和and一起構成的時鐘門控單元看成一個組合門電路,僅需要其后的觸發器和其它沒有受時鐘門控控制的觸發器一起進行平衡,而將latch排除在外。如圖6所示: 圖6 分離門控時鐘電路的skew group 為了達到上述目的,我們將分離分控時鐘的latch和and置于一個skew group之內,并將and門的時鐘輸入端設置為skew anchor。以下面的SoC芯片中的一個分離門控時鐘電路為例,約束如下: force plan clock $m -pin ".../PmcHCLKGate_Inst/i_latch/GN \ .../PmcHCLKGate_Inst/i_and/A" -skew_group 49 force plan clock $m -pin .../PmcHCLKGate_Inst/i_and/A -skew_anchor 4.2 分頻電路時鐘樹約束 SoC芯片的PMC模塊中分頻時鐘之間,以及分頻時鐘和源時鐘之間,存在非例外的時鐘路徑,因此,我們將分頻電路時鐘域和未分頻電路時鐘域內的觸發器置于一個skew group之內。分頻電路本身由于是孤立的邏輯,與其它功能邏輯電路的觸發器之間在邏輯上不存在有效數據路徑,因此可以單獨做成一個skew group。但由于它處于分頻時鐘域路徑上,為使置于同一skew group之內的分頻時鐘域和源時鐘域內的觸發器之間的skew在規定的范圍內,必須控制分頻電路的時鐘路徑,如圖7所示: 圖7 分頻電路的skew group 我們以某三分頻電路為例,下面的命令是對其時鐘樹創建時的相關約束: force plan clock $m -pin "…/PmcFHClkDiv3/QQ_reg[0]/CK \ …/PmcFHClkDiv3/QQ_reg/CK" -skew_group 54 force plan clock $m -pin "…/PmcFHClkDiv3/QQ_reg/CK" -skew_anchor force plan clock $m -pin "…/PmcFHClkDiv3/DQ_reg/CKN \ …/PmcFHClkDiv3/OR2CLK_Inst/A" -skew_group 55 force plan clock $m -pin …/PmcFHClkDiv3/OR2CLK_Inst/A -skew_anchor 4.3 動態時鐘選擇電路的時鐘樹約束 另外,PMC模塊中使用動態時鐘選擇電路用來消除異步時鐘間及同步時鐘間動態切換過程中的毛刺,其中動態異步時鐘選擇電路結構如圖8所示: 圖8 動態異步時鐘選擇電路結構圖 同樣,我們針對該電路也做了如下約束: force plan clock $m -pin "…/PmcSysClkSel_Inst/AND_Inst1/B \ …/PmcSysClkSel_Inst/Q1_reg/CK \ …/PmcSysClkSel_Inst/Q3_reg/CK" -skew_group 1 force plan clock $m -pin "…/PmcSysClkSel_Inst/AND_Inst2/B \ …/PmcSysClkSel_Inst/Q2_reg/CK \ …/PmcSysClkSel_Inst/Q4_reg/CK" -skew_group 2 第五章 總結 在本文中,我們介紹了一種SoC芯片架構,探討了在0.18um CMOS工藝上以Magma Talus為主導EDA工具的物理實現中的3個難點問題:時序約束設計、布局規劃以及時鐘樹約束設計。鑒于篇幅限制,其它在本SoC物理實現過程中涉及到的諸如信號完整性問題分析與避免、電源完整性分析與避免、與signoff工具間參數相關性的設置、ECO、模擬及數模混合模塊建模及其在Magma Talus數字流程中的運用等方面在本文中未能涉及。 該SoC芯片包含41個時鐘域,4種低功耗工作模式,2個相互隔離的1.8v內部電源域,約有65萬個標準單元,94個宏模塊,250個pad,合計約900萬個邏輯等效門,3600萬個晶體管,芯片面積10.5mmx10.5mm。 該芯片既有多個復雜的數字算法電路,也有多個定制的模擬/數模混合模塊,宏模塊眾多,布局規劃和電源規劃較為復雜;在前仿真驗證過程中方面,功能bug,性能不達標等問題,使RTL遲遲不能凍結,給后端留下的時間不多。我們借助Magma公司Talus軟件在后端實現方面的強大能力,集中時間攻關,解決了復雜時序約束、大規模宏模塊情況下布線擁塞的技術、多電壓域下的電源規劃技術以及復雜時鐘樹設計等難題,節省了大量的后端運行時間和手工工作,同時也實現了較好的時序、面積結果。 目前該芯片已成功流片,實測的性能及功耗指標均達到預期效果,高速總線時鐘頻率可達110M,normal功耗模式下算法模塊全速工作時功耗小于380mW,sleep功耗模式下功耗11mW左右。 感謝Magma公司在物理實現方面持續的努力和進步,使得用戶能夠在設計中體會到革新所帶來的便捷與快樂。在此,希望Magma今后能夠不斷革新,給用戶帶來更多的方便,分享更多的成功。 |