《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 閑話集成電路系統(tǒng)建模工程師

閑話集成電路系統(tǒng)建模工程師

2019-09-21
關(guān)鍵詞: 集成電路 建模工程師

  在每年找工作的時候,在校學(xué)生就會分割成軟件崗位和硬件崗位兩大陣營。心儀軟件崗位的同學(xué)就是專注于各種算法和語法寶典;而立志硬件崗位的同學(xué)則會專注于數(shù)字電路、模擬電路、單片機、FPGA。出現(xiàn)這樣的情況,一方面是因為個人興趣和工資收益使然,另一方面也是因為公司招聘崗位的刻意引導(dǎo)。

  哪怕是對軟件和硬件都有涉獵的同學(xué),也不得不在軟件和硬件之間做出選擇。但實際工作中的崗位遠(yuǎn)不是硬件和軟件這么簡單的劃分?,F(xiàn)在,推薦一個需要涉獵軟件和硬件的崗位——集成電路系統(tǒng)建模工程師。

  1.集成電路設(shè)計流程方法的演進與軟件對于集成電路設(shè)計的作用

  從60年代集成電路出現(xiàn)到今天,集成電路設(shè)計流程經(jīng)歷了三次較大的變革。每一次變革都使得軟件在集成電路設(shè)計中起到越來越大的作用。

  1.1專業(yè)分工:前端設(shè)計和后端設(shè)計

  在最開始的時候,集成電路的設(shè)計完全依賴于基于標(biāo)準(zhǔn)器件的手工操作。工程師需要自己繪制電路版圖,再交付制造工序。在這一時期,模擬集成電路和數(shù)字集成電路在設(shè)計流程上的區(qū)分還不明顯。

640.webp (5).jpg

  圖1. 手工繪制版圖(來源:網(wǎng)絡(luò))

  這種方式顯然不能適應(yīng)大規(guī)模集成電路的設(shè)計。隨著設(shè)計流程分工細(xì)化,出現(xiàn)了“前端+后端”的設(shè)計流程。前端設(shè)計側(cè)重于邏輯設(shè)計/功能設(shè)計,將一個想法轉(zhuǎn)化成邏輯電路的原理圖。后端設(shè)計側(cè)重于物理設(shè)計,將這個電路轉(zhuǎn)化為可以制造的版圖,包括布局、時鐘樹、布線、設(shè)計規(guī)則檢查等等。前端設(shè)計完成并且驗證通過后,將原理圖提供給后端設(shè)計;后端設(shè)計完成并且驗證通過后,將版圖交付制造工序。

  “前端+后端”的設(shè)計流程對于數(shù)字集成電路和模擬集成電路是通用的。對于數(shù)字集成電路,前端設(shè)計和后端設(shè)計已經(jīng)演化為了相互獨立的兩個部門。公司內(nèi)部也常常按照前端設(shè)計(邏輯設(shè)計)和后端設(shè)計(物理設(shè)計)劃分部門。前端設(shè)計更側(cè)重于邏輯設(shè)計(與或非的布爾邏輯),不需要考慮物理設(shè)計的細(xì)節(jié)。不過模擬集成電路并沒有非常徹底的前端和后端分工。前端設(shè)計和后端設(shè)計都需要充分考慮晶體管半導(dǎo)體特性以及布局布線的細(xì)節(jié)才能夠滿足設(shè)計規(guī)格。

