整理FPGA學(xué)習(xí)步驟_第1頁
整理FPGA學(xué)習(xí)步驟_第2頁
整理FPGA學(xué)習(xí)步驟_第3頁
整理FPGA學(xué)習(xí)步驟_第4頁
整理FPGA學(xué)習(xí)步驟_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、FPGA學(xué)習(xí)步驟,我的體會FPGA在目前應(yīng)用領(lǐng)域非常,在目前的單板設(shè)計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協(xié)議處理,從單片邏輯到復(fù)雜的ASIC原型驗證,從小家電到航天器,都可以看到FPGA應(yīng)用,它的優(yōu)點在這里無庸贅述。從個人實用角度看,對于學(xué)生,掌握FPGA可以找到一份很好的工作,對于有經(jīng)驗的工作人員,使用fgpa可以讓設(shè)計變得非常有靈活性。掌握了fpga的設(shè)計,單板硬件設(shè)計就非常容易(不是系統(tǒng)設(shè)計),特別是上大學(xué)時如同天書的邏輯時序圖,看起來就非常親切。但fpga的入門卻有一定難度,因為它不像軟件設(shè)計,只要有一臺計算機(jī),幾乎就可以完成所有的設(shè)計。fpga的設(shè)計與

2、硬件直接相關(guān),需要實實在在的調(diào)試儀器,譬如示波器等。這些硬件設(shè)備一般比較昂貴,這就造成一定的入門門檻,新人在入門時遇到一點問題或者困難,由于沒有調(diào)試設(shè)備,無法定位問題,最后可能就會放棄。其實這時如果有人稍微指點一下,這個門檻很容易就過去。我用FPGA做設(shè)計很多年了,遠(yuǎn)達(dá)不到精通的境界,只是熟悉使用,在這里把我對fpga的學(xué)習(xí)步驟理解寫出來,僅是作為一個參考,不對的地方,歡迎大家討論和指正。1、工欲善其事,必先利其器。計算機(jī)必不可少。目前FPGA應(yīng)用較多的是Altera和xilinx這兩個公司,可以選擇安裝quartusII或者ISE軟件。這是必備的軟件環(huán)境。硬件環(huán)境還需要下載器、目標(biāo)板。雖然有

3、人說沒有下載器和目標(biāo)板也可學(xué)習(xí)fpga,但那總是紙上談兵。這就像談女朋友,總是嘴上說說,通個電話,連個手都沒牽,能說人家是你朋友?雖說搭建硬件環(huán)境需要花費,但想想,硬件環(huán)境至多幾百元錢,你要真的掌握FPGA的設(shè)計,起薪比別人都不止高出這么多。這點花費算什么?2、熟悉verilog語言或者vhdl語言,熟練使用quartusII或者ISE軟件。VHDL和verilog各有優(yōu)點,選擇一個,建議選擇verilog。熟練使用設(shè)計軟件,知道怎樣編譯、仿真、下載等過程。起步階段不希望報一些培訓(xùn)班,除非你有錢,或者運氣好,碰到一個水平高、又想把自己的經(jīng)驗和別人共享的培訓(xùn)老師,不然的話,培訓(xùn)完后總會感覺自己是

4、一個冤大頭。入門階段可以在利用網(wǎng)絡(luò)資源完成。3、設(shè)計一個小代碼,下載到目標(biāo)板看看結(jié)果此時可以設(shè)計一個最簡答的程序,譬如點燈。如果燈在閃爍了,表示基本入門了。如果此時能夠下載到fpga外掛的flash,fpga程序能夠從flash啟動,表明fpga的最簡單設(shè)計你已經(jīng)成功,可以到下一步。4、設(shè)計稍微復(fù)雜的代碼,下載到目標(biāo)板看看結(jié)果??梢栽O(shè)計一個UART程序,網(wǎng)上有參考,你要懂RS232協(xié)議和fpga內(nèi)置的邏輯分析儀。網(wǎng)上下載一個串口調(diào)試助手,調(diào)試一番,如果通信成功了,恭喜,水平有提高。進(jìn)入下一步。5、設(shè)計復(fù)雜的代碼,下載到目標(biāo)板看看結(jié)果。譬如sdram的程序,網(wǎng)上也有參考,這個設(shè)計難度有點大??捎?/p>

