0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

IC設(shè)計(jì)工程師需要具備的知識(shí)架構(gòu)

jf_78858299 ? 來(lái)源:全棧芯片工程師 kellen.wa ? 作者:全棧芯片工程師 ? 2023-01-21 15:16 ? 次閱讀

I. 技能清單

作為一個(gè)真正合格的數(shù)字IC設(shè)計(jì)工程師,你永遠(yuǎn)都需要去不斷學(xué)習(xí)更加先進(jìn)的知識(shí)和技術(shù)。因此,這里列出來(lái)的技能永遠(yuǎn)都不會(huì)是完整的。我盡量每年都對(duì)這個(gè)列表進(jìn)行一次更新。如果你覺(jué)得這個(gè)清單不全面,可以在本文下留言,我會(huì)盡可能把它補(bǔ)充完整。

  • 語(yǔ)言類(lèi)
    • Verilog-2001/ VHDL
    • SystemVerilog/ SystemC
    • Makefile/ Perl/ Python/ Shell
    • Tcl
  • 工具類(lèi)
    • NCVerilog/ VCS/ ModelSim
    • SimVision/ DVE/ Verdi
    • Vim/ Emacs
    • SVN/ CVS/ Git
    • Microsoft Office
  • 平臺(tái)類(lèi)
  • 其他加分項(xiàng)目
    • MATLAB
    • ISE/ Synplify/ Vivado/ Quartus
    • LEC/Formality
    • VMM/ UVM
    • ESL
    • ZeBu Server
    • JIRA/ Confluence
    • C/ Assembly Language
    • Computer Architecture/ ARM Architecture/ MIPS Architecture

II. 為什么 & 怎么辦

A) Verilog-2001/ VHDL

這里之所以強(qiáng)調(diào)Verilog-2001而不是Verilog-1995,是因?yàn)樵赩erilog-2001中規(guī)定了很多新特性,因此可以產(chǎn)生更好的代碼風(fēng)格。我曾經(jīng)在什么是良好的Verilog代碼風(fēng)格一文中對(duì)新版的接口語(yǔ)法進(jìn)行過(guò)詳細(xì)的舉例說(shuō)明。

這種新的接口方式修改起來(lái)更加簡(jiǎn)單,例化模塊的時(shí)候使用也更加方便,不像舊版的接口語(yǔ)法由于一個(gè)接口需要分3次描述,無(wú)端端增加了代碼行數(shù)而且閱讀和改動(dòng)都很困難,尤其是當(dāng)一個(gè)模塊的接口數(shù)目超過(guò)一個(gè)屏幕的顯示范圍時(shí)Verilog-2001的這種優(yōu)勢(shì)更加突出。

學(xué)習(xí)Verilog最大的問(wèn)題就是,很多國(guó)內(nèi)的書(shū)寫(xiě)得都很不好,書(shū)中的很多例子都是為了說(shuō)明語(yǔ)法特征而存在的,沒(méi)有任何實(shí)用價(jià)值,甚至很多代碼都是錯(cuò)誤的(這里錯(cuò)誤的意思并不是說(shuō)他語(yǔ)法錯(cuò)誤,而是說(shuō)他是不可綜合的,無(wú)法用數(shù)字電路來(lái)對(duì)等實(shí)現(xiàn)的)。

所以,對(duì)于學(xué)習(xí)Verilog,我的建議是,隨便找一本類(lèi)似語(yǔ)法手冊(cè)的書(shū)籍,匆匆把基本語(yǔ)法看過(guò)一遍,搞清楚模塊定義,接口定義,模塊例化,寄存器定義,線(xiàn)定義,always塊怎么寫(xiě)這些基本內(nèi)容后,就開(kāi)始到OpenCores網(wǎng)站上去下載已經(jīng)經(jīng)過(guò)FPGA驗(yàn)證的完整開(kāi)源項(xiàng)目代碼進(jìn)行學(xué)習(xí)。先做到看懂別人寫(xiě)的代碼,然后再?lài)L試自己去模仿,有不懂的問(wèn)題再有針對(duì)性地去網(wǎng)上搜索答案。

Verilog語(yǔ)言與軟件語(yǔ)言最大的區(qū)別就是,因?yàn)樗怯糜诿枋鲭娐返?,因此它的?xiě)法是非常固定的,因?yàn)殡娐返淖兓欠浅S邢薜?。學(xué)習(xí)Verilog的時(shí)候,很多時(shí)候我們并不是在學(xué)習(xí)這門(mén)語(yǔ)言本身,而是學(xué)習(xí)其對(duì)應(yīng)的電路特征,以及如何對(duì)這個(gè)電路進(jìn)行描述。如果心中沒(méi)有電路,那么你是不可能寫(xiě)好Verilog的。

從基礎(chǔ)開(kāi)始,一點(diǎn)點(diǎn)積累類(lèi)似計(jì)時(shí)器,譯碼器這樣的小型電路描述方法是非常重要的。Verilog鼓勵(lì)在電路中進(jìn)行創(chuàng)新,而不是在描述方法上進(jìn)行創(chuàng)新。因此,即使是世界上最牛的Verilog高手,他寫(xiě)出來(lái)的Verilog代碼語(yǔ)法也都是很普通的,而他的創(chuàng)意則在于如何去組合這些基本的小型電路。

舉個(gè)不太恰當(dāng)?shù)睦?,每個(gè)醫(yī)生都會(huì)給你開(kāi)藥打針檢查身體,但是高明的醫(yī)生并不在于他用了多高難度的動(dòng)作去給你扎針,或者給你開(kāi)出什么奇奇怪怪的藥吃,而是他如何快速準(zhǔn)確的診斷出你的病情,用最合適的扎針吃藥組合去治療你。Verilog也是同樣,要學(xué)會(huì)用最規(guī)矩保守的語(yǔ)法,寫(xiě)出運(yùn)行速度最高性能最穩(wěn)定的電路,而不是在語(yǔ)法上瞎費(fèi)工夫。凡是你沒(méi)見(jiàn)到別人寫(xiě)過(guò)的語(yǔ)法,都很可能是錯(cuò)誤的。