640.webp (4).jpg

  圖2. “前端+后端”設(shè)計流程

  “前端+后端”也是一個相互迭代的過程。如果后端工程師發(fā)現(xiàn)無法滿足設(shè)計規(guī)格的時候(時序違例、面積過大、功耗過高等),可能會要求前端設(shè)計進行相應(yīng)的調(diào)整。隨著工藝的進步和芯片設(shè)計參數(shù)的提高,這種反饋越來越強。

  設(shè)計流程的發(fā)展和鞏固還依賴于流程化的電子設(shè)計自動化(EDA)工具的出現(xiàn)。龍頭EDA工具商都提供全流程的EDA工具鏈。這些工具鏈能夠滿足設(shè)計者從想法到流片的全部設(shè)計和驗證流程,甚至可以引導(dǎo)設(shè)計者完成設(shè)計。Synposys公司的EDA工具牢牢占領(lǐng)著國內(nèi)數(shù)字集成電路的市場,DC+VCS和ICC+PT+VCS是國內(nèi)大部分設(shè)計公司的標(biāo)配。Cadence公司的EDA工具在模擬集成電路設(shè)計和數(shù)字電路設(shè)計后端市場,尤其是數(shù)?;旌闲酒袌鼍哂胁豢商娲浴.吘笴adence是做后端工具起家的。FPGA的設(shè)計工具也是類似的情況,Intel的Quartus和Xilinx的Vivado都能夠引導(dǎo)用戶完成一次完整而有效的設(shè)計。

  “前端+后端”已經(jīng)成為集成電路設(shè)計的主要流程,迄今沒有顛覆性的變化。目前設(shè)計流程的發(fā)展趨勢可以概括為:提高EDA工具的自動化程度,減少人工干預(yù)和接入,降低設(shè)計門檻,提高生產(chǎn)率。

  1.2提升自動化程度:芯片設(shè)計軟件化

  在硬件描述語言(HDL)出現(xiàn)之前,前端設(shè)計和后端設(shè)計的接口就是原理圖。但是設(shè)計一個復(fù)雜電路的原理圖是非常辛苦和耗時的。目前,HDL已經(jīng)完全取代了原理圖作為前端設(shè)計的載體。前端工程師將設(shè)計想法轉(zhuǎn)化為HDL描述。隨后,綜合工具將HDL描述轉(zhuǎn)化為網(wǎng)表。網(wǎng)表用標(biāo)準(zhǔn)單元的連接描述電路。前端設(shè)計和后端設(shè)計的接口接受用HDL語言描述的網(wǎng)表。常用的HDL語言就是Verilog和VHDL。

  HDL的出現(xiàn),讓前端設(shè)計師得到了充分的解放,也讓數(shù)字集成電路設(shè)計出現(xiàn)明顯的軟件化趨勢。

  首先,從形式上,HDL代碼與計算機軟件程序非常相似。不過這里必須要說明,HDL代碼與計算機軟件程序有明顯的區(qū)別,即便是在行為級描述。HDL代碼是對電路行為或者連接的描述,而不是類似于軟件程序那樣的可執(zhí)行程序。相對于軟件語言,HDL語言特別加強了對于并行化的描述和位運算的描述。以Verilog HDL為例。在Verilog中,賦值分為阻塞賦值和非阻塞賦值,以描述信號之間的并發(fā)關(guān)系。Verilog相對于高級軟件編程語言,補充了比特級別的信號類型。

  其次,HDL代碼可以通過腳本來生成。HDL代碼的呈現(xiàn)形式是文本文件。這就使得,可以用腳本程序(比如python,perl等)來生成一個有規(guī)律的HDL代碼文件。通過腳本生成的HDL代碼經(jīng)過綜合之后得到的電路,會與行為描述產(chǎn)生的電路等效,甚至?xí)韧ㄟ^行為級描述產(chǎn)生的電路更加簡化。這是因為,HDL代碼的不同寫法只是對相同電路功能的不同描述而已。只要功能(輸入和輸出的對應(yīng)關(guān)系)一致,那么綜合得到的電路就是等效的。比如,對于一個8比特數(shù)除3求余數(shù)和模數(shù)。直接的想法是寫一個除法器按照移位減法進行計算。同時,也可以寫一個腳本,直接生成256個輸入對應(yīng)的輸出,并用case結(jié)構(gòu)寫成一個Verilog模塊。生成的腳本綜合出的模塊就是一個組合邏輯。綜合工具會使得電路結(jié)構(gòu)最簡。這一種策略在實際工程中經(jīng)常遇到。

  此外,HDL代碼是可以直接仿真的。但是,仿真是串行執(zhí)行的,所以HDL語言還要規(guī)定大量的仿真規(guī)則以規(guī)定HDL代碼在仿真時的行為。在仿真時,EDA軟件借鑒了軟件的概念來提供調(diào)試功能(單步調(diào)試、信號值等)。這使得HDL代碼更加類似于軟件,也使得HDL代碼的概念變得混亂。

  1.3 SoC設(shè)計方法學(xué):IP核和“攢”芯片

  隨著芯片集成能力的提升,由一家設(shè)計公司完成電路中所有模塊開發(fā)的成本顯著提高。模塊的定義、開發(fā)、驗證是一個消耗時間和人力的工作。另一方面,隨著SoC設(shè)計方法學(xué)的流行,芯片內(nèi)部的組成模塊也越來越趨同。一款SoC芯片內(nèi)部一般都由CPU核、片內(nèi)互聯(lián)、片內(nèi)存儲、DRAM接口、USB接口等基本模塊以及各種慢速外設(shè)組成。這就使得不同設(shè)計公司之間可以復(fù)用設(shè)計。

  在這樣的背景下,產(chǎn)生了一類IP供應(yīng)商。這些IP供應(yīng)商為設(shè)計公司提供充分驗證過的成熟的IP模塊。設(shè)計公司向IP供應(yīng)商支付可觀的費用(仍然可能低于設(shè)計公司自行開發(fā)模塊的成本)。最典型的IP供應(yīng)商就是ARM了。這家公司通過向全球的SoC廠商提供處理器核、片內(nèi)總線等相關(guān)IP核,不僅成功的存活了幾十年,還牢牢占據(jù)了全球嵌入式處理器的市場,不容Intel染指。當(dāng)然,ARM的IP稅也是讓各大公司有苦難言。Synopsys和Cadence也在IP供應(yīng)市場產(chǎn)生可觀的份額。

  IP核的出現(xiàn)、成熟和豐富,產(chǎn)生了一種新的芯片設(shè)計形式,即“攢”芯片。設(shè)計公司只需要專注于自己的芯片中獨到的部分,并做到有亮點盈利。其他部分都可以通過購買各種IP獲得。比如一款實現(xiàn)某種算法的SoC,其中的算法模塊是公司的獨到專利,由設(shè)計公司自己設(shè)計、驗證并優(yōu)化。這款SoC中的CPU核(作為交互控制接口,運行固件)、片內(nèi)互聯(lián)、視頻編解碼、內(nèi)存接口以及視頻接口都可以通過購買IP獲得。

  總而言之,集成電路設(shè)計流程的最大的特點就是分散和專精。從設(shè)計到制造,需要經(jīng)過很多公司的接力才能完成。從IP提供商、EDA工具商、設(shè)計公司到制造商,每家公司都可以決定最終芯片的質(zhì)量,卻又不能保證最終芯片質(zhì)量。反過來,對于設(shè)計公司來說,使用已經(jīng)經(jīng)過充分驗證的流程和IP,可以顯著降低公司自己的研發(fā)成本和風(fēng)險成本。對于小公司以及創(chuàng)業(yè)公司,尤為如此。對于大公司而言,出于供應(yīng)鏈安全性和定制化的考慮,可能會在IP核上進行布局,但是一般不會布局EDA工具。

  在片上系統(tǒng)的設(shè)計流程中,模型的地位得到了重要的提升,尤其是對于完整系統(tǒng)的建模。相對于單一功能的芯片,片上系統(tǒng)的復(fù)雜度空前的提高,完整走完一塊芯片的“前端+后端”流程是非常耗時而且非常昂貴的。設(shè)計公司顯然不能為所有的設(shè)計方案都實際做一次流片,也不可能用一次次流片來修正設(shè)計方案的缺陷。因此,設(shè)計公司紛紛用模型研究來進行設(shè)計方案的探索和評估。一方面,開發(fā)建模的成本要低得多了,而且模型的靈活性高,迭代速度快。另一方面,模型能夠反映設(shè)計特性?;谀P头抡娴姆治鼋Y(jié)果能夠反映設(shè)計的實際情況。

  2.設(shè)計流程向前延伸——建模

  “前端+后端”的設(shè)計流程是以詳細(xì)的和完整的設(shè)計規(guī)格書為起點的。前端工程師將設(shè)計規(guī)格書轉(zhuǎn)化為HDL描述,繼續(xù)完成整個設(shè)計流程。這確實是一個很完備的設(shè)計流程。

  不過,如果設(shè)計規(guī)格書就定義錯了或者定義不完善呢?在芯片功能較為簡單、設(shè)計規(guī)格較為明確的時代,可以在驗證階段(前端驗證或者后端驗證)發(fā)現(xiàn)設(shè)計規(guī)格不能滿足設(shè)計需求。進而反過頭來修改和完善設(shè)計規(guī)格書,再重新進行設(shè)計和驗證的迭代。但隨著集成電路規(guī)模的不斷提高,“設(shè)計+驗證”的迭代周期變得很長。如果到了驗證階段才發(fā)現(xiàn)技術(shù)路線錯誤,這樣浪費的人力和時間成本就太大了。因此,如何驗證設(shè)計規(guī)格是否正確就變得至關(guān)重要了,因為這決定了后續(xù)的工作是否在正確的道路上前進。

  2.1建模的目的

  在進行復(fù)雜集成電路設(shè)計時,對將要設(shè)計的集成電路進行建模驗證成為了保證集成電路設(shè)計不犯“方向性錯誤”的不二選擇。對集成電路進行抽象建模的目的可以歸納為三個方面。

  第一個方面,通過軟件仿真研究建模對象的性質(zhì)和規(guī)律。這里需要研究的規(guī)律包括物理特性的規(guī)律,比如晶體管的電路模型、功耗模型等。還需要研究的是需要實現(xiàn)的功能的參數(shù)特性。通過模型仿真,可以得到某一個參數(shù)與某個性能指標(biāo)的定量關(guān)系。對于復(fù)雜的系統(tǒng),這種定量關(guān)系往往都是無法通過公式直接計算得到顯性的解析結(jié)果,必須要依靠仿真模型經(jīng)過多次迭代和逼近后得到數(shù)值結(jié)果。

  舉一個分析截斷誤差的例子,以Cordic算法進行單精度浮點數(shù)的開方運算(僅作為舉例,浮點數(shù)開方一般不用Cordic算法)。單精度浮點數(shù)有23位尾數(shù),組成1位整數(shù)和23位小數(shù)的定點數(shù)。如果直接以這樣的精度計算,那么平均誤差相當(dāng)于最后4個比特是無效的。為了能夠降低誤差,需要對參與中間計算步驟的定點數(shù)擴展為1位整數(shù)和30位小數(shù)的定點數(shù)。計算完成后,再截斷為符合單精度浮點數(shù)定義的尾數(shù)。中間計算步驟的位擴展具體參數(shù)就需要通過建模和仿真來加以驗證。

  另舉一個片上互聯(lián)的例子。在片上網(wǎng)絡(luò)中,路由器中的緩存大小對于網(wǎng)絡(luò)吞吐率的影響雖然可以用一些理論模型來加以描述,但是這類模型通常只能給出吞吐率的上界。通過模型仿真,可以明確的得到緩存大小與網(wǎng)絡(luò)吞吐率的量化對應(yīng)關(guān)系。

  第二個方面,建??梢詫υO(shè)計方案和設(shè)計規(guī)格進行初步驗證或并以此為基礎(chǔ)探索更優(yōu)的設(shè)計方案。在架構(gòu)設(shè)計階段,可以快速實現(xiàn)多種設(shè)計方案的模型,并且通過模型仿真設(shè)計方案的特性,明確哪種設(shè)計方案最具有繼續(xù)研究的價值。在這一方面的應(yīng)用中,模型驗證多用于參數(shù)選擇,比如確定算法中參與運算的各個變量的精度、網(wǎng)絡(luò)中緩存的大小、神經(jīng)網(wǎng)絡(luò)的規(guī)模等等。

  再舉一個架構(gòu)設(shè)計的例子。多核異構(gòu)芯片中的片上互聯(lián)結(jié)構(gòu)設(shè)計時,需要滿足一些核心之間高密度數(shù)據(jù)流傳輸帶寬需求。這就使得,同構(gòu)的片上網(wǎng)絡(luò)結(jié)構(gòu)和路由算法不適用,而設(shè)計新的拓?fù)浣Y(jié)構(gòu)和路由算法能否真正達(dá)到設(shè)計需求就需要模型仿真來為其背書。

  另外一個例子和工程密切相關(guān)。商業(yè)公司雖然可以從公開發(fā)表的學(xué)術(shù)論文中尋找設(shè)計方案,但學(xué)術(shù)論文在應(yīng)用環(huán)境和驗證環(huán)境上常常語焉不詳。雖然學(xué)術(shù)論文都宣稱自己取得了顯著的參數(shù)提升,但是并不意味著這些方法都可以利用到的某個特定的設(shè)計中。如何甄別出對具體設(shè)計有價值的方案,也是模型的重要作用。

  第三個方面,超前軟件開發(fā)。當(dāng)下的大部分芯片都不再是完成某個固定功能的簡單模塊,而是一個集成在芯片上的完整系統(tǒng)。即便是為某一個單一功能的芯片,其中也通常集成了某種輕量級的CPU核來實現(xiàn)參數(shù)配置、數(shù)據(jù)交互以及功能管理,如藍(lán)牙芯片CC2640、充電器管理芯片SE8A等。所以,當(dāng)下的芯片,大多常常需要固件、BIOS、OS等軟件配合。

  按照傳統(tǒng)的開發(fā)模式,這些軟件的開發(fā)都只能在集成電路設(shè)計完成之后進行,最早也需要在FPGA原型驗證時進行。這不但造成軟件開發(fā)進度的延遲,軟件工程師也無法對集成電路的設(shè)計提出有效的意見。只能是硬件有什么,軟件就用什么。這顯然不是一種最優(yōu)的開發(fā)方法。

  而基于硬件模型可以將軟件開發(fā)的工作提前到與硬件同步進行。在硬件工程師按照模型設(shè)定的設(shè)計規(guī)格進行硬件開發(fā)的時候,軟件工程師也可以在這種模型上開發(fā)相應(yīng)的軟件,并且運行調(diào)試。

  更為重要的是,由于軟件工程師通過模型在設(shè)計早期就參與了芯片的設(shè)計,軟件工程師可以對芯片的軟硬件功能劃分和軟硬件接口提出有價值的建議。這些改動對于芯片設(shè)計完成后的軟硬件聯(lián)合優(yōu)化可以起到非常重要的作用。

  2.2建模對于設(shè)計流程的影響

  建??梢载灤┰诩呻娐返脑O(shè)計流程,但是建模工程師則更多的出現(xiàn)在設(shè)計流程的早期,也就是在設(shè)計方案確定之前。

  下面以實現(xiàn)某種算法型的SoC芯片為例來看一下建模工程師如何參與集成電路的設(shè)計。

  2.2.1建立算法模型

  在這款芯片的研發(fā)早期,建模工程師對芯片使用的算法建立模型,并且對算法模型進行仿真。這一過程中,驗證了算法的正確性和可行性。這時的算法模型是理想的。

  接下類,考慮電路計算過程中引入的截斷誤差,也就是引入計算的精度。通過調(diào)整參與計算的數(shù)據(jù)的寬度,保證最終結(jié)果的精度也滿足要求。這樣就得到了算法的功能模型。也就說,這個功能模型輸出的結(jié)果應(yīng)該是實際硬件電路輸出的結(jié)果相同。

  再次對模型進行細(xì)化,考慮到計算電路的時序特性,并且補充算法模塊的輸入和輸出接口時序。這樣就得到的算法的時序模型。

  通過上面的建模過程,完成了對算法的探索,得到了算法的設(shè)計規(guī)格。接下來,就可以接入集成電路設(shè)計的前端流程了。硬件工程師可以根據(jù)模型探索得到的設(shè)計規(guī)格重新編寫HDL描述。隨著高層語言綜合技術(shù)(HLS)的發(fā)展,硬件工程師也可以通過HLS工具將模型直接轉(zhuǎn)化為HDL描述。

  2.2.2建立架構(gòu)模型

  這款算法芯片其實是一款SoC芯片。公司設(shè)計的算法模塊需要添加到一種CPU框架中,作為CPU核的一種外設(shè)或者協(xié)處理器。這里需要取舍的架構(gòu)問題,例如:算法模塊集成到CPU核的哪一個層次(可以作為CPU核內(nèi)部運算單元、CPU外部共享私有內(nèi)存的協(xié)處理器、CPU核外部總線上掛載的獨立設(shè)備等)?CPU核如何調(diào)用該模塊(中斷/查詢/DMA/獨立訪存)?SoC需要為算法模塊提供多大的內(nèi)存帶寬?架構(gòu)模型可以對這些問題給出量化的評估。

  硬件工程師可以使用IP核來復(fù)用成熟的設(shè)計。建模工程師也可以使用虛擬IP(VIP)來復(fù)用成熟的設(shè)計。虛擬IP由IP提供商、EDA廠商或“第三方”針對某種IP提供。VIP應(yīng)與IP功能和時序相同。建模工程師將VIP與公司自己的算法IP的模型組合在一起,就得到了SoC的架構(gòu)模型。基于架構(gòu)模型進行各種仿真,例如運行各種標(biāo)準(zhǔn)的測試程序,就可以對于以上提到的各種問題加以驗證和評估。

  同時,軟件工程師也會參與到這一個過程中。軟件工程師開發(fā)的固件可以在架構(gòu)模型上運行,并且模擬對算法模塊的調(diào)用過程。因此,軟件工程師能夠?qū)τ布蛙浖δ艿膭澐趾徒涌诮o出有價值的改進意見。

  2.2.3 建立驗證模型

  模型并不是只用于設(shè)計流程早期進行算法設(shè)計和架構(gòu)設(shè)計的時候,算法模型和架構(gòu)模型適當(dāng)加以改造后還可以成為驗證階段的黃金(golden)模型。在相同的激勵下,如果模型和設(shè)計提供相同的結(jié)果,那么設(shè)計是正確的;反之,設(shè)計存在缺陷。黃金模型也提供了設(shè)計中的關(guān)鍵點的中間結(jié)果。這些中間結(jié)果在模型和設(shè)計中都可以找到,可以方便用來調(diào)試設(shè)計的缺陷。

  還有一種模型的目的是為了實現(xiàn)軟硬件聯(lián)合仿真驗證。在設(shè)計流程中,除了使用測試向量驗證設(shè)計模塊是否正確,還需要驗證模塊能否使得實際系統(tǒng)滿足設(shè)計要求。對于流水線上的一個隊列緩存,測試向量只能驗證這個緩存能夠正確的讀寫數(shù)據(jù),但是無法驗證這個緩存是否會成為流水線的瓶頸,進而影響流水線的吞吐率。

  此時,系統(tǒng)中的其他模塊也同樣處于開發(fā)和驗證流程當(dāng)中,顯然不可能為了驗證這一個模塊而搭建一個完整系統(tǒng)。另一方面,隨著集成電路規(guī)模的擴大,F(xiàn)PGA原型平臺的性價比越來越低。能夠容納大規(guī)模設(shè)計的FPGA原型平臺的價格也是相當(dāng)可觀的。因此,最好的驗證辦法是將模塊放到由軟件模型構(gòu)成的系統(tǒng)中。被測模塊以RLT代碼和FPGA原型的形式出現(xiàn)在驗證平臺中,系統(tǒng)中的其他模塊以軟件模型的形式出現(xiàn)在驗證平臺中。軟件模型向被測模塊注入符合實際情況的激勵,并且響應(yīng)被測模塊的輸出。通過軟硬件聯(lián)合仿真環(huán)境,建模工程師可以獲得設(shè)計模塊對于完整系統(tǒng)的影響,評估設(shè)計模塊能否使得完整系統(tǒng)滿足設(shè)計要求。