5、串口來調(diào)試sdram,把串口的數(shù)據(jù)存儲到sdram,然后讀回,如果成功,那你就比較熟悉fpga的設(shè)計餓了6、設(shè)計高速接口,譬如ddr2或者高速串行接口這要對fpga的物理特性非常了解,而且要懂得是時序約束等設(shè)計方法,要看大量的原廠文檔,這部分成功了,那就對fpga的物理接口掌握很深,你就是設(shè)計高手了7、設(shè)計一個復(fù)雜的協(xié)議譬如USB、PCIexpress、圖像編解碼等,鍛煉對系統(tǒng)的整體把握和邏輯劃分。完成這些,你就是一個一流的高手、8、學(xué)習(xí)再學(xué)習(xí)學(xué)習(xí)什么,我也不知道,我只知道“學(xué)無止境,山外有山”。上述只是一些簡單的學(xué)習(xí)步驟,希望能對大家有所幫助!Verilog經(jīng)驗談規(guī)范很重要工作過的朋友肯定知

6、道,公司里是很強(qiáng)調(diào)規(guī)范的,特別是對于大的設(shè)計(無論軟件還是硬件),不按照規(guī)范走幾乎是不可實現(xiàn)的。邏輯設(shè)計也是這樣:如果不按規(guī)范做的話,過一個月后調(diào)試時發(fā)現(xiàn)有錯,回頭再看自己寫的代碼,估計很多信號功能都忘了,更不要說檢錯了;如果一個項目做了一半一個人走了,接班的估計得從頭開始設(shè)計;如果需要在原來的版本基礎(chǔ)上增加新功能,很可能也得從頭來過,很難做到設(shè)計的可重用性。在邏輯方面,我覺得比較重要的規(guī)范有這些:.設(shè)計必須文檔化。要將設(shè)計思路,詳細(xì)實現(xiàn)等寫入文檔,然后經(jīng)過嚴(yán)格評審?fù)ㄟ^后才能進(jìn)行下一步的工作。這樣做乍看起來很花時間,但是從整個項目過程來看,絕對要比一上來就寫代碼要節(jié)約時間,且這種做法可以使項目

7、處于可控、可實現(xiàn)的狀態(tài)。.代碼規(guī)范。a.設(shè)計要參數(shù)化。比如一開始的設(shè)計時鐘周期是30ns,復(fù)位周期是5個時鐘周期,我們可以這么寫:parameterCLK_PERIOD=30;parameterRST_MUL_TIME=5;parameterRST_TIME=RST_MUL_TIME*CLK_PERIOD;.rst_n=1b0;RST_TIMErst_n=1b1;.CLK_PERIOD/2clk|/clk|10)禁止用計數(shù)器分頻后的信號做其它模塊的時鐘,而要用改成時鐘使能的方式,否則這種時鐘滿天飛的方式對設(shè)計的可靠性極為不利,也大大增加了靜態(tài)時序分析的復(fù)雜性。如FPGA的輸入時鐘是25M的,現(xiàn)

8、在系統(tǒng)內(nèi)部要通過RS232與PC通信,要以rs232Ixclk的速率發(fā)送數(shù)據(jù)。不要這樣做:always(posedgers232_1xclkornegedgerst_n)begin.end而要這樣做:always(posedgeclk_25mornegedgerst_n)begin.elseif(rs232_1xclk=1b1)end11)狀態(tài)機(jī)要寫成3段式的(這是最標(biāo)準(zhǔn)的寫法),即always(posedgeclkornegedgerst_n).current_state=next_state;.always(current_state.).case(current_state).s1:if

9、.next_state=s2;always(posedgeclkornegedgerst_n).elsea=1b0;c=1b0;c=1b0;/賦默認(rèn)值case(current_state)s1:a=1b0;由于上面賦了默認(rèn)值,這里就不用再對b、c賦值了、c在該狀態(tài)為0,不會產(chǎn)生鎖存器,下同)s2:b=1b1;s3:c=1b1;default:3.ALTERA參考設(shè)計準(zhǔn)則EnsureClock,Preset,andClearconfigurationsarefreeofglitches.NeveruseClocksconsistingofmorethanonelevelofcombinatori

