FPGA入門教程_第1頁
FPGA入門教程_第2頁
FPGA入門教程_第3頁
FPGA入門教程_第4頁
FPGA入門教程_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 FPGA入門教程1數(shù)字電路設(shè)計入門2FPGA簡介3FPGA開發(fā)流程4RTL設(shè)計 5Quartus設(shè)計實例6. ModelSim和Testbench1.數(shù)字電路設(shè)計入門1.1數(shù)字電路設(shè)計數(shù)字電路設(shè)計的核心是邏輯設(shè)計。通常,數(shù)字電路的邏輯值只有1和0,表征的是模擬電壓或電流的離散值,一般1代表高電平,0代表低電平。高低電平的含義可以理解為,存在一個判決電平,當(dāng)信號的電壓值高于判決電平時,我們就認為該信號表征高電平,即為1。反之亦然。當(dāng)前的數(shù)字電路中存在許多種電平標準,比較常見的有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVDS、HSTL、SSTL等。這些電平的詳細指標請見補

2、充教程1:電平標準。數(shù)字電路設(shè)計大致可分為組合邏輯電路和時序邏輯電路。 一般的數(shù)字設(shè)計的教材中對組合邏輯電路和時序邏輯電路的定義分別為:組合邏輯電路的輸出僅與當(dāng)前的輸入有關(guān),而時序邏輯電路的輸出不但與輸入有關(guān),還和系統(tǒng)上一個狀態(tài)有關(guān)。但是在設(shè)計中,我們一般以時鐘的存在與否來區(qū)分該電路的性質(zhì)。由時鐘沿驅(qū)動工作的電路為時序邏輯電路。大家注意,這兩種電路并不是獨立存在的,他們相互交錯存在于整個電路系統(tǒng)的設(shè)計中。1.1.1 組合邏輯電路 組合邏輯電路由任意數(shù)目的邏輯門電路組成,一般包括與門、或門、非門、異或門、與非門、或非門等。一般的組合邏輯電路如下圖: 其中A,B,C,D,E,F為輸入,G為輸出。1

3、.1.2 時序邏輯電路 時序邏輯電路由時鐘的上升沿或下降沿驅(qū)動工作,其實真正被時鐘沿驅(qū)動的是電路中的觸發(fā)器(Register),也稱為寄存器。觸發(fā)器的工作原理和參數(shù)如下圖: 下面是兩個簡單的時序邏輯電路例子: (1)、時鐘分頻電路該時序電路的功能為實現(xiàn)對時鐘clk的4分頻,其中clk_2為2分頻時鐘,clk_4為4分頻時鐘,enable為該電路的使能信號。其功能仿真波形如下圖所示:(2)、序列檢測器該時序電路實現(xiàn)了一個序列檢測器,當(dāng)輸入序列datain中出現(xiàn)101時,標志位F將輸出1,其他時刻輸出0。電路中clk為時鐘信號,D1,D2,D3為移位寄存器的輸出,enable為該電路的使能信號。其

4、功能仿真波形如下圖所示:可見,時序電路設(shè)計的核心是時鐘和觸發(fā)器,這兩者也是我們設(shè)計電路時需重點關(guān)注的。1.2毛刺的產(chǎn)生與消除1.2.1競爭與冒險當(dāng)一個邏輯門的輸入有兩個或兩個以上的變量發(fā)生改變時,由于這些變量是經(jīng)過不同路徑產(chǎn)生的,使得它們狀態(tài)改變的時刻有先有后,這種時差引起的現(xiàn)象稱為競爭(Race)。競爭的結(jié)果將很可能導(dǎo)致冒險(Hazard)發(fā)生(例如產(chǎn)生毛刺),造成錯誤的后果,并影響系統(tǒng)的工作。組合邏輯電路的冒險僅在信號狀態(tài)改變的時刻出現(xiàn)毛刺,這種冒險是過渡性的,它不會使穩(wěn)態(tài)值偏離正常值,但在時序電路中,冒險是本質(zhì)的,可導(dǎo)致電路的輸出值永遠偏離正常值或者發(fā)生振蕩。避免冒險的最簡單的方法是同一