640.webp (3).jpg

  2.3使用系統(tǒng)建模優(yōu)勢

  系統(tǒng)建模的核心優(yōu)勢就在于一個“快”字。

  系統(tǒng)建模仿真速度快是因為模型省略了一些功能特性和物理實現(xiàn)細(xì)節(jié),那么系統(tǒng)模型仿真的速度肯定快于RTL編碼仿真的速度。這是因為RTL仿真是比特級別的,而軟件模型仿真是信號級別的。比如,RTL仿真需要仿真加法器中每一個比特的動作;軟件模型則只需要一條加法語句即可。其次,對于非定長結(jié)構(gòu),軟件可以用循環(huán)實現(xiàn),并且只進行必要的循環(huán);硬件不支持非定長結(jié)構(gòu),只能按照最大可能的結(jié)構(gòu)展開,再通過使能關(guān)閉不需要的單元或者放棄不需要的結(jié)果。這導(dǎo)致RTL仿真時需要做大量冗余的運算。最后,RTL仿真是4值的(0,1,X,Z),軟件仿真是二值的(0,1)。

  當(dāng)然,模型的精度(尤其是時序的精度)和速度是一對矛盾體,在提高仿真速度時必然會導(dǎo)致精度有一定損失,需要建模工程師根據(jù)建模的目的進行平衡。

  開發(fā)速度快也是“快”的另外一方面。編寫軟件的成本要小于編寫硬件實現(xiàn)的成本。軟件和硬件開發(fā)的時間可以分為編寫代碼和調(diào)試bug。由于HDL不能支持可變循環(huán)等不定結(jié)構(gòu),所以硬件HDL的表達(dá)能力要遠(yuǎn)小于軟件的表達(dá)能力。而且,由于調(diào)試方法的限制,調(diào)試軟件錯誤要比調(diào)試硬件錯誤容易得多。尤其是對于編碼過程中引入的bug,軟件調(diào)試要比硬件調(diào)試簡單很多。

  3. 系統(tǒng)建模工程師

  最后回到系統(tǒng)建模工程師的話題。系統(tǒng)建模工程師在設(shè)計公司中的人數(shù)不多,但是很重要。設(shè)計公司擁有的建模團隊的實力從一定程度上可以反映公司未來技術(shù)演進的實力有多強。有些公司沒有獨立的建模團隊,而是在架構(gòu)團隊、設(shè)計團隊和驗證團隊中分散設(shè)置建模崗位或者人員。崗位的名稱也并不統(tǒng)一,只能通過崗位職責(zé)和技術(shù)要求判斷。附錄中列出部分公司的建模工程師的崗位。

  3.1 系統(tǒng)建模工程師的主要職責(zé)

  系統(tǒng)建模工程師的日常工作是主要是通過模型仿真對設(shè)計方案進行評估,完成“建模-仿真-評估”的迭代。首先,根據(jù)項目需要建立模型。然后,進行仿真,收集數(shù)據(jù)。為了能夠反映出設(shè)計的正面和負(fù)面影響,仿真要涵蓋盡可能多的應(yīng)用環(huán)境(測試程序或測試向量)。最后,分析仿真數(shù)據(jù),評估設(shè)計方案能否滿足設(shè)計需求、評估模塊或者系統(tǒng)設(shè)計方案有無缺陷等。

  系統(tǒng)建模工程師的具體工作方向可以分為架構(gòu)建模和驗證建模兩個方向。架構(gòu)建模評估的是想法;驗證建模評估的是具體設(shè)計。

  在架構(gòu)建模方向,建模工程師的主要輸出就是用大量的仿真數(shù)據(jù)評估設(shè)計方案。當(dāng)設(shè)計不滿足需求或存在缺陷時時候,架構(gòu)建模還要被用來驗證改進方案能否修正設(shè)計缺陷并且不引起更多的問題。在仿真結(jié)束后應(yīng)給出改進方案是否可行的結(jié)論,并反饋給方案的制定者(設(shè)計方案通常為資深架構(gòu)師或設(shè)計主管共同協(xié)商確定)。

  在驗證建模方向的工程師的主要職責(zé)是將電路仿真的結(jié)果與架構(gòu)模型和算法模型的仿真結(jié)果進行對比,可以判斷電路功能是否正確。而仿真的結(jié)果要反饋給RTL設(shè)計人員,用于檢驗其RTL設(shè)計中存在什么問題。驗證方向的建模工程師還會為驗證模型和系統(tǒng)搭建軟硬件聯(lián)合驗證環(huán)境,提供作為激勵和收集被測模塊響應(yīng)的軟件模型,開發(fā)信號交互的驅(qū)動。

  3.2 系統(tǒng)建模工程師的能力

  為了適應(yīng)建模工作,系統(tǒng)建模工程師的能力要求與硬件開發(fā)工程師和軟件開發(fā)工程師有很大不同。

  從技術(shù)方面,系統(tǒng)建模工程師需要具備廣闊的技術(shù)涉獵范圍,但是不要求樣樣精通。除了對于軟件設(shè)計和硬件設(shè)計的技術(shù),系統(tǒng)建模工程師還要了芯片功能的相關(guān)知識,比如計算機原理、信號處理和AI等等??焖賹W(xué)習(xí)和快速上手能力是系統(tǒng)建模工程師區(qū)別于其他崗位最大的不同。

  從人際交往方面,系統(tǒng)工程師不僅需要較好的人際溝通能力,還需要較強的技術(shù)溝通能力。為了獲取系統(tǒng)的特性并且反饋模型研究的結(jié)果,系統(tǒng)建模工程師需要與硬件和軟件開發(fā)工程師進行反復(fù)的交流。良好的人際溝通能力自然會使這一過程變得更高效。

  另一方面,硬件工程師和軟件工程師的技術(shù)語言和體系是完全不同的。前端工程師和后端工程師的觀點和想法也會有不同。系統(tǒng)建模工程師要能夠以對方熟悉的方式與硬件或軟件工程師進行交流,這就是技術(shù)溝通能力。技術(shù)溝通能力建立在建模工程師對于技術(shù)的充分了解的基礎(chǔ)上,也建立在建模工程師的同理心和換位思考的角度上。

  從個人性格方面,系統(tǒng)建模工程師需要對于技術(shù)保有單純的好奇和興趣。系統(tǒng)建模工程師需要學(xué)習(xí)很多方面的知識,而且每一個新項目都不是對之前項目的重復(fù)。如果沒有個性支撐,系統(tǒng)建模工程師也會陷入疲憊。

  對系統(tǒng)建模工程師真正的挑戰(zhàn)在于,如何在沒有參考的情況下,確認(rèn)模型實現(xiàn)和分析是正確的。如果模型有錯誤或者缺陷,那么會直接導(dǎo)致仿真結(jié)果和分析結(jié)果乃至決策結(jié)果錯誤。在沒有對應(yīng)硬件系統(tǒng)的時候,系統(tǒng)建模工程師是沒有辦法對模型進行校準(zhǔn)的。系統(tǒng)建模工程師必須要能夠根據(jù)對設(shè)計的理解,設(shè)計巧妙的測試程序,驗證模型是否正確。要做到這一點,需要建模工程師具有足夠的技術(shù)積累,并且深入理解被建模的設(shè)計。同時,建模工程師要具有縝密的思維和清晰的邏輯。

  系統(tǒng)建模工程師“站得高,看得遠(yuǎn)”。系統(tǒng)建模工程師可以學(xué)習(xí)到設(shè)計流程中各個環(huán)節(jié)的知識,不僅有邏輯設(shè)計的技巧,還有物理設(shè)計的體系,更有芯片用途的重要背景知識。最終,系統(tǒng)建模工程師是可以將這個系統(tǒng)講清楚的人。

  系統(tǒng)建模工程師雖然可能接觸很多技術(shù)領(lǐng)域,不過沒有明確的技術(shù)提升路徑。如果系統(tǒng)建模工程師不能夠主動思考,認(rèn)為完成建模和驗證的工作就夠了,那么系統(tǒng)建模工程師就在設(shè)計流程中陷入了被動的角色。系統(tǒng)建模工程師的技術(shù)提升依賴于工程師自己多想一點。對遇到的有趣現(xiàn)象的刨根問底,才使得系統(tǒng)建模工程師不斷夯實技術(shù),提升技術(shù)。系統(tǒng)建模工程師可以通過建模來充分理解現(xiàn)有設(shè)計以及設(shè)計的內(nèi)在規(guī)律,從而自己提出設(shè)計優(yōu)化方案,在設(shè)計流程中占據(jù)主動。

  附錄:部分公司對于集成電路建模工程師任職要求

  職位1:RISC-V CPU設(shè)計/建模資深工程師

  崗位職責(zé)

  1.研發(fā)高性能RISC-V CPU Core;

  2.制定/參與RISC-V處理器模塊微結(jié)構(gòu)設(shè)計規(guī)范;

  3.負(fù)責(zé)/參與開發(fā)RISC-V CPU性能/功耗模擬器、模型和測試集;

  4.對性能、功耗、面積進行分析和權(quán)衡,選取RISC-V CPU優(yōu)化設(shè)計方案;

  5.負(fù)責(zé)/參與開發(fā)處理器模塊的RTL;

  6.與驗證團隊協(xié)作,驗證CPU設(shè)計的正確性;

  7.與物理設(shè)計團隊協(xié)作,實現(xiàn)時序收斂和功耗優(yōu)化。

  崗位要求

  1.計算機科學(xué)、計算機工程或電子工程等相關(guān)專業(yè)學(xué)位;

  2.有以下至少一項經(jīng)驗:計算機體系結(jié)構(gòu)知識;CPU微架構(gòu)知識;CPU周期精準(zhǔn)性能模擬器,如GEM5等;Power management, security等領(lǐng)域知識;

  3.有工業(yè)界處理器研發(fā)經(jīng)驗者優(yōu)先;

  4.良好的團隊合作精神,工作態(tài)度積極。

  職位2:x86系統(tǒng)建模&性能分析工程師

  崗位職責(zé)

  1.針對CPU、Cache、系統(tǒng)總線、DDR控制器等關(guān)鍵部件構(gòu)建性能模型;

  2.仿真、分析現(xiàn)有系統(tǒng)架構(gòu)的性能瓶頸;

  3.探索新的架構(gòu)設(shè)計方案、提供架構(gòu)改進方面和初步性能評估參數(shù);

  4.搭建系統(tǒng)功能級仿真平臺,為固件、驅(qū)動開發(fā)提供支持。

  崗位要求

  1.計算機或電子工程相關(guān)專業(yè);

  2.具有良好的C/C++編程能力;

  3.對計算機體系結(jié)構(gòu)有較深入的了解,特別是CPU微架構(gòu)、Cache設(shè)計及DDR控制器;

  4.有計算機系統(tǒng)架構(gòu)或SoC設(shè)計經(jīng)驗者優(yōu)先;

  5.有SystemC開發(fā)經(jīng)驗者優(yōu)先;

  6.熟悉計算機仿真技術(shù)者優(yōu)先,如Bochs,Qemu,GEM5等;

  7.有RTL設(shè)計經(jīng)驗者優(yōu)先;

  8.熟悉x86匯編和體系結(jié)構(gòu)這優(yōu)先。

  職位3:SoC性能模擬工程師

  崗位職責(zé)

  1.CPU微架構(gòu)性能模擬器開發(fā);

  2.系統(tǒng)級性能模擬器開發(fā);

  3.基準(zhǔn)測試程序性能分析和研究;

  4.面向微架構(gòu)的基準(zhǔn)測試程序開發(fā)。

  崗位要求

  1.熟悉CPU微架構(gòu);

  2.了解計算機體系結(jié)構(gòu);

  3.了解linux kernel;

  4.具備一定編譯器和指令集知識;

  5.熟練C/C++以及python開發(fā)。

  職位4:ESL架構(gòu)師

  崗位職責(zé)

  1.芯片核心算法到整體架構(gòu)的建模,ESL仿真平臺搭建,應(yīng)用場景用例構(gòu)建;

  2.性能仿真數(shù)據(jù)分析,大數(shù)據(jù)自動化到智能化處理;

  3.基于ESL流程負(fù)責(zé)完成IP建模、平臺構(gòu)建和仿真,負(fù)責(zé)完成套片或芯片軟硬件調(diào)試和性能分析,實現(xiàn)架構(gòu)探索和驗證;

  4.負(fù)責(zé)芯片架構(gòu)ESL需求和端到端計劃管理;

  5.ESL平臺仿真速度和指令以易用性持續(xù)提升;

  6.為有競爭力、高質(zhì)量的芯片架構(gòu)方案提供可靠依據(jù)和數(shù)據(jù),能提供優(yōu)化改進架構(gòu)方案;

  7.先進ESL開發(fā)流程、方法技術(shù)的探索。

  崗位要求

  1.具有良好的業(yè)務(wù)抽象和芯片系統(tǒng)分析能力,能夠使用SystemC/C+C/CSystemVerilog等語言已經(jīng)芯片ESL建模和驗證。

  2.熟練使用C或C++語言。

  3.熟練使用腳本語言,比如perl、tcl、python等中的一種;

  4.微電子、通信、計算機等理工類本科及以上學(xué)歷;

  5.了解數(shù)字電路設(shè)計、微機原理;

  6.善于溝通,具有很好的團隊協(xié)作能力。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。