10、allogic.Carefullycalculatesetuptimesandholdtimesformulti-Clocksystems.Synchronizesignalsbetweenflipflopsinmulti-Clocksystemswhenthesetupandholdtimerequirementscannotbemet.EnsurethatPresetandClearsignalsdonotcontainraceconditions.Ensurethatnootherinternalraceconditionsexist.Registerallglitch-sensitiv

11、eoutputs.Synchronizeallasynchronousinputs.9)Neverrelyondelaychainsforpin-to-pinorinternaldelays.10)DonotrelyonPower-OnReset.UseamasterResetpintoclearallflipflops.11)Removeanystuckstatesfromstatemachinesorsynchronouslogic.其它方面的規(guī)范一時沒有想到,想到了再寫,也歡迎大家補(bǔ)充。時序是設(shè)計出來的我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一

12、些東西,而我們的項目規(guī)范,也基本上是按華為的那一套去做。在工作這幾個月中,給我感觸最深的是華為的那句話:時序是設(shè)計出來的,不是仿出來的,更不是湊出來的。在我們公司,每一個項目都有很嚴(yán)格的評審,只有評審?fù)ㄟ^了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設(shè)計方案和邏輯詳細(xì)設(shè)計方案,要等這些方案評審?fù)ㄟ^,認(rèn)為可行了,才能進(jìn)行編碼,一般來說這部分工作所占的時間要遠(yuǎn)大于編碼的時間。總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時序(我們要求把接口信號的時序波形描述出來)以及將來如何測試設(shè)計。在這一級方案中,要保證在今后的設(shè)計中時序要收斂到一級模塊(最后是在二級

13、模塊中)。什么意思呢?我們在做詳細(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è)計的電路的

14、工作頻率(在這里如無特別說明,工作頻率指FPGA片內(nèi)的工作頻率)盡量高。我們也經(jīng)常聽說用資源換速度,用流水的方式可以提高工作頻率,這確實是一個很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。我們先來分析下是什么影響了電路的工作頻率。我們電路的工作頻率主要與寄存器到寄存器之間的信號傳播時延及clockskew有關(guān)。在FPGA內(nèi)部如果時鐘走長線的話,clockskew很小,基本上可以忽略,在這里為了簡單起見,我們只考慮信號的傳播時延的因素。信號的傳播時延包括寄存器的開關(guān)時延、走線時延、經(jīng)過組合邏輯的時延(這樣劃分或許不是很準(zhǔn)確,不過對分析問題來說應(yīng)該是沒有可以的),要提高電路的工作頻率

15、,我們就要在這三個時延中做文章,使其盡可能的小。我們先來看開關(guān)時延,這個時延是由器件物理特性決定的,我們沒有辦法去改變,所以我們只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。.通過改變走線的方式減少時延。以altera的器件為例,我們在quartus里面的timingclosurefloorplan可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個條塊代表1個LAB,每個LAB里有8個或者是10個LE。它們的走線時延的關(guān)系如下:同一個LAB中(最快)同列或者同行不同行且不同列。我們通過給綜合器加適當(dāng)?shù)募s束(不可貪心,一般以加5%裕量較為合適,比如電路工作在100Mhz,則

16、加約束加到105Mhz就可以了,貪心效果反而不好,且極大增加綜合時間)可以將相關(guān)的邏輯在布線時盡量布的靠近一點,從而減少走線的時延。(注:約束的實現(xiàn)不完全是通過改進(jìn)布局布線方式去提高工作頻率,還有其它的改進(jìn)措施).通過減少組合邏輯的減少時延。上面我們講了可以通過加約束來提高工作頻率,但是我們在做設(shè)計之初可萬萬不可將提高工作頻率的美好愿望寄托在加約束上,我們要通過合理的設(shè)計去避免出現(xiàn)大的組合邏輯,從而提高電路的工作頻率,這才能增強(qiáng)設(shè)計的可移植性,才可以使得我們的設(shè)計在移植到另一同等速度級別的芯片時還能使用。我們知道,目前大部分FPGA都基于4輸入LUT的,如果一個輸出對應(yīng)的判斷條件大于四輸入的話

17、就要由多個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)機(jī)中,一般也要將大的計數(shù)器移到狀態(tài)機(jī)外,因為計數(shù)器這東西一般是經(jīng)常是大于4輸入的,如果再和其它