5、時刻只允許單個輸入變量發(fā)生變化,或者使用寄存器采樣的辦法。1.2.2毛刺的產(chǎn)生與危害信號在FPGA器件中通過邏輯單元連線時,一定存在延時。延時的大小不僅和連線的長短和邏輯單元的數(shù)目有關(guān),而且也和器件的制造工藝、工作環(huán)境等有關(guān)。因此,信號在器件中傳輸?shù)臅r候,所需要的時間是不能精確估計的,當(dāng)多路信號同時發(fā)生跳變的瞬間,就產(chǎn)生了“競爭冒險”。這時,往往會出現(xiàn)一些不正確的尖峰信號,這些尖峰信號就是“毛刺”。讓我們來具體看一下毛刺是如何產(chǎn)生的。下圖是一個與門電路,我們期望的設(shè)計是,a和b信號同時變化,這樣輸出OUT將一直為0,但是實際中OUT產(chǎn)生了毛刺,它的仿真波形如下所示:可見,即使是在最簡單的邏輯運

6、算中,如果出現(xiàn)多路信號同時跳變的情況,在通過內(nèi)部走線之后,就一定會產(chǎn)生毛刺。而現(xiàn)在數(shù)字電路設(shè)計中的信號往往是由時鐘控制的,如果將帶有毛刺的輸出信號直接連接到時鐘輸入端、清零或置位端口的設(shè)計,可能會導(dǎo)致嚴重的后果;此外對于多數(shù)據(jù)輸入的復(fù)雜運算系統(tǒng),每個數(shù)據(jù)都由相當(dāng)多的位數(shù)組成。這時,每一級的毛刺都會對結(jié)果有嚴重的影響,如果是多級的設(shè)計,那么毛刺累加后甚至?xí)绊懻麄€設(shè)計的可靠性和精確性。 判斷一個邏輯電路在某些輸入信號發(fā)生變化時是否會產(chǎn)生毛刺,首先要判斷信號是否會同時變化,然后判斷在信號同時變化的時候,是否會產(chǎn)生毛刺,這可以通過邏輯函數(shù)的卡諾圖或邏輯函數(shù)表達式來進行判斷。1.2.3毛刺的消除毛刺是

7、數(shù)字電路設(shè)計中的棘手問題,它的出現(xiàn)會影響電路工作的穩(wěn)定性、可靠性,嚴重時會導(dǎo)致整個數(shù)字系統(tǒng)的誤動作和邏輯紊亂??梢酝ㄟ^以下幾種方法來消除毛刺: 1、輸出加D觸發(fā)器 這是一種比較傳統(tǒng)的去除毛刺的方法。原理就是用一個D觸發(fā)器去讀帶毛刺的信號,利用D觸發(fā)器對輸入信號的毛刺不敏感的特點,去除信號中的毛刺。在實際中,對于簡單的邏輯電路,尤其是對信號中發(fā)生在非時鐘跳變沿的毛刺信號,去除效果非常的明顯。 但是如果毛刺信號發(fā)生在時鐘信號的跳變沿,D觸發(fā)器的效果就沒有那么明顯了(加D觸發(fā)器以后的輸出q,仍含有毛刺)。另外,D觸發(fā)器的使用還會給系統(tǒng)帶來一定的延時,特別是在系統(tǒng)級數(shù)較多的情況下,延時也將變大,因此在

8、使用D觸發(fā)器去除毛刺的時候,一定要視情況而定,并不是所有的毛刺都可以用D觸發(fā)器來消除。 2、信號同步法 設(shè)計數(shù)字電路的時候采用同步電路可以大大減少毛刺。由于大多數(shù)毛刺都比較短(大概幾個納秒),只要毛刺不出現(xiàn)在時鐘跳變沿,毛刺信號就不會對系統(tǒng)造成危害了。因此一般認為,只要在整個系統(tǒng)中使用同一個時鐘就可以實現(xiàn)系統(tǒng)同步。但是,時鐘信號在FPGA器件中傳遞時是有延時的,我們無法預(yù)知時鐘跳變沿的精確位置。也就是說我們無法保證在某個時鐘的跳變沿讀取的數(shù)據(jù)是一個穩(wěn)定的數(shù)據(jù),尤其是在多級設(shè)計中,這個問題就更加突出。因此,做到真正的"同步"就是去除毛刺信號的關(guān)鍵問題。所以同步的關(guān)鍵就是保證在