VHDL雖然我并不是太了解,但是目前在歐洲很多國(guó)家,VHDL還是主流的RTL設(shè)計(jì)語(yǔ)言。VHDL語(yǔ)言的嚴(yán)謹(jǐn)性比Verilog要好,不像Verilog中一樣存在大量符合語(yǔ)法卻永遠(yuǎn)無(wú)法綜合的語(yǔ)句,容易對(duì)新人造成誤導(dǎo)(仿真通過(guò)的代碼卻在FPGA綜合時(shí)報(bào)錯(cuò),或者FPGA實(shí)現(xiàn)結(jié)果與仿真不一致)。而VHDL和Verilog雖然可以相互轉(zhuǎn)化,但是轉(zhuǎn)化過(guò)程中仍然存在很多問(wèn)題,無(wú)法做到完全的自動(dòng)化。關(guān)于這一點(diǎn)我之前寫(xiě)過(guò)一篇專(zhuān)題進(jìn)行探討:如何將VHDL轉(zhuǎn)化為Verilog。有興趣的同學(xué)可以去看看。

B) SystemVerilog/ SystemC

這兩種語(yǔ)言都是為了驗(yàn)證而存在的。作為IC設(shè)計(jì)工程師,驗(yàn)證知識(shí)不是必須的,但是掌握基本的驗(yàn)證方法學(xué)有助于提高自己的debug效率和結(jié)果。我曾經(jīng)在如何快速搭建模塊驗(yàn)證平臺(tái)一文中詳細(xì)介紹過(guò)一種我自己總結(jié)的驗(yàn)證方法,這種方法就是基于SystemVerilog語(yǔ)法實(shí)現(xiàn)的。由于SystemVerilog對(duì)Verilog完全兼容,就像C++對(duì)C語(yǔ)言的兼容一樣,所以SystemVerilog(或SV)學(xué)起來(lái)其實(shí)并不算難。

SystemVerilog是一種面向?qū)ο蟮恼Z(yǔ)言,其設(shè)計(jì)的本意是用于搭建驗(yàn)證平臺(tái),主流的VMM/UVM方法也都是基于SystemVerilog實(shí)現(xiàn)的,所以立志成為IC驗(yàn)證工程師的同學(xué),SystemVerilog的深入學(xué)習(xí)和流行方法論的學(xué)習(xí)都是必不可少的。

而對(duì)于那些只想做IC設(shè)計(jì)的同學(xué)而言,SystemVerilog同樣也是值得學(xué)習(xí)的。且不說(shuō)本文前面提到的用于提高驗(yàn)證效率的debug方法,即使只是為了做好設(shè)計(jì),SystemVerilog也是大有用武之地。

在歐美很多發(fā)達(dá)國(guó)家,很多世界頂級(jí)的IC設(shè)計(jì)公司內(nèi)部都已經(jīng)開(kāi)始使用SystemVerilog進(jìn)行RTL設(shè)計(jì)了。由于在SystemVerilog中加入了很多類(lèi)似always_ff、always_comb等用于顯式表明綜合電路意圖的新語(yǔ)法,代碼的可讀性更高,綜合過(guò)程中也減少了歧義,盡可能地保證了綜合結(jié)果與設(shè)計(jì)意圖的一致性。從另一個(gè)角度來(lái)說(shuō),assertion的加入也極大地提高了代碼的debug效率,非常有助于在大規(guī)模的數(shù)據(jù)交互過(guò)程中定位到出錯(cuò)的初始點(diǎn),沒(méi)有掌握的同學(xué)可以多花一些時(shí)間研究一下。

C) Makefile/ Perl/ Python/ Shell

以上四種都是IC設(shè)計(jì)工程師們常用的腳本語(yǔ)言,看起來(lái)似乎它們都跟IC設(shè)計(jì)的專(zhuān)業(yè)能力沒(méi)有絲毫關(guān)系,但是由于本行業(yè)的專(zhuān)業(yè)工具價(jià)格非常昂貴,項(xiàng)目需求差異極大,因此掌握一門(mén)得心應(yīng)手的腳本語(yǔ)言將對(duì)你工作效率的提升幫助極大。

如果你還沒(méi)有嘗試過(guò)編寫(xiě)自己的腳本語(yǔ)言,那么問(wèn)問(wèn)你自己,有沒(méi)有曾經(jīng)為了完成一批仿真用例熬到深夜?有沒(méi)有曾經(jīng)因?yàn)橐葘?duì)幾萬(wàn)個(gè)數(shù)據(jù)搞到眼瞎?有沒(méi)有曾經(jīng)因?yàn)橐薷囊粋€(gè)全局信號(hào)的比特位寬而無(wú)比抓狂?

要把一個(gè)hex類(lèi)型數(shù)據(jù)文件轉(zhuǎn)換為memory模型需要的特殊格式怎么辦?沒(méi)錯(cuò),如果你掌握了腳本語(yǔ)言,以上這些奇奇怪怪的需求都不是事兒,重復(fù)而細(xì)致的體力勞動(dòng)就交給計(jì)算機(jī)來(lái)完成吧。我一向信奉的口號(hào)就是:但凡做過(guò)一次的事情,就沒(méi)有必要重復(fù)第二次。

如果你已經(jīng)在工作中使用過(guò)其它工程師開(kāi)發(fā)的平臺(tái)或者腳本,那么它很可能是用這4種語(yǔ)言寫(xiě)成的。如果執(zhí)行腳本的方式是make run,那么很可能你用到的是一個(gè)Makefile腳本;如果執(zhí)行方式是source run,那么這應(yīng)該是一個(gè)Shell語(yǔ)言寫(xiě)成的腳本;如果是其它情況,那么就得看具體這個(gè)腳本首行是怎么寫(xiě)的了。

