ASIC的設(shè)計(jì)和制造

大家好,我是良許。

在嵌入式系統(tǒng)開發(fā)中,我們經(jīng)常會接觸到各種各樣的芯片,比如STM32單片機(jī)、FPGA、DSP等等。

但你有沒有想過,這些芯片是怎么設(shè)計(jì)出來的?

今天我就來聊聊ASIC(Application Specific Integrated Circuit,專用集成電路)的設(shè)計(jì)和制造過程。

作為一名嵌入式程序員,雖然我們?nèi)粘9ぷ髦饕窃谝延械男酒献鲕浖_發(fā),但了解芯片的誕生過程,對我們理解硬件特性、優(yōu)化代碼性能都有很大幫助。

1. 什么是ASIC

ASIC是為特定應(yīng)用而設(shè)計(jì)的集成電路,與通用處理器不同,它針對特定功能進(jìn)行優(yōu)化。

比如比特幣礦機(jī)里的挖礦芯片、手機(jī)里的基帶芯片、汽車電子中的CAN總線控制器等,都屬于ASIC的范疇。

我在汽車電子領(lǐng)域工作的時(shí)候,就接觸過不少ASIC芯片。

比如某些車載網(wǎng)關(guān)使用的專用通信芯片,它集成了CAN、LIN、FlexRay等多種車載總線接口,這種芯片就是典型的ASIC。

相比用通用MCU外掛各種接口芯片的方案,ASIC方案在功耗、體積、成本上都有明顯優(yōu)勢。

ASIC與FPGA的主要區(qū)別在于:FPGA是可編程的,設(shè)計(jì)完成后還可以修改邏輯;而ASIC一旦流片(制造出來),硬件邏輯就固定了,無法修改。

但ASIC在性能、功耗、成本(大批量生產(chǎn)時(shí))方面都優(yōu)于FPGA。

2. ASIC設(shè)計(jì)流程

2.1 需求分析與規(guī)格定義

ASIC設(shè)計(jì)的第一步是明確需求。

這個(gè)階段需要回答幾個(gè)關(guān)鍵問題:這個(gè)芯片要實(shí)現(xiàn)什么功能?性能指標(biāo)是什么?功耗要求多少?工作環(huán)境如何?

舉個(gè)例子,假設(shè)我們要設(shè)計(jì)一個(gè)用于智能家居的低功耗無線通信芯片。

需求可能包括:支持2.4GHz頻段、傳輸速率1Mbps、待機(jī)功耗小于10μA、工作溫度范圍-40℃到85℃等。

這些指標(biāo)會直接影響后續(xù)的設(shè)計(jì)決策。

2.2 架構(gòu)設(shè)計(jì)

確定需求后,就要進(jìn)行架構(gòu)設(shè)計(jì)。

這個(gè)階段要決定芯片的整體結(jié)構(gòu),包括需要哪些功能模塊、各模塊如何連接、數(shù)據(jù)流向如何等。

以一個(gè)簡單的UART通信ASIC為例,架構(gòu)可能包括:波特率發(fā)生器、發(fā)送移位寄存器、接收移位寄存器、FIFO緩沖區(qū)、中斷控制器等模塊。

架構(gòu)設(shè)計(jì)通常會畫出框圖,明確各模塊的接口和交互關(guān)系。

2.3 RTL設(shè)計(jì)

RTL(Register Transfer Level,寄存器傳輸級)設(shè)計(jì)是用硬件描述語言(HDL)來實(shí)現(xiàn)芯片的邏輯功能。

主流的HDL語言有Verilog和VHDL。

這里給一個(gè)簡單的Verilog代碼示例,實(shí)現(xiàn)一個(gè)8位計(jì)數(shù)器:

module counter_8bit (
    input wire clk,
    input wire rst_n,
    input wire enable,
    output reg [7:0] count
);

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        count <= 8'h00;
    end else if (enable) begin
        count <= count + 1'b1;
    end
end

endmodule

在實(shí)際ASIC設(shè)計(jì)中,RTL代碼會復(fù)雜得多,可能包含成千上萬行代碼。

設(shè)計(jì)師需要考慮時(shí)序、面積、功耗等多方面因素。

2.4 功能驗(yàn)證

寫完RTL代碼后,必須進(jìn)行充分的功能驗(yàn)證。

這個(gè)階段要編寫測試用例(testbench),用仿真工具(如ModelSim、VCS等)來驗(yàn)證設(shè)計(jì)的正確性。