9、時鐘的跳變沿讀取的數(shù)據(jù)是穩(wěn)定的數(shù)據(jù)而不是毛刺數(shù)據(jù)。以下為兩種具體的信號同步方法。 (1)信號延時同步法 信號延時法,它的原理就是在兩級信號傳遞的過程中加一個延時環(huán)節(jié),從而保證在下一個模塊中讀取到的數(shù)據(jù)是穩(wěn)定后的數(shù)據(jù),即不包含毛刺信號。這里所指的信號延時可以是數(shù)據(jù)信號的延時,也可以是時鐘信號的延時。 (2)狀態(tài)機控制 使用狀態(tài)機也可以實現(xiàn)信號的同步和消除毛刺的目的。在數(shù)據(jù)傳遞比較復(fù)雜的多模塊系統(tǒng)中,由狀態(tài)機在特定的時刻分別發(fā)出控制特定模塊的時鐘信號或者模塊使能信號,狀態(tài)機的循環(huán)控制就可以使得整個系統(tǒng)協(xié)調(diào)運作,同時減少毛刺信號。那么只要我們在狀態(tài)機的觸發(fā)時間上加以處理,就可以避免競爭冒險,從而抑制

10、毛刺的產(chǎn)生。3、格雷碼計數(shù)器對于一般的二進制或十進制計數(shù)器,在計數(shù)時,將有多位信號同時跳變。例如一個3bit二進制計數(shù)器,由111轉(zhuǎn)換為000時,必將產(chǎn)生毛刺。此時,使用格雷碼計數(shù)器將避免毛刺的出現(xiàn),因為格雷碼計數(shù)器的輸出每次只有一位跳變。其他關(guān)于毛刺的詳細討論,請見補充教程2:關(guān)于毛刺問題的探討。1.3同步電路設(shè)計同步電路是指所有電路在同一個公共時鐘的上升沿或下降沿的觸發(fā)下同步地工作。但在實際系統(tǒng)中,往往存在多時鐘域的情況,這時同步的概念有所延伸,不再專指整個設(shè)計同步于同一時鐘沿,而是指設(shè)計應(yīng)該做到局部同步,在每個時鐘域內(nèi)的電路要同步于同一時鐘沿。 1.3.1 同步電路設(shè)計的優(yōu)點: 1同步設(shè)

11、計能有效地避免毛刺的影響,使得設(shè)計更可靠; 2同步設(shè)計易于添加異步復(fù)位reset,以使整個電路有一個確定的初始狀態(tài); 3同步設(shè)計可以減小環(huán)境對芯片的影響,避免器件受溫度,電壓,工藝的影響; 4同步設(shè)計可以使靜態(tài)時序分析變得簡單和可靠; 5同步設(shè)計可以很容易地組織流水線,提高芯片的運行速度。1.3.2同步電路的設(shè)計準則: 1盡可能在設(shè)計中使用同一時鐘,時鐘走全局時鐘網(wǎng)絡(luò)。走全局時鐘網(wǎng)絡(luò)的時鐘是最簡單、最可預(yù)測的時鐘,它具有很強的驅(qū)動能力,可以驅(qū)動FPGA內(nèi)部中的所有觸發(fā)器,并保證Clock skew可以小到忽略的地步。2避免使用混合時鐘沿采樣數(shù)據(jù),即避免在設(shè)計中中同時使用時鐘的上升沿和下降沿。3