Makefile和Shell語(yǔ)言比Perl/Python要更容易上手,寫(xiě)起來(lái)也更加簡(jiǎn)單,比較適合滿(mǎn)足一些非常簡(jiǎn)單的批量任務(wù)需求。Perl的強(qiáng)項(xiàng)則在于它強(qiáng)大的文本處理能力和無(wú)所不能的CPAN庫(kù),隨時(shí)可以滿(mǎn)足你的各種任性需求。Python的優(yōu)點(diǎn)則是較好的可維護(hù)性。

關(guān)于腳本語(yǔ)言的重要性,大家可以到這里看看相關(guān)討論:Perl等腳本語(yǔ)言在IC設(shè)計(jì)中有哪些用處?。

D) Tcl

嚴(yán)格來(lái)說(shuō),Tcl是一門(mén)非常單純而簡(jiǎn)單的語(yǔ)言,而它的學(xué)習(xí)難點(diǎn)在于,只是掌握它的語(yǔ)法是遠(yuǎn)遠(yuǎn)不夠的。這種情況有點(diǎn)類(lèi)似javascript,如果你用js來(lái)開(kāi)發(fā)網(wǎng)頁(yè),那么你必須深入了解DOM和HTML;如果你用js來(lái)開(kāi)發(fā)游戲,那么你必須深入了解Unity3D引擎的各種知識(shí);如果你用js來(lái)開(kāi)發(fā)Web App,那么你必須會(huì)用node.js的各種庫(kù)和常見(jiàn)的服務(wù)端框架。

語(yǔ)言永遠(yuǎn)只是工具,這句話(huà)放在Tcl上再合適不過(guò)了。在IC設(shè)計(jì)這個(gè)領(lǐng)域中,Tcl是一門(mén)非常常見(jiàn)的語(yǔ)言。他可以用于描述時(shí)序和管腳約束文件,UPF信息,也可以用來(lái)搭建簡(jiǎn)單的工作平臺(tái)。

它既是很多IC領(lǐng)域EDA工具默認(rèn)支持的腳本語(yǔ)言,也是這些工具配置和輸出的文件格式。因此,能夠讀懂Tcl,掌握Tcl語(yǔ)言的基本語(yǔ)法,就可以幫助你更好的使用EDA工具,真可謂是Tcl在手,天下我有!

但是,成也蕭何敗蕭何,正如前文一開(kāi)始提到的,僅僅掌握了Tcl的語(yǔ)法還遠(yuǎn)遠(yuǎn)不是全部。不同的EDA工具對(duì)Tcl腳本提供的命令和參數(shù)支持都是不一樣的,每當(dāng)你需要為一種新工具編寫(xiě)Tcl腳本時(shí),都必須要熟讀官方給出的用戶(hù)手冊(cè),了解這種工具支持的Tcl命令結(jié)構(gòu),才能確保寫(xiě)出的腳本是可以被正確執(zhí)行的。

E) NCVerilog/ VCS/ ModelSim/ iVerilog

以上三種都是比較業(yè)界比較主流的仿真工具,其中NCVerilog和VCS都只支持Linux平臺(tái),而ModelSim貌似是同時(shí)支持Linux平臺(tái)和Windows平臺(tái)的。但是不管哪一種,我都希望大家能意識(shí)到兩件事:

第一,仿真器和波形查看器是兩回事,本條目介紹的只是仿真器,仿真器的工作原理跟波形查看器是有天差地別的,同時(shí)由于IEEE對(duì)標(biāo)準(zhǔn)波形文件*.vcd格式的規(guī)范,任意仿真器都是可以和任意波形查看器組合使用的。

第二,仿真器通常是沒(méi)有圖形界面的,為了更好地使用仿真器,你要熟讀自己常用仿真器的用戶(hù)手冊(cè),了解一些常見(jiàn)需求的命令行參數(shù),至少要做到了解如下內(nèi)容:如何指定編譯的文件類(lèi)型,如何指定編譯文件清單,如何指定索引目錄,如何指定仿真精度,如何指定臨時(shí)的宏變量,如何指定語(yǔ)法檢查的嚴(yán)苛等級(jí),如何混合編譯由多種語(yǔ)言寫(xiě)成的工程,如何調(diào)用不同波形生成工具的pli接口,如何配合SDF反標(biāo)進(jìn)行后仿等等。

不同仿真器的功能其實(shí)都大同小異,但是是不是只掌握一種仿真器就可以打遍天下無(wú)敵手了呢?當(dāng)然不是。在實(shí)際的工程中,我們經(jīng)常用到第三方IP核,有時(shí)候出于保密的需要,第三方IP核會(huì)以加密二進(jìn)制文件的方式提供,加密二進(jìn)制文件長(zhǎng)啥樣呢?

它們一般以“*.vp”格式命名,文件的開(kāi)頭部分就是標(biāo)準(zhǔn)的Verilog語(yǔ)法,但是在一行注釋之后就全部變成了亂碼。通常亂碼之前的那行注釋會(huì)指定該加密二進(jìn)制文件支持的仿真器類(lèi)型。所以你看,如果你是一個(gè)重度VCS使用者,而有一天項(xiàng)目經(jīng)理突然塞給你一個(gè)只支持NCVerilog的加密文件,你內(nèi)心一定會(huì)有千萬(wàn)只***呼嘯而過(guò)。

如果你是一個(gè)開(kāi)源工具的死忠粉,那么你可以考慮使用Icarus Verilog (iVerilog)進(jìn)行仿真編譯。iVerilog編譯器和其自帶的vpp仿真器是基于C++開(kāi)發(fā)的,支持Verilog全系列的IEEE標(biāo)準(zhǔn),但遺憾的是,iVerilog目前對(duì)System Verilog的支持還相當(dāng)有限。iVerilog是跨平臺(tái)的,無(wú)論你喜歡用Windows, Linux還是OS X, iVerilog都提供了非常便捷的安裝方式。