驗(yàn)證是ASIC設(shè)計(jì)中最耗時(shí)的環(huán)節(jié),通常占整個(gè)設(shè)計(jì)周期的60%~70%。

因?yàn)锳SIC一旦流片,硬件邏輯就無法修改,如果有bug,代價(jià)是非常高昂的。

我聽說過有些公司因?yàn)轵?yàn)證不充分,流片后發(fā)現(xiàn)重大bug,損失上千萬甚至上億元。

2.5 邏輯綜合

邏輯綜合是將RTL代碼轉(zhuǎn)換為門級網(wǎng)表的過程。

綜合工具(如Design Compiler)會根據(jù)目標(biāo)工藝庫,把RTL代碼映射到具體的邏輯門(與門、或門、非門等)和觸發(fā)器上。

綜合過程中需要設(shè)置約束條件,比如時(shí)鐘頻率、輸入輸出延遲等。

綜合工具會盡量優(yōu)化設(shè)計(jì),在滿足時(shí)序要求的前提下,減小面積和功耗。

2.6 靜態(tài)時(shí)序分析

綜合完成后,需要進(jìn)行靜態(tài)時(shí)序分析(STA,Static Timing Analysis)。

STA工具會檢查設(shè)計(jì)中所有路徑的時(shí)序,確保在最壞情況下也能滿足時(shí)序要求。

時(shí)序問題是ASIC設(shè)計(jì)中的常見問題。

比如建立時(shí)間違例(setup violation)意味著數(shù)據(jù)在時(shí)鐘沿到來前沒有穩(wěn)定足夠長的時(shí)間;保持時(shí)間違例(hold violation)意味著數(shù)據(jù)在時(shí)鐘沿后變化太快。

這些問題都需要通過修改RTL代碼或調(diào)整綜合約束來解決。

2.7 物理設(shè)計(jì)

物理設(shè)計(jì)包括布局規(guī)劃(floorplan)、布局(placement)、時(shí)鐘樹綜合(CTS)、布線(routing)等步驟。

這個(gè)階段要把邏輯門和連線真正放置到芯片上,確定每個(gè)單元的物理位置和連線路徑。

物理設(shè)計(jì)需要考慮很多實(shí)際因素,比如:信號完整性、電源完整性、串?dāng)_、電遷移等。

這些因素在RTL設(shè)計(jì)階段是看不到的,但在實(shí)際芯片中會真實(shí)存在。

2.8 物理驗(yàn)證

物理設(shè)計(jì)完成后,需要進(jìn)行物理驗(yàn)證,主要包括:

  • DRC(Design Rule Check,設(shè)計(jì)規(guī)則檢查):檢查版圖是否符合工藝要求,比如最小線寬、最小間距等。
  • LVS(Layout Versus Schematic,版圖與原理圖對比):檢查版圖是否與原理圖一致。
  • ERC(Electrical Rule Check,電氣規(guī)則檢查):檢查電氣連接是否正確。

只有通過所有物理驗(yàn)證,才能生成最終的版圖文件(GDSII格式),交給晶圓廠制造。

3. ASIC制造流程

3.1 晶圓制造

ASIC的制造是在晶圓廠(fab)進(jìn)行的。晶圓通常是硅材料,直徑有8英寸(200mm)、12英寸(300mm)等規(guī)格。制造過程主要包括以下步驟:

3.1.1 氧化

在硅晶圓表面生長一層二氧化硅薄膜,作為絕緣層或掩膜層。

氧化通常在高溫(800℃~1200℃)下進(jìn)行。

3.1.2 光刻

光刻是芯片制造中最關(guān)鍵的步驟。

首先在晶圓上涂覆光刻膠,然后用掩膜版(mask)和光刻機(jī)將電路圖案轉(zhuǎn)移到光刻膠上。

曝光后的光刻膠經(jīng)過顯影,形成所需的圖案。

現(xiàn)代先進(jìn)工藝(如7nm、5nm)使用極紫外光(EUV)光刻技術(shù),可以實(shí)現(xiàn)更小的特征尺寸。

光刻設(shè)備非常昂貴,一臺EUV光刻機(jī)售價(jià)超過1億美元。

3.1.3 刻蝕

刻蝕是去除不需要的材料。

根據(jù)刻蝕方式,分為濕法刻蝕(用化學(xué)溶液)和干法刻蝕(用等離子體)。