12、盡量少在模塊內(nèi)部使用計數(shù)器分頻所產(chǎn)生的時鐘。計數(shù)器分頻時鐘需完成的邏輯功能完全可由PLL鎖相環(huán)或時鐘使能電路替代。計數(shù)器分頻時鐘的缺點是使得系統(tǒng)內(nèi)時鐘不可控,并產(chǎn)生較大的Clock skew,還使靜態(tài)時序分析變得復(fù)雜。4避免使用門控時鐘。因為經(jīng)組合邏輯產(chǎn)生的門控時鐘極可能產(chǎn)生毛刺,使D觸發(fā)器誤動作。5當(dāng)整個電路需要多個時鐘來實現(xiàn),則可以將整個電路分成若干局部同步電路(盡量以同一個時鐘為一個模塊),局部同步電路之間接口當(dāng)作異步接口考慮,而且每個時鐘信號的時鐘偏差(T)要嚴格控制。6電路的實際最高工作頻率不應(yīng)大于理論最高工作頻率,留有設(shè)計余量,保證芯片可靠工作。 7電路中所有寄存器、狀態(tài)機在系統(tǒng)被

13、reset復(fù)位時應(yīng)處在一個已知的狀態(tài)。關(guān)于同步電路設(shè)計中的其他問題請詳見補充教程3:華為同步電路設(shè)計規(guī)范。1.3.3關(guān)于時鐘設(shè)計的討論 目前的工程設(shè)計中一般使用同步時序電路來完成整個系統(tǒng)的設(shè)計,由上一節(jié)可見,時鐘在同步電路設(shè)計中起著至關(guān)重要的作用。那么,我們在設(shè)計時首先要完成的是對時鐘的設(shè)計。 如今在設(shè)計中常見的時鐘類型包括: 全局時鐘、內(nèi)部邏輯時鐘和門控時鐘。 1 全局時鐘 全局時鐘即同步時鐘,它通過FPGA芯片內(nèi)的全局時鐘布線網(wǎng)絡(luò)或區(qū)域時鐘網(wǎng)絡(luò)來驅(qū)動,全局時鐘具有高扇出、高精度、低Jitter和低Skew的特點,它到芯片中的每一個寄存器的延遲最短,且該延遲可被認為是固定值。所以我們推薦在所

14、有的設(shè)計中的時鐘都使用全局時鐘。全局時鐘的設(shè)計有以下幾種方法: (1). 由PLL鎖相環(huán)來產(chǎn)生全局時鐘。(2). 將FPGA芯片內(nèi)部邏輯產(chǎn)生的時鐘分配至全局時鐘布線網(wǎng)絡(luò)。(3). 將外部時鐘通過專用的全局時鐘輸入引腳引入FPGA。在我們的設(shè)計中,一般推薦電路中的所有的時鐘都由PLL鎖相環(huán)產(chǎn)生。一方面,PLL鎖相環(huán)可實現(xiàn)倍頻和移相的操作,使我們很方便地獲得所需頻率和相位的時鐘;另一方面,PLL鎖相環(huán)默認將其驅(qū)動的時鐘分配至全局時鐘網(wǎng)絡(luò)或區(qū)域時鐘網(wǎng)絡(luò),Jitter和Skew都很小。 下圖取自我們項目中的一個PLL鎖相環(huán)設(shè)計,該PLL用于驅(qū)動DDR的接口模塊。因為功能所需,DDR接口需要三個133M

15、Hz的時鐘,相位分別是-90、0、-180,圖中所示即為該時鐘的產(chǎn)生模塊。我們使用Quartus的Megawizard生成PLL鎖相環(huán)的IP core。其中inclk_66為PLL鎖相環(huán)的輸入時鐘,由外部的66MHz晶振提供,經(jīng)過PLL倍頻和移相后得到所需的三個全局時鐘。 ooo 2 內(nèi)部邏輯時鐘 內(nèi)部邏輯時鐘即指由芯片內(nèi)部的組合邏輯或計數(shù)器分頻產(chǎn)生的時鐘。 對于組合邏輯時鐘,特別是由多級組合邏輯產(chǎn)生的時鐘,是要被嚴格禁止使用的,因為一方面組合邏輯極容易產(chǎn)生毛刺,特別是對多級組合邏輯;另一方面組合邏輯電路的Jitter和Skew比較大,這將惡化時鐘的質(zhì)量。所以,一般組合邏輯產(chǎn)生的內(nèi)部時鐘僅僅適

