<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 為什么大量的人會(huì)覺(jué)得FPGA難學(xué)?這些道理你都知道嗎?

          為什么大量的人會(huì)覺(jué)得FPGA難學(xué)?這些道理你都知道嗎?

          作者: 時(shí)間:2018-08-27 來(lái)源:網(wǎng)絡(luò) 收藏

                問(wèn):本人零基礎(chǔ),想學(xué),求有經(jīng)驗(yàn)的人說(shuō)說(shuō),我應(yīng)該從哪入手,應(yīng)該看什么教程,應(yīng)該用什么學(xué)習(xí)板和開(kāi)發(fā)板,看什么書(shū)等,希望有經(jīng)驗(yàn)的好心人能夠給我一些引導(dǎo)。

          本文引用地址:http://www.ex-cimer.com/article/201808/391154.htm

            如果想速成,那就上網(wǎng)看視頻吧,這樣主要是面對(duì)應(yīng)用的,一個(gè)小時(shí)內(nèi)讓你的板子運(yùn)行起來(lái)。早期起來(lái)的快,活學(xué)活用,就是后期沒(méi)有系統(tǒng)理論支持,會(huì)有些吃力,特別是大項(xiàng)目,那完全是個(gè)悲劇。國(guó)內(nèi)做的可以的,我知道的就是周立功了,艾米電子也可以吧。這兩家都有學(xué)習(xí)板,不過(guò)后者的教程抄襲的前者的。前者功底深厚些,資金不緊張就買(mǎi)前者吧。速成的話(huà),數(shù)電書(shū)一定一定必備,邊看邊學(xué)比較好。其余的書(shū)可以適量買(mǎi)點(diǎn)。

            其實(shí)只要有興趣,慢慢學(xué),入門(mén)也不難,板子就去網(wǎng)購(gòu)吧,我去華強(qiáng)北逛了好多次了,都沒(méi)什么好板子。網(wǎng)購(gòu)大把的!

            總結(jié)幾點(diǎn)

            1、看代碼,建模型

            只有在腦海中建立了一個(gè)個(gè)邏輯模型,理解內(nèi)部邏輯結(jié)構(gòu)實(shí)現(xiàn)的基礎(chǔ),才能明白為什么寫(xiě)Verilog和寫(xiě)C整體思路是不一樣的,才能理解順序執(zhí)行語(yǔ)言和并行執(zhí)行語(yǔ)言的設(shè)計(jì)方法上的差異。在看到一段簡(jiǎn)單程序的時(shí)候應(yīng)該想到是什么樣的功能電路。

            2、用數(shù)學(xué)思維來(lái)簡(jiǎn)化設(shè)計(jì)邏輯

            學(xué)習(xí)不僅邏輯思維很重要,好的數(shù)學(xué)思維也能讓你的設(shè)計(jì)化繁為簡(jiǎn),所以啊,那些看見(jiàn)高數(shù)就頭疼的童鞋需要重視一下這門(mén)課哦。舉個(gè)簡(jiǎn)單的例子,比如有兩個(gè)32bit的數(shù)據(jù)X[31:0]與Y[31:0]相乘。當(dāng)然,無(wú)論Altera還是Xilinx都有現(xiàn)成的乘法器IP核可以調(diào)用,這也是最簡(jiǎn)單的方法,但是兩個(gè)32bit的乘法器將耗費(fèi)大量的資源。那么有沒(méi)有節(jié)省資源,又不太復(fù)雜的方式來(lái)實(shí)現(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相乘,這樣一個(gè)32bit*32bit的乘法運(yùn)算轉(zhuǎn)換成了四個(gè)16bit*16bit的乘法運(yùn)算和三個(gè)32bit的加法運(yùn)算。轉(zhuǎn)換后的占用資源將會(huì)減少很多,有興趣的童鞋,不妨綜合一下看看,看看兩者差多少。

            3、時(shí)鐘與觸發(fā)器的關(guān)系

            “時(shí)鐘是時(shí)序電路的控制者”這句話(huà)太經(jīng)典了,可以說(shuō)是FPGA設(shè)計(jì)的圣言。FPGA的設(shè)計(jì)主要是以時(shí)序電路為主,因?yàn)榻M合邏輯電路再怎么復(fù)雜也變不出太多花樣,理解起來(lái)也不沒(méi)太多困難。但是時(shí)序電路就不同了,它的所有動(dòng)作都是在時(shí)鐘一拍一拍的節(jié)奏下轉(zhuǎn)變觸發(fā),可以說(shuō)時(shí)鐘就是整個(gè)電路的控制者,控制不好,電路功能就會(huì)混亂。

            打個(gè)比方,時(shí)鐘就相當(dāng)于人體的心臟,它每一次的跳動(dòng)就是觸發(fā)一個(gè) CLK,向身體的各個(gè)器官供血,維持著機(jī)體的正常運(yùn)作,每一個(gè)器官體統(tǒng)正常工作少不了組織細(xì)胞的構(gòu)成,那么觸發(fā)器就可以比作基本單元組織細(xì)胞。時(shí)序邏輯電路的時(shí)鐘是控制時(shí)序邏輯電路狀態(tài)轉(zhuǎn)換的“發(fā)動(dòng)機(jī)”,沒(méi)有它時(shí)序邏輯電路就不能正常工作,因?yàn)闀r(shí)序邏輯電路主要是利用觸發(fā)器存儲(chǔ)電路的狀態(tài),而觸發(fā)器狀態(tài)變換需要時(shí)鐘的上升或下降沿!由此可見(jiàn)時(shí)鐘在時(shí)序電路中的核心作用!

            最后簡(jiǎn)單說(shuō)一下體會(huì)吧,歸結(jié)起來(lái)就是多實(shí)踐、多思考、多問(wèn)。實(shí)踐出真知,看100遍別人的方案不如自己去實(shí)踐一下。實(shí)踐的動(dòng)力一方面來(lái)自興趣,一方面來(lái)自壓力,我個(gè)人覺(jué)得后者更重要。有需求會(huì)容易形成壓力,也就是說(shuō)最好能在實(shí)際的項(xiàng)目開(kāi)發(fā)中鍛煉,而不是為了學(xué)習(xí)而學(xué)習(xí)。在實(shí)踐的過(guò)程中要多思考,多想想問(wèn)題出現(xiàn)的原因,問(wèn)題解決后要多問(wèn)幾個(gè)為什么,這也是經(jīng)驗(yàn)積累的過(guò)程,如果有寫(xiě)項(xiàng)目日志的習(xí)慣更好,把問(wèn)題及原因、解決的辦法都寫(xiě)進(jìn)去。最后還要多問(wèn),遇到問(wèn)題思索后還得不到解決就要問(wèn)了,畢竟個(gè)人的力量是有限的,問(wèn)同學(xué)同事、問(wèn)搜索引擎、問(wèn)網(wǎng)友都可以,一篇文章、朋友們的點(diǎn)撥都可能幫助自己快速解決問(wèn)題。

            為什么大量的人會(huì)覺(jué)得FPGA難學(xué)?

            1、不熟悉FPGA的內(nèi)部結(jié)構(gòu),不了解可編程邏輯器件的基本原理

            FPGA為什么是可以編程的?恐怕很多菜鳥(niǎo)不知道,他們也不想知道。因?yàn)樗麄冇X(jué)得這是無(wú)關(guān)緊要的。他們潛意識(shí)的認(rèn)為可編程嘛,肯定就是像寫(xiě)軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語(yǔ)言或者其它軟件編程語(yǔ)言一樣。一條條的讀,一條條的分析。如果這些菜鳥(niǎo)們始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),要想學(xué)會(huì)FPGA 恐怕是天方夜譚。雖然現(xiàn)在EDA軟件已經(jīng)非常先進(jìn),像寫(xiě)軟件那樣照貓畫(huà)虎也能綜合出點(diǎn)東西,但也許只有天知道EDA軟件最后綜合出來(lái)的到底是什么。也許點(diǎn)個(gè)燈,跑個(gè)馬還行。這樣就是為什么很多菜鳥(niǎo)學(xué)了N久以后依然是一個(gè)菜鳥(niǎo)的原因。那么FPGA為什么是可以“編程”的呢?首先來(lái)了解一下什么叫“程”。啟示 “程”只不過(guò)是一堆具有一定含義的01編碼而已。

            編程,其實(shí)就是編寫(xiě)這些01編碼。只不過(guò)我們現(xiàn)在有了很多開(kāi)發(fā)工具運(yùn)算或者是其它操作。所以軟件是一條一條的,通常都不是直接編寫(xiě)這些01編碼,而是以高級(jí)語(yǔ)言的形式來(lái)編寫(xiě),最后由開(kāi)發(fā)工具轉(zhuǎn)換為這種01編碼而已。對(duì)于軟件編程而言,處理器會(huì)有一個(gè)專(zhuān)門(mén)的譯碼電路逐條把這些01編碼翻譯為各種控制信號(hào),然后控制其內(nèi)部的電路完成一個(gè)個(gè)的讀,因?yàn)檐浖牟僮魇且徊揭徊酵瓿傻摹6鳩PGA的可編程,本質(zhì)也是依靠這些01編碼實(shí)現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來(lái)再去控制一個(gè)運(yùn)算電路,F(xiàn)PGA里面沒(méi)有這些東西。

            FPGA內(nèi)部主要三塊:可編程的邏輯單元、可編程的連線(xiàn)和可編程的IO模塊??删幊痰倪壿媶卧鞘裁?其基本結(jié)構(gòu)某種存儲(chǔ)器(SRAM、 FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個(gè)D觸發(fā)器構(gòu)成。任何一個(gè)4輸入1輸出組合邏輯電路,都有一張對(duì)應(yīng)的“真值表”,同樣的如果用這么一個(gè)存儲(chǔ)器制成的4輸入1輸出地“真值表”,只需要修改其“真值表”內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內(nèi)部值是什么?就是那些01編碼而已。如果要實(shí)現(xiàn)時(shí)序邏輯電路怎么辦?這不又D觸發(fā)器嘛,任何的時(shí)序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來(lái)完成。但這畢竟只實(shí)現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當(dāng)?shù)拇笈丁?/p>

            那怎么辦呢?這個(gè)時(shí)候就需要用到可編程連線(xiàn)了。在這些連線(xiàn)上有很多用存儲(chǔ)器控制的鏈接點(diǎn),通過(guò)改寫(xiě)對(duì)應(yīng)存儲(chǔ)器的值就可以確定哪些線(xiàn)是連上的而哪些線(xiàn)是斷開(kāi)的。這就可以把很多可編程邏輯單元組合起來(lái)形成大型的邏輯電路。最后就是可編程的IO,這其實(shí)是FPGA作為芯片級(jí)使用必須要注意的。

            任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個(gè)非專(zhuān)用引腳(FPGA中有專(zhuān)門(mén)的非用戶(hù)可使用的測(cè)試、下載用引腳)為輸入還是輸出,還可以對(duì)IO的電平標(biāo)準(zhǔn)進(jìn)行設(shè)置??倸w一句話(huà),F(xiàn)PGA之所以可編程是因?yàn)榭梢酝ㄟ^(guò)特殊的01代碼制作成一張張 “真值表”,并將這些“真值表”組合起來(lái)以實(shí)現(xiàn)大規(guī)模的邏輯功能。

            不了解FPGA內(nèi)部結(jié)構(gòu),就不能明白最終代碼如何變到FPGA里面去的。也就無(wú)法深入的了解如何能夠充分運(yùn)用FPGA?,F(xiàn)在的FPGA,不單單是有前面講的那三塊,還有很多專(zhuān)用的硬件功能單元,如何利用好這些單元實(shí)現(xiàn)復(fù)雜的邏輯電路設(shè)計(jì),是從菜鳥(niǎo)邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內(nèi)部邏輯及其工作原理做起。

            2、錯(cuò)誤理解HDL語(yǔ)言,怎么看都看不出硬件結(jié)構(gòu)

            HDL語(yǔ)言的英語(yǔ)全稱(chēng)是:Hardware Deion Language,注意這個(gè)單詞Deion,而不是Design。老外為什么要用Deion這個(gè)詞而不是Design呢?因?yàn)镠DL確實(shí)不是用用來(lái)設(shè)計(jì)硬件的,而僅僅是用來(lái)描述硬件的。描述這個(gè)詞精確地反映了HDL語(yǔ)言的本質(zhì),HDL語(yǔ)言不過(guò)是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來(lái)而已。而在編寫(xiě)語(yǔ)言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計(jì)出來(lái)了。語(yǔ)言只不過(guò)是將這種設(shè)計(jì)轉(zhuǎn)化為文字表達(dá)形式而已。但是很多人就不理解了,既然硬件都已經(jīng)被設(shè)計(jì)出來(lái)了,直接拿去制作部就完了,為什么還要轉(zhuǎn)化為文字表達(dá)形式再通過(guò)EDA工具這些麻煩的流程呢?其實(shí)這就是很多菜鳥(niǎo)沒(méi)有了解設(shè)計(jì)的抽象層次的問(wèn)題,任何設(shè)計(jì)包括什么服裝、機(jī)械、廣告設(shè)計(jì)都有一個(gè)抽象層次的問(wèn)題。就拿廣告設(shè)計(jì)來(lái)說(shuō)吧,最初的設(shè)計(jì)也許就是一個(gè)概念,設(shè)計(jì)出這個(gè)概念也是就是一個(gè)點(diǎn)子而已,離最終拍成廣告還差得很遠(yuǎn)。

            硬件設(shè)計(jì)也是有不同的抽象層次,每一個(gè)層次都需要設(shè)計(jì)。最高的抽象層次為算法級(jí)、然后依次是體系結(jié)構(gòu)級(jí)、寄存器傳輸級(jí)、門(mén)級(jí)、物理版圖級(jí)。使用HDL的好處在于我們已經(jīng)設(shè)計(jì)好了一個(gè)寄存器傳輸級(jí)的電路,那么用HDL描述以后轉(zhuǎn)化為文本的形式,剩下的向更低層次的轉(zhuǎn)換就可以讓EDA工具去做了,這就大大的降低了工作量。這就是可綜合的概念,也就是說(shuō)在對(duì)這一抽象層次上硬件單元進(jìn)行描述可以被EDA工具理解并轉(zhuǎn)化為底層的門(mén)級(jí)電路或其他結(jié)構(gòu)的電路。

            在FPGA設(shè)計(jì)中,就是在將這以抽象層級(jí)的意見(jiàn)描述成HDL語(yǔ)言,就可以通過(guò)FPGA開(kāi)發(fā)軟件轉(zhuǎn)化為問(wèn)題1中所述的FPGA內(nèi)部邏輯功能實(shí)現(xiàn)形式。HDL也可以描述更高的抽象層級(jí)如算法級(jí)或者是體系結(jié)構(gòu)級(jí),但目前受限于EDA軟件的發(fā)展,EDA軟件還無(wú)法理解這么高的抽象層次,所以 HDL描述這樣抽象層級(jí)是無(wú)法被轉(zhuǎn)化為較低的抽象層級(jí)的,這也就是所謂的不可綜合。所以在閱讀或編寫(xiě)HDL語(yǔ)言,尤其是可綜合的HDL,不應(yīng)該看到的是語(yǔ)言本身,而是要看到語(yǔ)言背后所對(duì)應(yīng)的硬件電路結(jié)構(gòu)。如果看到的HDL始終是一條條的代碼,那么這種人永遠(yuǎn)擺脫不了菜鳥(niǎo)的宿命。假如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬件模塊,那么恭喜脫離了菜鳥(niǎo)的級(jí)別,進(jìn)入不那么菜的鳥(niǎo)級(jí)別。

            3、FPGA本身不算什么,一切皆在FPGA之外,這一點(diǎn)恐怕也是很多學(xué)FPGA的菜鳥(niǎo)最難理解的地方

            FPGA是給誰(shuí)用的?很多學(xué)校解釋為給學(xué)微電子專(zhuān)業(yè)或者集成電路設(shè)計(jì)專(zhuān)業(yè)的學(xué)生用的,其實(shí)這不過(guò)是很多學(xué)校受資金限制,買(mǎi)不起專(zhuān)業(yè)的集成電路設(shè)計(jì)工具而用FPGA工具替代而已。其實(shí)FPGA是給設(shè)計(jì)電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個(gè)電子設(shè)備,如基站、機(jī)頂盒、視頻監(jiān)控設(shè)備等。當(dāng)現(xiàn)有芯片無(wú)法滿(mǎn)足系統(tǒng)的需求時(shí),就需要用FPGA來(lái)快速的定義一個(gè)能用的芯片。

            前面說(shuō)了,F(xiàn)PGA里面無(wú)法就是一些“真值表”、觸發(fā)器、各種連線(xiàn)以及一些硬件資源,電子系統(tǒng)工程師使用FPGA進(jìn)行設(shè)計(jì)時(shí)無(wú)非就是考慮如何將這些以后資源組合起來(lái)實(shí)現(xiàn)一定的邏輯功能而已,而不必像IC設(shè)計(jì)工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來(lái)。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒(méi)有區(qū)別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來(lái)還是簡(jiǎn)單的,因?yàn)闊o(wú)非就是那些資源,在理解了前面兩點(diǎn)再搞個(gè)實(shí)驗(yàn)板,跑跑實(shí)驗(yàn),做點(diǎn)簡(jiǎn)單的東西是可以的。而真正要把FPGA用好,那光懂點(diǎn)FPGA知識(shí)就遠(yuǎn)遠(yuǎn)不夠了。因?yàn)樽罱K要讓FPGA里面的資源如何組合,實(shí)現(xiàn)何種功能才能滿(mǎn)足系統(tǒng)的需要,那就需要懂得更多更廣泛的知識(shí)。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: FPGA CAN

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();