掌握FPGA可以找到一份很好的工作,,對于有經(jīng)驗的工作人員,使用FPGA可以讓設(shè)計變得非常有靈活性,。掌握了FPGA設(shè)計,,單板硬件設(shè)計就非常容易(不是系統(tǒng)設(shè)計),特別是上大學(xué)時如同天書的邏輯時序圖,,看起來就非常親切,。但FPGA入門卻有一定難度,因為它不像軟件設(shè)計,,只要有一臺計算機(jī),,幾乎就可以完成所有的設(shè)計。FPGA設(shè)計與硬件直接相關(guān),,需要實實在在的調(diào)試儀器,,譬如示波器等。這些硬件設(shè)備一般比較昂貴,,這就造成一定的入門門檻,,新人在入門時遇到一點問題或者困難,由于沒有調(diào)試設(shè)備,,無法定位問題,,最后可能就會放棄。其實這時如果有人稍微指點一下,,這個門檻很容易就過去,。 我用FPGA做設(shè)計很多年了,,遠(yuǎn)達(dá)不到精通的境界,,只是熟悉使用,在這里把我對FPGA學(xué)習(xí)步驟理解寫出來,,僅是作為一個參考,,不對的地方,,歡迎大家討論和指正。
FPGA學(xué)習(xí)步驟1,、工欲善其事,,必先利其器。
計算機(jī)必不可少,。目前FPGA應(yīng)用較多的是Altera和xilinx這兩個公司,,可以選擇安裝quartusII或者ISE軟件。這是必備的軟件環(huán)境,。
硬件環(huán)境還需要下載器,、目標(biāo)板。雖然有人說沒有下載器和目標(biāo)板也可學(xué)習(xí)fpga,,但那總是紙上談兵,。這就像談女朋友,總是嘴上說說,,通個電話,,連個手都沒牽,能說人家是你朋友?雖說搭建硬件環(huán)境需要花費,,但想想,,硬件環(huán)境至多幾百元錢,你要真的掌握FPGA的設(shè)計,,起薪比別人都不止高出這么多,。這點花費算什么?
FPGA學(xué)習(xí)步驟2、熟悉verilog語言或者vhdl語言 ,,熟練使用quartusII或者ISE軟件。
VHDL和verilog各有優(yōu)點,,選擇一個,,建議選擇verilog。熟練使用設(shè)計軟件,,知道怎樣編譯,、仿真、下載等過程,。
起步階段不希望報一些培訓(xùn)班,,除非你有錢,或者運氣好,,碰到一個水平高,、又想把自己的經(jīng)驗和別人共享的培訓(xùn)老師,不然的話,,培訓(xùn)完后總會感覺自己是一個冤大頭,。入門階段可以在利用網(wǎng)絡(luò)資源完成,。
FPGA學(xué)習(xí)步驟3、設(shè)計一個小代碼,,下載到目標(biāo)板看看結(jié)果
此時可以設(shè)計一個最簡答的程序,,譬如點燈。如果燈在閃爍了,,表示基本入門了,。如果此時能夠下載到FPGA外掛的flash,F(xiàn)PGA程序能夠從flash啟動,表明FPGA的最簡單設(shè)計你已經(jīng)成功,,可以到下一步,。
FPGA學(xué)習(xí)步驟4、設(shè)計稍微復(fù)雜的代碼,,下載到目標(biāo)板看看結(jié)果,。
可以設(shè)計一個UART程序,網(wǎng)上有參考,,你要懂RS232協(xié)議和FPGA內(nèi)置的邏輯分析儀,。網(wǎng)上下載一個串口調(diào)試助手,調(diào)試一番,,如果通信成功了,, 恭喜,水平有提高,。進(jìn)入下一步,。
FPGA學(xué)習(xí)步驟5、設(shè)計復(fù)雜的代碼,,下載到目標(biāo)板看看結(jié)果,。
譬如sdram的程序,網(wǎng)上也有參考,,這個設(shè)計難度有點大,。可用串口來調(diào)試sdram,,把串口的數(shù)據(jù)存儲到sdram,,然后讀回,如果成功,,那你就比較熟悉FPGA設(shè)計了
FPGA學(xué)習(xí)步驟6,、設(shè)計高速接口,譬如ddr2或者高速串行接口
這要對FPGA的物理特性非常了解,,而且要懂得是時序約束等設(shè)計方法,,要看大量的原廠文檔,這部分成功了,那就對FPGA的物理接口掌握很深,,你就是設(shè)計高手了
FPGA學(xué)習(xí)步驟7,、設(shè)計一個復(fù)雜的協(xié)議
譬如USB、PCIexpress,、圖像編解碼等,,鍛煉對系統(tǒng)的整體把握和邏輯劃分。完成這些,,你就是一個一流的高手,、
FPGA學(xué)習(xí)步驟8、學(xué)習(xí)再學(xué)習(xí)
學(xué)習(xí)什么,,我也不知道,,我只知道“學(xué)無止境,山外有山”,。
現(xiàn)在很多FPGA工程師,,沒找到合適,我覺得很多人從開始的時候就誤入歧途了,,對新手學(xué)習(xí)FPGA設(shè)計我也說一點看法吧,。我認(rèn)為要從基礎(chǔ)開始做,基礎(chǔ)牢,,才有成為高手的可能,。
我覺得FPGA學(xué)習(xí)有以下幾步必須要走:
第一步:學(xué)習(xí)了解FPGA結(jié)構(gòu),F(xiàn)PGA到底是什么東西,,芯片里面有什么,,不要開始就拿個開發(fā)板照著別人的東西去編程。很多開發(fā)板的程序?qū)懙暮軤€,,我也做過一段時間的開發(fā)板設(shè)計,,我覺得很大程度上,開發(fā)板在誤人子弟,。不過原廠提供的正品開發(fā)板,,代碼很優(yōu)秀的,可以借鑒,。只有了解了FPGA內(nèi)部的結(jié)構(gòu)才能明白為什么寫Verilog和寫C整體思路是不一樣的。
第二步:掌握FPGA設(shè)計的流程,。了解每一步在做什么,,為什么要那么做。很多人都是不就是那幾步嗎,,有什么奇怪的?呵呵,,我想至少有一半以上的人不知道synthesize和traslate的區(qū)別吧。
了解了FPGA的結(jié)構(gòu)和設(shè)計流程才有可能知道怎么去優(yōu)化設(shè)計,,提高速度,,減少資源,,不要急躁,不要去在為選擇什么語言和選擇哪個公司的芯片上下功夫,。語言只是一個表達(dá)的方式,,重要的是你的思維,沒有一個好的指導(dǎo)思想,,語言用得再好,,不過是個懂語言的人。
第三步:開始學(xué)習(xí)代碼了,。我建議要學(xué)代碼的人都去Altera或Xilinx的網(wǎng)站上下原廠工程師的代碼學(xué)習(xí),。不要一開始就走入誤區(qū)。
第四步:template很重要,。能不能高效利用FPGA資源,,一是了解fpga結(jié)構(gòu),二是了解欲實現(xiàn)的邏輯功能和基本機(jī)構(gòu),,三是使用正確的模板,。FPGA內(nèi)部器件種類相對較單一,用好模板,,你的邏輯才能被高效的綜合成FPGA擅長表達(dá)的結(jié)構(gòu):)
做FPGA主要是要有電路的思想,,作為初學(xué)者,往往對器件可能不是熟悉,,那么應(yīng)該對于數(shù)字電路的知識很熟悉吧,,F(xiàn)PGA中是由觸發(fā)器和查找表以及互聯(lián)線等基本結(jié)構(gòu)組成的,其實在我們在代碼里面能夠看到的就是與非門以及觸發(fā)器,,不要把verilog和c語言等同起來,,根本就是不同的東西,沒有什么可比性,,在寫一句程序的時候應(yīng)該想到出來的是一個什么樣的電路,,計數(shù)器選擇器 三態(tài)門等等,理解時序,,邏輯是一拍一拍的東西,,在設(shè)計初期想的不是很清楚的時候可以畫畫時序圖,這樣思路會更加的清晰,,還有就是仿真很重要,,不要寫完程序就去往FPGA中去加載,首先要仿真,,尤其是對比較大型一點的程序,,想像自己是在做asic,是沒有二次機(jī)會的,所以一定要把仿真做好,,還有很多新手對于語言的學(xué)習(xí)不知道選vhdl好還是verilog好,,個人偏好verilog,當(dāng)然不是說vhdl不好,,反正寫出來的都是電路,,那當(dāng)然就不要在語言的語法上面花太多的功夫了,verilog 言簡意賅assign always case if else 掌握這些幾乎可以寫出90%的電路了,,上面是我對FPGA學(xué)習(xí)的一些愚見,,希望對大家有所幫助。