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