芯片是什么?芯片的具體設(shè)計(jì)流程又是什么?本文探討的就是芯片在字面以外的意義,以及芯片是怎么被設(shè)計(jì)成的。
芯片
芯片,又稱微電路(microcircuit)、微芯片(microchip)、集成電路(英語(yǔ):integrated circuit, IC)。是指內(nèi)含集成電路的硅片,體積很小,常常是計(jì)算機(jī)或其他電子設(shè)備的一部分。
芯片,英文為Chip;芯片組為Chipset。芯片一般是指集成電路的載體,也是集成電路經(jīng)過(guò)設(shè)計(jì)、制造、封裝、測(cè)試后的結(jié)果,通常是一個(gè)可以立即使用的獨(dú)立的整體。“芯片”和“集成電路”這兩個(gè)詞經(jīng)?;熘褂茫热缭诖蠹移匠S懻?a href="http://hljzzgx.com/v/tag/" target="_blank">話題中,集成電路設(shè)計(jì)和芯片設(shè)計(jì)說(shuō)的是一個(gè)意思,芯片行業(yè)、集成電路行業(yè)、IC行業(yè)往往也是一個(gè)意思。實(shí)際上,這兩個(gè)詞有聯(lián)系,也有區(qū)別。集成電路實(shí)體往往要以芯片的形式存在,因?yàn)楠M義的集成電路,是強(qiáng)調(diào)電路本身,比如簡(jiǎn)單到只有五個(gè)元件連接在一起形成的相移振蕩器,當(dāng)它還在圖紙上呈現(xiàn)的時(shí)候,我們也可以叫它集成電路,當(dāng)我們要拿這個(gè)小集成電路來(lái)應(yīng)用的時(shí)候,那它必須以獨(dú)立的一塊實(shí)物,或者嵌入到更大的集成電路中,依托芯片來(lái)發(fā)揮他的作用;集成電路更著重電路的設(shè)計(jì)和布局布線,芯片更強(qiáng)調(diào)電路的集成、生產(chǎn)和封裝。而廣義的集成電路,當(dāng)涉及到行業(yè)(區(qū)別于其他行業(yè))時(shí),也可以包含芯片相關(guān)的各種含義。
芯片也有它獨(dú)特的地方,廣義上,只要是使用微細(xì)加工手段制造出來(lái)的半導(dǎo)體片子,都可以叫做芯片,里面并不一定有電路。比如半導(dǎo)體光源芯片;比如機(jī)械芯片,如MEMS陀螺儀;或者生物芯片如DNA芯片。在通訊與信息技術(shù)中,當(dāng)把范圍局限到硅集成電路時(shí),芯片和集成電路的交集就是在“硅晶片上的電路”上。芯片組,則是一系列相互關(guān)聯(lián)的芯片組合,它們相互依賴,組合在一起能發(fā)揮更大的作用,比如計(jì)算機(jī)里面的處理器和南北橋芯片組,手機(jī)里面的射頻、基帶和電源管理芯片組。
芯片設(shè)計(jì)流程
芯片設(shè)計(jì)分為前端設(shè)計(jì)和后端設(shè)計(jì),前端設(shè)計(jì)(也稱邏輯設(shè)計(jì))和后端設(shè)計(jì)(也稱物理設(shè)計(jì))并沒(méi)有統(tǒng)一嚴(yán)格的界限,涉及到與工藝有關(guān)的設(shè)計(jì)就是后端設(shè)計(jì)。
芯片的設(shè)計(jì)原理圖
芯片設(shè)計(jì)之前端設(shè)計(jì)
1. 規(guī)格制定
芯片規(guī)格,也就像功能列表一樣,是客戶向芯片設(shè)計(jì)公司(稱為Fabless,無(wú)晶圓設(shè)計(jì)公司)提出的設(shè)計(jì)要求,包括芯片需要達(dá)到的具體功能和性能方面的要求。
2. 詳細(xì)設(shè)計(jì)
Fabless根據(jù)客戶提出的規(guī)格要求,拿出設(shè)計(jì)解決方案和具體實(shí)現(xiàn)架構(gòu),劃分模塊功能。
3. HDL編碼
使用硬件描述語(yǔ)言(VHDL,Verilog HDL,業(yè)界公司一般都是使用后者)將模塊功能以代碼來(lái)描述實(shí)現(xiàn),也就是將實(shí)際的硬件電路功能通過(guò)HDL語(yǔ)言描述出來(lái),形成RTL(寄存器傳輸級(jí))代碼。
4. 仿真驗(yàn)證
仿真驗(yàn)證就是檢驗(yàn)編碼設(shè)計(jì)的正確性,檢驗(yàn)的標(biāo)準(zhǔn)就是第一步制定的規(guī)格??丛O(shè)計(jì)是否精確地滿足了規(guī)格中的所有要求。規(guī)格是設(shè)計(jì)正確與否的黃金標(biāo)準(zhǔn),一切違反,不符合規(guī)格要求的,就需要重新修改設(shè)計(jì)和編碼。 設(shè)計(jì)和仿真驗(yàn)證是反復(fù)迭代的過(guò)程,直到驗(yàn)證結(jié)果顯示完全符合規(guī)格標(biāo)準(zhǔn)。
仿真驗(yàn)證工具Synopsys的VCS,還有Cadence的NC-Verilog。
5. 邏輯綜合――Design Compiler
仿真驗(yàn)證通過(guò),進(jìn)行邏輯綜合。邏輯綜合的結(jié)果就是把設(shè)計(jì)實(shí)現(xiàn)的HDL代碼翻譯成門級(jí)網(wǎng)表netlist。綜合需要設(shè)定約束條件,就是你希望綜合出來(lái)的電路在面積,時(shí)序等目標(biāo)參數(shù)上達(dá)到的標(biāo)準(zhǔn)。邏輯綜合需要基于特定的綜合庫(kù),不同的庫(kù)中,門電路基本標(biāo)準(zhǔn)單元(standard cell)的面積,時(shí)序參數(shù)是不一樣的。所以,選用的綜合庫(kù)不一樣,綜合出來(lái)的電路在時(shí)序,面積上是有差異的。一般來(lái)說(shuō),綜合完成后需要再次做仿真驗(yàn)證(這個(gè)也稱為后仿真,之前的稱為前仿真)。
邏輯綜合工具Synopsys的Design Compiler。
6. STA
Static Timing Analysis(STA),靜態(tài)時(shí)序分析,這也屬于驗(yàn)證范疇,它主要是在時(shí)序上對(duì)電路進(jìn)行驗(yàn)證,檢查電路是否存在建立時(shí)間(setup time)和保持時(shí)間(hold time)的違例(violation)。這個(gè)是數(shù)字電路基礎(chǔ)知識(shí),一個(gè)寄存器出現(xiàn)這兩個(gè)時(shí)序違例時(shí),是沒(méi)有辦法正確采樣數(shù)據(jù)和輸出數(shù)據(jù)的,所以以寄存器為基礎(chǔ)的數(shù)字芯片功能肯定會(huì)出現(xiàn)問(wèn)題。
STA工具有Synopsys的Prime Time。
7. 形式驗(yàn)證
這也是驗(yàn)證范疇,它是從功能上(STA是時(shí)序上)對(duì)綜合后的網(wǎng)表進(jìn)行驗(yàn)證。常用的就是等價(jià)性檢查方法,以功能驗(yàn)證后的HDL設(shè)計(jì)為參考,對(duì)比綜合后的網(wǎng)表功能,他們是否在功能上存在等價(jià)性。這樣做是為了保證在邏輯綜合過(guò)程中沒(méi)有改變?cè)菻DL描述的電路功能。
形式驗(yàn)證工具有Synopsys的Formality。
前端設(shè)計(jì)的流程暫時(shí)寫到這里。從設(shè)計(jì)程度上來(lái)講,前端設(shè)計(jì)的結(jié)果就是得到了芯片的門級(jí)網(wǎng)表電路。
芯片設(shè)計(jì)之后端設(shè)計(jì)
1. DFT
Design For Test,可測(cè)性設(shè)計(jì)。芯片內(nèi)部往往都自帶測(cè)試電路,DFT的目的就是在設(shè)計(jì)的時(shí)候就考慮將來(lái)的測(cè)試。DFT的常見(jiàn)方法就是,在設(shè)計(jì)中插入掃描鏈,將非掃描單元(如寄存器)變?yōu)閽呙鑶卧?。關(guān)于DFT,有些書上有詳細(xì)介紹,對(duì)照?qǐng)D片就好理解一點(diǎn)。
DFT工具Synopsys的DFT Compiler
2. 布局規(guī)劃(FloorPlan)
布局規(guī)劃就是放置芯片的宏單元模塊,在總體上確定各種功能電路的擺放位置,如IP模塊,RAM,I/O引腳等等。布局規(guī)劃能直接影響芯片最終的面積。
工具為Synopsys的Astro
3. CTS
Clock Tree Synthesis,時(shí)鐘樹綜合,簡(jiǎn)單點(diǎn)說(shuō)就是時(shí)鐘的布線。由于時(shí)鐘信號(hào)在數(shù)字芯片的全局指揮作用,它的分布應(yīng)該是對(duì)稱式的連到各個(gè)寄存器單元,從而使時(shí)鐘從同一個(gè)時(shí)鐘源到達(dá)各個(gè)寄存器時(shí),時(shí)鐘延遲差異最小。這也是為什么時(shí)鐘信號(hào)需要單獨(dú)布線的原因。
CTS工具,Synopsys的Physical Compiler
4. 布線(Place & Route)
這里的布線就是普通信號(hào)布線了,包括各種標(biāo)準(zhǔn)單元(基本邏輯門電路)之間的走線。比如我們平常聽(tīng)到的0.13um工藝,或者說(shuō)90nm工藝,實(shí)際上就是這里金屬布線可以達(dá)到的最小寬度,從微觀上看就是MOS管的溝道長(zhǎng)度。
工具Synopsys的Astro
5. 寄生參數(shù)提取
由于導(dǎo)線本身存在的電阻,相鄰導(dǎo)線之間的互感,耦合電容在芯片內(nèi)部會(huì)產(chǎn)生信號(hào)噪聲,串?dāng)_和反射。這些效應(yīng)會(huì)產(chǎn)生信號(hào)完整性問(wèn)題,導(dǎo)致信號(hào)電壓波動(dòng)和變化,如果嚴(yán)重就會(huì)導(dǎo)致信號(hào)失真錯(cuò)誤。提取寄生參數(shù)進(jìn)行再次的分析驗(yàn)證,分析信號(hào)完整性問(wèn)題是非常重要的。
工具Synopsys的Star-RCXT
6. 版圖物理驗(yàn)證
對(duì)完成布線的物理版圖進(jìn)行功能和時(shí)序上的驗(yàn)證,驗(yàn)證項(xiàng)目很多,如LVS(Layout Vs Schematic)驗(yàn)證,簡(jiǎn)單說(shuō),就是版圖與邏輯綜合后的門級(jí)電路圖的對(duì)比驗(yàn)證;DRC(Design Rule Checking):設(shè)計(jì)規(guī)則檢查,檢查連線間距,連線寬度等是否滿足工藝要求, ERC(Electrical Rule Checking):電氣規(guī)則檢查,檢查短路和開(kāi)路等電氣 規(guī)則違例;等等。
工具為Synopsys的Hercules
實(shí)際的后端流程還包括電路功耗分析,以及隨著制造工藝不斷進(jìn)步產(chǎn)生的DFM(可制造性設(shè)計(jì))問(wèn)題,在此不說(shuō)了。
物理版圖驗(yàn)證完成也就是整個(gè)芯片設(shè)計(jì)階段完成,下面的就是芯片制造了。物理版圖以GDS II的文件格式交給芯片代工廠(稱為Foundry)在晶圓硅片上做出實(shí)際的電路,再進(jìn)行封裝和測(cè)試,就得到了我們實(shí)際看見(jiàn)的芯片。
芯片設(shè)計(jì)之工藝文件
在芯片的設(shè)計(jì)重要設(shè)計(jì)環(huán)節(jié),像綜合與時(shí)序分析,版圖繪制等都需要用到工藝庫(kù)文件,而大家往往又對(duì)工藝文件缺乏認(rèn)識(shí),所以導(dǎo)致想自學(xué)一些芯片設(shè)計(jì)的東西就顯得很困難。例如,沒(méi)有工藝版圖庫(kù)文件,學(xué)習(xí)版圖設(shè)計(jì)就是紙上談兵。這篇文章主要介紹一下工藝庫(kù)相關(guān)的知識(shí)。
工藝文件由芯片制造廠提供,所以概括性的了解國(guó)內(nèi)和國(guó)際上有哪些芯片制造廠是很有必要的。國(guó)際上,主要有臺(tái)積電,英特爾,三星等主要半導(dǎo)體制造商。國(guó)內(nèi),主要有中芯國(guó)際,華潤(rùn)上華,深圳方正等公司。這些公司都提供相關(guān)的工藝庫(kù)文件,但前提是要與這些公司進(jìn)行合作才能獲取,這些工藝文件都屬于機(jī)密性文件。
完整工藝庫(kù)文件主要組成為:
1,模擬仿真工藝庫(kù),主要以支持spectre和hspice這兩個(gè)軟件為主,后綴名為scs——spectre使用,lib——hspice使用。
2,模擬版圖庫(kù)文件,主要是給cadence版圖繪制軟件用,后綴名為tf,drf。
3,數(shù)字綜合庫(kù),主要包含時(shí)序庫(kù),基礎(chǔ)網(wǎng)表組件等相關(guān)綜合及時(shí)序分析所需要用到的庫(kù)文件。主要是用于DC軟件綜合,PT軟件時(shí)序分析用。
4,數(shù)字版圖庫(kù),主要是給cadence encounter軟件用于自動(dòng)布局布線,當(dāng)然自動(dòng)布局布線工具也會(huì)用到時(shí)序庫(kù),綜合約束文件等。
5,版圖驗(yàn)證庫(kù),主要有DRC,LVS檢查。有的是專門支持calibre,有的專門支持dracula,diva等版圖檢查工具用。每一種庫(kù)文件都有相應(yīng)的pdf說(shuō)明文檔。
反向設(shè)計(jì)會(huì)用到1,2,5等工藝庫(kù)文件,3和4是不會(huì)用到了。正向設(shè)計(jì)(從代碼開(kāi)始設(shè)計(jì)的正向設(shè)計(jì))則所有的文件都需要用到。由于工藝文件在芯片設(shè)計(jì)中占有極重要的位置,在每一個(gè)關(guān)鍵設(shè)計(jì)環(huán)節(jié)都要用到,再加上它的機(jī)密屬性,所以網(wǎng)絡(luò)上很難找到完整的工藝文件對(duì)于個(gè)人學(xué)習(xí)用,EETOP上有一份cadence公開(kāi)的用于個(gè)人學(xué)習(xí)的工藝庫(kù)文件可以方便大家學(xué)習(xí),但似乎也是不完整的。
芯片設(shè)計(jì)之綜合
什么是綜合?綜合就是將RTL級(jí)verilog代碼用Design Compiler 工具 轉(zhuǎn)換/映射成用基礎(chǔ)門級(jí)單元表示的電路的過(guò)程?;A(chǔ)門級(jí)單元也就是平時(shí)我們學(xué)的與非門,或非門,寄存器之類的,只不過(guò),這些門級(jí)單元已經(jīng)做成了標(biāo)準(zhǔn)的單元庫(kù),我們可以直接使用軟件來(lái)調(diào)用,而不需要自己調(diào)用門級(jí)單元來(lái)搭建電路。簡(jiǎn)單的來(lái)說(shuō),Design Compiler軟件就是做翻譯的工作——將代碼翻譯成實(shí)際電路,但又不僅僅是翻譯這么簡(jiǎn)單,它涉及到電路的優(yōu)化與時(shí)序約束,使之符合我們做制定的性能要求。 前文提到該軟件是約束驅(qū)動(dòng)型軟件,那么約束從何而來(lái)?答案是,設(shè)計(jì)規(guī)格書。每一個(gè)芯片設(shè)計(jì)項(xiàng)目都會(huì)有一個(gè)項(xiàng)目規(guī)格說(shuō)明書,這是在芯片設(shè)計(jì)之初,整體規(guī)劃(見(jiàn)前文)的步驟中要制定好的。具體詳細(xì)的約束要求需要在綜合過(guò)程中仔細(xì)的斟酌決定。 綜合的一般流程:
1,預(yù)綜合過(guò)程;
2,施加設(shè)計(jì)約束過(guò)程;
3,設(shè)計(jì)綜合過(guò)程;
4,后綜合過(guò)程。
PS,使用Design Compiler軟件一個(gè)必備的條件是要學(xué)會(huì)使用DC TCL腳本。
預(yù)綜合過(guò)程。這部分主要是準(zhǔn)備好綜合過(guò)程所使用的庫(kù)文件(包括工藝庫(kù)、鏈接庫(kù)、符號(hào)庫(kù)、綜合庫(kù))、設(shè)計(jì)輸入文件,設(shè)置好環(huán)境參數(shù)。
施加設(shè)計(jì)約束過(guò)程。這部分主要是用DC TCL腳本編寫約束文件。具體的約束項(xiàng)目可以分為三大類:
a,面積約束,定義時(shí)鐘,約束輸入/輸出路徑;
b(環(huán)境屬性),約束輸入驅(qū)動(dòng),約束輸出負(fù)載,設(shè)置工作條件(最好、典型、最差情況),設(shè)置連線負(fù)載模型;
c(高級(jí)時(shí)鐘約束),對(duì)時(shí)鐘的抖動(dòng)、偏移、時(shí)鐘源延遲,同步多時(shí)鐘,異步時(shí)鐘,多周期路徑,這幾類進(jìn)行細(xì)致的約束。
約束的內(nèi)容具體就是這么多。一個(gè)詳細(xì)的TCL腳本約束文件基本包含上述所有的約束。后面有一個(gè)約束范文。
設(shè)計(jì)綜合過(guò)程。主要是介紹電路模塊設(shè)計(jì)規(guī)劃(以利于更好的進(jìn)行約束),Design Compiler綜合優(yōu)化的過(guò)程(三大優(yōu)化階段,結(jié)構(gòu)級(jí),邏輯級(jí),門級(jí)),時(shí)序分析的具體過(guò)程等綜合過(guò)程中的一些詳細(xì)信息。
后綜合過(guò)程。綜合完畢該怎么看結(jié)果,時(shí)序違反該如何解決?這就是后綜合過(guò)程所要解決的問(wèn)題。在綜合之后,通過(guò)分析綜合報(bào)告,可以得知此次的電路綜合結(jié)果如何,根據(jù)不符合的要求,進(jìn)行重新約束,甚至重新設(shè)計(jì)電路。在這個(gè)階段特別值得一提的是綜合預(yù)估,因?yàn)樵趯懢C合約束腳本的時(shí)候,需要確定約束條件,規(guī)格書一般不能夠涉及到如此細(xì)節(jié)的部分,所以需要根據(jù)實(shí)際電路進(jìn)行綜合預(yù)估,這個(gè)步驟是在代碼編寫完之后,與驗(yàn)證同時(shí)進(jìn)行的,目的在于大致估計(jì)電路是否符合要求,此時(shí)的預(yù)綜合過(guò)程與正式的綜合過(guò)成是一樣的,但,要求會(huì)寬松許多,時(shí)序違反的要求大概為10%-15%,也就是說(shuō)電路即使有10%-15%的電路不滿足時(shí)序也沒(méi)有關(guān)系。
綜合約束過(guò)程是一個(gè)反復(fù)迭代的過(guò)程,需要多次設(shè)計(jì)預(yù)估,這樣才能不斷修正時(shí)序違反。范文:
# Set the current_design #
read_verilog {counter_pad.v counter.v} //讀取設(shè)計(jì)文件
current_design Cnt10_PAD
link
set_operating_conditions -max slow -max_library slow -min fast -min_library fast //設(shè)置工作條件
set_wire_load_mode enclosed //設(shè)置連線負(fù)載模型
set_wire_load_model -name tsmc18_wl10 -library slow //設(shè)置連線負(fù)載模型
set_local_link_library {slow.db fast.db}//設(shè)置鏈接庫(kù)
set_max_area 0 //設(shè)置面積
set_max_fanout 5 [get_ports reset_n]//設(shè)置最大扇出
set_max_fanout 4 [get_ports clk] //設(shè)置最大扇出
set_max_fanout 4 [get_ports in_ena]//設(shè)置最大扇出
set_max_transition 0.3 [get_ports reset_n]//設(shè)置信號(hào)翻轉(zhuǎn)時(shí)間
set_max_transition 0.3 [get_ports clk]//設(shè)置信號(hào)翻轉(zhuǎn)時(shí)間
set_max_transition 0.5 [get_ports in_ena]//設(shè)置信號(hào)翻轉(zhuǎn)時(shí)間
create_clock [get_ports clk]-period 10 -waveform. {0 5}//創(chuàng)建時(shí)鐘
set_clock_latency 1[get_clocks clk]//設(shè)置時(shí)鐘源延時(shí)
set_clock_latency -source 1[get_clocks clk]
set_clock_uncertainty -setup 0.5[get_clocks clk]//設(shè)置時(shí)鐘不確定度
set_clock_uncertainty -hold 0.4[get_clocks clk]
set_dont_touch_network [get_clocks clk]//設(shè)置偽路徑,不要約束
set_clock_transition -fall 0.3 [get_clocks clk]////設(shè)置下降沿信號(hào)翻轉(zhuǎn)時(shí)間
set_clock_transition -rise 0.3 [get_clocks clk]///設(shè)置上升沿沿信號(hào)翻轉(zhuǎn)時(shí)間
set_input_delay -clock clk-max 3[get_ports in_ena]//設(shè)置輸入延時(shí)
set_output_delay -clock clk -max 4 [get_ports cnt]//設(shè)置輸出延時(shí)
set_output_delay -clock clk -min 0.5 [get_ports cnt]
set_output_delay -clock clk-max 4[get_ports carry_ena]
set_output_delay -clock clk-min 0.5[get_ports carry_ena]
compile//編譯
report_timing -delay max > ./reports/pad_setup_rt.rpt//報(bào)告最大時(shí)序延時(shí)
report_timing -delay min > ./reports/pad_hold_rt.rpt//報(bào)告最小時(shí)序延時(shí)
report_constraint -verbose > ./reports/pad_rc.rpt
report_qor > ./reports/pad_rq.rpt
remove_unconnected_ports -blast_buses [get_cells -hierarchical *]
set bus_inference_style. {%s[%d]}
set bus_naming_style. {%s[%d]}
set hdlout_internal_busses true
change_names -hierarchy -rule verilog
define_name_rules name_rule -allowed {a-z A-Z 0-9 _} -max_length 255 -type cell
define_name_rules name_rule -allowed {a-z A-Z 0-9 _[]} -max_length 255 -type net
define_name_rules name_rule -map {{"\\*cell\\*" "cell"}}
define_name_rules name_rule -case_insensitive
change_names -hierarchy -rules name_rule
write -format verilog -hier -o ./outputs/pad_counter.sv
write -format ddc -hier -o ./outputs/pad_counter.ddc
write_sdc ./outputs/pad_counter.sdc
write_sdf ./outputs/pad_counter.sdf
總結(jié)
芯片設(shè)計(jì)的過(guò)程中是十分復(fù)雜,本文也是簡(jiǎn)單的將芯片設(shè)計(jì)流程梳理一遍,復(fù)雜的就不再贅述了。
-
芯片
+關(guān)注
關(guān)注
455文章
50714瀏覽量
423136 -
原理圖
+關(guān)注
關(guān)注
1297文章
6338瀏覽量
233797
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論