F) SimVision/ DVE/ Verdi/ ModelSim/ gtkWave

與上面的仿真器相對(duì)應(yīng),以上三種也是業(yè)界比較主流的波形查看工具。所有的波形查看器都必須支持標(biāo)準(zhǔn)波形文件*.vcd格式,但是由于*.vcd格式的存儲(chǔ)性能并不好,冗余信息過(guò)多,所以各家波形查看工具都紛紛推出了自己獨(dú)家支持的波形文件格式,如DVE的*.vpd,Verdi的*.fsdb,ModelSim的*.wlf, SimVision的*.shm等。

通常波形查看工具獨(dú)家支持的文件格式都具有較高的壓縮率,舉例來(lái)說(shuō)的話(huà),通常1G左右的*.vcd格式波形轉(zhuǎn)換為*.vpd格式后只有40MB左右,而轉(zhuǎn)換為*.fsdb后通常會(huì)更小,因此將標(biāo)準(zhǔn)波形文件*.vcd轉(zhuǎn)換為其他壓縮格式更加有利于數(shù)據(jù)備份。

如果希望在仿真過(guò)程中不生產(chǎn)*.vcd,而是直接生成壓縮率更高的其他波形查看器專(zhuān)用格式,則需要調(diào)用對(duì)應(yīng)工具提供的pli接口,同時(shí)配合測(cè)試平臺(tái)代碼中的系統(tǒng)函數(shù)調(diào)用(如$fsdbDumpOn等)來(lái)完成。

說(shuō)了這么多,不要以為*.vcd格式就一無(wú)是處了,再怎么說(shuō)這也是IEEE規(guī)定的標(biāo)準(zhǔn)格式,其他不同壓縮格式的波形文件之間如果需要相互轉(zhuǎn)換,一般都是要先轉(zhuǎn)換為*.vcd后再轉(zhuǎn)到目標(biāo)壓縮格式去的。

對(duì)不起,上一段最后一句是錯(cuò)的,近期負(fù)責(zé)量產(chǎn)方面的事情,對(duì)這一塊終于加深了了解,實(shí)際量產(chǎn)測(cè)試環(huán)節(jié)中ATE環(huán)境目前主要使用的激勵(lì)文件格式主要有兩種,分別是*.wgl和*.stil。這兩種文件格式與*.vcd及*.fsdb等是有本質(zhì)不同的。 .wgl和 .stil格式是基于周期數(shù)和電平向量的波形文件,而*.vcd和*.fsdb是基于時(shí)間和變化的。

換句話(huà)說(shuō),在*.wgl和*.stil里,你會(huì)看到類(lèi)似“0101010100”這樣的信號(hào)描述,他完整記載了所有信號(hào)隨時(shí)鐘周期數(shù)(而非時(shí)間刻度)的變化過(guò)程,如果你以10MHz的時(shí)鐘頻率來(lái)播放這個(gè)波形,那么他產(chǎn)生的信號(hào)長(zhǎng)度就是10個(gè)100ns,如果你以100MHz來(lái)播放則長(zhǎng)度為10個(gè)10ns,這就是基于周期數(shù)記錄波形的含義。同時(shí),在*.wgl和*.stil波形里,信號(hào)是以向量的形式完整記錄的,假如波形里有2個(gè)信號(hào),“11”,“10”,“00”這三個(gè)向量就表示第一個(gè)信號(hào)在連續(xù)的三個(gè)周期里分別是“高高低”,而第二個(gè)信號(hào)則是“高低低”,這就是基于周期數(shù)和電平向量的完整含義。

與此相對(duì)的,在類(lèi)似*.vcd這樣的波形文件里,經(jīng)??梢钥吹?1000 1signal這樣的表述(此處的signal通常會(huì)用類(lèi)似#這樣的字符代表它的id號(hào)),它表示過(guò)了1000ns后signal變成了高電平。由此可見(jiàn),*.vcd文件本質(zhì)上是通過(guò)記錄時(shí)間增量和信號(hào)的變化沿來(lái)表示波形的。

那么問(wèn)題來(lái)了,平時(shí)我們的仿真結(jié)果都是基于時(shí)間的類(lèi)*.vcd格式,如果量產(chǎn)測(cè)試的激勵(lì)必須是基于周期數(shù)的類(lèi)*.wgl格式,要怎么辦呢?目前市面上有一些可以將*.vcd轉(zhuǎn)換為*.wgl格式的軟件工具,但是授權(quán)收費(fèi)不菲,建議有可能的話(huà),設(shè)計(jì)人員最好在設(shè)計(jì)測(cè)試激勵(lì)時(shí)就考慮到這一點(diǎn),通過(guò)腳本或者其它方式直接生成*.wgl文件進(jìn)行交付,如果只能提供*.vcd格式,請(qǐng)確保激勵(lì)波形可以按統(tǒng)一的固定周期長(zhǎng)度進(jìn)行切割轉(zhuǎn)換,否則在進(jìn)行波形格式轉(zhuǎn)換過(guò)程中可能會(huì)存在大量反復(fù)工作和溝通問(wèn)題。

同樣的,如果你希望使用開(kāi)源的波形查看器的話(huà),gtkWave將是你的不二選擇。和iVerilog類(lèi)似,gtkWave也是跨平臺(tái)的,而且簡(jiǎn)單易用,支持*.vcd標(biāo)準(zhǔn)格式,同時(shí)獨(dú)家支持高性能壓縮格式*.lxt和*.fst(gtkWave自帶vcd轉(zhuǎn)fst的轉(zhuǎn)換器,只需在運(yùn)行過(guò)程中加入?yún)?shù)調(diào)用即可)。

G) Vim/ Emacs

經(jīng)常看到一些Verilog新人提出這樣一個(gè)讓人啼笑皆非的問(wèn)題:“請(qǐng)問(wèn)一般Verilog編程用什么樣的軟件?