16、用于時鐘頻率較低、時鐘精度要求不高的情況。 對于計數(shù)器分頻產(chǎn)生的時鐘,也應(yīng)該盡量少地使用,因為這種時鐘會帶來比較大的延遲,降低設(shè)計的可靠性,也使得靜態(tài)時序分析變得復(fù)雜。計數(shù)器分頻時鐘需完成的邏輯功能完全可由PLL鎖相環(huán)或時鐘使能電路替代。還有一種由觸發(fā)器產(chǎn)生的時鐘行波時鐘,即一個觸發(fā)器的輸出用作另一個觸發(fā)器的時鐘輸入。文中1.1.2節(jié)描述的時鐘分頻電路就是一種行波時鐘。因為各觸發(fā)器的時鐘之間產(chǎn)生較大的時間偏移,很容易就會違反建立時間、保持時間的要求,導(dǎo)致亞穩(wěn)態(tài)的發(fā)生。所以,這種行波時鐘要被嚴格禁止使用。 3 門控時鐘 一般情況下,應(yīng)該避免使用門控時鐘。因為經(jīng)組合邏輯產(chǎn)生的門控時鐘極可能產(chǎn)生毛刺

17、,對系統(tǒng)造成很大危害。但對于某些功耗很大的系統(tǒng)而言,需要使用門控時鐘來降低功耗。 我們推薦使用右圖中描述的門控時鐘的設(shè)計,該設(shè)計一般不會產(chǎn)生毛刺和亞穩(wěn)態(tài)的問題。因為觸發(fā)器避免了毛刺的產(chǎn)生,而亞穩(wěn)態(tài)只可能出現(xiàn)在源時鐘的下降沿,但是隨后它與源時鐘低相位相與,最后不會產(chǎn)生影響。門控時鐘最好只在頂層模塊中出現(xiàn),并將其分離到一個在頂層的獨立模塊中。這同時保證了底層的每個模塊有單一的時鐘,且在本模塊中的時鐘不進行門控。在補充教程4和補充教程5中,我們對時鐘和時序的設(shè)計進行了更詳細的討論。 Dsource_clkclk_engated_clkqoutsource_clkclk_enqoutgated_clk

18、1.3.4 亞穩(wěn)態(tài)在同步電路或異步電路中,如果觸發(fā)器的setup 時間或hold 時間不能得到滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時觸發(fā)器輸出端Q在有效時鐘沿之后比較長的一段時間處于不確定的狀態(tài),在這段時間里Q端將會產(chǎn)生毛刺并不斷振蕩、最終固定在某一電壓值上,此電壓值并不一定等于原來數(shù)據(jù)輸入端D的值。這段時間稱為決斷時間(resolution time)。經(jīng)過決斷時間之后,Q端將穩(wěn)定到0或1上,但是究竟是0還是1,這是隨機的,與輸入沒有必然的關(guān)系。亞穩(wěn)態(tài)的危害主要體現(xiàn)在破壞系統(tǒng)得穩(wěn)定性上,由于輸出在穩(wěn)定下來之前可能是毛刺、振蕩、固定的某一電壓值,因此亞穩(wěn)態(tài)除了導(dǎo)致邏輯誤判之外,嚴重情況下輸出01之間的中

19、間電壓值還會使下一級產(chǎn)生亞穩(wěn)態(tài)(即導(dǎo)致亞穩(wěn)態(tài)的傳播)。邏輯誤判將導(dǎo)致功能性錯誤,而亞穩(wěn)態(tài)的傳播則擴大了故障面,嚴重時將導(dǎo)致系統(tǒng)崩潰。 在異步時序電路中更容易發(fā)生亞穩(wěn)態(tài),因為異步電路一般具有多個時鐘域,數(shù)據(jù)在兩個時鐘域間傳遞時,非常容易導(dǎo)致setup 時間或hold 時間不滿足而發(fā)生亞穩(wěn)態(tài)。在同步時序電路中,當(dāng)兩個觸發(fā)器間的組合邏輯延遲過大時,會導(dǎo)致setup 時間不滿足而發(fā)生亞穩(wěn)態(tài)。1.3.5 對跨時鐘域數(shù)據(jù)的處理 對跨時鐘域數(shù)據(jù)的處理的核心就是要保證下級時鐘對上級數(shù)據(jù)采樣的setup 時間或hold 時間滿足要求,即盡量避免亞穩(wěn)態(tài)的發(fā)生和傳播。但是,我們知道,只要系統(tǒng)中有異步元件,亞穩(wěn)態(tài)就是