18、條件一起做為狀態(tài)的跳變判據(jù)的話,必然會增加LUT的級聯(lián),從而增大組合邏輯。以一個6輸入的計數(shù)器為例,我們原希望當(dāng)計數(shù)器計到111100后狀態(tài)跳變,現(xiàn)在我們將計數(shù)器放到狀態(tài)機(jī)外,當(dāng)計數(shù)器計到111011后產(chǎn)生個enable信號去觸發(fā)狀態(tài)跳變,這樣就將組合邏輯減少了。上面說的都是可以通過流水的方式切割組合邏輯的情況,但是有些情況下我們是很難去切割組合邏輯的,在這些情況下我們又該怎么做呢?狀態(tài)機(jī)就是這么一個例子,我們不能通過往狀態(tài)譯碼組合邏輯中加入流水。如果我們的設(shè)計中有一個幾十個狀態(tài)的狀態(tài)機(jī),它的狀態(tài)譯碼邏輯將非常之巨大,毫無疑問,這極有可能是設(shè)計中的關(guān)鍵路徑。那我們該怎么做呢?還是老思路,減少組

19、合邏輯。我們可以對狀態(tài)的輸出進(jìn)行分析,對它們進(jìn)行重新分類,并根據(jù)這個重新定義成一組組小狀態(tài)機(jī),通過對輸入進(jìn)行選擇(case語句)并去觸發(fā)相應(yīng)的小狀態(tài)機(jī),從而實現(xiàn)了將大的狀態(tài)機(jī)切割成小的狀態(tài)機(jī)。在ATA6的規(guī)范中(硬盤的標(biāo)準(zhǔn)),輸入的命令大概有20十種,每一個命令又對應(yīng)很多種狀態(tài),如果用一個大的狀態(tài)機(jī)(狀態(tài)套狀態(tài))去做那是不可想象的,我們可以通過case語句去對命令進(jìn)行譯碼,并觸發(fā)相應(yīng)的狀態(tài)機(jī),這樣做下來這一個模塊的頻率就可以跑得比較高了??偨Y(jié):提高工作頻率的本質(zhì)就是要減少寄存器到寄存器的時延,最有效的方法就是避免出現(xiàn)大的組合邏輯,也就是要盡量去滿足四輸入的條件,減少LUT級聯(lián)的數(shù)量。我們可以通

20、過加約束、流水、切割狀態(tài)的方法提高工作頻率。做邏輯的難點在于系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗證剛?cè)ス镜臅r候BOSS就和我講,做邏輯的難點不在于RTL級代碼的設(shè)計,而在于系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗證方面。目前國內(nèi)對可綜合的設(shè)計強(qiáng)調(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)完全不是這樣。其實在國外,花在仿真驗

21、證上的時間和人力大概是花在RTL級代碼上的兩倍,現(xiàn)在仿真驗證才是百萬門級芯片設(shè)計的關(guān)鍵路徑。仿真驗證的難點主要在于怎么建模才能完全和準(zhǔn)確地去驗證設(shè)計的正確性(主要是提高代碼覆蓋),在這過程中,驗證速度也是很重要的。驗證說白了也就是怎么產(chǎn)生足夠覆蓋率的激勵源,然后怎么去檢測錯誤。我個人認(rèn)為,在仿真驗證中,最基本就是要做到驗證的自動化。這也是為什么我們要寫testbench的原因。在我現(xiàn)在的一個設(shè)計中,每次跑仿真都要一個小時左右(這其實算小設(shè)計)。由于畫波形圖無法做到驗證自動化,如果用通過畫波形圖來仿真的話,一是畫波形會畫死(特別是對于算法復(fù)雜的、輸入呈統(tǒng)計分布的設(shè)計),二是看波形圖要看死,三是檢

22、錯率幾乎為零。那么怎么做到自動化呢?我個人的水平還很有限,只能簡單地談下BFM(busfunctionmodel,總線功能模型)。以做一個MAC的core為例(背板是PCI總線),那么我們需要一個MAC_BFM和PCI_BFM及PCI_BM(PCIbehaviormodel)。MAC_BFM的主要功能是產(chǎn)生以太網(wǎng)幀(激勵源),隨機(jī)的長度和幀頭,內(nèi)容也是隨機(jī)的,在發(fā)送的同時也將其復(fù)制一份到PCI_BM中;PCI_BFM的功能則是仿PCI總線的行為,比如被測收到了一個正確幀后會向PCI總線發(fā)送一個請求,PCI_BFM則會去響應(yīng)它,并將數(shù)據(jù)收進(jìn)來;PCI_BM的主要功能是將MAC_BFM發(fā)送出來的東