刻蝕要求很高的選擇性和均勻性。

3.1.4 離子注入

離子注入是在硅中摻雜雜質(zhì)(如磷、硼),形成N型或P型半導(dǎo)體。

通過控制摻雜濃度和深度,可以形成晶體管的源極、漏極等區(qū)域。

3.1.5 薄膜沉積

薄膜沉積是在晶圓表面沉積各種材料,如金屬(銅、鋁)、介質(zhì)(氧化硅、氮化硅)等。

常用的沉積方法有化學(xué)氣相沉積(CVD)、物理氣相沉積(PVD)等。

3.1.6 化學(xué)機(jī)械拋光

CMP(Chemical Mechanical Polishing)用于平坦化晶圓表面。

在多層金屬互連工藝中,CMP是必不可少的步驟。

以上步驟會重復(fù)多次,逐層構(gòu)建出完整的電路。

一個(gè)先進(jìn)的芯片可能有十幾層甚至幾十層金屬互連層。

整個(gè)制造過程可能需要幾百道工序,耗時(shí)2~3個(gè)月。

3.2 晶圓測試

晶圓制造完成后,需要進(jìn)行晶圓級測試(wafer test),也叫CP測試(Circuit Probing)。

測試設(shè)備用探針接觸晶圓上的焊盤,對每個(gè)芯片進(jìn)行功能和參數(shù)測試。

測試會標(biāo)記出不良芯片,這些芯片在后續(xù)封裝時(shí)會被丟棄。

晶圓的良率(yield)是衡量制造質(zhì)量的重要指標(biāo),良率越高,成本越低。

3.3 封裝

通過測試的芯片會被切割下來,然后進(jìn)行封裝。

封裝的作用是保護(hù)芯片、提供電氣連接、散熱等。

常見的封裝形式有DIP(雙列直插)、QFP(四方扁平)、BGA(球柵陣列)等。

封裝過程包括:

  • 芯片貼裝:將芯片粘貼到封裝基板上。
  • 引線鍵合:用金線或鋁線將芯片焊盤與封裝引腳連接。
  • 塑封:用塑料材料封裝芯片,保護(hù)內(nèi)部結(jié)構(gòu)。
  • 打標(biāo):在封裝表面印上型號、批次等信息。

3.4 最終測試

封裝完成后,還要進(jìn)行最終測試(final test),也叫FT測試。

這次測試是在封裝后的成品芯片上進(jìn)行,測試項(xiàng)目更全面,包括功能測試、參數(shù)測試、老化測試等。

只有通過最終測試的芯片才能出貨給客戶。

測試數(shù)據(jù)會被記錄下來,用于質(zhì)量追溯和可靠性分析。

4. ASIC設(shè)計(jì)中的挑戰(zhàn)

4.1 成本問題

ASIC的開發(fā)成本非常高。

一次流片(tape-out)的費(fèi)用,在28nm工藝下可能需要幾百萬元,在7nm工藝下可能超過千萬元。

加上人力成本、EDA工具費(fèi)用等,一個(gè)ASIC項(xiàng)目的總投入可能達(dá)到數(shù)千萬甚至上億元。

因此,ASIC只適合大批量生產(chǎn)的場景。

如果產(chǎn)品銷量不夠大,單顆芯片的成本會非常高,不如使用FPGA或通用MCU方案。

4.2 設(shè)計(jì)周期長

ASIC的設(shè)計(jì)周期通常需要1~2年,甚至更長。

從需求分析到最終量產(chǎn),要經(jīng)過設(shè)計(jì)、驗(yàn)證、流片、測試等多個(gè)階段。

如果流片后發(fā)現(xiàn)問題,需要重新設(shè)計(jì)和流片,周期會更長。

相比之下,F(xiàn)PGA方案的開發(fā)周期要短得多,因?yàn)镕PGA可以快速迭代,發(fā)現(xiàn)問題可以立即修改。

4.3 驗(yàn)證難度大

前面提到,驗(yàn)證是ASIC設(shè)計(jì)中最耗時(shí)的環(huán)節(jié)。

隨著芯片復(fù)雜度的增加,驗(yàn)證難度也在急劇上升。

一個(gè)包含數(shù)億晶體管的芯片,可能的狀態(tài)空間是天文數(shù)字,無法窮盡測試所有情況。

