勇敢的芯伴你玩轉Altera FPGA連載29:語(yǔ)法學(xué)習的經(jīng)驗之談 特權同學(xué),版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD ![]() FPGA器件的設計輸入有很多種方式,如繪制原理圖、編寫(xiě)代碼或是調用IP核。早期的工程師對原理圖的設計方式情有獨鐘,這種輸入方式應付簡(jiǎn)單的邏輯電路還湊合,應該算得上簡(jiǎn)單實(shí)用,但隨著(zhù)邏輯規模的不斷攀升,這種落后的設計方式已顯得力不從心。取而代之的是代碼輸入的方式,當今絕大多數的設計都采用代碼來(lái)完成。FPGA開(kāi)發(fā)所使用的代碼,我們通常稱(chēng)之為硬件描述語(yǔ)言(HardwareDescription Language),目前最主流的是VHDL和Verilog。VHDL發(fā)展較早,語(yǔ)法嚴謹;Verilog類(lèi)似C語(yǔ)言,語(yǔ)法風(fēng)格比較自由。IP核調用通常也是基于代碼設計輸入的基礎之上,今天很多EDA工具的供應商都在打FPGA的如意算盤(pán),FPGA的設計也在朝著(zhù)軟件化、平臺化的方向發(fā)展,也許在不久的將來(lái),越來(lái)越多的工程只需要設計者從一個(gè)類(lèi)似蘋(píng)果商店的IP核庫中索取組件進(jìn)行配置,最后像搭積木一樣完成一個(gè)項目,或者整個(gè)設計都不需要見(jiàn)到一句代碼。當然了,未來(lái)什么情況都有可能發(fā)生,但是底層的代碼邏輯編寫(xiě)方式無(wú)論如何還是有其生存空間的,畢竟一個(gè)個(gè)IP核組件都是從代碼開(kāi)始的,所以對于初入這個(gè)行當的新手而言,掌握基本代碼設計的技能是必須的。 我們不過(guò)多談?wù)揤HDL和Verilog語(yǔ)言孰優(yōu)孰劣,總之這兩種語(yǔ)言是當前業(yè)內絕大多數開(kāi)發(fā)設計所使用的語(yǔ)言,從二者對電路的描述和實(shí)現上看,有許多相通之處。無(wú)論是VHDL還是Verilog,建議初學(xué)者先掌握其中一門(mén),至于到底先下手哪一門(mén),則需要讀者根據自身的情況做考量。對于沒(méi)有什么外部情況限制的朋友,若之前有一定的C語(yǔ)言基礎,不妨先學(xué)Verilog,這有助于加快對語(yǔ)法本身的理解。在將其中一門(mén)語(yǔ)言學(xué)精、用熟之后,最好也能夠著(zhù)手掌握另一門(mén)語(yǔ)言。雖然在單個(gè)項目中,很少需要大家“雙語(yǔ)齊下”,但在實(shí)際工作中,還是很有可能需要去接觸另一門(mén)語(yǔ)法所寫(xiě)的工程。網(wǎng)絡(luò )上有很多很好的開(kāi)源實(shí)例,若你只會(huì )Verilog,而參考實(shí)例卻是VHDL的,那么就讓你很尷尬了;忽然有一天A同事離職,老板把他寫(xiě)個(gè)半半的Verilog工程扔給只會(huì )VHDL的你維護,那你可就被動(dòng)難堪了……所以嘛,對于VHDL和Verilog的取舍問(wèn)題,建議先學(xué)精一門(mén),也別忘了兼故另一門(mén),無(wú)論哪一種語(yǔ)言,至少咱也要能看懂別人的設計。 HDL語(yǔ)言雖然和軟件語(yǔ)言有許多相似之處,但由于其實(shí)現對象是硬件電路,所以他們之間的設計思想存在較大差異。尤其是那些做過(guò)軟件編程的朋友,很喜歡用軟件的順序思想來(lái)駕驅HDL語(yǔ)言,豈不知HDL實(shí)現的硬件電路大都是并行處理的。也許就是這么個(gè)大彎轉不過(guò)來(lái),所以很多朋友在研究HDL語(yǔ)言所實(shí)現的功能時(shí)常常百思不得其解。對于初學(xué)者,尤其是軟件轉行過(guò)來(lái)的初學(xué)者,筆者的建議是不要拋開(kāi)實(shí)際電路而研究語(yǔ)法,在一段代碼過(guò)后,多花些精力比對實(shí)際邏輯電路,必要時(shí)做做仿真,最好能再找些直觀(guān)的外設在實(shí)驗板上看看結果。長(cháng)此以往,若能達到代碼和電路都心中有數,那才證明真真正正掌握HDL語(yǔ)言的精髓了。 HDL語(yǔ)言的語(yǔ)法條目雖多,但并非所有的HDL語(yǔ)法都能夠實(shí)現到最終的硬件電路,由此進(jìn)行劃分,可實(shí)現為硬件電路的語(yǔ)法我們常稱(chēng)為可綜合的語(yǔ)法,而不能夠實(shí)現到硬件電路中,卻常?勺鳛榉抡骝炞C的高層次語(yǔ)法我們則稱(chēng)之為行為級語(yǔ)法。很多朋友在初學(xué)語(yǔ)法時(shí),抱著(zhù)一本語(yǔ)法書(shū)暈頭轉向的看,最后實(shí)戰的時(shí)候卻常常碰到這語(yǔ)法不能用那語(yǔ)法不支持的報錯信息,從而更加抱怨HDL不是好東西,學(xué)起來(lái)真困難。其實(shí)不然,可綜合的語(yǔ)法是一個(gè)很小的子集,對于初學(xué)者,建議先重點(diǎn)掌握好這個(gè)子集,實(shí)際設計中或許靠著(zhù)10來(lái)條基本語(yǔ)法就可以打天下了,怎么樣?HDL語(yǔ)言一下變簡(jiǎn)單了吧。這么說(shuō)一點(diǎn)不夸張,本書(shū)的重點(diǎn)就是要通過(guò)各種可實(shí)現到板級的例程讓大家快速的掌握如何使用可綜合的語(yǔ)法子集完成一個(gè)設計。后面一節我們會(huì )將常用的可綜合語(yǔ)法子集逐一羅列并簡(jiǎn)單介紹。對于入了門(mén)的同學(xué)們,也不是說(shuō)掌握了可綜合的語(yǔ)法子集就萬(wàn)事大吉了,話(huà)說(shuō)“革命尚未成功,同志還需努力”。行為級語(yǔ)法也非一無(wú)是處,都說(shuō)“存在即是合理”,行為級語(yǔ)法也大有用處。一個(gè)稍微復雜的設計,若是在板級調試前不經(jīng)過(guò)幾次三番的仿真測試,一次性成功的概率幾乎為零。而仿真驗證也有自己的一套高效便捷的語(yǔ)法,如果再像底層硬件電路一樣搭仿真平臺,恐怕就太浪費時(shí)間了。行為級語(yǔ)法最終的實(shí)現對象不是FPGA器件,而是咱手中的電腦,動(dòng)輒上G甚至雙核、四核的CPU可不愿做老牛拉破車(chē)的活,所以行為級語(yǔ)法幫助我們在仿真過(guò)程中利用好手中的資源,能夠快速、高效的完成設計的初期驗證平臺搭建。因此,掌握行為級的語(yǔ)法,可以服務(wù)于我們在設計的仿真驗證階段的工作。 對于HDL語(yǔ)言的學(xué)習,筆者根據自身的經(jīng)驗,提幾點(diǎn)建議。 首先,手中需要準備一本比較完整的語(yǔ)法書(shū)籍,這類(lèi)書(shū)市場(chǎng)上已經(jīng)是滿(mǎn)天飛了,內容相差無(wú)幾,初學(xué)者最好能在在開(kāi)始FPGA的學(xué)習前花些時(shí)間認真的看過(guò)一遍語(yǔ)法,盡可能的理解每條語(yǔ)法的基本功能和用法。當然了,只需要大家認真看過(guò)、理解過(guò),做到相關(guān)語(yǔ)法心中有數就行,咱也不是為了應付考試,也沒(méi)必要去死記硬背任何東西。語(yǔ)法的理論學(xué)習是必須的,能夠為后面的實(shí)踐打下堅實(shí)的基礎。有些實(shí)在不好理解的語(yǔ)法,也不要強求,今后在遇到類(lèi)似語(yǔ)法在實(shí)例中的參考用法時(shí)再掌握不遲。 其次,參考一些簡(jiǎn)單的例程,并且自己動(dòng)手寫(xiě)寫(xiě)代碼實(shí)現相同或相近的電路功能。這個(gè)過(guò)程中可能需要結合實(shí)際的FPGA開(kāi)發(fā)工具和入門(mén)級學(xué)習套件。FPGA的開(kāi)發(fā)工具前面章節已經(jīng)有所介紹,主要是掌握Quartus II(Altera公司的器件使用)或ISE(Xilinx公司的器件使用)的使用,學(xué)會(huì )使用這些工具新建一個(gè)工程、編寫(xiě)代碼、分配引腳、進(jìn)行編譯、下載配置文件到目標電路板中。入門(mén)級的學(xué)習套件,簡(jiǎn)單的說(shuō),就是一塊板載FPGA器件的電路板,這塊電路板不需要有很多高級的外設,一些簡(jiǎn)單的常見(jiàn)外設即可(如蜂鳴器、流水燈、數碼管、UART、I2C等);一條下載線(xiàn)和相關(guān)的連接線(xiàn)。通過(guò)開(kāi)發(fā)工具我們可以進(jìn)行工程的建立和管理;而通過(guò)學(xué)習套件,我們就可以直觀(guān)的驗證工程是否實(shí)現了既定的功能。在實(shí)踐的過(guò)程中,大家一定要注意自己的代碼風(fēng)格,當然了,這很大程度上取決于參考例程的代碼風(fēng)格。至于什么樣的學(xué)習套件配套的參考例程是規范的,倒也沒(méi)有一個(gè)界定之說(shuō),在建議大家選擇口碑較好的學(xué)習套件的同時(shí),也非常推薦大家多去讀讀FPGA原廠(chǎng)Altare(qts_qii5v1.pdf)或Xilinx(xst.pdf)的官方文檔,在他們的一些文檔手冊中有各種常見(jiàn)電路的實(shí)現代碼風(fēng)格和參考實(shí)例。在練習的過(guò)程中,大家也要學(xué)會(huì )使用開(kāi)發(fā)工具生成的各種視圖,尤其是RTL視圖。RTL視圖是用戶(hù)輸入代碼進(jìn)行綜合后的邏輯功能視圖,這個(gè)視圖很好的將用戶(hù)的代碼用邏輯門(mén)的方式詮釋出來(lái),初學(xué)者可以通過(guò)查看RTL視圖的方式來(lái)看看自己寫(xiě)的代碼所能實(shí)現的邏輯電路,以加深對語(yǔ)法的理解;反之,也可以通過(guò)RTL視圖來(lái)檢驗當前所寫(xiě)的代碼是否實(shí)現了期望的功能。 總之,HDL語(yǔ)言的學(xué)習,簡(jiǎn)單的歸納,就是需要初學(xué)者多看、多寫(xiě)、多思考、多比對。 本書(shū)主要實(shí)驗說(shuō)明和例程將以Verilog語(yǔ)言為主。本章后面的基礎語(yǔ)法部分內容也不會(huì )太詳細的講解,只是蜻蜓點(diǎn)水般帶過(guò)——簡(jiǎn)單給出基本的用法模版,但是大家也別擔心,我們會(huì )把重點(diǎn)放在后面的實(shí)例章節更深入的引領(lǐng)大家學(xué)以致用。當然了,語(yǔ)法本身總是枯燥乏味的,我們更建議大家在實(shí)例章節多回過(guò)頭來(lái)細細品味語(yǔ)法。 |