FPGA現(xiàn)在學(xué)起來怎么樣?難不?需要了解哪些基礎(chǔ)課程?
FPGA現(xiàn)在學(xué)起來怎么樣?難不?需要了解哪些基礎(chǔ)課程?
FPGA學(xué)習(xí)重點1. 看代碼,建模型只有在腦海中建立了一個個邏輯模型,理解FPGA內(nèi)部邏輯結(jié)構(gòu)實現(xiàn)的基礎(chǔ),才能明白為什么寫Verilog和寫C整體思路是不一樣的,才能理解順序執(zhí)行語言和并行執(zhí)行語言的設(shè)計方法上的差異。在看到一段簡單程序的時候應(yīng)該想到是什么樣的功能電路。
2. 用數(shù)學(xué)思維來簡化設(shè)計邏輯學(xué)習(xí)FPGA不僅邏輯思維很重要,好的數(shù)學(xué)思維也能讓你的設(shè)計化繁為簡,所以啊,那些看見高數(shù)就頭疼的童鞋需要重視一下這門課哦。
舉個簡單的例子,比如有兩個32bit的數(shù)據(jù)X[31:0]與Y[31:0]相乘。當然,無論Altera還是Xilinx都有現(xiàn)成的乘法器IP核可以調(diào)用,這也是最簡單的方法,但是兩個32bit的乘法器將耗費大量的資源。那么有沒有節(jié)省資源,又不太復(fù)雜的方式來實現(xiàn)呢?我們可以稍做修改:將X[31:0]拆成兩部分X1[15:0]和X2百科[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],則X1左移16位后與X2相加可以得到X;同樣將Y[31:0]拆成兩部分Y1[15:0]和Y2[15:0],令 Y1[15:0]=Y[31:16],Y2[15:0]=Y[15:0],則Y1左移16位后與Y2相加可以得到Y(jié),則X與Y的相乘可以轉(zhuǎn)化為X1和X2 分別與Y1和Y2相乘,這樣一個32bit*32bit的乘法運算轉(zhuǎn)換成了四個16bit*16bit的乘法運算和三個32bit的加法運算。轉(zhuǎn)換后的占用資源將會減少很多,有興趣的童鞋,不妨綜合一下看看,看看兩者差多少。
3. 時鐘與觸發(fā)器的關(guān)系“時鐘是時序電路的控制者”這句話太經(jīng)典了,可以說是FPGA設(shè)計的圣言。FPGA的設(shè)計主要是以時序電路為主,因為組合邏輯電路再怎么復(fù)雜也變不出太多花樣,理解起來也不沒太多困難。但是時序電路就不同了,它的所有動作都是在時鐘一拍一拍的節(jié)奏下轉(zhuǎn)變觸發(fā),可以說時鐘就是整個電路的控制者,控制不好,電路功能就會混亂。
打個比方,時鐘就相當于人體的心臟,它每一次的跳動就是觸發(fā)一個 CLK,向身體的各個器官供血,維持著機體的正常運作,每一個器官體統(tǒng)正常工作少不了組織細胞的構(gòu)成,那么觸發(fā)器就可以比作基本單元組織細胞。時序邏輯電路的時鐘是控制時序邏輯電路狀態(tài)轉(zhuǎn)換的“發(fā)動機”,沒有它時序邏輯電路就不能正常工作。因為時序邏輯電路主要是利用觸發(fā)器存儲電路的狀態(tài),而觸發(fā)器狀態(tài)變換需要時鐘的上升或下降沿,由此可見時鐘在時序電路中的核心作用。
**簡單說一**會吧,歸結(jié)起來就是多實踐、多思考、多問。實踐出真知,看100遍別人的方案不如自己去實踐一下。實踐的動力一方面來自興趣,一方面來自壓力。
有需求會容易形成壓力,也就是說**能在實際的項目開發(fā)中鍛煉,而不是為了學(xué)習(xí)而學(xué)習(xí)。為什么你會覺得FPGA難學(xué)?1. 不熟悉FPGA的內(nèi)部結(jié)構(gòu)FPGA為什么是可以編程的?恐怕很多初學(xué)者不知道,他們也不想知道。因為他們覺得這是無關(guān)緊要的。他們潛意識的認為可編程嘛,肯定就是像寫軟件一樣啦。
軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),要想學(xué)會FPGA 恐怕是天方夜譚。那么FPGA為什么是可以“編程”的呢?首先來了解一下什么叫“程”。
其實 “程”只不過是一堆具有一定含義的01編碼而已。編程,其實就是編寫這些01編碼。只不過我們現(xiàn)在有了很多開發(fā)工具運算或者是其它操作。所以軟件是一條一條的,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,**由開發(fā)工具轉(zhuǎn)換為這種01編碼而已。
對于軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內(nèi)部的電路完成一個個的讀,因為軟件的操作是一步一步完成的。而FPGA的可編程,本質(zhì)也是依靠這些01編碼實現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來再去控制一個運算電路,F(xiàn)PGA里面沒有這些東西。FPGA內(nèi)部主要三塊:可編程的邏輯單元、可編程的連線和可編程的IO模塊。
可編程的邏輯單元其基本結(jié)構(gòu)某種存儲器(SRAM、 FLASH等)制成的4輸入或6輸入1輸出的“真值表”加上一個D觸發(fā)器構(gòu)成。任何一個4輸入1輸出組合邏輯電路,都有一張對應(yīng)的“真值表”,同樣的如果用這么一個存儲器制成的4輸入1輸出的“真值表”,只需要修改其“真值表”內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯,這些“真值表”內(nèi)部值就是那些01編碼。如果要實現(xiàn)時序邏輯電路怎么辦?任何的時序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來完成。
但這畢竟只實現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當?shù)拇蟆?删幊踢B線那怎么辦呢?這個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的鏈接點,通過改寫對應(yīng)存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。這就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。
可編程的IO任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標準進行設(shè)置??倸w一句話,F(xiàn)PGA之所以可編程是因為可以通過特殊的01代碼制作成一張張 “真值表”,并將這些“真值表”組合起來以實現(xiàn)大規(guī)模的邏輯功能。
不了解FPGA內(nèi)部結(jié)構(gòu),就不能明白最終代碼如何變到FPGA里面去的,也就無法深入的了解如何能夠充分運用FPGA。現(xiàn)在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實現(xiàn)復(fù)雜的邏輯電路設(shè)計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內(nèi)部邏輯及其工作原理做起。2. 錯誤理解HDL語言,怎么看都看不出硬件結(jié)構(gòu)HDL語言的英語全稱是:Hardware Deion Language,注意這個單詞Deion,而不是Design。
老外為什么要用Deion這個詞而不是Design呢?因為HDL確實不是用用來設(shè)計硬件的,而僅僅是用來描述硬件的。描述這個詞**地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來而已。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計出來了。
語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達形式而已。硬件設(shè)計也是有不同的抽象層次,每一個層次都需。
作為一名硬件工程師,有必要學(xué)習(xí)fpga嗎??
可以學(xué)習(xí)一下的,會更有幫助,你如果有精力,能夠掌握更多的技術(shù)當然更好。近幾年可編程的門陣列(FPGA)技術(shù)發(fā)展迅速,其高度的靈活性,使其在通信(5G)、數(shù)據(jù)處理、**、儀器、工業(yè)控制、軍事、航空航天、集成電路、人工智能等領(lǐng)域得到越來越廣泛的應(yīng)用。
在數(shù)字IC設(shè)計領(lǐng)域,前端驗證工作一般都是用FPGA完成的,因此FPGA工程師也是IC設(shè)計公司迫切需要的人才。
FPGA/IC邏輯設(shè)計開發(fā)已經(jīng)成為當前最有發(fā)展前途的行業(yè)之一,特別是熟悉硬件構(gòu)架的FPGA系統(tǒng)工程師。業(yè)內(nèi)人士認為,目前FPGA/IC設(shè)計行業(yè)至少有20-30萬的人才缺口,僅北京市場FPGA硬件開發(fā)人員的需求就已經(jīng)超過了3萬人,而且還在持續(xù)增加。這主要有兩方面的原因:一是目前高校的專業(yè)設(shè)置很少涉及FPGA和IC設(shè)計的課程,即使有也是偏重于理論,因此企業(yè)很難**到實戰(zhàn)型人才;二是FPGA和IC設(shè)計需要硬件環(huán)境和大量的實踐來積累經(jīng)驗。如果沒有適當?shù)闹笇?dǎo),需要走很多彎路。
FPGA工程師有前途嗎?
有前途,fpga的話是屬于硬件工程師之類的,這個工程師的話,個人覺得是靠年齡才能夠成長的。年齡越大的話越吃香。
**每年對于FPGA設(shè)計人才的需求缺口巨大,F(xiàn)PGA設(shè)計人才的薪水也是行業(yè)內(nèi)**的。
目前,美國已有FPGA人才40多萬,****地區(qū)也有7萬多,而**內(nèi)地僅有1萬左右,可見**渴望有更多的FPGA人才涌現(xiàn)出來??梢奻pga工程師在**的需求還是很大的,發(fā)展前景也是可觀。
FPGA入門
學(xué)習(xí)FPGA,先理解對應(yīng)語言的語法,這里僅對于 Verilog HDL 和 VHDL,對于系統(tǒng)級不做討論。對于硬件描述語言的選擇,大家不用糾結(jié),如果沒有個人或者特殊需求。
建議先入手 Verilog HDL,Verilog HDL設(shè)計運用比較靈活,有點類似于C語言,但是在學(xué)習(xí)的時候不能按照C語言的順序執(zhí)行去思考,要轉(zhuǎn)變思想。
對于 VHDL,邏輯比較縝密,格式要求比較單一,還是比較容易*記硬背的,verilog比較靈活,先學(xué) Verilog HDL 的好處就是,可以靈活變通,如果先接觸 VHDL 的話,怕你再接觸 Verilog HDL時陷入*記硬背的節(jié)奏里,不太容易接受。
總的來說,學(xué)通透了,兩者并沒有什么影響,兩種語言都熟練掌握當然是**啦,但是你也可以僅掌握你需要用的,這個具體看個人需求了。