20、無法避免的,因此設(shè)計的電路首先要減少亞穩(wěn)態(tài)導(dǎo)致錯誤的發(fā)生,其次要使系統(tǒng)對產(chǎn)生的錯誤不敏感。我們推薦使用以下方法來解決異步時鐘域數(shù)據(jù)同步問題。1 用觸發(fā)器打兩拍 如下圖,左邊為異步輸入端,經(jīng)過兩級觸發(fā)器同步,在右邊的輸出將是同步的,而且該輸出基本不存在亞穩(wěn)態(tài)。其原理是即使第一個觸發(fā)器的輸出端存在亞穩(wěn)態(tài),經(jīng)過一個CLK周期后,第二個觸發(fā)器D端的電平仍未穩(wěn)定的概率非常小,因此第二個觸發(fā)器Q端基本不會產(chǎn)生亞穩(wěn)態(tài)。然而,亞穩(wěn)態(tài)是無法被根除的,一旦亞穩(wěn)態(tài)發(fā)生,后果的嚴重程度依賴于你設(shè)計系統(tǒng)對產(chǎn)生的錯誤是否敏感。2 異步FIFO或DPRAM 因為異步FIFO或DPRAM使用格雷碼計數(shù)器設(shè)計讀寫地址的指針,所

21、以它可以很好地避免亞穩(wěn)態(tài)的發(fā)生。使用方法如下,將上級芯片提供的數(shù)據(jù)隨路時鐘作為寫信號,將數(shù)據(jù)寫入異步FIFO或DPRAM,然后使用本級的采樣時鐘將數(shù)據(jù)讀出即可。唯一需要注意的是,當(dāng)兩級時鐘頻率不同時,需要設(shè)計好緩沖區(qū),并通過監(jiān)控full、half、empty、useword 是,當(dāng)兩級時鐘頻率不同時,需要設(shè)計好緩沖區(qū),并通過監(jiān)控full、half、empty、useword3 調(diào)整時鐘相位 這種方法的設(shè)計難度較大,F(xiàn)PGA是Field Program芯片(集成電路芯片), 通常FPGA由布線資源分隔列構(gòu)成整個芯片,目前我們使用的片的邏輯單元( 可能的結(jié)果,然后把結(jié)果事先寫入查找表中,F(xiàn)PGA工

22、作時,輸入信號所進行的邏輯運算就查找表(Look-Up-Table)簡稱為LUT,其本質(zhì)上就是一個靜態(tài)存儲器SRAM。 對于下實際邏輯電路 LUT的實現(xiàn)方式 . 0 . 0 1111 1 1111 1 3.1 需求定義(功能定義) 設(shè)計和實現(xiàn)一個系統(tǒng)的第一步,是明確整個系統(tǒng)的性能指標,然后進一步將系統(tǒng)功能劃 分為可實現(xiàn)的具體功能模塊,同時明確各模塊的功能與基本時序,還可大致確定模塊間的接 口,如時鐘、讀寫信號、數(shù)據(jù)流和控制信號等。 3.2 RTL 級 HDL 描述 RTL 級(寄存器傳輸級)指不關(guān)注寄存器和組合邏輯的細節(jié)(如使用了多少邏輯門、邏 輯門的連接拓撲結(jié)構(gòu)等),通過描述寄存器到寄存器之

23、間的邏輯功能的 HDL 設(shè)計方法。RTL 級比門級更抽象,同時也更簡單和高效。RTL 級的最大特點是可以直接用綜合工具將其綜 合為門級網(wǎng)表。RTL 級設(shè)計直接決定著系統(tǒng)的功能和效率。我們使用的 HDL 語言是 verilog。 3.3 功能仿真(前仿真) 功能仿真也稱綜合前仿真,其目的是驗證 RTL 級描述是否與設(shè)計意圖一致。為了提高效 率,功能仿真需要建立 testbench,其測試激勵一般使用行為級 HDL 語言描述。 3.4 管腳分配與設(shè)計約束 無論是 RTL 級還是門級的 HDL 設(shè)計方法,在實現(xiàn)該邏輯時都需要與實際的 FPGA 芯片 相匹配。管腳分配是指將設(shè)計文件的輸入輸出信號指定到

24、器件的某個管腳,設(shè)置此管腳的電 平標準、電流強度等。設(shè)計約束指對設(shè)計的時序約束和在綜合、布局布線階段附加的約束等。 3.5 綜合 將 RTL 級 HDL 語言翻譯成由與、或、非門等基本邏輯單元組成的門級連接(網(wǎng)表),并 根據(jù)設(shè)計目標與要求(約束條件)優(yōu)化所生成的邏輯連接,輸出門級網(wǎng)表文件。 3.6 門級仿真(綜合后仿真) 在綜合后通過后仿真來檢查綜合結(jié)果是否與原設(shè)計一致。一般,綜合后仿真和功能仿真 的測試激勵相同。由于綜合工具日益完善,在目前的 FPGA 設(shè)計中,這一步驟被省略掉。 3.7 布局布線 配。也可以簡單地將布局布線理解為對 FPGA 內(nèi)部查找表和寄存器資源的合理配置,那么布 布局布

25、線就是使用綜合后的網(wǎng)表文件,將工程的邏輯與時序要求與器件的可用資源相匹局 可以被理解挑選可實現(xiàn)設(shè)計資源以最優(yōu)方式連接起來。 3.8時序/時延分析布線延時。時序/時延分析的時序仿真是最準確的,能較好地反映芯片的實際工作情況,同時發(fā)現(xiàn)時序違規(guī)(Timing Vio時間、保持時間)的情況。3.9配置與下載 通過編程器(programmer)將布程。文件格JTAG4.2. ,我們舉幾個例子來說明這個問題: 的延遲語句(如:#delay)、 ,他們所描述的功能對硬件而言是不 。比如,實現(xiàn)兩個變量相除運算的代碼: c<=A/B; 我們將發(fā)現(xiàn)這句代碼只能在前仿真中正確執(zhí)行,在 Quartus和其他 E

26、DA 軟件中都不 能將其綜合成硬件。 除、求余、移位。試除和求余需要減法器,商數(shù)和余數(shù)的中間結(jié)果必須有寄存器存儲;而這 些運算顯然不能在一 完成,它需要一個狀態(tài)機來控制時序,經(jīng)過多個時鐘周期才 能得出結(jié)果。 次描述的 EDA (注:有些 FPGA 的配套軟件提供乘除法的運算模塊, 但也只能支持直接調(diào)用,不支持把形如 C=A/B 的語句綜合成除法模塊)。 3.對于不定次數(shù)的循環(huán)運算是不可綜合的,比如對于如下的代碼段: 是有限的、固定的。當(dāng)綜合軟件遇到循環(huán)語句時,總是將其展開成若干條順序執(zhí)行的語句, 是常數(shù),則展開的語句數(shù)是確定的,具有可綜合性;而 對應(yīng)的硬件電路數(shù)量也不能確定,無法被綜合。這樣 的語句還包括 while,repeat,forever 等,他們都不可綜合。 通常 EDA 軟件對 HDL 代碼的綜合能力總是比人的思維差。也就是說,對于一段代碼, 那 EDA 軟件肯定也不行。比如說,加法器、 ,所以類似 A+B-C,(A>B)?C:D 這樣的運算一定可以綜 合。 實 僅符合語法的HDL代碼。1哪些是不可綜合的代碼我們不可能將所有不可綜合的代碼都一一列出 1.對于一些抽象的行為描述代碼是不可綜合的。比如我們常見初始化語句ini

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論