很多年前我經(jīng)常在想:做FPGA設(shè)計,為啥加班這么多,不停地調(diào)bug和維護bug,心力交瘁。直到做了IC設(shè)計,我才徹底懂了:看完FPGA設(shè)計和IC設(shè)計上的差別,你也會懂。
1.? ? 設(shè)計上的差別(設(shè)計前有無最終硬件)
FPGA設(shè)計和IC設(shè)計雖然都屬于硬件設(shè)計,但他們設(shè)計卻有很大的差別。FPGA是可編程門邏輯陣列,那FPGA設(shè)計就是用軟件去編程FPGA芯片內(nèi)部的邏輯來實現(xiàn)不同的應(yīng)用開發(fā),而IC是集成電路(芯片),IC設(shè)計就是造一個芯片,故本質(zhì)的區(qū)別是:
FPGA設(shè)計是FPGA芯片上的應(yīng)用程序開發(fā),即在最終硬件(FPGA芯片)上開發(fā);
IC設(shè)計是造一個芯片,即還沒有最終硬件(被設(shè)計的芯片)。
2.? ? 驗證上的差別(能否用最終硬件來驗證)
上面設(shè)計上的差別已經(jīng)提到,F(xiàn)PGA設(shè)計前已有最終硬件(FPGA芯片),因此驗證:
可以直接用FPGA來驗證,即下載到FPGA芯片,跑一跑,看一看,再改一改,下載,再跑一跑,再改一改......
在FPGA產(chǎn)品上通過客戶使用來驗證,客戶發(fā)現(xiàn)bug,我們定位解決bug,客戶再發(fā)現(xiàn)了bug,我們再定位解決bug......
因為有最終硬件(FPGA芯片)可以驗證,所以我們一般只需這幾次跑通,不充分。
而IC設(shè)計前還沒有最終硬件(被設(shè)計的芯片),如果驗證不到位,就會導(dǎo)致一次流片的失敗,而一次流片就是數(shù)億的損失,因此驗證需要:
使用驗證方法學(xué)UVM來盡可能充分驗證各個模塊的功能,前仿真、后仿真;
使用FPGA、硬件模擬加速器等,盡可能接近最終芯片來驗證各個功能;
因為沒有最終的硬件(被設(shè)計的芯片)可以來驗證,所以我們驗證的會非常充分。
3.? ??規(guī)范流程上的差別(需不需要規(guī)范流程)
上面驗證上的差別,可以看出FPGA設(shè)計時,可以在最終硬件(FPGA芯片)上多次試錯,甚至到客戶那里還能再多次試錯,因此規(guī)范流程上:
不規(guī)范也可以:多試幾次又不是不行,問題又不是不能被解決,花20%設(shè)計,花80%調(diào)bug,還需要加班來維護,又不是不行,多加班能解決的都不是問題,為什么解決也不那么重要,只要最終硬件(FPGA芯片)上跑的沒問題就OK;
規(guī)范更好:代碼寫的規(guī)范,有詳細的設(shè)計文檔,關(guān)注EDA工具綜合布局布線的報告等,上板前做一些仿真,這樣讓你花80%設(shè)計,花20%調(diào)bug,少加班,就能夠不斷的升級迭代設(shè)計,少bug不怎么需要維護,有bug也能快速解決。
但是,IC設(shè)計時,沒有最終硬件(FPGA芯片)可以多次試錯,就一定要嚴(yán)格規(guī)范設(shè)計的流程,盡可能去模擬最終硬件驗證,保證流片回來的芯片不出問題,因此規(guī)范流程上:
要嚴(yán)格規(guī)范,充分驗證,出現(xiàn)bug需要定位到設(shè)計根源上并解決,解決后還需要再遍歷驗證一遍。
所以,做FPGA,為啥加這么多班?我覺得就是因為不夠重視規(guī)范和驗證,至于FPGA設(shè)計重視規(guī)范和驗證,又是怎么理解和落地了?