在每年找工作的時(shí)候,在校學(xué)生就會(huì)分割成軟件崗位和硬件崗位兩大陣營。心儀軟件崗位的同學(xué)就是專注于各種算法和語法寶典;而立志硬件崗位的同學(xué)則會(huì)專注于數(shù)字電路、模擬電路、單片機(jī)、FPGA。出現(xiàn)這樣的情況,一方面是因?yàn)閭€(gè)人興趣和工資收益使然,另一方面也是因?yàn)楣菊衅笉徫坏目桃庖龑?dǎo)。
哪怕是對(duì)軟件和硬件都有涉獵的同學(xué),也不得不在軟件和硬件之間做出選擇。但實(shí)際工作中的崗位遠(yuǎn)不是硬件和軟件這么簡單的劃分?,F(xiàn)在,推薦一個(gè)需要涉獵軟件和硬件的崗位——集成電路系統(tǒng)建模工程師。
1.集成電路設(shè)計(jì)流程方法的演進(jìn)與軟件對(duì)于集成電路設(shè)計(jì)的作用
從60年代集成電路出現(xiàn)到今天,集成電路設(shè)計(jì)流程經(jīng)歷了三次較大的變革。每一次變革都使得軟件在集成電路設(shè)計(jì)中起到越來越大的作用。
1.1專業(yè)分工:前端設(shè)計(jì)和后端設(shè)計(jì)
在最開始的時(shí)候,集成電路的設(shè)計(jì)完全依賴于基于標(biāo)準(zhǔn)器件的手工操作。工程師需要自己繪制電路版圖,再交付制造工序。在這一時(shí)期,模擬集成電路和數(shù)字集成電路在設(shè)計(jì)流程上的區(qū)分還不明顯。
圖1. 手工繪制版圖(來源:網(wǎng)絡(luò))
這種方式顯然不能適應(yīng)大規(guī)模集成電路的設(shè)計(jì)。隨著設(shè)計(jì)流程分工細(xì)化,出現(xiàn)了“前端+后端”的設(shè)計(jì)流程。前端設(shè)計(jì)側(cè)重于邏輯設(shè)計(jì)/功能設(shè)計(jì),將一個(gè)想法轉(zhuǎn)化成邏輯電路的原理圖。后端設(shè)計(jì)側(cè)重于物理設(shè)計(jì),將這個(gè)電路轉(zhuǎn)化為可以制造的版圖,包括布局、時(shí)鐘樹、布線、設(shè)計(jì)規(guī)則檢查等等。前端設(shè)計(jì)完成并且驗(yàn)證通過后,將原理圖提供給后端設(shè)計(jì);后端設(shè)計(jì)完成并且驗(yàn)證通過后,將版圖交付制造工序。
“前端+后端”的設(shè)計(jì)流程對(duì)于數(shù)字集成電路和模擬集成電路是通用的。對(duì)于數(shù)字集成電路,前端設(shè)計(jì)和后端設(shè)計(jì)已經(jīng)演化為了相互獨(dú)立的兩個(gè)部門。公司內(nèi)部也常常按照前端設(shè)計(jì)(邏輯設(shè)計(jì))和后端設(shè)計(jì)(物理設(shè)計(jì))劃分部門。前端設(shè)計(jì)更側(cè)重于邏輯設(shè)計(jì)(與或非的布爾邏輯),不需要考慮物理設(shè)計(jì)的細(xì)節(jié)。不過模擬集成電路并沒有非常徹底的前端和后端分工。前端設(shè)計(jì)和后端設(shè)計(jì)都需要充分考慮晶體管半導(dǎo)體特性以及布局布線的細(xì)節(jié)才能夠滿足設(shè)計(jì)規(guī)格。
圖2. “前端+后端”設(shè)計(jì)流程
“前端+后端”也是一個(gè)相互迭代的過程。如果后端工程師發(fā)現(xiàn)無法滿足設(shè)計(jì)規(guī)格的時(shí)候(時(shí)序違例、面積過大、功耗過高等),可能會(huì)要求前端設(shè)計(jì)進(jìn)行相應(yīng)的調(diào)整。隨著工藝的進(jìn)步和芯片設(shè)計(jì)參數(shù)的提高,這種反饋越來越強(qiáng)。
設(shè)計(jì)流程的發(fā)展和鞏固還依賴于流程化的電子設(shè)計(jì)自動(dòng)化(EDA)工具的出現(xiàn)。龍頭EDA工具商都提供全流程的EDA工具鏈。這些工具鏈能夠滿足設(shè)計(jì)者從想法到流片的全部設(shè)計(jì)和驗(yàn)證流程,甚至可以引導(dǎo)設(shè)計(jì)者完成設(shè)計(jì)。Synposys公司的EDA工具牢牢占領(lǐng)著國內(nèi)數(shù)字集成電路的市場,DC+VCS和ICC+PT+VCS是國內(nèi)大部分設(shè)計(jì)公司的標(biāo)配。Cadence公司的EDA工具在模擬集成電路設(shè)計(jì)和數(shù)字電路設(shè)計(jì)后端市場,尤其是數(shù)?;旌闲酒袌鼍哂胁豢商娲?。畢竟Cadence是做后端工具起家的。FPGA的設(shè)計(jì)工具也是類似的情況,Intel的Quartus和Xilinx的Vivado都能夠引導(dǎo)用戶完成一次完整而有效的設(shè)計(jì)。
“前端+后端”已經(jīng)成為集成電路設(shè)計(jì)的主要流程,迄今沒有顛覆性的變化。目前設(shè)計(jì)流程的發(fā)展趨勢可以概括為:提高EDA工具的自動(dòng)化程度,減少人工干預(yù)和接入,降低設(shè)計(jì)門檻,提高生產(chǎn)率。
1.2提升自動(dòng)化程度:芯片設(shè)計(jì)軟件化
在硬件描述語言(HDL)出現(xiàn)之前,前端設(shè)計(jì)和后端設(shè)計(jì)的接口就是原理圖。但是設(shè)計(jì)一個(gè)復(fù)雜電路的原理圖是非常辛苦和耗時(shí)的。目前,HDL已經(jīng)完全取代了原理圖作為前端設(shè)計(jì)的載體。前端工程師將設(shè)計(jì)想法轉(zhuǎn)化為HDL描述。隨后,綜合工具將HDL描述轉(zhuǎn)化為網(wǎng)表。網(wǎng)表用標(biāo)準(zhǔn)單元的連接描述電路。前端設(shè)計(jì)和后端設(shè)計(jì)的接口接受用HDL語言描述的網(wǎng)表。常用的HDL語言就是Verilog和VHDL。
HDL的出現(xiàn),讓前端設(shè)計(jì)師得到了充分的解放,也讓數(shù)字集成電路設(shè)計(jì)出現(xiàn)明顯的軟件化趨勢。
首先,從形式上,HDL代碼與計(jì)算機(jī)軟件程序非常相似。不過這里必須要說明,HDL代碼與計(jì)算機(jī)軟件程序有明顯的區(qū)別,即便是在行為級(jí)描述。HDL代碼是對(duì)電路行為或者連接的描述,而不是類似于軟件程序那樣的可執(zhí)行程序。相對(duì)于軟件語言,HDL語言特別加強(qiáng)了對(duì)于并行化的描述和位運(yùn)算的描述。以Verilog HDL為例。在Verilog中,賦值分為阻塞賦值和非阻塞賦值,以描述信號(hào)之間的并發(fā)關(guān)系。Verilog相對(duì)于高級(jí)軟件編程語言,補(bǔ)充了比特級(jí)別的信號(hào)類型。
其次,HDL代碼可以通過腳本來生成。HDL代碼的呈現(xiàn)形式是文本文件。這就使得,可以用腳本程序(比如python,perl等)來生成一個(gè)有規(guī)律的HDL代碼文件。通過腳本生成的HDL代碼經(jīng)過綜合之后得到的電路,會(huì)與行為描述產(chǎn)生的電路等效,甚至?xí)韧ㄟ^行為級(jí)描述產(chǎn)生的電路更加簡化。這是因?yàn)椋琀DL代碼的不同寫法只是對(duì)相同電路功能的不同描述而已。只要功能(輸入和輸出的對(duì)應(yīng)關(guān)系)一致,那么綜合得到的電路就是等效的。比如,對(duì)于一個(gè)8比特?cái)?shù)除3求余數(shù)和模數(shù)。直接的想法是寫一個(gè)除法器按照移位減法進(jìn)行計(jì)算。同時(shí),也可以寫一個(gè)腳本,直接生成256個(gè)輸入對(duì)應(yīng)的輸出,并用case結(jié)構(gòu)寫成一個(gè)Verilog模塊。生成的腳本綜合出的模塊就是一個(gè)組合邏輯。綜合工具會(huì)使得電路結(jié)構(gòu)最簡。這一種策略在實(shí)際工程中經(jīng)常遇到。
此外,HDL代碼是可以直接仿真的。但是,仿真是串行執(zhí)行的,所以HDL語言還要規(guī)定大量的仿真規(guī)則以規(guī)定HDL代碼在仿真時(shí)的行為。在仿真時(shí),EDA軟件借鑒了軟件的概念來提供調(diào)試功能(單步調(diào)試、信號(hào)值等)。這使得HDL代碼更加類似于軟件,也使得HDL代碼的概念變得混亂。
1.3 SoC設(shè)計(jì)方法學(xué):IP核和“攢”芯片
隨著芯片集成能力的提升,由一家設(shè)計(jì)公司完成電路中所有模塊開發(fā)的成本顯著提高。模塊的定義、開發(fā)、驗(yàn)證是一個(gè)消耗時(shí)間和人力的工作。另一方面,隨著SoC設(shè)計(jì)方法學(xué)的流行,芯片內(nèi)部的組成模塊也越來越趨同。一款SoC芯片內(nèi)部一般都由CPU核、片內(nèi)互聯(lián)、片內(nèi)存儲(chǔ)、DRAM接口、USB接口等基本模塊以及各種慢速外設(shè)組成。這就使得不同設(shè)計(jì)公司之間可以復(fù)用設(shè)計(jì)。
在這樣的背景下,產(chǎn)生了一類IP供應(yīng)商。這些IP供應(yīng)商為設(shè)計(jì)公司提供充分驗(yàn)證過的成熟的IP模塊。設(shè)計(jì)公司向IP供應(yīng)商支付可觀的費(fèi)用(仍然可能低于設(shè)計(jì)公司自行開發(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è)計(jì)形式,即“攢”芯片。設(shè)計(jì)公司只需要專注于自己的芯片中獨(dú)到的部分,并做到有亮點(diǎn)盈利。其他部分都可以通過購買各種IP獲得。比如一款實(shí)現(xiàn)某種算法的SoC,其中的算法模塊是公司的獨(dú)到專利,由設(shè)計(jì)公司自己設(shè)計(jì)、驗(yàn)證并優(yōu)化。這款SoC中的CPU核(作為交互控制接口,運(yùn)行固件)、片內(nèi)互聯(lián)、視頻編解碼、內(nèi)存接口以及視頻接口都可以通過購買IP獲得。
總而言之,集成電路設(shè)計(jì)流程的最大的特點(diǎn)就是分散和專精。從設(shè)計(jì)到制造,需要經(jīng)過很多公司的接力才能完成。從IP提供商、EDA工具商、設(shè)計(jì)公司到制造商,每家公司都可以決定最終芯片的質(zhì)量,卻又不能保證最終芯片質(zhì)量。反過來,對(duì)于設(shè)計(jì)公司來說,使用已經(jīng)經(jīng)過充分驗(yàn)證的流程和IP,可以顯著降低公司自己的研發(fā)成本和風(fēng)險(xiǎn)成本。對(duì)于小公司以及創(chuàng)業(yè)公司,尤為如此。對(duì)于大公司而言,出于供應(yīng)鏈安全性和定制化的考慮,可能會(huì)在IP核上進(jìn)行布局,但是一般不會(huì)布局EDA工具。
在片上系統(tǒng)的設(shè)計(jì)流程中,模型的地位得到了重要的提升,尤其是對(duì)于完整系統(tǒng)的建模。相對(duì)于單一功能的芯片,片上系統(tǒng)的復(fù)雜度空前的提高,完整走完一塊芯片的“前端+后端”流程是非常耗時(shí)而且非常昂貴的。設(shè)計(jì)公司顯然不能為所有的設(shè)計(jì)方案都實(shí)際做一次流片,也不可能用一次次流片來修正設(shè)計(jì)方案的缺陷。因此,設(shè)計(jì)公司紛紛用模型研究來進(jìn)行設(shè)計(jì)方案的探索和評(píng)估。一方面,開發(fā)建模的成本要低得多了,而且模型的靈活性高,迭代速度快。另一方面,模型能夠反映設(shè)計(jì)特性?;谀P头抡娴姆治鼋Y(jié)果能夠反映設(shè)計(jì)的實(shí)際情況。
2.設(shè)計(jì)流程向前延伸——建模
“前端+后端”的設(shè)計(jì)流程是以詳細(xì)的和完整的設(shè)計(jì)規(guī)格書為起點(diǎn)的。前端工程師將設(shè)計(jì)規(guī)格書轉(zhuǎn)化為HDL描述,繼續(xù)完成整個(gè)設(shè)計(jì)流程。這確實(shí)是一個(gè)很完備的設(shè)計(jì)流程。
不過,如果設(shè)計(jì)規(guī)格書就定義錯(cuò)了或者定義不完善呢?在芯片功能較為簡單、設(shè)計(jì)規(guī)格較為明確的時(shí)代,可以在驗(yàn)證階段(前端驗(yàn)證或者后端驗(yàn)證)發(fā)現(xiàn)設(shè)計(jì)規(guī)格不能滿足設(shè)計(jì)需求。進(jìn)而反過頭來修改和完善設(shè)計(jì)規(guī)格書,再重新進(jìn)行設(shè)計(jì)和驗(yàn)證的迭代。但隨著集成電路規(guī)模的不斷提高,“設(shè)計(jì)+驗(yàn)證”的迭代周期變得很長。如果到了驗(yàn)證階段才發(fā)現(xiàn)技術(shù)路線錯(cuò)誤,這樣浪費(fèi)的人力和時(shí)間成本就太大了。因此,如何驗(yàn)證設(shè)計(jì)規(guī)格是否正確就變得至關(guān)重要了,因?yàn)檫@決定了后續(xù)的工作是否在正確的道路上前進(jìn)。
2.1建模的目的
在進(jìn)行復(fù)雜集成電路設(shè)計(jì)時(shí),對(duì)將要設(shè)計(jì)的集成電路進(jìn)行建模驗(yàn)證成為了保證集成電路設(shè)計(jì)不犯“方向性錯(cuò)誤”的不二選擇。對(duì)集成電路進(jìn)行抽象建模的目的可以歸納為三個(gè)方面。
第一個(gè)方面,通過軟件仿真研究建模對(duì)象的性質(zhì)和規(guī)律。這里需要研究的規(guī)律包括物理特性的規(guī)律,比如晶體管的電路模型、功耗模型等。還需要研究的是需要實(shí)現(xiàn)的功能的參數(shù)特性。通過模型仿真,可以得到某一個(gè)參數(shù)與某個(gè)性能指標(biāo)的定量關(guān)系。對(duì)于復(fù)雜的系統(tǒng),這種定量關(guān)系往往都是無法通過公式直接計(jì)算得到顯性的解析結(jié)果,必須要依靠仿真模型經(jīng)過多次迭代和逼近后得到數(shù)值結(jié)果。
舉一個(gè)分析截?cái)嗾`差的例子,以Cordic算法進(jìn)行單精度浮點(diǎn)數(shù)的開方運(yùn)算(僅作為舉例,浮點(diǎn)數(shù)開方一般不用Cordic算法)。單精度浮點(diǎn)數(shù)有23位尾數(shù),組成1位整數(shù)和23位小數(shù)的定點(diǎn)數(shù)。如果直接以這樣的精度計(jì)算,那么平均誤差相當(dāng)于最后4個(gè)比特是無效的。為了能夠降低誤差,需要對(duì)參與中間計(jì)算步驟的定點(diǎn)數(shù)擴(kuò)展為1位整數(shù)和30位小數(shù)的定點(diǎn)數(shù)。計(jì)算完成后,再截?cái)酁榉蠁尉雀↑c(diǎn)數(shù)定義的尾數(shù)。中間計(jì)算步驟的位擴(kuò)展具體參數(shù)就需要通過建模和仿真來加以驗(yàn)證。
另舉一個(gè)片上互聯(lián)的例子。在片上網(wǎng)絡(luò)中,路由器中的緩存大小對(duì)于網(wǎng)絡(luò)吞吐率的影響雖然可以用一些理論模型來加以描述,但是這類模型通常只能給出吞吐率的上界。通過模型仿真,可以明確的得到緩存大小與網(wǎng)絡(luò)吞吐率的量化對(duì)應(yīng)關(guān)系。
第二個(gè)方面,建??梢詫?duì)設(shè)計(jì)方案和設(shè)計(jì)規(guī)格進(jìn)行初步驗(yàn)證或并以此為基礎(chǔ)探索更優(yōu)的設(shè)計(jì)方案。在架構(gòu)設(shè)計(jì)階段,可以快速實(shí)現(xiàn)多種設(shè)計(jì)方案的模型,并且通過模型仿真設(shè)計(jì)方案的特性,明確哪種設(shè)計(jì)方案最具有繼續(xù)研究的價(jià)值。在這一方面的應(yīng)用中,模型驗(yàn)證多用于參數(shù)選擇,比如確定算法中參與運(yùn)算的各個(gè)變量的精度、網(wǎng)絡(luò)中緩存的大小、神經(jīng)網(wǎng)絡(luò)的規(guī)模等等。
再舉一個(gè)架構(gòu)設(shè)計(jì)的例子。多核異構(gòu)芯片中的片上互聯(lián)結(jié)構(gòu)設(shè)計(jì)時(shí),需要滿足一些核心之間高密度數(shù)據(jù)流傳輸帶寬需求。這就使得,同構(gòu)的片上網(wǎng)絡(luò)結(jié)構(gòu)和路由算法不適用,而設(shè)計(jì)新的拓?fù)浣Y(jié)構(gòu)和路由算法能否真正達(dá)到設(shè)計(jì)需求就需要模型仿真來為其背書。
另外一個(gè)例子和工程密切相關(guān)。商業(yè)公司雖然可以從公開發(fā)表的學(xué)術(shù)論文中尋找設(shè)計(jì)方案,但學(xué)術(shù)論文在應(yīng)用環(huán)境和驗(yàn)證環(huán)境上常常語焉不詳。雖然學(xué)術(shù)論文都宣稱自己取得了顯著的參數(shù)提升,但是并不意味著這些方法都可以利用到的某個(gè)特定的設(shè)計(jì)中。如何甄別出對(duì)具體設(shè)計(jì)有價(jià)值的方案,也是模型的重要作用。
第三個(gè)方面,超前軟件開發(fā)。當(dāng)下的大部分芯片都不再是完成某個(gè)固定功能的簡單模塊,而是一個(gè)集成在芯片上的完整系統(tǒng)。即便是為某一個(gè)單一功能的芯片,其中也通常集成了某種輕量級(jí)的CPU核來實(shí)現(xiàn)參數(shù)配置、數(shù)據(jù)交互以及功能管理,如藍(lán)牙芯片CC2640、充電器管理芯片SE8A等。所以,當(dāng)下的芯片,大多常常需要固件、BIOS、OS等軟件配合。
按照傳統(tǒng)的開發(fā)模式,這些軟件的開發(fā)都只能在集成電路設(shè)計(jì)完成之后進(jìn)行,最早也需要在FPGA原型驗(yàn)證時(shí)進(jìn)行。這不但造成軟件開發(fā)進(jìn)度的延遲,軟件工程師也無法對(duì)集成電路的設(shè)計(jì)提出有效的意見。只能是硬件有什么,軟件就用什么。這顯然不是一種最優(yōu)的開發(fā)方法。
而基于硬件模型可以將軟件開發(fā)的工作提前到與硬件同步進(jìn)行。在硬件工程師按照模型設(shè)定的設(shè)計(jì)規(guī)格進(jìn)行硬件開發(fā)的時(shí)候,軟件工程師也可以在這種模型上開發(fā)相應(yīng)的軟件,并且運(yùn)行調(diào)試。
更為重要的是,由于軟件工程師通過模型在設(shè)計(jì)早期就參與了芯片的設(shè)計(jì),軟件工程師可以對(duì)芯片的軟硬件功能劃分和軟硬件接口提出有價(jià)值的建議。這些改動(dòng)對(duì)于芯片設(shè)計(jì)完成后的軟硬件聯(lián)合優(yōu)化可以起到非常重要的作用。
2.2建模對(duì)于設(shè)計(jì)流程的影響
建模可以貫穿在集成電路的設(shè)計(jì)流程,但是建模工程師則更多的出現(xiàn)在設(shè)計(jì)流程的早期,也就是在設(shè)計(jì)方案確定之前。
下面以實(shí)現(xiàn)某種算法型的SoC芯片為例來看一下建模工程師如何參與集成電路的設(shè)計(jì)。
2.2.1建立算法模型
在這款芯片的研發(fā)早期,建模工程師對(duì)芯片使用的算法建立模型,并且對(duì)算法模型進(jìn)行仿真。這一過程中,驗(yàn)證了算法的正確性和可行性。這時(shí)的算法模型是理想的。
接下類,考慮電路計(jì)算過程中引入的截?cái)嗾`差,也就是引入計(jì)算的精度。通過調(diào)整參與計(jì)算的數(shù)據(jù)的寬度,保證最終結(jié)果的精度也滿足要求。這樣就得到了算法的功能模型。也就說,這個(gè)功能模型輸出的結(jié)果應(yīng)該是實(shí)際硬件電路輸出的結(jié)果相同。
再次對(duì)模型進(jìn)行細(xì)化,考慮到計(jì)算電路的時(shí)序特性,并且補(bǔ)充算法模塊的輸入和輸出接口時(shí)序。這樣就得到的算法的時(shí)序模型。
通過上面的建模過程,完成了對(duì)算法的探索,得到了算法的設(shè)計(jì)規(guī)格。接下來,就可以接入集成電路設(shè)計(jì)的前端流程了。硬件工程師可以根據(jù)模型探索得到的設(shè)計(jì)規(guī)格重新編寫HDL描述。隨著高層語言綜合技術(shù)(HLS)的發(fā)展,硬件工程師也可以通過HLS工具將模型直接轉(zhuǎn)化為HDL描述。
2.2.2建立架構(gòu)模型
這款算法芯片其實(shí)是一款SoC芯片。公司設(shè)計(jì)的算法模塊需要添加到一種CPU框架中,作為CPU核的一種外設(shè)或者協(xié)處理器。這里需要取舍的架構(gòu)問題,例如:算法模塊集成到CPU核的哪一個(gè)層次(可以作為CPU核內(nèi)部運(yùn)算單元、CPU外部共享私有內(nèi)存的協(xié)處理器、CPU核外部總線上掛載的獨(dú)立設(shè)備等)?CPU核如何調(diào)用該模塊(中斷/查詢/DMA/獨(dú)立訪存)?SoC需要為算法模塊提供多大的內(nèi)存帶寬?架構(gòu)模型可以對(duì)這些問題給出量化的評(píng)估。
硬件工程師可以使用IP核來復(fù)用成熟的設(shè)計(jì)。建模工程師也可以使用虛擬IP(VIP)來復(fù)用成熟的設(shè)計(jì)。虛擬IP由IP提供商、EDA廠商或“第三方”針對(duì)某種IP提供。VIP應(yīng)與IP功能和時(shí)序相同。建模工程師將VIP與公司自己的算法IP的模型組合在一起,就得到了SoC的架構(gòu)模型?;诩軜?gòu)模型進(jìn)行各種仿真,例如運(yùn)行各種標(biāo)準(zhǔn)的測試程序,就可以對(duì)于以上提到的各種問題加以驗(yàn)證和評(píng)估。
同時(shí),軟件工程師也會(huì)參與到這一個(gè)過程中。軟件工程師開發(fā)的固件可以在架構(gòu)模型上運(yùn)行,并且模擬對(duì)算法模塊的調(diào)用過程。因此,軟件工程師能夠?qū)τ布蛙浖δ艿膭澐趾徒涌诮o出有價(jià)值的改進(jìn)意見。
2.2.3 建立驗(yàn)證模型
模型并不是只用于設(shè)計(jì)流程早期進(jìn)行算法設(shè)計(jì)和架構(gòu)設(shè)計(jì)的時(shí)候,算法模型和架構(gòu)模型適當(dāng)加以改造后還可以成為驗(yàn)證階段的黃金(golden)模型。在相同的激勵(lì)下,如果模型和設(shè)計(jì)提供相同的結(jié)果,那么設(shè)計(jì)是正確的;反之,設(shè)計(jì)存在缺陷。黃金模型也提供了設(shè)計(jì)中的關(guān)鍵點(diǎn)的中間結(jié)果。這些中間結(jié)果在模型和設(shè)計(jì)中都可以找到,可以方便用來調(diào)試設(shè)計(jì)的缺陷。
還有一種模型的目的是為了實(shí)現(xiàn)軟硬件聯(lián)合仿真驗(yàn)證。在設(shè)計(jì)流程中,除了使用測試向量驗(yàn)證設(shè)計(jì)模塊是否正確,還需要驗(yàn)證模塊能否使得實(shí)際系統(tǒng)滿足設(shè)計(jì)要求。對(duì)于流水線上的一個(gè)隊(duì)列緩存,測試向量只能驗(yàn)證這個(gè)緩存能夠正確的讀寫數(shù)據(jù),但是無法驗(yàn)證這個(gè)緩存是否會(huì)成為流水線的瓶頸,進(jìn)而影響流水線的吞吐率。
此時(shí),系統(tǒng)中的其他模塊也同樣處于開發(fā)和驗(yàn)證流程當(dāng)中,顯然不可能為了驗(yàn)證這一個(gè)模塊而搭建一個(gè)完整系統(tǒng)。另一方面,隨著集成電路規(guī)模的擴(kuò)大,F(xiàn)PGA原型平臺(tái)的性價(jià)比越來越低。能夠容納大規(guī)模設(shè)計(jì)的FPGA原型平臺(tái)的價(jià)格也是相當(dāng)可觀的。因此,最好的驗(yàn)證辦法是將模塊放到由軟件模型構(gòu)成的系統(tǒng)中。被測模塊以RLT代碼和FPGA原型的形式出現(xiàn)在驗(yàn)證平臺(tái)中,系統(tǒng)中的其他模塊以軟件模型的形式出現(xiàn)在驗(yàn)證平臺(tái)中。軟件模型向被測模塊注入符合實(shí)際情況的激勵(lì),并且響應(yīng)被測模塊的輸出。通過軟硬件聯(lián)合仿真環(huán)境,建模工程師可以獲得設(shè)計(jì)模塊對(duì)于完整系統(tǒng)的影響,評(píng)估設(shè)計(jì)模塊能否使得完整系統(tǒng)滿足設(shè)計(jì)要求。
2.3使用系統(tǒng)建模優(yōu)勢
系統(tǒng)建模的核心優(yōu)勢就在于一個(gè)“快”字。
系統(tǒng)建模仿真速度快是因?yàn)槟P褪÷粤艘恍┕δ芴匦院臀锢韺?shí)現(xiàn)細(xì)節(jié),那么系統(tǒng)模型仿真的速度肯定快于RTL編碼仿真的速度。這是因?yàn)镽TL仿真是比特級(jí)別的,而軟件模型仿真是信號(hào)級(jí)別的。比如,RTL仿真需要仿真加法器中每一個(gè)比特的動(dòng)作;軟件模型則只需要一條加法語句即可。其次,對(duì)于非定長結(jié)構(gòu),軟件可以用循環(huán)實(shí)現(xiàn),并且只進(jìn)行必要的循環(huán);硬件不支持非定長結(jié)構(gòu),只能按照最大可能的結(jié)構(gòu)展開,再通過使能關(guān)閉不需要的單元或者放棄不需要的結(jié)果。這導(dǎo)致RTL仿真時(shí)需要做大量冗余的運(yùn)算。最后,RTL仿真是4值的(0,1,X,Z),軟件仿真是二值的(0,1)。
當(dāng)然,模型的精度(尤其是時(shí)序的精度)和速度是一對(duì)矛盾體,在提高仿真速度時(shí)必然會(huì)導(dǎo)致精度有一定損失,需要建模工程師根據(jù)建模的目的進(jìn)行平衡。
開發(fā)速度快也是“快”的另外一方面。編寫軟件的成本要小于編寫硬件實(shí)現(xiàn)的成本。軟件和硬件開發(fā)的時(shí)間可以分為編寫代碼和調(diào)試bug。由于HDL不能支持可變循環(huán)等不定結(jié)構(gòu),所以硬件HDL的表達(dá)能力要遠(yuǎn)小于軟件的表達(dá)能力。而且,由于調(diào)試方法的限制,調(diào)試軟件錯(cuò)誤要比調(diào)試硬件錯(cuò)誤容易得多。尤其是對(duì)于編碼過程中引入的bug,軟件調(diào)試要比硬件調(diào)試簡單很多。
3. 系統(tǒng)建模工程師
最后回到系統(tǒng)建模工程師的話題。系統(tǒng)建模工程師在設(shè)計(jì)公司中的人數(shù)不多,但是很重要。設(shè)計(jì)公司擁有的建模團(tuán)隊(duì)的實(shí)力從一定程度上可以反映公司未來技術(shù)演進(jìn)的實(shí)力有多強(qiáng)。有些公司沒有獨(dú)立的建模團(tuán)隊(duì),而是在架構(gòu)團(tuán)隊(duì)、設(shè)計(jì)團(tuán)隊(duì)和驗(yàn)證團(tuán)隊(duì)中分散設(shè)置建模崗位或者人員。崗位的名稱也并不統(tǒng)一,只能通過崗位職責(zé)和技術(shù)要求判斷。附錄中列出部分公司的建模工程師的崗位。
3.1 系統(tǒng)建模工程師的主要職責(zé)
系統(tǒng)建模工程師的日常工作是主要是通過模型仿真對(duì)設(shè)計(jì)方案進(jìn)行評(píng)估,完成“建模-仿真-評(píng)估”的迭代。首先,根據(jù)項(xiàng)目需要建立模型。然后,進(jìn)行仿真,收集數(shù)據(jù)。為了能夠反映出設(shè)計(jì)的正面和負(fù)面影響,仿真要涵蓋盡可能多的應(yīng)用環(huán)境(測試程序或測試向量)。最后,分析仿真數(shù)據(jù),評(píng)估設(shè)計(jì)方案能否滿足設(shè)計(jì)需求、評(píng)估模塊或者系統(tǒng)設(shè)計(jì)方案有無缺陷等。
系統(tǒng)建模工程師的具體工作方向可以分為架構(gòu)建模和驗(yàn)證建模兩個(gè)方向。架構(gòu)建模評(píng)估的是想法;驗(yàn)證建模評(píng)估的是具體設(shè)計(jì)。
在架構(gòu)建模方向,建模工程師的主要輸出就是用大量的仿真數(shù)據(jù)評(píng)估設(shè)計(jì)方案。當(dāng)設(shè)計(jì)不滿足需求或存在缺陷時(shí)時(shí)候,架構(gòu)建模還要被用來驗(yàn)證改進(jìn)方案能否修正設(shè)計(jì)缺陷并且不引起更多的問題。在仿真結(jié)束后應(yīng)給出改進(jìn)方案是否可行的結(jié)論,并反饋給方案的制定者(設(shè)計(jì)方案通常為資深架構(gòu)師或設(shè)計(jì)主管共同協(xié)商確定)。
在驗(yàn)證建模方向的工程師的主要職責(zé)是將電路仿真的結(jié)果與架構(gòu)模型和算法模型的仿真結(jié)果進(jìn)行對(duì)比,可以判斷電路功能是否正確。而仿真的結(jié)果要反饋給RTL設(shè)計(jì)人員,用于檢驗(yàn)其RTL設(shè)計(jì)中存在什么問題。驗(yàn)證方向的建模工程師還會(huì)為驗(yàn)證模型和系統(tǒng)搭建軟硬件聯(lián)合驗(yàn)證環(huán)境,提供作為激勵(lì)和收集被測模塊響應(yīng)的軟件模型,開發(fā)信號(hào)交互的驅(qū)動(dòng)。
3.2 系統(tǒng)建模工程師的能力
為了適應(yīng)建模工作,系統(tǒng)建模工程師的能力要求與硬件開發(fā)工程師和軟件開發(fā)工程師有很大不同。
從技術(shù)方面,系統(tǒng)建模工程師需要具備廣闊的技術(shù)涉獵范圍,但是不要求樣樣精通。除了對(duì)于軟件設(shè)計(jì)和硬件設(shè)計(jì)的技術(shù),系統(tǒng)建模工程師還要了芯片功能的相關(guān)知識(shí),比如計(jì)算機(jī)原理、信號(hào)處理和AI等等。快速學(xué)習(xí)和快速上手能力是系統(tǒng)建模工程師區(qū)別于其他崗位最大的不同。
從人際交往方面,系統(tǒng)工程師不僅需要較好的人際溝通能力,還需要較強(qiáng)的技術(shù)溝通能力。為了獲取系統(tǒng)的特性并且反饋模型研究的結(jié)果,系統(tǒng)建模工程師需要與硬件和軟件開發(fā)工程師進(jìn)行反復(fù)的交流。良好的人際溝通能力自然會(huì)使這一過程變得更高效。
另一方面,硬件工程師和軟件工程師的技術(shù)語言和體系是完全不同的。前端工程師和后端工程師的觀點(diǎn)和想法也會(huì)有不同。系統(tǒng)建模工程師要能夠以對(duì)方熟悉的方式與硬件或軟件工程師進(jìn)行交流,這就是技術(shù)溝通能力。技術(shù)溝通能力建立在建模工程師對(duì)于技術(shù)的充分了解的基礎(chǔ)上,也建立在建模工程師的同理心和換位思考的角度上。
從個(gè)人性格方面,系統(tǒng)建模工程師需要對(duì)于技術(shù)保有單純的好奇和興趣。系統(tǒng)建模工程師需要學(xué)習(xí)很多方面的知識(shí),而且每一個(gè)新項(xiàng)目都不是對(duì)之前項(xiàng)目的重復(fù)。如果沒有個(gè)性支撐,系統(tǒng)建模工程師也會(huì)陷入疲憊。
對(duì)系統(tǒng)建模工程師真正的挑戰(zhàn)在于,如何在沒有參考的情況下,確認(rèn)模型實(shí)現(xiàn)和分析是正確的。如果模型有錯(cuò)誤或者缺陷,那么會(huì)直接導(dǎo)致仿真結(jié)果和分析結(jié)果乃至決策結(jié)果錯(cuò)誤。在沒有對(duì)應(yīng)硬件系統(tǒng)的時(shí)候,系統(tǒng)建模工程師是沒有辦法對(duì)模型進(jìn)行校準(zhǔn)的。系統(tǒng)建模工程師必須要能夠根據(jù)對(duì)設(shè)計(jì)的理解,設(shè)計(jì)巧妙的測試程序,驗(yàn)證模型是否正確。要做到這一點(diǎn),需要建模工程師具有足夠的技術(shù)積累,并且深入理解被建模的設(shè)計(jì)。同時(shí),建模工程師要具有縝密的思維和清晰的邏輯。
系統(tǒng)建模工程師“站得高,看得遠(yuǎn)”。系統(tǒng)建模工程師可以學(xué)習(xí)到設(shè)計(jì)流程中各個(gè)環(huán)節(jié)的知識(shí),不僅有邏輯設(shè)計(jì)的技巧,還有物理設(shè)計(jì)的體系,更有芯片用途的重要背景知識(shí)。最終,系統(tǒng)建模工程師是可以將這個(gè)系統(tǒng)講清楚的人。
系統(tǒng)建模工程師雖然可能接觸很多技術(shù)領(lǐng)域,不過沒有明確的技術(shù)提升路徑。如果系統(tǒng)建模工程師不能夠主動(dòng)思考,認(rèn)為完成建模和驗(yàn)證的工作就夠了,那么系統(tǒng)建模工程師就在設(shè)計(jì)流程中陷入了被動(dòng)的角色。系統(tǒng)建模工程師的技術(shù)提升依賴于工程師自己多想一點(diǎn)。對(duì)遇到的有趣現(xiàn)象的刨根問底,才使得系統(tǒng)建模工程師不斷夯實(shí)技術(shù),提升技術(shù)。系統(tǒng)建模工程師可以通過建模來充分理解現(xiàn)有設(shè)計(jì)以及設(shè)計(jì)的內(nèi)在規(guī)律,從而自己提出設(shè)計(jì)優(yōu)化方案,在設(shè)計(jì)流程中占據(jù)主動(dòng)。
附錄:部分公司對(duì)于集成電路建模工程師任職要求
職位1:RISC-V CPU設(shè)計(jì)/建模資深工程師
崗位職責(zé)
1.研發(fā)高性能RISC-V CPU Core;
2.制定/參與RISC-V處理器模塊微結(jié)構(gòu)設(shè)計(jì)規(guī)范;
3.負(fù)責(zé)/參與開發(fā)RISC-V CPU性能/功耗模擬器、模型和測試集;
4.對(duì)性能、功耗、面積進(jìn)行分析和權(quán)衡,選取RISC-V CPU優(yōu)化設(shè)計(jì)方案;
5.負(fù)責(zé)/參與開發(fā)處理器模塊的RTL;
6.與驗(yàn)證團(tuán)隊(duì)協(xié)作,驗(yàn)證CPU設(shè)計(jì)的正確性;
7.與物理設(shè)計(jì)團(tuán)隊(duì)協(xié)作,實(shí)現(xiàn)時(shí)序收斂和功耗優(yōu)化。
崗位要求
1.計(jì)算機(jī)科學(xué)、計(jì)算機(jī)工程或電子工程等相關(guān)專業(yè)學(xué)位;
2.有以下至少一項(xiàng)經(jīng)驗(yàn):計(jì)算機(jī)體系結(jié)構(gòu)知識(shí);CPU微架構(gòu)知識(shí);CPU周期精準(zhǔn)性能模擬器,如GEM5等;Power management, security等領(lǐng)域知識(shí);
3.有工業(yè)界處理器研發(fā)經(jīng)驗(yàn)者優(yōu)先;
4.良好的團(tuán)隊(duì)合作精神,工作態(tài)度積極。
職位2:x86系統(tǒng)建模&性能分析工程師
崗位職責(zé)
1.針對(duì)CPU、Cache、系統(tǒng)總線、DDR控制器等關(guān)鍵部件構(gòu)建性能模型;
2.仿真、分析現(xiàn)有系統(tǒng)架構(gòu)的性能瓶頸;
3.探索新的架構(gòu)設(shè)計(jì)方案、提供架構(gòu)改進(jìn)方面和初步性能評(píng)估參數(shù);
4.搭建系統(tǒng)功能級(jí)仿真平臺(tái),為固件、驅(qū)動(dòng)開發(fā)提供支持。
崗位要求
1.計(jì)算機(jī)或電子工程相關(guān)專業(yè);
2.具有良好的C/C++編程能力;
3.對(duì)計(jì)算機(jī)體系結(jié)構(gòu)有較深入的了解,特別是CPU微架構(gòu)、Cache設(shè)計(jì)及DDR控制器;
4.有計(jì)算機(jī)系統(tǒng)架構(gòu)或SoC設(shè)計(jì)經(jīng)驗(yàn)者優(yōu)先;
5.有SystemC開發(fā)經(jīng)驗(yàn)者優(yōu)先;
6.熟悉計(jì)算機(jī)仿真技術(shù)者優(yōu)先,如Bochs,Qemu,GEM5等;
7.有RTL設(shè)計(jì)經(jīng)驗(yàn)者優(yōu)先;
8.熟悉x86匯編和體系結(jié)構(gòu)這優(yōu)先。
職位3:SoC性能模擬工程師
崗位職責(zé)
1.CPU微架構(gòu)性能模擬器開發(fā);
2.系統(tǒng)級(jí)性能模擬器開發(fā);
3.基準(zhǔn)測試程序性能分析和研究;
4.面向微架構(gòu)的基準(zhǔn)測試程序開發(fā)。
崗位要求
1.熟悉CPU微架構(gòu);
2.了解計(jì)算機(jī)體系結(jié)構(gòu);
3.了解linux kernel;
4.具備一定編譯器和指令集知識(shí);
5.熟練C/C++以及python開發(fā)。
職位4:ESL架構(gòu)師
崗位職責(zé)
1.芯片核心算法到整體架構(gòu)的建模,ESL仿真平臺(tái)搭建,應(yīng)用場景用例構(gòu)建;
2.性能仿真數(shù)據(jù)分析,大數(shù)據(jù)自動(dòng)化到智能化處理;
3.基于ESL流程負(fù)責(zé)完成IP建模、平臺(tái)構(gòu)建和仿真,負(fù)責(zé)完成套片或芯片軟硬件調(diào)試和性能分析,實(shí)現(xiàn)架構(gòu)探索和驗(yàn)證;
4.負(fù)責(zé)芯片架構(gòu)ESL需求和端到端計(jì)劃管理;
5.ESL平臺(tái)仿真速度和指令以易用性持續(xù)提升;
6.為有競爭力、高質(zhì)量的芯片架構(gòu)方案提供可靠依據(jù)和數(shù)據(jù),能提供優(yōu)化改進(jìn)架構(gòu)方案;
7.先進(jìn)ESL開發(fā)流程、方法技術(shù)的探索。
崗位要求
1.具有良好的業(yè)務(wù)抽象和芯片系統(tǒng)分析能力,能夠使用SystemC/C+C/CSystemVerilog等語言已經(jīng)芯片ESL建模和驗(yàn)證。
2.熟練使用C或C++語言。
3.熟練使用腳本語言,比如perl、tcl、python等中的一種;
4.微電子、通信、計(jì)算機(jī)等理工類本科及以上學(xué)歷;
5.了解數(shù)字電路設(shè)計(jì)、微機(jī)原理;
6.善于溝通,具有很好的團(tuán)隊(duì)協(xié)作能力。