首先,Verilog是一種電路描述語(yǔ)言,它本質(zhì)上可能跟電路圖的血緣還更近一些,至少不應(yīng)該把這個(gè)描述過(guò)程說(shuō)成是“編程”。其次,寫(xiě)Verilog其實(shí)并沒(méi)有什么專(zhuān)門(mén)的軟件,大部分業(yè)界的工程師都是用Vim或Emacs這樣原始粗獷的文本編輯器來(lái)寫(xiě)Verilog代碼的,如果你愿意的話(huà)用Notepad或Texteditor來(lái)寫(xiě)也未嘗不可,只是如果你有深入了解過(guò)Vim或Emacs的話(huà),自然就會(huì)明白這么多人選擇它們的原因所在——提高效率。

你去問(wèn)Vim或Emacs的使用者,為什么說(shuō)這玩意能提高效率,多半對(duì)方回你的第一句就是:因?yàn)榭梢詠G掉鼠標(biāo)啊。顯然這樣一個(gè)結(jié)論并不能讓人信服,而實(shí)際上這也只是它們眾多優(yōu)點(diǎn)中的一個(gè)而已。那么究竟為什么可以提高編程效率呢?核心原因當(dāng)然是,因?yàn)榻柚鼈?,你可以用編程的方式?lái)編程!聽(tīng)起來(lái)優(yōu)點(diǎn)拗口對(duì)不對(duì),沒(méi)關(guān)系,請(qǐng)聽(tīng)我解釋。

舉個(gè)例子:

如果你設(shè)計(jì)的模塊需要對(duì)外輸出100個(gè)寄存器,每個(gè)寄存器的位寬等于他的編號(hào),如果使用普通的文本編輯器,你需要手工寫(xiě)下output reg reg_0到output reg[99:0] reg_99這100行代碼,即使用上復(fù)制粘貼,你也需要逐行手工修改每行代碼里的信號(hào)位寬和編號(hào)。但是,如果借助Vim編輯器的命令功能的話(huà),你只需要寫(xiě)下for (**i=0;**i<100;**i++) { print("output reg[**i:0] reg_$i\\n");},然后在同一行按shift+v,輸入:!perl回車(chē),然后就你能看到前面輸入的那些代碼被替換成了你本來(lái)想輸入的100行內(nèi)容。

以上是一個(gè)稍微復(fù)雜的例子,可能大家平時(shí)不一定會(huì)遇到這種需求,但是以下情況呢?> 你是否曾經(jīng)忘記在每行代碼末尾加上”,”或”;”符號(hào),編譯失敗后才發(fā)現(xiàn)需要逐行補(bǔ)上?如果使用Vim編輯器的話(huà),只需要用shift+v選中需要修改的行,按下:’<,'>s%$%;%g就可以了,熟練之后整個(gè)過(guò)程不超過(guò)5秒鐘。

你是否曾經(jīng)在代碼寫(xiě)完之后被老大臭罵一頓原因是你沒(méi)有把所有的reg和wire定義都放到文件的統(tǒng)一位置(如第38行)?如果使用Vim編輯器的話(huà),只需要使用:g%^\\s reg\\s %m 38加上:g%^\\s wire\\s %m 38就可以了。

你是否曾經(jīng)被要求刪除某個(gè)文件中所有的注釋?zhuān)恐恍枰?%s%//.*$%%g就可以了。

你是否曾經(jīng)需要把一個(gè)模塊例化256次,然后因?yàn)槊看卫囊稽c(diǎn)微小不同導(dǎo)致你不能直接使用for循環(huán)?沒(méi)關(guān)系,用qq錄像功能,你只需要操作一次,然后使用256@q就可以把你的動(dòng)作自動(dòng)重復(fù)256次啦。

你是否曾經(jīng)遇到鍵盤(pán)壞掉了,“a”鍵經(jīng)常失靈甚至沒(méi)有反應(yīng)?沒(méi)關(guān)系,用:inoremap ‘ a把‘鍵重新映射為a鍵吧。

類(lèi)似的例子簡(jiǎn)直數(shù)都數(shù)不完,更多內(nèi)容參見(jiàn)與Verilog有關(guān)的Vim實(shí)用技巧。

所以說(shuō),使用Vim或Emacs最大的好處就是,你會(huì)感覺(jué)到你的大腦比手更忙,因?yàn)閺哪阆肭宄酱a寫(xiě)好只需要花費(fèi)極短的時(shí)間。你可以把全部精力投入到代碼的內(nèi)容上,而不是代碼輸入這個(gè)機(jī)械的過(guò)程中,就好像用打字機(jī)代替毛筆的感覺(jué)一樣。只要是你能用編程描述清楚的事情,Vim就可以代替你快速完成,而前提就是你要先學(xué)會(huì)大量的Vim命令和正則表達(dá)式,以保證你的表述能被編輯器正確理解。

H) SVN/ CVS/ Git

以上三種都是目前比較主流的“版本管理”工具。什么是版本管理?簡(jiǎn)而言之,就是一種用于記錄和查詢(xún)文件版本改動(dòng)的工具,通常都會(huì)被部署在公共服務(wù)器上,以保證數(shù)據(jù)的安全和可恢復(fù)。在項(xiàng)目的開(kāi)始階段,首先需要?jiǎng)?chuàng)建好版本管理的根目錄,然后由不同的工程師逐一把自己的設(shè)計(jì)文件首次加入到版本管理的各級(jí)子目錄下。