為了提高驗(yàn)證效率,業(yè)界發(fā)展出了很多先進(jìn)的驗(yàn)證方法,如形式驗(yàn)證、斷言驗(yàn)證、覆蓋率驅(qū)動驗(yàn)證等。

但即使如此,也很難保證100%的正確性。

4.4 工藝挑戰(zhàn)

隨著工藝節(jié)點(diǎn)的縮?。ㄈ?nm、3nm),物理效應(yīng)變得越來越顯著。

比如量子隧穿效應(yīng)導(dǎo)致的漏電流增加、工藝偏差導(dǎo)致的性能波動等。

這些問題給設(shè)計(jì)和制造都帶來了巨大挑戰(zhàn)。

此外,先進(jìn)工藝的制造設(shè)備和材料成本極高,只有少數(shù)幾家公司(如臺積電、三星、英特爾)有能力投資。

這也導(dǎo)致了芯片制造的高度集中化。

5. ASIC在嵌入式系統(tǒng)中的應(yīng)用

作為嵌入式程序員,我們雖然不直接參與ASIC設(shè)計(jì),但了解ASIC的特性對我們的工作很有幫助。

比如,在汽車電子項(xiàng)目中,我曾經(jīng)使用過一款專用的CAN控制器ASIC。

這個(gè)芯片集成了CAN收發(fā)器、錯(cuò)誤檢測、自動重傳等功能,比用通用MCU的CAN外設(shè)要可靠得多。

在編寫驅(qū)動程序時(shí),我需要仔細(xì)閱讀芯片手冊,了解它的寄存器定義、時(shí)序要求等,才能正確配置和使用。

再比如,在做性能優(yōu)化時(shí),了解芯片的流水線結(jié)構(gòu)、緩存層次、總線帶寬等硬件特性,可以幫助我們寫出更高效的代碼。

有些看似簡單的代碼改動,可能因?yàn)楦玫乩昧擞布匦裕阅芫陀忻黠@提升。

下面是一個(gè)簡單的例子,展示如何在STM32上配置GPIO來控制一個(gè)外部ASIC芯片的復(fù)位引腳:

// 使用HAL庫配置GPIO
void ASIC_Reset_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    // 使能GPIOA時(shí)鐘
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    // 配置PA5為輸出模式,用于控制ASIC復(fù)位
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽輸出
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 初始化時(shí)保持復(fù)位狀態(tài)
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}

// ASIC復(fù)位函數(shù)
void ASIC_Reset(void)
{
    // 拉低復(fù)位引腳至少10ms
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
    HAL_Delay(10);
    
    // 釋放復(fù)位
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
    
    // 等待ASIC啟動完成(根據(jù)芯片手冊確定時(shí)間)
    HAL_Delay(50);
}

這段代碼雖然簡單,但在實(shí)際項(xiàng)目中非常實(shí)用。

很多ASIC芯片都需要外部MCU來控制其復(fù)位、使能等信號,正確的初始化時(shí)序?qū)ο到y(tǒng)穩(wěn)定性至關(guān)重要。

6. 總結(jié)

ASIC的設(shè)計(jì)和制造是一個(gè)復(fù)雜而精密的過程,涉及電路設(shè)計(jì)、物理設(shè)計(jì)、半導(dǎo)體工藝等多個(gè)領(lǐng)域。

雖然作為嵌入式軟件工程師,我們不需要掌握所有細(xì)節(jié),但了解這些知識可以幫助我們更好地理解硬件,寫出更高效、更可靠的代碼。

在我的職業(yè)生涯中,從單片機(jī)到嵌入式Linux,從消費(fèi)電子到汽車電子,接觸過各種各樣的芯片。

每一次深入了解芯片的工作原理,都讓我對硬件有了更深的認(rèn)識,也讓我在軟件開發(fā)中能夠做出更好的設(shè)計(jì)決策。

如果你對芯片設(shè)計(jì)感興趣,可以從學(xué)習(xí)Verilog或VHDL開始,在FPGA上實(shí)踐一些簡單的設(shè)計(jì)。

雖然FPGA不等于ASIC,但很多設(shè)計(jì)思想是相通的。

對于嵌入式程序員來說,掌握一定的硬件知識,絕對是職業(yè)發(fā)展的加分項(xiàng)。

希望這篇文章能讓你對ASIC有一個(gè)基本的了解。如果有任何問題,歡迎留言討論。

更多編程學(xué)習(xí)資源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容