23、西與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)試了。事實上,在

24、華為中興,他們做FPGA的設(shè)計時也是不做時序仿真的,因為做時序仿真很花時間,且效果也不見得比看靜態(tài)時序分析報告好。當(dāng)然了,如果是ASIC的設(shè)計話,它們的仿真驗證的工作量要大一些,在涉及到多時鐘域的設(shè)計時,一般還是做后仿的。不過在做后仿之前,也一般會先用形式驗證工具和通過靜態(tài)時序分序報告去查看有沒有違反設(shè)計要求的地方,這樣做了之后,后仿的工作量可以小很多。在HDL語言方面,國內(nèi)語言很多人都在爭論VHDL和verilog哪個好,其實我個人認(rèn)為這并沒有多大的意義,外面的大公司基本上都是用verilog在做RTL級的代碼,所以還是建議大家盡量學(xué)verilog。在仿真方面,由于VHDL在行為級建模方面弱

25、于verilog,用VHDL做仿真模型的很少,當(dāng)然也不是說verilog就好,其實verilog在復(fù)雜的行為級建模方面的能力也是有限的,比如目前它還不支持?jǐn)?shù)組。在一些復(fù)雜的算法設(shè)計中,需要高級語言做抽象才能描述出行為級模型。在國外,仿真建模很多都是用SystemC和E語言,用verilog的都算是很落后的了,國內(nèi)華為的驗證平臺好像是用SystemC寫。在系統(tǒng)結(jié)構(gòu)設(shè)計方面,由于我做的設(shè)計還不夠大,還談不上什么經(jīng)驗,只是覺得必須要具備一些計算機(jī)系統(tǒng)結(jié)構(gòu)的知識才行。劃分的首要依據(jù)是功能,之后是選擇合適的總線結(jié)構(gòu)、存儲結(jié)構(gòu)和處理器架構(gòu),通過系統(tǒng)結(jié)構(gòu)劃分要使各部分功能模塊清晰,易于實現(xiàn)。這一部分我想過段

26、時間有一點體會了再和大家分享,就先不誤導(dǎo)大家了。一:基本Verilog中的變量有線網(wǎng)類型和寄存器類型。線網(wǎng)型變量綜合成wire,而寄存器可能綜合成WIRE,鎖存器和二:verilog語句結(jié)構(gòu)到門級的映射1、連續(xù)性賦值:assign連續(xù)性賦值語句邏輯結(jié)構(gòu)上就是將等式右邊的驅(qū)動左邊的結(jié)點。因些連續(xù)性賦值的目標(biāo)結(jié)點總是綜合成由組合都將忽視。2、過程性賦值:過程性賦值只出現(xiàn)在always語句中。阻塞賦值和非阻塞賦值就該賦值本身是沒有區(qū)別的,只是對后面的語句有不同的影響。建議設(shè)計組合邏輯電路時用阻塞賦值,設(shè)計時序電路時用非阻塞賦值。過程性賦值的賦值對象有可能綜合成wire,latch,和flip-flo

27、p,取決于具體狀況。如,時鐘控制下的非阻塞賦4過程性賦值語句中的任何延時在綜合時都將忽略。建議同一個變量單一地使用阻塞或者非阻塞賦值。3、邏輯操作符:邏輯操作符對應(yīng)于硬件中已有的邏輯門4、算術(shù)操作符:Verilog中將reg視為無符號數(shù),而integer視為有符號數(shù)。因此,進(jìn)行有符號操作時使用integer,使用無符一5、進(jìn)位:通常會將進(jìn)行運算操作的結(jié)果比原操作數(shù)擴(kuò)展一位,用來存放進(jìn)位或者借位。如:Wire3:0A,B;Wire4:0C;AssignC=A+B;C的最高位用來存放進(jìn)位。6、關(guān)系運算符:關(guān)系運算符:,=和算術(shù)操作符一樣,可以進(jìn)行有符號和無符號運算,取決于數(shù)據(jù)類型是reg,net還