在項(xiàng)目執(zhí)行的過(guò)程中,每當(dāng)有人修改一個(gè)文件,都需要通過(guò)版本管理工具上傳代碼并注釋改動(dòng)內(nèi)容,版本管理工具會(huì)自動(dòng)檢查改動(dòng)內(nèi)容與服務(wù)器上的最新版本是否沖突(沖突的意思即是說(shuō),在該工程師改動(dòng)這個(gè)文件的過(guò)程中,有其它人也對(duì)該文件的同一行代碼進(jìn)行了改動(dòng)并上傳了新版本),如果沒(méi)有沖突,則會(huì)自動(dòng)將新上傳的改動(dòng)合并到當(dāng)前最新版本,反之,則將沖突部分進(jìn)行對(duì)比顯示,讓工程師手工判斷應(yīng)當(dāng)如何合并沖突行的內(nèi)容,解決沖突后可以再次重新上傳。

SVN和Git都是跨平臺(tái)的版本管理工具,其中SVN是必須在線(xiàn)工作的,而Git是可以離線(xiàn)工作的。當(dāng)你需要上傳代碼的時(shí)候,如果你使用的是SVN,則你必須保證從你的計(jì)算機(jī)到服務(wù)器端的通信是暢通的,而如果你使用的是Git的話(huà),由于Git有本機(jī)倉(cāng)庫(kù)的概念,在你沒(méi)有主動(dòng)與服務(wù)器端同步之前,所有版本管理都是在本機(jī)倉(cāng)庫(kù)上完成而不需要與服務(wù)器通信的,這樣即使是在離線(xiàn)環(huán)境下也可以最大限度地保證代碼版本的可恢復(fù)性,同時(shí)也節(jié)省了在移動(dòng)環(huán)境下工作時(shí)的傳輸流量。Git是開(kāi)源的,最早興起于互聯(lián)網(wǎng)行業(yè),目前也有逐漸在其他行業(yè)里廣泛使用的趨勢(shì),以之為基礎(chǔ)的開(kāi)源社區(qū)GitHub更是為它的繁榮起到了重要的推動(dòng)作用。

CVS是一款比較老的版本管理工具,只能在Linux平臺(tái)下運(yùn)行,不支持目錄的遞歸添加和重命名,用起來(lái)略有些麻煩,不過(guò)因?yàn)槟壳斑€有很多公司在用,所以這里也順帶介紹一下,并不推薦。

CVS和SVN的最大區(qū)別還是版本號(hào)的命名思想,在SVN中,任何一個(gè)文件的修改都會(huì)導(dǎo)致整個(gè)工程版本號(hào)的更新,而在CVS中,版本號(hào)是跟隨文件的。因此,在系統(tǒng)的某個(gè)時(shí)刻,SVN工程中所有文件的版本號(hào)都是相同的,而CVS工程下的每個(gè)文件都有一個(gè)自己的版本號(hào)。

CVS的這種版本號(hào)設(shè)定會(huì)給工程管理帶來(lái)很多麻煩,主要是如果有一天你想把整個(gè)工程恢復(fù)到之前的某個(gè)狀態(tài)的話(huà),要么是你曾經(jīng)記錄下了當(dāng)時(shí)所有文件各自對(duì)應(yīng)的版本號(hào),要么是你記下了當(dāng)時(shí)的準(zhǔn)確時(shí)間,要么是你當(dāng)時(shí)給所有的文件打上了標(biāo)簽,否則幾乎是不可能的。而對(duì)SVN來(lái)說(shuō),你只需要記住當(dāng)時(shí)整個(gè)工程的版本號(hào)即可。

I) ISE/ Synplify/ Vivado/ Quartus

ISE和Vivado都是Xilinx旗下的FPGA工具,其中ISE比較老,官方已經(jīng)停止更新了,目前最新的版本是14.7,而Vivado作為新一代的FPGA工具一直在繼續(xù)更新。Quartus則是Altera旗下的FPGA工具,功能和ISE/ Vivado大同小異。

筆者平日里對(duì)FPGA工具的接觸并不多,但從有限的接觸體會(huì)而言,Quartus比ISE/ Vivado更適合用于學(xué)習(xí),入門(mén)的門(mén)檻更低一些,操作界面也更加簡(jiǎn)單易學(xué)(但千萬(wàn)不要使用6.2版本以下Quartus中自帶的波形仿真工具,那是垃圾)。

學(xué)習(xí)FPGA有助于幫助大家理解“正確的設(shè)計(jì) != 正確的RTL”,而是“正確的設(shè)計(jì) == 正確的RTL + 正確的時(shí)序約束”這一重要理念(很多同學(xué)一直無(wú)法從軟件編程的思維中跳出來(lái),也是因?yàn)橐恢睕](méi)能理解好這個(gè)理念)。

正確的時(shí)序約束通常包括管腳約束和時(shí)鐘約束,任何一項(xiàng)約束出錯(cuò)都會(huì)導(dǎo)致綜合出來(lái)的電路無(wú)法按照預(yù)設(shè)的頻率和時(shí)序進(jìn)行工作。Quartus支持的約束文件格式是*.sdc。ISE和Vivado支持的約束文件格式有所不同,ISE支持的是*.ucf,Vivado支持的是*.xdc,但由于Xilinx家的工具中內(nèi)置了約束文件互相轉(zhuǎn)換的腳本,因此只需一個(gè)命令就可以在兩個(gè)軟件的工程之間無(wú)縫切換。

從時(shí)序約束的思想上來(lái)說(shuō),Quartus與ISE/ Vivado在很多細(xì)節(jié)上都有所不同,所以從一個(gè)平臺(tái)遷移到另一個(gè)平臺(tái)的過(guò)程中依然會(huì)有一個(gè)學(xué)習(xí)過(guò)程,例如說(shuō):Quartus在時(shí)鐘定義上不太區(qū)分管腳輸入時(shí)鐘和內(nèi)部時(shí)鐘,但在ISE中則不允許使用管腳輸入時(shí)鐘直接驅(qū)動(dòng)寄存器,而是必須首先經(jīng)過(guò)BUFG/ PLL/ DCM等時(shí)鐘IP處理后輸出方可以使用。

