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