28、是integer。7、相等運算符:=,!=注意:=和!=是不可綜合的。可以進(jìn)行有符號或無符號操作,取決于數(shù)據(jù)類型8、移位運算符:左移,右移,右邊操作數(shù)可以是常數(shù)或者是變量,二者綜合出來的結(jié)果不同。9、部分選擇:部分選擇索引必須是常量。10、BIT選擇:BIT選擇中的索引可以用變量,這樣將綜合成多路(復(fù)用)器。11、敏感表:Always過程中,所有被讀取的數(shù)據(jù),即等號右邊的變量都要應(yīng)放在敏感表中,不然,綜合時不能正確地映射二12、IF:如果變量沒有在IF語句的每個分支中進(jìn)行賦值,將會產(chǎn)生latch。如果IF語句中產(chǎn)生了latch,則IF的條件中的條款可以是變量。如果一個變量在同一個IF條件分支中

29、先贖值然后讀取,則不會產(chǎn)生latch。如果先讀取,后贖值,則會產(chǎn)生la13、循環(huán):只有for-loop語句是可以綜合的。14、設(shè)計時序電路時,建議變量在always語句中賦值,而在該always語句外使用,使綜合時能準(zhǔn)確地匹配15、不能在多個always塊中對同一個變量贖值16、函數(shù)函數(shù)代表一個組合邏輯,所有內(nèi)部定義的變量都是臨時的,這些變量綜合后為wire。17、任務(wù):任務(wù)可能是組合邏輯或者時序邏輯,取決于何種情況下調(diào)用任務(wù)。18、Z:Z會綜合成一個三態(tài)門,必須在條件語句中賦值19、參數(shù)化設(shè)計:優(yōu)點:參數(shù)可重載,不需要多次定義模塊四:模塊優(yōu)化1、資源共享:當(dāng)進(jìn)程涉及到共用ALU時,要考慮資源

30、分配問題??梢怨蚕淼牟僮鞣饕校宏P(guān)系操作符、加減乘除操作符。用。2、共用表達(dá)式:如:C=A+B;D=G+(A+B);兩者雖然有共用的A+B,但是有些綜合工具不能識別.可以將第二句改為:D=G+C;這樣只需兩個加法器3、轉(zhuǎn)移代碼:如循環(huán)語句中沒有發(fā)生變化的語句移出循環(huán)4、避免latch:兩種方法:1、在每一個IF分支中對變量賦值。2、在每一個IF語句中都對變量賦初值。5:模塊:綜合生成的存儲器如ROM或RAM不是一種好方法。最好用庫自帶的存儲器模塊。五、驗證:1、敏感表:在always語句中,如果敏感表不含時鐘,最好將所有的被讀取的信號都放在敏感表中。2、異步復(fù)位:建議不要在異步時對變量讀取,

31、即異步復(fù)位時,對信號贖以常數(shù)值。本帖最后由fpgaw于2010-5-306:16編輯學(xué)習(xí)Verilog必走的3個階段/入門篇:(秋干勿燥,冬去春來)01.建立項目02.Verilog.nand/nor/and/or;.assignment;.always;04.選設(shè)device05.Settings:.加減文件;.設(shè)置topmodule文件;.設(shè)置classictiming時序仿真主時鐘fMAX;(可以不設(shè))06.編譯(直接選按鈕)07.仿真(直接選按鈕).創(chuàng)建.vwf波形文件,.添加netlist節(jié)點,.設(shè)置激勵波形;.設(shè)置仿真波形文件.閱讀并判斷仿真結(jié)果的正確性/初級篇:(固知其然,方得真

32、經(jīng))setting:.選擇并使用functional/timing仿真;.選擇時序分析方法:Classictiming/TimeQuest;.閱讀在線幫助,選擇其他設(shè)置;.閱讀編譯報表,理解Tsu,Tpd,Th,Tco.設(shè)置各種獨立時鐘pinassignment.各輸入輸出引腳的location分配;.接入但未用引腳的特別處理;.多電平的選設(shè)(若有多為io的供電);閱讀并理解項目文件夾下各種擴(kuò)展名文件的基本功能;3a).*.v,*.qpf,*.pin,*.vwf,*.qof3b).瀏覽*.qsf,完全理解各部分的意義.3c).掌握*.sof文件的生成方法,了解其它各種生成文件的使用場合.仿真.生成功能仿真網(wǎng)表.ctrl+滾輪縮放或ctrl+shift+space縮放;.ctrl+alt+space全

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論