Quartus對(duì)于輸入輸出的同步數(shù)據(jù)信號(hào)偏移offset in/out和ISE的定義也正好相反,使用過(guò)程中需要尤其注意。最后一句話(huà)送給FPGA新手們,千萬(wàn)記住,如果你在設(shè)計(jì)FPGA工程的時(shí)候沒(méi)有添加任何時(shí)序約束或時(shí)鐘約束,請(qǐng)不要問(wèn)我為什么電路工作不正確,本段話(huà)的第一句已經(jīng)回答你們了。

在學(xué)習(xí)FPGA的過(guò)程中,掌握信號(hào)探針工具(signal probe)的使用是非常必要的,有了它們,大家就可以像在仿真軟件里那樣,把真實(shí)FPGA硬件里的物理信號(hào)采樣抓取到波形查看工具中去進(jìn)行debug。Xilinx家的信號(hào)探針工具叫ChipScope,而Quartus家的叫SignalTap。

相對(duì)來(lái)說(shuō),SignalTap比ChipScope要好用很多,例如說(shuō),SignalTap抓取波形的時(shí)候,信號(hào)名稱(chēng)可以自動(dòng)識(shí)別,而ChipScope會(huì)把信號(hào)名稱(chēng)自動(dòng)命名為序號(hào),需要用戶(hù)手動(dòng)使用別名進(jìn)行修改,而其中一旦有一個(gè)信號(hào)名稱(chēng)寫(xiě)錯(cuò),就得把該信號(hào)以后的全部信號(hào)名稱(chēng)重新輸入一次。

J) Windows/ Linux/ OS X

相信大多數(shù)人的個(gè)人計(jì)算機(jī)使用的都是以上系統(tǒng)或類(lèi)似以上系統(tǒng)的其他系統(tǒng)吧。以上3個(gè)系統(tǒng),對(duì)于專(zhuān)業(yè)的數(shù)字IC前端設(shè)計(jì)人員而言,工作的方便程度(注意,是專(zhuān)業(yè)人員的方便程度,而非學(xué)習(xí)曲線(xiàn)的陡峭程度,這里是指均已達(dá)到熟練掌握的前提下對(duì)于工作效率的幫助)由方便到困難分別是:Linux > Windows > OS X。在Windows下,你可能需要的工具有Cygwin(模擬Linux shell,帶有大部分GNU工具),Modelsim,Debussy(更名Verdi后的版本沒(méi)有對(duì)應(yīng)的Windows版本), Quartus, ISE等。在Linux下,你可能需要的工具包括Bash/Csh/Tcsh,Modelsim,Quartus,ISE,VCS,Simvision,DVE,NCVerilog,F(xiàn)ormality,LEC,Synplify等。而在OS X下(筆者不幸就位于該平臺(tái)下),你可以使用的工具就只剩下Bash/Csh/Zsh,iVerilog,gtkWave這些選擇了。

