欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      FPGA學(xué)習(xí)及設(shè)計中的注意事項

      時間:2019-05-13 21:57:15下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《FPGA學(xué)習(xí)及設(shè)計中的注意事項》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《FPGA學(xué)習(xí)及設(shè)計中的注意事項》。

      第一篇:FPGA學(xué)習(xí)及設(shè)計中的注意事項

      FPGA學(xué)習(xí)及設(shè)計中的注意事項1.基礎(chǔ)問題FPGA的基礎(chǔ)就是數(shù)字電路和HDL語言,想學(xué)好FPGA的人,建議床頭都有一本數(shù)字電路的書,不管是哪個版本的,這個是基礎(chǔ),多了解也有助于形成硬件設(shè)計的思想。在語言方面,建議初學(xué)者學(xué)習(xí)Verilog語言,VHDL語言語法規(guī)范嚴(yán)格,調(diào)試起來很慢,Verilog語言容易上手,而且,一般大型企業(yè)都是用Verilog語言。

      2.EDA工具問題

      熟悉幾個常用的就可以的,開發(fā)環(huán)境QuartusII,或ISE 就可以了,這兩個基本是相通的,會了哪一個,另外的那個也就很Easy了。功能仿真建議使用Modelsim,如果你是做芯片的,就可以學(xué)學(xué)別的仿真工具,做FPGA的,Modelsim就足夠了。綜合工具一般用Synplify,初學(xué)先不用太關(guān)心這個,用Quartus綜合就OK了。

      3.硬件設(shè)計思想問題

      對于初學(xué)者,特別是從軟件轉(zhuǎn)過來的,設(shè)計的程序既費資源又速度慢,而且很有可能綜合不了,這就要求我們熟悉一些固定模塊的寫法,可綜合的模塊很多書上都有,語言介紹上都有,不要想當(dāng)然的用軟件的思想去寫硬件。詳細(xì)資料:edu118.com

      4.學(xué)習(xí)習(xí)慣問題

      FPGA學(xué)習(xí)要多練習(xí),多仿真,signaltapII是很好的工具,可以看到每個信號的真實值,建議初學(xué)者一定要自己多動手,光看書是沒用的。關(guān)于英文文檔問題,如果要學(xué)會Quartus II的所有功能,只要看它的handbook就可以了,很詳細(xì),對于IT行業(yè)的人,大部分知識來源都是英文文檔,一定要耐心看,會從中收獲很多的。

      5.算法問題

      做FPGA的工程師,最后一般都是專攻算法了,這些基礎(chǔ)知識都是順手捏來的,如果你沒有做好搞理論的準(zhǔn)備,學(xué)FPGA始終只能停留在初級階段上。對于初學(xué)者,數(shù)字信號處理是基礎(chǔ),應(yīng)該好好理解,往更深的方向,不用什么都學(xué),根據(jù)你以后從事的方向,比如

      說通信、圖像處理,雷達(dá)、聲納、導(dǎo)航定位等。深圳專業(yè)FPGA技術(shù)實訓(xùn)江老師QQ1469217515

      FPGA設(shè)計的注意事項

      不管你是一名邏輯設(shè)計師、硬件工程師或系統(tǒng)工程師,甚或擁有所有這些頭銜,只要你在任何一種高速和多協(xié)議的復(fù)雜系統(tǒng)中使用了FPGA,你就很可能需要努力解決好器件配置、電源管理、IP集成、信號完整性和其他的一些關(guān)鍵設(shè)計問題。不過,你不必獨自面對這些挑戰(zhàn),因為在當(dāng)前業(yè)內(nèi)領(lǐng)先的FPGA公司里工作的應(yīng)用工程師每天都會面對這些問題,而且他們已經(jīng)提出了一些將令你的設(shè)計工作變得更輕松的設(shè)計指導(dǎo)原則和解決方案。

      第二篇:如何學(xué)習(xí)fpga

      如何學(xué)習(xí)FPGA

      關(guān)鍵詞:工作人員, 硬件, 設(shè)計, FPGA

      掌握FPGA可以找到一份很好的工作,對于有經(jīng)驗的工作人員,使用FPGA可以讓設(shè)計變得非常有靈活性。掌握了FPGA設(shè)計,單板硬件設(shè)計就非常容易(不是系統(tǒng)設(shè)計),特別是上大學(xué)時如同天書的邏輯時序圖,看起來就非常親切。但FPGA入門卻有一定難度,因為它不像軟件設(shè)計,只要有一臺計算機,幾乎就可以完成所有的設(shè)計。FPGA設(shè)計與硬件直接相關(guān),需要實實在在的調(diào)試儀器,譬如示波器等。這些硬件設(shè)備一般比較昂貴,這就造成一定的入門門檻,新人在入門時遇到一點問題或者困難,由于沒有調(diào)試設(shè)備,無法定位問題,最后可能就會放棄。其實這時如果有人稍微指點一下,這個門檻很容易就過去。我用FPGA做設(shè)計很多年了,遠(yuǎn)達(dá)不到精通的境界,只是熟悉使用,在這里把我對FPGA學(xué)習(xí)步驟理解寫出來,僅是作為一個參考,不對的地方,歡迎大家討論和指正。

      FPGA學(xué)習(xí)步驟

      1、工欲善其事,必先利其器。

      計算機必不可少。目前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)的邏輯功能和基本機構(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,是沒有二次機會的,所以一定要把仿真做好,還有很多新手對于語言的學(xué)習(xí)不知道選vhdl好還是verilog好,個人偏好verilog,當(dāng)然不是說vhdl不好,反正寫出來的都是電路,那當(dāng)然就不要在語言的語法上面花太多的功夫了,verilog 言簡意賅assign always case if else 掌握這些幾乎可以寫出90%的電路了,上面是我對FPGA學(xué)習(xí)的一些愚見,希望對大家有所幫助。

      第三篇:淺談FPGA學(xué)習(xí)

      為什么大量的人會覺得FPGA難學(xué)?一位高人決心開貼來詳細(xì)講一下菜鳥覺得FPGA難學(xué)的幾大原因。

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

      FPGA為什么是可以編程的?恐怕很多菜鳥不知道,他們也不想知道。因為他們覺得這是無關(guān)緊要的。他們潛意識的認(rèn)為可編程嘛,肯定就是像寫軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),要想學(xué)會FPGA恐怕是天方夜譚。雖然現(xiàn)在EDA軟件已經(jīng)非常先進(jìn),像寫軟件那樣照貓畫虎也能綜合出點東西,但也許只有天知道EDA軟件最后綜合出來的到底是什么。也許點個燈,跑個馬還行。這樣就是為什么很多菜鳥學(xué)了N久以后依然是一個菜鳥的原因。那么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模塊??删幊痰倪壿媶卧鞘裁矗科浠窘Y(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)時序邏輯電路怎么辦?這不又D觸發(fā)器嘛,任何的時序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來完成。但這畢竟只實現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當(dāng)?shù)拇笈?。那怎么辦呢?這個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的連接點,通過改寫對應(yīng)存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。這就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。最后就是可編程的IO,這其實是FPGA作為芯片級使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標(biāo)準(zhǔn)進(jìn)行設(shè)置??倸w一句話,F(xiàn)PGA之所以可編程是因為可以通過特殊的01代碼制作成一張張“真值表”,并將這些“真值表”組合起來以實現(xiàn)大規(guī)模的邏輯功能。不了解FPGA內(nèi)部結(jié)構(gòu),就不能明白最終代碼如何變到FPGA里面去的。也就無法深入的了解如何能夠充分運用FPGA?,F(xiàn)在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實現(xiàn)復(fù)雜的邏輯電路設(shè)計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內(nèi)部邏輯及其工作原理起。

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

      HDL語言的英語全稱是:Hardware Description Language,注意這個單詞Description,而不是Design。老外為什么要用Description這個詞而不是Design呢?因為HDL確實不是用來設(shè)計硬件的,而僅僅是用來描述硬件的。描述這個詞精確地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來而已。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計出來了。語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達(dá)形式而已。但是很多人就不理解了,既然硬件都已經(jīng)被設(shè)計出來了,直接拿去制作

      部就完了,為什么還要轉(zhuǎn)化為文字表達(dá)形式再通過EDA工具這些麻煩的流程呢?其實這就是很多菜鳥沒有了解設(shè)計的抽象層次的問題,任何設(shè)計包括什么服裝、機械、廣告設(shè)計都有一個抽象層次的問題。就拿廣告設(shè)計來說吧,最初的設(shè)計也許就是一個概念,設(shè)計出這個概念也是就是一個點子而已,離最終拍成廣告還差得很遠(yuǎn)。硬件設(shè)計也是有不同的抽象層次,每一個層次都需要設(shè)計。最高的抽象層次為算法級、然后依次是體系結(jié)構(gòu)級、寄存器傳輸級、門級、物理版圖級。使用HDL的好處在于我們已經(jīng)設(shè)計好了一個寄存器傳輸級的電路,那么用HDL描述以后轉(zhuǎn)化為文本的形式,剩下的向更低層次的轉(zhuǎn)換就可以讓EDA工具去做了,這就大大的降低了工作量。這就是可綜合的概念,也就是說在對這一抽象層次上硬件單元進(jìn)行描述可以被EDA工具理解并轉(zhuǎn)化為底層的門級電路或其他結(jié)構(gòu)的電路。在FPGA設(shè)計中,就是在將這以抽象層級的意見描述成HDL語言,就可以通過FPGA開發(fā)軟件轉(zhuǎn)化為問題1中所述的FPGA內(nèi)部邏輯功能實現(xiàn)形式。HDL也可以描述更高的抽象層級如算法級或者是體系結(jié)構(gòu)級,但目前受限于EDA軟件的發(fā)展,EDA軟件還無法理解這么高的抽象層次,所以HDL描述這樣抽象層級是無法被轉(zhuǎn)化為較低的抽象層級的,這也就是所謂的不可綜合。所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應(yīng)該看到的是語言本身,而是要看到語言背后所對應(yīng)的硬件電路結(jié)構(gòu)。如果看到的HDL始終是一條條的代碼,那么這種人永遠(yuǎn)擺脫不了菜鳥的宿命。假如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬件模塊,那么恭喜脫離了菜鳥的級別,進(jìn)入不那么菜的鳥級別。

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

      FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實這不過是很多學(xué)校受資金限制,買不起專業(yè)的集成電路設(shè)計工具而用FPGA工具替代而已。其實FPGA是給設(shè)計電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設(shè)備,如基站、機頂盒、視頻監(jiān)控設(shè)備等。當(dāng)現(xiàn)有芯片無法滿足系統(tǒng)的需求時,就需要用FPGA來快速的定義一個能用的芯片。前面說了,F(xiàn)PGA里面無法就是一些“真值表”、觸發(fā)器、各種連線以及一些硬件資源,電子系統(tǒng)工程師使用FPGA進(jìn)行設(shè)計時無非就是考慮如何將這些以后資源組合起來實現(xiàn)一定的邏輯功能而已,而不必像IC設(shè)計工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒有區(qū)別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來還是簡單的,因為無非就是那些資源,在理解了前面兩點再搞個實驗板,跑跑實驗,做點簡單的東西是可以的。而真正要把FPGA用好,那光懂點FPGA知識就遠(yuǎn)遠(yuǎn)不夠了。因為最終要讓FPGA里面的資源如何組合,實現(xiàn)何種功能才能滿足系統(tǒng)的需要,那就需要懂得更多更廣泛的知識。

      目前FPGA的應(yīng)用主要是三個方向:

      第一個方向,也是傳統(tǒng)方向主要用于通信設(shè)備的高速接口電路設(shè)計,這一方向主要是用FPGA處理高速接口的協(xié)議,并完成高速的數(shù)據(jù)收發(fā)和交換。這類應(yīng)用通常要求采用具備高速收發(fā)接口的FPGA,同時要求設(shè)計者懂得高速接口電路設(shè)計和高速數(shù)字電路板級設(shè)計,具備EMC/EMI設(shè)計知識,以及較好的模擬電路基礎(chǔ),需要解決在高速收發(fā)過程中產(chǎn)生的信號完整性問題。FPGA最初以及到目前最廣的應(yīng)用就是在通信領(lǐng)域,一方面通信領(lǐng)域需要高速的通信協(xié)議處理方式,另一方面通信協(xié)議隨時在修改,非常不適合做成專門的芯片。因此能夠靈活改變功能的FPGA就成為首選。到目前為止FPGA的一半以上的應(yīng)用也是在通信行業(yè)。

      第二個方向,可以稱為數(shù)字信號處理方向或者數(shù)學(xué)計算方向,因為很大程度上這一方向已經(jīng)大大超出了信號處理的范疇。例如早就在2006年就聽說老美將FPGA用于金融數(shù)據(jù)分析,后來又見到有將FPGA用于醫(yī)學(xué)數(shù)據(jù)分析的案例。在這一方向要求FPGA設(shè)計者有一定的數(shù)學(xué)功底,能夠理解并改進(jìn)較為復(fù)雜的數(shù)學(xué)算法,并利用FPGA內(nèi)部的各種資源使之能夠變?yōu)閷嶋H的運算電路。目前真正投入實用的還是在通信領(lǐng)域的無線信號處理、信道編解碼以及圖像信號處理等領(lǐng)域,其它領(lǐng)域的研究正在開展中,之所以沒有大量實用的主要原因還是因為學(xué)金融的、學(xué)醫(yī)學(xué)的不了解這玩意。不過最近發(fā)現(xiàn)歐美有很多電子工程、計算機類的博士轉(zhuǎn)入到金融行業(yè),開展金融信號處理,相信隨著轉(zhuǎn)入的人增加,F(xiàn)PGA在其它領(lǐng)域的數(shù)學(xué)計算功能會更好的發(fā)揮出來,而我也有意做一些這些方面的研究。不過國內(nèi)學(xué)金融的、學(xué)醫(yī)的恐怕連數(shù)學(xué)都很少用到,就不用說用FPGA來幫助他們完成數(shù)學(xué)_運算了,這個問題只有再議了。

      第三個方向,就是所謂的SOPC方向,其實嚴(yán)格意義上來說這個已經(jīng)在FPGA設(shè)計的范疇之外,只不過是利用FPGA這個平臺搭建的一個嵌入式系統(tǒng)的底層硬件環(huán)境,然后設(shè)計者主要是在上面進(jìn)行嵌入式軟件開發(fā)而已。設(shè)計對于FPGA本身來說是相當(dāng)少的。但如果涉及到需要在FPGA做專門的算法加速,實際上需要用到第二個方向的知識,而如果需要設(shè)計專用的接口電路則需要用到第一個方向的知識。

      就目前SOPC方向發(fā)展其實遠(yuǎn)不如第一和第二個方向,其主要原因是因為SOPC以FPGA為主,或者是在FPGA內(nèi)部的資源實現(xiàn)一個“軟”的處理器,或者是在FPGA內(nèi)部嵌入一個處理器核。但大多數(shù)的嵌入式設(shè)計卻是以軟件為核心,以現(xiàn)有的硬件發(fā)展情況來看,多數(shù)情況下的接口都已經(jīng)標(biāo)準(zhǔn)化,并不需要那么大的FPGA邏輯資源去設(shè)計太過復(fù)雜的接口。而且就目前看來SOPC相關(guān)的開發(fā)工具還非常的不完善,以ARM為代表的各類嵌入式處理器開發(fā)工具早已深入人心,大多數(shù)以ARM為核心的SOC芯片提供了大多數(shù)標(biāo)準(zhǔn)的接口,大量成系列的單片機/嵌入式處理器提供了相關(guān)行業(yè)所需要的硬件加速電路,需要專門定制硬件場合確實很少。通常是在一些特種行業(yè)才會在這方面有非常迫切的需求。即使目前Xilinx將ARM的硬核加入到FPGA里面,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機還在嵌入式領(lǐng)域混呢,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異來體現(xiàn)價值的。我曾經(jīng)看好的是cypress的Psoc這一想法。和SOPC系列不同,Psoc的思想是在SOC芯片里面去嵌入那么一小塊FPGA,那這樣其實可以滿足嵌入式的那些微小的硬件接口差異,比如某個運用需要4個USB,而通常的處理器不會提供那么多,就可以用這么一塊FPGA來提供多的USB接口。而另一種運用需要6個UART,也可以用同樣的方法完成。對于嵌入式設(shè)計公司來說他們只需要備貨一種芯片,就可以滿足這些設(shè)計中各種微小的差異變化。其主要的差異化仍然是通過軟件來完成。但目前cypress過于封閉,如果其采用ARM作為處理器內(nèi)核,借助其完整的工具鏈。同時開放IP合作,讓大量的第三方為它提供IP設(shè)計,其實是很有希望的。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發(fā)光。

      4、數(shù)字邏輯知識是根本。

      無論是FPGA的哪個方向,都離不開數(shù)字邏輯知識的支撐。FPGA說白了是一種實現(xiàn)數(shù)

      字邏輯的方式而已。如果連最基本的數(shù)字邏輯的知識都有問題,學(xué)習(xí)FPGA的愿望只是空中樓閣而已。而這,恰恰是很多菜鳥最不愿意去面對的問題。數(shù)字邏輯是任何電子電氣類專業(yè)的專業(yè)基礎(chǔ)知識,也是必須要學(xué)好的一門課。很多人無非是學(xué)習(xí)了,考個試,完了。如果不能將數(shù)字邏輯知識爛熟于心,養(yǎng)成良好的設(shè)計習(xí)慣,學(xué)FPGA到最后仍然是霧里看花水中望月,始終是一場空的。以上四條只是我目前總結(jié)菜鳥們在學(xué)習(xí)FPGA時所最容易跑偏的地方,F(xiàn)PGA的學(xué)習(xí)其實就像學(xué)習(xí)圍棋一樣,學(xué)會如何在棋盤上落子很容易,成為一位高手卻是難上加難。

      第四篇:FPGA學(xué)習(xí)經(jīng)驗總結(jié)

      FPGA是什么?FPGA現(xiàn)狀?怎樣學(xué)習(xí)FPGA?

      FPGA是什么?

      FPGA是什么?FPGA現(xiàn)狀?怎樣學(xué)習(xí)FPGA?

      FPGA是什么介紹

      FPGA是現(xiàn)場可編程門陣列的簡稱,F(xiàn)PGA的應(yīng)用領(lǐng)域最初為通信領(lǐng)域,但目前,隨著信息產(chǎn)業(yè)和微電子技術(shù)的發(fā)展,可編程邏輯嵌入式系統(tǒng)設(shè)計技術(shù)已經(jīng)成為信息產(chǎn)業(yè)最熱門的技術(shù)之一,應(yīng)用范圍遍及航空航天、醫(yī)療、通訊、網(wǎng)絡(luò)通訊、安防、廣播、汽車電子、工業(yè)、消費類市場、測量測試等多個熱門領(lǐng)域。并隨著工藝的進(jìn)步和技術(shù)的發(fā)展,向更多、更廣泛的應(yīng)用領(lǐng)域擴展。越來越多的設(shè)計也開始以ASIC轉(zhuǎn)向FPGA,F(xiàn)PGA正以各種電子產(chǎn)品的形式進(jìn)入了我們?nèi)粘I畹母鱾€角落。

      FPGA人才需求

      中國每年對于FPGA設(shè)計人才的需求缺口巨大,F(xiàn)PGA設(shè)計人才的薪水也是行業(yè)內(nèi)最高的。目前,美國已有FPGA人才40多萬,中國臺灣地區(qū)也有7萬多,而中國內(nèi)地僅有1萬左右,可見中國渴望有更多的FPGA人才涌現(xiàn)出來。

      如何學(xué)習(xí)FPGA?

      FPGA對我們?nèi)绱酥匾?,那么對于初學(xué)者來說,到底該如何學(xué)習(xí)FPGA呢?學(xué)習(xí)一門技術(shù)最好有合適的指導(dǎo)老師,這樣對掌握FPGA技術(shù)更容易,可惜的是大部分的學(xué)校還未開設(shè)相關(guān)的課程,也缺少具有實踐經(jīng)驗的老師,那么如何才能找到一種捷徑幫助初學(xué)者快速學(xué)會如此具有競爭力的技術(shù)呢?

      (1)掌握FPGA的編程語言

      在學(xué)習(xí)一門技術(shù)之前我們往往從它的編程語言開始,如同學(xué)習(xí)單片機一樣,我們從C語言開始入門,當(dāng)掌握了C語言之后,開發(fā)單片機應(yīng)用程序也就不是什么難事了。學(xué)習(xí)FPGA也是如此,F(xiàn)PGA的編程語言有兩種:VHDL和Verilog,這兩種語言都適合用于FPGA的編程,VHDL是由美國軍方組織開發(fā)的,在1987年就成為了IEEE的標(biāo)準(zhǔn);而Verilog則是由一家民間企業(yè)的私有財產(chǎn)轉(zhuǎn)移過來的,由于其優(yōu)越性特別突出,于是在1995年也成為了IEEE標(biāo)準(zhǔn)。VHDL在歐洲的應(yīng)用較為廣泛,而Verilog在中國、美國、日本、臺灣等地應(yīng)用較為廣泛,作者比較推崇是Verilog,因為它非常易于學(xué)習(xí),很類似于C語言,如果具有C語言基礎(chǔ)的人,只需要花很少的時間便能迅速掌握Verilog,而VHDL則較為抽象,學(xué)習(xí)的時間較長。作為在校大學(xué)生,學(xué)習(xí)Verilog的最好時期是在大學(xué)二年級開設(shè)《電子技術(shù)基礎(chǔ)(數(shù)字部分)》時同步學(xué)習(xí),不僅能夠理解數(shù)字電路實現(xiàn)的方式,更能通過FPGA將數(shù)字電路得以實現(xiàn)。大

      三、大四的學(xué)生還可以進(jìn)一步強化學(xué)習(xí)Verilog,建議以北京航天航空大學(xué)出版社出版的由夏宇聞教授編寫的《Verilog數(shù)字系統(tǒng)設(shè)計教程(第二版)》作為藍(lán)本,本書比較全面地、詳細(xì)地介紹了Verilog的基本語法。如果是其他初學(xué)者,可以直接借助《Verilog數(shù)字系統(tǒng)設(shè)計教程(第二版)》和本書即能全面掌握Verilog的語法,這是學(xué)習(xí)FPGA的第一步,也是必不可少的一步。

      (2)FPGA實驗尤為重要

      除了學(xué)習(xí)編程語言以外,更重要的是實踐,將自己設(shè)計的程序能夠在真正的FPGA里運行起來,這時我們需要選一塊板子進(jìn)行實驗,一般的紅色颶風(fēng)的板子基本上可以滿足大家的需求,大家感興趣的不妨買一塊做做實驗。

      (3)FPGA培訓(xùn)不可忽視

      在有條件的情況下,參加FPGA的培訓(xùn)可以在短時間內(nèi)大幅提升自己的水平,因為有老師帶著可以省去了很多彎路。筆者在網(wǎng)上發(fā)現(xiàn)一個北京至芯科技FPGA培訓(xùn)班http:/// 感興趣的朋友可以去看看,網(wǎng)上也有很多的視頻資源,也可下下來看看.我想只要大家想學(xué)FPGA,想從事FPGA工作,總會有辦法找到適合自己的方法

      如何學(xué)習(xí)FGPA

      第一步:學(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ū)

      做fpga主要是要有電路的思想:

      作為初學(xué)者,往往對器件可能不是熟悉,那么應(yīng)該對于數(shù)字電路的知識很熟悉吧,fpga中是由觸發(fā)器和查找表以及互聯(lián)線等基本結(jié)構(gòu)組成的,其實在我們在代碼里面能夠看到的就是與非門以及觸發(fā)器,不要把verilog和c語言等同起來,根本就是不同的東西,沒有什么可比性,在寫一句程序的時候應(yīng)該想到出來的是一個什么樣的電路,計數(shù)器 選擇器 三態(tài)門等等,理解時序,邏輯是一拍一拍的東西,在設(shè)計初期想的不是很清楚的時候可以畫畫時序圖,這樣思路會更加的清晰,還有就是仿真很重要,不要寫完程序就去往fpga中去加載,首先要仿真,尤其是對比較大型一點的程序,想象自己是在做asic,是沒有二次機會的,所以一定要把仿真做好,還有很多新手對于語言的學(xué)習(xí)不知道選vhdl好還是verilog好,個人偏好verilog,當(dāng)然不是說vhdl不好,反正寫出來的都是電路,那當(dāng)然就不要在語言的語法上面花太多的功夫了,verilog 言簡意賅

      assignalwayscase if else 掌握這些幾乎可以寫出90%的電路了,Verilog經(jīng)驗談

      規(guī)范很重要

      工作過的朋友肯定知道,公司里是很強調(diào)規(guī)范的,特別是對于大的設(shè)計(無論軟件還是硬件),不按照規(guī)范走幾乎是不可實現(xiàn)的。邏輯設(shè)計也是這樣:如果不按規(guī)范做的話,過一個月后調(diào)試時發(fā)現(xiàn)有錯,回頭再看自己寫的代碼,估計很多信號功能都忘了,更不要說檢錯了;如果一個項目做了一半一個人走了,接班的估計得從頭開始設(shè)計;如果需要在原來的版本基礎(chǔ)上增加新功能,很可能也得從頭來過,很難做到設(shè)計的可重用性。在邏輯方面,我覺得比較重要的規(guī)范有這些:

      1.設(shè)計必須文檔化。要將設(shè)計思路,詳細(xì)實現(xiàn)等寫入文檔,然后經(jīng)過嚴(yán)格評審?fù)ㄟ^后才能進(jìn)行下一步的工作。這樣做乍看起來很花時間,但是從整個項目過程來看,絕對要比一上來就寫代碼要節(jié)約時間,且這種做法可以使項目處于可控、可實現(xiàn)的狀態(tài)。

      2.代碼規(guī)范。

      a.設(shè)計要參數(shù)化。比如一開始的設(shè)計時鐘周期是30ns,復(fù)位周期是5個時鐘周期,我們可以這么寫:

      parameterCLK_PERIOD = 30;

      parameterRST_MUL_TIME = 5;

      parameterRST_TIME = RST_MUL_TIME * CLK_PERIOD;

      ...rst_n = 1'b0;

      # RST_TIME rst_n = 1'b1;

      ...# CLK_PERIOD/2 clk <= ~clk;

      如果在另一個設(shè)計中的時鐘是40ns,復(fù)位周期不變,我們只需對CLK_PERIOD進(jìn)行重新例化就行了,從而使得代碼更加易于重用。

      b.信號命名要規(guī)范化。

      1)信號名一律小寫,參數(shù)用大寫。

      2)對于低電平有效的信號結(jié)尾要用_n標(biāo)記,如rst_n。

      3)端口信號排列要統(tǒng)一,一個信號只占一行,最好按輸入輸出及從哪個模塊來到哪個模塊去的關(guān)系排列,這樣在后期仿真驗證找錯時后方便很多。如: module a(//input

      clk,rst_n,//globle signal

      wren,rden,avalon_din,//related to avalon bus

      sdi,//related to serial port input

      //output

      data_ready,avalon_dout, //related to avalon bus

      ...);

      4)一個模塊盡量只用一個時鐘,這里的一個模塊是指一個module或者是一個entity。在多時鐘域的設(shè)計中涉及到跨時鐘域的設(shè)計中最好有專門一個模塊做時鐘域的隔離。這樣做可以讓綜合器綜合出更優(yōu)的結(jié)果。

      5)盡量在底層模塊上做邏輯,在高層盡量做例化,頂層模塊只能做例化,禁止出現(xiàn)任何膠連邏輯(glue logic),哪怕僅僅是對某個信號取反。理由同上。

      6)在FPGA的設(shè)計上禁止用純組合邏輯產(chǎn)生latch,帶D觸發(fā)器的latch的是允許的,比如配置寄存器就是這種類型。

      7)一般來說,進(jìn)入FPGA的信號必須先同步,以提高系統(tǒng)工作頻率(板級)。

      8)所有模塊的輸出都要寄存器化,以提高工作頻率,這對設(shè)計做到時序收斂也是極有好處的。

      9)除非是低功耗設(shè)計,不然不要用門控時鐘--這會增加設(shè)計的不穩(wěn)定性,在要用到門控時鐘的地方,也要將門控信號用時鐘的下降沿 打一拍再輸出與時鐘相與。

      clk_gate_en------------

      -----------------|DQ |------------------| gate_clk

      _out

      ||---------|)--------

      ------o|>|||/

      clk|--------|----

      -----

      10)禁止用計數(shù)器分頻后的信號做其它模塊的時鐘,而要用改成時鐘使能的方式,否則這種時鐘滿天飛的方式對設(shè)計的可靠性極為不利,也大大增加了靜態(tài)時序分析的復(fù)雜性。如FPGA的輸入時鐘是25M的,現(xiàn)在系統(tǒng)內(nèi)部要通過RS232與PC通信,要以rs232_1xclk的速率發(fā)送數(shù)據(jù)。不要這樣做:always(posedge rs232_1xclk or negedge rst_n)

      begin

      ...end

      而要這樣做:

      always(posedge clk_25m or negedge rst_n)

      begin

      ...else if(rs232_1xclk == 1'b1)

      ...end

      11)狀態(tài)機要寫成3段式的(這是最標(biāo)準(zhǔn)的寫法),即

      ...always @(posedge clk or negedge rst_n)

      ...current_state <= next_state;

      ...always @(current_state...)

      ...case(current_state)

      ...s1:

      if...next_state = s2;

      ......always @(posedge clk or negedge rst_n)

      ...else

      a <= 1'b0;

      c <= 1'b0;

      c <= 1'b0;//賦默認(rèn)值

      case(current_state)

      s1:

      a <= 1'b0;//由于上面賦了默認(rèn)值,這里就不用再對b、c賦值了(b、c在該狀態(tài)為0,不會產(chǎn)生鎖存器,下同)s2:

      b <= 1'b1;

      s3:

      c <= 1'b1;

      default:

      ......3.ALTERA參考設(shè)計準(zhǔn)則

      1)Ensure Clock, Preset, and Clear configurations are free of glitch

      es.2)Never use Clocks consisting of more than one level of combinatori

      al logic.3)Carefully calculate setup times and hold times for multi-Clock sy

      stems.4)Synchronize signals between flipflops in multi-Clock systems when

      the setup and hold time requirements cannot be met.5)Ensure that Preset and Clear signals do not contain race conditio

      ns.6)Ensure that no other internal race conditions exist.7)Register all glitch-sensitive outputs.Synchronize all asynchronous inputs.9)Never rely on delay chains for pin-to-pin or internal delays.10)Do not rely on Power-On Reset.Use a master Reset pin to clear al

      l flipflops.11)Remove any stuck states from state machines or synchronous logic.其它方面的規(guī)范一時沒有想到,想到了再寫,也歡迎大家補充。

      ======================================

      時序是設(shè)計出來的我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項目規(guī)范,也基本上是按華為的那一套去做。在工作這幾個月中,給我感觸最深的是華為的那句話:時序是設(shè)計出來的,不是仿出來的,更不是湊出來的。

      在我們公司,每一個項目都有很嚴(yán)格的評審,只有評審?fù)ㄟ^了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設(shè)計方案和邏輯詳細(xì)設(shè)計方案,要等這些方案評審?fù)ㄟ^,認(rèn)為可行了,才能進(jìn)行編碼,一般來說這部分工作所占的時間要遠(yuǎn)大于編碼的時間。

      總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時序(我們要求把接口信號的時序波形描述出來)以及將來如何測試設(shè)計。在這一級方案中,要保證在今后的設(shè)計中時序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細(xì)設(shè)計的時候,對于一些信號的時序肯定會做一些調(diào)整的,但是這種時序的調(diào)整最多只能波及到本一級模塊,而不能影響到整個設(shè)計。記得以前在學(xué)校做設(shè)計的時候,由于不懂得設(shè)計時序,經(jīng)常因為有一處信號的時序不滿足,結(jié)果不得不將其它模塊信號的時序也改一下,搞得人很郁悶。在邏輯詳細(xì)設(shè)計方案這一級的時候,我們已經(jīng)將各級模塊的接口時序都設(shè)計出來了,各級模塊內(nèi)部是怎么實現(xiàn)的也基本上確定下來了。由于做到這一點,在編碼的時候自然就很快了,最重要的是這樣做后可以讓設(shè)計會一直處于可控的狀態(tài),不會因為某一處的錯誤引起整個設(shè)計從頭進(jìn)行。

      如何提高電路工作頻率

      對于設(shè)計者來說,我們當(dāng)然希望我們設(shè)計的電路的工作頻率(在這里如無特別說明,工作頻率指FPGA片內(nèi)的工作頻率)盡量高。我們也經(jīng)常聽說用資源換速度,用流水的方式可以提高工作頻率,這確實是一個很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。

      我們先來分析下是什么影響了電路的工作頻率。

      我們電路的工作頻率主要與寄存器到寄存器之間的信號傳播時延及clock skew有關(guān)。在FPGA內(nèi)部如果時鐘走長線的話,clock skew很小,基本上可以忽略, 在這里為了簡單起見,我們只考慮信號的傳播時延的因素。信號的傳播時延包括寄存器的開關(guān)時延、走線時延、經(jīng)過組合邏輯的時延(這樣劃 分或許不是很準(zhǔn)確,不過對分析問題來說應(yīng)該是沒有可以的),要提高電路的工作頻率,我們就要在這三個時延中做文章,使其盡可能的小。

      我們先來看開關(guān)時延,這個時延是由器件物理特性決定的,我們沒有辦法去改變,所以我們只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。

      1.通過改變走線的方式減少時延。

      以altera的器件為例,我們在quartus里面的timing closure floorplan可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個條塊代表1個LAB,每個LAB里有8個或者是10個LE。它們的走線時延的關(guān)系如下:同一個LAB中(最快)< 同列或者同

      行 < 不同行且不同列。我們通過給綜合器加適當(dāng)?shù)募s束(不可貪心,一般以加5%裕量較為合適,比如電路工作在100Mhz,則加約束加到105Mhz就可以了,貪心效果反而不好,且極大增加綜合時間)可以將相關(guān)的邏輯在布線時盡量布的靠近一點,從而減少走線的時延。(注:約束的實現(xiàn)不完全是通過改進(jìn)布局布線方式去提高工作頻率,還有其它的改進(jìn)措施)

      2.通過減少組合邏輯的減少時延。

      上面我們講了可以通過加約束來提高工作頻率,但是我們在做設(shè)計之初可萬萬不可將提高工作頻率的美好愿望寄托在加約束上,我們要通過合理的設(shè)計去避免出現(xiàn)大的組合邏輯,從而提高電路的工作頻率,這才能增強設(shè)計的可移植性,才可以使得我們的設(shè)計在移植到另一同等速度級別的芯片時還能使用。

      我們知道,目前大部分FPGA都基于4輸入LUT的,如果一個輸出對應(yīng)的判斷條件大于四輸入的話就要由多個LUT級聯(lián)才能完成,這樣就引入一級組合邏輯時延,我們要減少組合邏輯,無非就是要輸入條件盡可能的少,這樣就可以級聯(lián)的LUT更少,從而減少了組合邏輯引起的時延。

      我們平時聽說的流水就是一種通過切割大的組合邏輯(在其中插入一級或多級D觸發(fā)器,從而使寄存器與寄存器之間的組合邏輯減少)來提高工作頻率的方法。比如一個32位的計數(shù)器,該計數(shù)器的進(jìn)位鏈很長,必然會降低工作頻率,我們可以將其分割成4位和8位的計數(shù),每當(dāng)4位的計數(shù)器計到15后觸發(fā)一次8位的計數(shù)器,這樣就實現(xiàn)了計數(shù)器的切割,也提高了工作頻率。

      在狀態(tài)機中,一般也要將大的計數(shù)器移到狀態(tài)機外,因為計數(shù)器這東西一般是經(jīng)常是大于4輸入的,如果再和其它條件一起做為狀態(tài)的跳變判據(jù)的話,必然會增加LUT的級聯(lián),從而增大組合邏輯。以一個6輸入的計數(shù)器為例,我們原希望當(dāng)計數(shù)器計到111100后狀態(tài)跳變,現(xiàn)在我們將計數(shù)器放到狀態(tài)機外,當(dāng)計數(shù)器計到111011后產(chǎn)生個enable信號去觸發(fā)狀態(tài)跳變,這樣就將組合邏輯減少了。

      上面說的都是可以通過流水的方式切割組合邏輯的情況,但是有些情況下我們是很難去切割組合邏輯的,在這些情況下我們又該怎么做呢?

      狀態(tài)機就是這么一個例子,我們不能通過往狀態(tài)譯碼組合邏輯中加入流水。如果我們的設(shè)計中有一個幾十個狀態(tài)的狀態(tài)機,它的狀態(tài)譯碼邏輯將非常之巨大,毫無疑問,這極有可能是設(shè)計中的關(guān)鍵路徑。那我們該怎么做呢?還是老思路,減少組合邏輯。我們可以對狀態(tài)的輸出進(jìn)行分析,對它們進(jìn)行重新分類,并根據(jù)這個重新定義成一組組小狀態(tài)機,通過對輸入進(jìn)行選擇(case語句)并去觸發(fā)相應(yīng)的小狀態(tài)機,從而實現(xiàn)了將大的狀態(tài)機切割成小的狀態(tài)機。在ATA6的規(guī)范中(硬盤的標(biāo)準(zhǔn)),輸入的命令大概有20十種,每一個命令又對應(yīng)很多種狀態(tài),如果用一個大的狀態(tài)機(狀態(tài)套狀態(tài))去做那是不可 想象的,我們可以通過case語句去對命令進(jìn)行譯碼,并觸發(fā)相應(yīng)的狀態(tài)機,這樣做下來這一個模塊的頻率就可以跑得比較高了。

      總結(jié):提高工作頻率的本質(zhì)就是要減少寄存器到寄存器的時延,最有效的方法就是避免出現(xiàn)大的組合邏輯,也就是要盡量去滿足四輸入的條件,減少

      LUT級聯(lián)的數(shù)量。我們可以通過加約束、流水、切割狀態(tài)的方法提高工作頻率。

      =====================================

      做邏輯的難點在于系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗證

      剛?cè)ス镜臅r候BOSS就和我講,做邏輯的難點不在于RTL級代碼的設(shè)計,而在于系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗證方面。目前國內(nèi)對可綜合的設(shè)計強調(diào)的比較多,而對系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗證方面似乎還沒有什么資料,這或許也從一個側(cè)面反映了國內(nèi)目前的設(shè)計水平還比較低下吧。

      以前在學(xué)校的時候,總是覺得將RTL級代碼做好就行了,仿真驗證只是形式而已,所以對HDL的行為描述方面的語法不屑一顧,對testbench也一直不愿意去學(xué)--因為覺得畫波形圖方便;對于系統(tǒng)結(jié)構(gòu)設(shè)計更是一點都不懂了。到了公司接觸了些東西才發(fā)現(xiàn)完全不是這樣。

      其實在國外,花在仿真驗證上的時間和人力大概是花在RTL級代碼上的兩倍,現(xiàn)在仿真驗證才是百萬門級芯片設(shè)計的關(guān)鍵路徑。仿真驗證的難點主要在于怎么建模才能完全和準(zhǔn)確地去驗證設(shè)計的正確性(主要是提高代碼覆蓋),在這過程中,驗證速度也是很重要的。

      驗證說白了也就是怎么產(chǎn)生足夠覆蓋率的激勵源,然后怎么去檢測錯誤。我個人認(rèn)為,在仿真驗證中,最基本就是要做到驗證的自動化。這也是為什么我們要寫testbench的原因。在我現(xiàn)在的一個設(shè)計中,每次跑仿真都要一個小時左右(這其實算小設(shè)計)。

      由于畫波形圖無法做到驗證自動化,如果用通過畫波形圖來仿真的話,一是畫波形會畫死(特別是對于算法復(fù)雜的、輸入呈統(tǒng)計分布的設(shè)計),二是看波形圖要看死,三是檢錯率幾乎為零。

      那么怎么做到自動化呢?我個人的水平還很有限,只能簡單地談下BFM(bus function model,總線功能模型)。

      以做一個MAC的core為例(背板是PCI總線),那么我們需要一個MAC_BFM和PCI_BFM及PCI_BM(PCI behavior model)。MAC_BFM的主要功能是產(chǎn)生以太網(wǎng)幀(激勵源),隨機的長度和幀頭,內(nèi)容也是隨機的,在發(fā)送的同時也將其復(fù)制一份到PCI_BM中;PCI_BFM的功能則是仿PCI總線的行為,比如被測收到了一個正確幀后會向PCI總線發(fā)送一個請求,PCI_BFM則會去響應(yīng)它,并將數(shù)據(jù)收進(jìn)來;PCI_BM的主要功能是將MAC_BFM發(fā)送出來的東西與PCI_BFM接收到的東西做比較,由于它具有了MAC_BFM的發(fā)送信息和PCI_BFM的接收信息,只要設(shè)計合理,它總是可以自動地、完全地去測試被測是否工作正常,從而實現(xiàn)自動檢測。

      華為在仿真驗證方面估計在國內(nèi)來說是做的比較好的,他們已建立起了比較好的驗證平臺,大部分與通信有關(guān)的BFM都做好了,聽我朋友說,現(xiàn)在他們只需要將被測放在測試平臺中,并配置好參數(shù),就可以自動地檢測被測功能的正確與否。

      在功能仿真做完后,由于我們做在是FPGA的設(shè)計,在設(shè)計時已經(jīng)基本保證RTL級代碼在綜合結(jié)果和功能仿真結(jié)果的一致性,只要綜合布局布線后的靜態(tài)時序報告沒有違反時序約束的警告,就可以下到板子上去調(diào)試了。事實上,在華為中興,他們做FPGA的設(shè)計時也是不做時序仿真的,因為做時序仿真很花時間,且效果也不見得比看靜態(tài)時序分析報告好。

      當(dāng)然了,如果是ASIC的設(shè)計話,它們的仿真驗證的工作量要大一些,在涉及到多時鐘域的設(shè)計時,一般還是做后仿的。不過在做后仿之前,也一般會先用形式驗證工具和通過靜態(tài)時序分序報告去查看有沒有違反設(shè)計要求的地方,這樣做了之后,后仿的工作量可以小很多。

      在HDL語言方面,國內(nèi)語言很多人都在爭論VHDL和verilog哪個好,其實我個人認(rèn)為這并沒有多大的意義,外面的大公司基本上都是用verilog在做RTL級的代碼,所以還是建議大家盡量學(xué)verilog。在仿真方面,由于VHDL在行為級建模方面弱于verilog,用VHDL做仿真模型的很少,當(dāng)然也不是說verilog就好,其實verilog在復(fù)雜的行為級建模方面的能力也是有限的,比如目前它還不支持?jǐn)?shù)組。在一些復(fù)雜的算法設(shè)計中,需要高級語言做抽象才能描述出行為級模型。在國外,仿真建模很多都是用System C和E語言,用verilog的都算是很落后的了,國內(nèi)華為的驗證平臺好像是用System C寫。在系統(tǒng)結(jié)構(gòu)設(shè)計方面,由于我做的設(shè)計還不夠大,還談不上什么經(jīng)驗,只是覺得必須要具備一些計算機系統(tǒng)結(jié)構(gòu)的知識才行。劃分的首要依據(jù)是功能,之后是選擇合適的總線結(jié)構(gòu)、存儲結(jié)構(gòu)和處理器架構(gòu),通過系統(tǒng)結(jié)構(gòu)劃分要使各部分功能模塊清晰,易于實現(xiàn)。這一部分我想過段時間有一點體會了再和大家分享,就先不誤導(dǎo)大家了。

      第五篇:fpga學(xué)習(xí)心得體會

      fpga學(xué)習(xí)心得體會

      1、該課程實現(xiàn)了通過usb 接口將代碼與實驗設(shè)備相結(jié)合的功能,并且使我對EL-S0PC4000 實驗箱有了接觸,了解并掌握了其所具備的一些功能,在實驗中不僅使我學(xué)到了很多知識,并且其過程還充滿了樂趣。

      2、QuartusII 軟件及FPGA 的設(shè)計與應(yīng)用所采用的語言與我所學(xué)過的一些語言有所不同,該種語法與C 語言有一些相似之處,但在細(xì)枝末節(jié)上有該語言自己的習(xí)慣,這是學(xué)習(xí)這門語言的要點。學(xué)習(xí)一門語言并不是一周兩周就能速成的,想要掌握這門語言還是需要日后自己不斷地練習(xí)不斷地積累經(jīng)驗,在完成一項工程后所帶來的成就感也是使我持續(xù)學(xué)習(xí)的動力。

      3、此外,該門課程與我之前學(xué)習(xí)的數(shù)電這門課程息息相關(guān),他也是仿真了許多數(shù)電的一些電路,使我對數(shù)電的理解更加的深刻,既鍛煉了我的動手能力,同時也鍛煉了我的邏輯思維能力。在這幾次的數(shù)電實驗中,我收獲頗多,我們經(jīng)過老師的教導(dǎo),學(xué)會了FPGA,Verilog編程,我們也學(xué)會了使用Quartus軟件,并用電路板進(jìn)行了多次FGPA實驗,了解了Verilog的設(shè)計;實驗中我學(xué)會了用Quartus軟件繪圖、編碼以及與電路板的連接;實驗中,我遇到了很多問題,但是經(jīng)過老師和同學(xué)們的幫助,我都逐一的解決了這些問題并完成了實驗。實驗中我們收獲最多重要的是,結(jié)合電路板進(jìn)行代碼的編譯、調(diào)試,希望以后我們會有更多的機會學(xué)習(xí)了解verilog編程

      下載FPGA學(xué)習(xí)及設(shè)計中的注意事項word格式文檔
      下載FPGA學(xué)習(xí)及設(shè)計中的注意事項.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        FPGA,學(xué)習(xí)心得體會

        篇一:fpga學(xué)習(xí)心得大報告《fpga技術(shù)基礎(chǔ)》學(xué)習(xí)報告 --課程內(nèi)容學(xué)習(xí)心得姓 名: 學(xué) 號: 年級專業(yè): 指導(dǎo)教師: 瞿麟 201010401128 自動化101薛小軍摘要從開始學(xué)fpga到現(xiàn)在粗略算來......

        FPGA學(xué)習(xí)步驟

        FPGA學(xué)習(xí)步驟,我的體會 FPGA學(xué)習(xí)步驟,我的體會 FPGA在目前應(yīng)用領(lǐng)域非常,在目前的單板設(shè)計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協(xié)議處理,從單片邏輯......

        FPGA學(xué)習(xí)概述

        FPGA學(xué)習(xí) 我常年擔(dān)任多個有關(guān)FPGA學(xué)習(xí)研討的QQ群管理員,長期以來很多新入群的菜鳥們總是在重復(fù)的問一些非常簡單但是又讓新手困惑不解的問題。作為管理員經(jīng)常要給這些菜鳥們......

        FPGA搶答器設(shè)計報告

        Vb開辦上海電力學(xué)院 課程設(shè)計報告 信息工程系 搶答器設(shè)計報告 一、 設(shè)計目的: 本課程的授課對象是電子科學(xué)與技術(shù)專業(yè)本科生,是電子類專業(yè)的一門重要的實踐課程,是理論與實踐相......

        FPGA學(xué)習(xí)步驟及其前景

        第一部分 FPGA在目前應(yīng)用領(lǐng)域非常,在目前的單板設(shè)計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協(xié)議處理,從單片邏輯到復(fù)雜的ASIC原型驗證,從小家電到航......

        FPGA學(xué)習(xí)的一些誤區(qū)

        FPGA本身不算什么,一切皆在FPGA之外這一點恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方。FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實這不過......

        基于FPGA的數(shù)字頻率計設(shè)計報告

        電子技術(shù)綜合試驗實驗報告 班級:測控一班學(xué)號:2907101002 姓名:李大帥 指導(dǎo)老師:李穎 1 基于FPGA的數(shù)字頻率計設(shè)計報告 一、 系統(tǒng)整體設(shè)計 設(shè)計要求: 1、被測輸入信號:方......

        基于FPGA的交通燈控制器設(shè)計

        數(shù)字系統(tǒng)課程設(shè)計 基于FPGA的交通控制燈設(shè)計 姓名:學(xué)號:班級: 摘要 隨著社會的發(fā)展,城市規(guī)模的不斷擴大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交......