從以上內(nèi)容不難看出,在工具的多樣性角度而言,Linux完爆其它平臺(tái),這也是為什么絕大多數(shù)IC開(kāi)發(fā)公司的服務(wù)器都選擇部署在Linux下的主要原因之一。對(duì)于個(gè)人電腦而言,大部分同學(xué)會(huì)選擇使用虛擬機(jī)來(lái)兼顧不同平臺(tái)的工具選擇,個(gè)人建議大家最好在熟練掌握Linux平臺(tái)及其工具的前提下,同時(shí)也了解一下其它平臺(tái)的解決方案。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • IC設(shè)計(jì)
    +關(guān)注

    關(guān)注

    37

    文章

    1287

    瀏覽量

    103436
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109713
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    816

    瀏覽量

    127951
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    IC設(shè)計(jì)工程師需要這樣牛X的知識(shí)架構(gòu)

    作為一個(gè)真正合格的數(shù)字IC設(shè)計(jì)工程師,你永遠(yuǎn)都需要去不斷學(xué)習(xí)更加先進(jìn)的知識(shí)和技術(shù)。因此,這里列出來(lái)的技能永遠(yuǎn)都不會(huì)是完整的。我盡量每年都對(duì)這個(gè)列表進(jìn)行一次更新。如果你覺(jué)得這個(gè)清單不全面
    發(fā)表于 06-02 07:43 ?2717次閱讀

    電子工程師指南 全面介紹工程師具備的電路知識(shí)

    電子工程師指南全面介紹工程師具備的電路知識(shí)電子工程師指南全面介紹工程師
    發(fā)表于 04-07 10:28

    IC設(shè)計(jì)工程師

    大家好,我學(xué)FPGA也有幾個(gè)月了,都是學(xué)習(xí)板上的設(shè)計(jì),現(xiàn)在可以隨便的編寫(xiě)一些簡(jiǎn)單的邏輯;我琢磨著以后想往IC設(shè)計(jì)工程師這個(gè)職位走,不知道IC設(shè)計(jì)工程師除了邏輯編寫(xiě)的能力以外,還有哪方面
    發(fā)表于 05-25 01:02

    數(shù)字IC設(shè)計(jì)工程師招聘

    數(shù)字IC設(shè)計(jì)工程師工作地點(diǎn):北京主要職責(zé):1. 確定芯片的解決方案及架構(gòu),選擇算法,進(jìn)行優(yōu)化。2. 對(duì)芯片進(jìn)行模塊劃分及Micro Architecture的定義。3.較大規(guī)模ASIC芯片的頂層
    發(fā)表于 04-23 10:17

    資深數(shù)字IC設(shè)計(jì)工程師- 珠海 上海

    資深數(shù)字IC設(shè)計(jì)工程師-珠海 上海職責(zé): 數(shù)字電路設(shè)計(jì)和驗(yàn)證;任務(wù): 系統(tǒng)架構(gòu)設(shè)計(jì)和SOC系統(tǒng)整合 Interface電路設(shè)計(jì)和驗(yàn)證 任職資格: 1.計(jì)算機(jī)和微電子相關(guān)專(zhuān)業(yè),碩士以上學(xué)歷; 2.熟悉
    發(fā)表于 06-12 15:29

    高薪誠(chéng)聘數(shù)字IC設(shè)計(jì)工程師/模擬IC設(shè)計(jì)工程師(杭州)

    數(shù)字IC設(shè)計(jì)工程師崗位要求:(6K-10k)1.電子、通信、電路與系統(tǒng)等相關(guān)專(zhuān)業(yè)大學(xué)本科以上學(xué)歷;2.扎實(shí)的數(shù)字電路理論知識(shí),對(duì)模擬電路理論有一定了解;3.掌握Verilog等硬件描述語(yǔ)言,熟練
    發(fā)表于 04-13 15:58

    誠(chéng)聘模擬IC設(shè)計(jì)工程師

    獵頭職位:模擬IC設(shè)計(jì)工程師【深圳】崗位職責(zé):1.負(fù)責(zé)電源管理芯片相關(guān)模擬電路的設(shè)計(jì)與驗(yàn)證;2.負(fù)責(zé)電源方面新技術(shù)的研究與開(kāi)發(fā)。任職要求:1.碩士及以上學(xué)歷,電子、微電子相關(guān)專(zhuān)業(yè),3年以上
    發(fā)表于 06-16 10:54

    急招模擬IC設(shè)計(jì)工程師

    1、模擬IC設(shè)計(jì)工程師25-60W(電源方向:初級(jí)、高工、經(jīng)理、 目前需求職位如下1、模擬IC設(shè)計(jì)工程師25-60W(電源方向:初級(jí)、高工、經(jīng)理、目前需求職位如下:1、模擬
    發(fā)表于 06-29 16:47

    EMC工程師需要具備哪些技能?

    EMC工程師需要具備那些技能?從企業(yè)產(chǎn)品進(jìn)行需求設(shè)計(jì),整改認(rèn)證的過(guò)程來(lái)看,EMC工程師必須具備以下八大技能:
    發(fā)表于 05-30 06:28

    數(shù)字IC設(shè)計(jì)工程師具備哪些技能 精選資料分享

    本篇簡(jiǎn)單羅列了作為數(shù)字IC設(shè)計(jì)工程師的必備知識(shí)和學(xué)習(xí)建議,希望對(duì)本科高年級(jí)和研究生階段有志從事數(shù)字IC設(shè)計(jì)的學(xué)生有所幫助。數(shù)字集成電路基礎(chǔ)CMOS制造工藝器件(二極管、場(chǎng)效應(yīng)管)導(dǎo)線(xiàn)門(mén)
    發(fā)表于 07-29 08:31

    FPGA工程師需要具備哪些技能?

    需要具備一系列的技能,才能勝任日益復(fù)雜的設(shè)計(jì)工作。因此,本文將從設(shè)計(jì)思路、硬件語(yǔ)言、EDA工具、數(shù)字信號(hào)處理、通信協(xié)議、測(cè)試驗(yàn)證等多個(gè)方面,探討FPGA工程師
    發(fā)表于 11-09 11:03

    邏輯設(shè)計(jì)工程師、IC_automation設(shè)計(jì)工程師筆試題

    邏輯設(shè)計(jì)工程師、IC automation設(shè)計(jì)工程師筆試題 威盛(VIA)2007最新考題 1、ASIC flow 寫(xiě)出幾個(gè)流程,并用2-3句話(huà)簡(jiǎn)介,然后列出相應(yīng)的2-3個(gè)EDA tools 2、名詞解釋 FIFO,SETUP/
    發(fā)表于 05-24 13:14 ?75次下載
    邏輯設(shè)<b class='flag-5'>計(jì)工程師</b>、<b class='flag-5'>IC</b>_automation設(shè)<b class='flag-5'>計(jì)工程師</b>筆試題

    IC設(shè)計(jì)工程師應(yīng)該要具備知識(shí)架構(gòu)(超詳細(xì))

    作為一個(gè)真正合格的數(shù)字IC設(shè)計(jì)工程師,你永遠(yuǎn)都需要去不斷學(xué)習(xí)更加先進(jìn)的知識(shí)和技術(shù)。因此,這里列出來(lái)的技能永遠(yuǎn)都不會(huì)是完整的。我盡量每年都對(duì)這個(gè)列表進(jìn)行一次更新。
    發(fā)表于 01-04 16:36 ?1.1w次閱讀
    <b class='flag-5'>IC</b>設(shè)<b class='flag-5'>計(jì)工程師</b>應(yīng)該要<b class='flag-5'>具備</b>的<b class='flag-5'>知識(shí)</b><b class='flag-5'>架構(gòu)</b>(超詳細(xì))

    ic設(shè)計(jì)需要哪些知識(shí)_ic設(shè)計(jì)工程師做什么

    “百花齊放”的繁榮景象。但作為產(chǎn)業(yè)命脈的IC設(shè)計(jì)人才,在IC產(chǎn)業(yè)最集中的長(zhǎng)三角地區(qū)也僅僅只有幾千人。所以擁有一定工作經(jīng)驗(yàn)的設(shè)計(jì)工程師,目前已成為人才獵頭公司爭(zhēng)相角逐的“寵兒”。
    發(fā)表于 07-13 09:39 ?5306次閱讀

    一個(gè)IC設(shè)計(jì)工程師需要具備知識(shí)架構(gòu)資料下載

    電子發(fā)燒友網(wǎng)為你提供一個(gè)IC設(shè)計(jì)工程師需要具備知識(shí)架構(gòu)資料下載的電子資料下載,更有其他相關(guān)的電
    發(fā)表于 04-20 08:43 ?28次下載
    一個(gè)<b class='flag-5'>IC</b>設(shè)<b class='flag-5'>計(jì)工程師</b><b class='flag-5'>需要</b><b class='flag-5'>具備</b>的<b class='flag-5'>知識(shí)</b><b class='flag-5'>架構(gòu)</b>資料下載