久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3950|回復: 0
打印 上一主題 下一主題
收起左側

FPGA設計開發(fā)入門教程

[復制鏈接]
跳轉到指定樓層
樓主
ID:418565 發(fā)表于 2018-10-31 15:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
FPGA入門教程,主要用于新手進行FPGA學習。
FPGA入門教程
1.數(shù)字電路設計入門
2FPGA簡介
3FPGA開發(fā)流程
4RTL設計
5QuartusⅡ設計實例
6. ModelSimTestbench1.
數(shù)字電路設計入門
1.1數(shù)字電路設計
數(shù)字電路設計的核心是邏輯設計。通常,數(shù)字電路的邏輯值只有‘1’和‘0’,表征的是模擬電壓或電流的離散值,一般‘1’代表高電平,‘0’代表低電平。
高低電平的含義可以理解為,存在一個判決電平,當信號的電壓值高于判決電平時,我們就認為該信號表征高電平,即為‘1’。反之亦然。
當前的數(shù)字電路中存在許多種電平標準,比較常見的有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVDS、HSTL、SSTL等。這些電平的詳細指標請見《補充教程1:電平標準》。
數(shù)字電路設計大致可分為組合邏輯電路和時序邏輯電路。
一般的數(shù)字設計的教材中對組合邏輯電路和時序邏輯電路的定義分別為:組合邏輯電路的輸出僅與當前的輸入有關,而時序邏輯電路的輸出不但與輸入有關,還和系統(tǒng)上一個狀態(tài)有關。
但是在設計中,我們一般以時鐘的存在與否來區(qū)分該電路的性質。由時鐘沿驅動工作的電路為時序邏輯電路。大家注意,這兩種電路并不是獨立存在的,他們相互交錯存在于整個電路系統(tǒng)的設計中。
1.1.1組合邏輯電路
組合邏輯電路由任意數(shù)目的邏輯門電路組成,一般包括與門、或門、非門、異或門、與非門、或非門等。一般的組合邏輯電路如下圖:
其中A,B,C,D,E,F為輸入,G為輸出。
1.1.2時序邏輯電路
時序邏輯電路由時鐘的上升沿或下降沿驅動工作,其實真正被時鐘沿驅動的是電路中的觸發(fā)器(Register),也稱為寄存器。觸發(fā)器的工作原理和參數(shù)如下圖:
下面是兩個簡單的時序邏輯電路例子:
(1)、時鐘分頻電路
該時序電路的功能為實現(xiàn)對時鐘’clk’的4分頻,其中’clk_2’為2分頻時鐘,’clk_4’為4分頻時鐘,’enable’為該電路的使能信號。其功能仿真波形如下圖所示:
(2)、序列檢測器
該時序電路實現(xiàn)了一個序列檢測器,當輸入序列‘datain’中出現(xiàn)‘101’時,標志位F將輸出‘1’,其他時刻輸出‘0’。電路中‘clk’為時鐘信號,‘D1’,‘D2’,‘D3’為移位寄存器的輸出,’enable’為該電路的使能信號。其功能仿真波形如下圖所示:
可見,時序電路設計的核心是時鐘和觸發(fā)器,這兩者也是我們設計電路時需重點關注的。
1.2毛刺的產(chǎn)生與消除
1.2.1競爭與冒險
當一個邏輯門的輸入有兩個或兩個以上的變量發(fā)生改變時,由于這些變量是經(jīng)過不同路徑產(chǎn)生的,使得它們狀態(tài)改變的時刻有先有后,這種時差引起的現(xiàn)象稱為競爭(Race)。競爭的結果將很可能導致冒險(Hazard)發(fā)生(例如產(chǎn)生毛刺),造成錯誤的后果,并影響系統(tǒng)的工作。
組合邏輯電路的冒險僅在信號狀態(tài)改變的時刻出現(xiàn)毛刺,這種冒險是過渡性的,它不會使穩(wěn)態(tài)值偏離正常值,但在時序電路中,冒險是本質的,可導致電路的輸出值永遠偏離正常值或者發(fā)生振蕩。
避免冒險的最簡單的方法是同一時刻只允許單個輸入變量發(fā)生變化,或者使用寄存器采樣的辦法。
1.2.2毛刺的產(chǎn)生與危害
信號在FPGA器件中通過邏輯單元連線時,一定存在延時。延時的大小不僅和連線的長短和邏輯單元的數(shù)目有關,而且也和器件的制造工藝、工作環(huán)境等有關。因此,信號在器件中傳輸?shù)臅r候,所需要的時間是不能精確估計的,當多路信號同時發(fā)生跳變的瞬間,就產(chǎn)生了“競爭冒險”。這時,往往會出現(xiàn)一些不正確的尖峰信號,這些尖峰信號就是“毛刺”。
讓我們來具體看一下毛刺是如何產(chǎn)生的。下圖是一個與門電路,
我們期望的設計是,a和b信號同時變化,這樣輸出OUT將一直為0,但是實際中OUT產(chǎn)生了毛刺,它的仿真波形如下所示:
可見,即使是在最簡單的邏輯運算中,如果出現(xiàn)多路信號同時跳變的情況,在通過內(nèi)部走線之后,就一定會產(chǎn)生毛刺。而現(xiàn)在數(shù)字電路設計中的信號往往是由時鐘控制的,如果將帶有毛刺的輸出信號直接連接到時鐘輸入端、清零或置位端口的設計,可能會導致嚴重的后果;此外對于多數(shù)據(jù)輸入的復雜運算系統(tǒng),每個數(shù)據(jù)都由相當多的位數(shù)組成。這時,每一級的毛刺都會對結果有嚴重的影響,如果是多級的設計,那么毛刺累加后甚至會影響整個設計的可靠性和精確性。 判斷一個邏輯電路在某些輸入信號發(fā)生變化時是否會產(chǎn)生毛刺,首先要判斷信號是否會同時變化,然后判斷在信號同時變化的時候,是否會產(chǎn)生毛刺,這可以通過邏輯函數(shù)的卡諾圖或邏輯函數(shù)表達式來進行判斷。
1.2.3毛刺的消除
毛刺是數(shù)字電路設計中的棘手問題,它的出現(xiàn)會影響電路工作的穩(wěn)定性、可靠性,嚴重時會導致整個數(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ù)較多的情況下,延時也將變大,因此在使用D觸發(fā)器去除毛刺的時候,一定要視情況而定,并不是所有的毛刺都可以用D觸發(fā)器來消除。 2、信號同步法 設計數(shù)字電路的時候采用同步電路可以大大減少毛刺。由于大多數(shù)毛刺都比較短(大概幾個納秒),只要毛刺不出現(xiàn)在時鐘跳變沿,毛刺信號就不會對系統(tǒng)造成危害了。因此一般認為,只要在整個系統(tǒng)中使用同一個時鐘就可以實現(xiàn)系統(tǒng)同步。但是,時鐘信號在FPGA器件中傳遞時是有延時的,我們無法預知時鐘跳變沿的精確位置。也就是說我們無法保證在某個時鐘的跳變沿讀取的數(shù)據(jù)是一個穩(wěn)定的數(shù)據(jù),尤其是在多級設計中,這個問題就更加突出。因此,做到真正的"同步"就是去除毛刺信號的關鍵問題。所以同步的關鍵就是保證在時鐘的跳變沿讀取的數(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ù)傳遞比較復雜的多模塊系統(tǒng)中,由狀態(tài)機在特定的時刻分別發(fā)出控制特定模塊的時鐘信號或者模塊使能信號,狀態(tài)機的循環(huán)控制就可以使得整個系統(tǒng)協(xié)調運作,同時減少毛刺信號。那么只要我們在狀態(tài)機的觸發(fā)時間上加以處理,就可以避免競爭冒險,從而抑制毛刺的產(chǎn)生。
3、格雷碼計數(shù)器
對于一般的二進制或十進制計數(shù)器,在計數(shù)時,將有多位信號同時跳變。例如一個3bit二進制計數(shù)器,由’111’轉換為’000’時,必將產(chǎn)生毛刺。此時,使用格雷碼計數(shù)器將避免毛
刺的出現(xiàn),因為格雷碼計數(shù)器的輸出每次只有一位跳變。
其他關于毛刺的詳細討論,請見補充教程2:關于毛刺問題的探討。
1.3同步電路設計
同步電路是指所有電路在同一個公共時鐘的上升沿或下降沿的觸發(fā)下同步地工作。但在實際系統(tǒng)中,往往存在多時鐘域的情況,這時同步的概念有所延伸,不再專指整個設計同步于同一時鐘沿,而是指設計應該做到局部同步,在每個時鐘域內(nèi)的電路要同步于同一時鐘沿。
1.3.1同步電路設計的優(yōu)點:
1.同步設計能有效地避免毛刺的影響,使得設計更可靠;
2.同步設計易于添加異步復位reset,以使整個電路有一個確定的初始狀態(tài);
3.同步設計可以減小環(huán)境對芯片的影響,避免器件受溫度,電壓,工藝的影響;
4.同步設計可以使靜態(tài)時序分析變得簡單和可靠;
5.同步設計可以很容易地組織流水線,提高芯片的運行速度。
1.3.2同步電路的設計準則:
1.盡可能在設計中使用同一時鐘,時鐘走全局時鐘網(wǎng)絡。走全局時鐘網(wǎng)絡的時鐘是最簡單、最可預測的時鐘,它具有很強的驅動能力,可以驅動FPGA內(nèi)部中的所有觸發(fā)器,并保證Clock skew可以小到忽略的地步。
2.避免使用混合時鐘沿采樣數(shù)據(jù),即避免在設計中中同時使用時鐘的上升沿和下降沿。
3.盡量少在模塊內(nèi)部使用計數(shù)器分頻所產(chǎn)生的時鐘。計數(shù)器分頻時鐘需完成的邏輯功能完全可由PLL鎖相環(huán)或時鐘使能電路替代。計數(shù)器分頻時鐘的缺點是使得系統(tǒng)內(nèi)時鐘不可控,并產(chǎn)生較大的Clock skew,還使靜態(tài)時序分析變得復雜。
4.避免使用門控時鐘。因為經(jīng)組合邏輯產(chǎn)生的門控時鐘極可能產(chǎn)生毛刺,使D觸發(fā)器誤動作。
5.當整個電路需要多個時鐘來實現(xiàn),則可以將整個電路分成若干局部同步電路(盡量以同一個時鐘為一個模塊),局部同步電路之間接口當作異步接口考慮,而且每個時鐘信號的時鐘偏差(△T)要嚴格控制。
6.電路的實際最高工作頻率不應大于理論最高工作頻率,留有設計余量,保證芯片可靠工作。
7.電路中所有寄存器、狀態(tài)機在系統(tǒng)被reset復位時應處在一個已知的狀態(tài)。
關于同步電路設計中的其他問題請詳見補充教程3:華為同步電路設計規(guī)范。
1.3.3關于時鐘設計的討論
目前的工程設計中一般使用同步時序電路來完成整個系統(tǒng)的設計,由上一節(jié)可見,時鐘在同步電路設計中起著至關重要的作用。那么,我們在設計時首先要完成的是對時鐘的設計。
如今在設計中常見的時鐘類型包括: 全局時鐘、內(nèi)部邏輯時鐘和門控時鐘。
1. 全局時鐘
全局時鐘即同步時鐘,它通過FPGA芯片內(nèi)的全局時鐘布線網(wǎng)絡或區(qū)域時鐘網(wǎng)絡來驅動,全局時鐘具有高扇出、高精度、低Jitter和低Skew的特點,它到芯片中的每一個寄存器的延遲最短,且該延遲可被認為是固定值。所以我們推薦在所有的設計中的時鐘都使用全局時鐘。全局時鐘的設計有以下幾種方法:

(1). 由PLL鎖相環(huán)來產(chǎn)生全局時鐘。
(2). 將FPGA芯片內(nèi)部邏輯產(chǎn)生的時鐘分配至全局時鐘布線網(wǎng)絡。
(3). 將外部時鐘通過專用的全局時鐘輸入引腳引入FPGA。
在我們的設計中,一般推薦電路中的所有的時鐘都由PLL鎖相環(huán)產(chǎn)生。一方面,PLL鎖相環(huán)可實現(xiàn)倍頻和移相的操作,使我們很方便地獲得所需頻率和相位的時鐘;另一方面,PLL鎖相環(huán)默認將其驅動的時鐘分配至全局時鐘網(wǎng)絡或區(qū)域時鐘網(wǎng)絡,Jitter和Skew都很小。
下圖取自我們項目中的一個PLL鎖相環(huán)設計,該PLL用于驅動DDR的接口模塊。因為功能所需,DDR接口需要三個133MHz的時鐘,相位分別是‘-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比較大,這將惡化時鐘的質量。所以,一般組合邏輯產(chǎn)生的內(nèi)部時鐘僅僅適用于時鐘頻率較低、時鐘精度要求不高的情況。
對于計數(shù)器分頻產(chǎn)生的時鐘,也應該盡量少地使用,因為這種時鐘會帶來比較大的延遲,降低設計的可靠性,也使得靜態(tài)時序分析變得復雜。計數(shù)器分頻時鐘需完成的邏輯功能完全可由PLL鎖相環(huán)或時鐘使能電路替代。
還有一種由觸發(fā)器產(chǎn)生的時鐘—行波時鐘,即一個觸發(fā)器的輸出用作另一個觸發(fā)器的時鐘輸入。文中1.1.2節(jié)描述的時鐘分頻電路就是一種行波時鐘。因為各觸發(fā)器的時鐘之間產(chǎn)生較大的時間偏移,很容易就會違反建立時間、保持時間的要求,導致亞穩(wěn)態(tài)的發(fā)生。所以,這種行波時鐘要被嚴格禁止使用。
3. 門控時鐘
一般情況下,應該避免使用門控時鐘。因為經(jīng)組合邏輯產(chǎn)生的門控時鐘極可能產(chǎn)生毛刺,對系統(tǒng)造成很大危害。但對于某些功耗很大的系統(tǒng)而言,需要使用門控時鐘來降低功耗。
我們推薦使用右圖中描述的門控時鐘的設計,該設計一般不會產(chǎn)生毛刺和亞穩(wěn)態(tài)的問題。因為觸發(fā)器避免了毛刺的產(chǎn)生,而亞穩(wěn)態(tài)只可能出現(xiàn)在源時鐘的下降沿,但是隨后它與源時鐘低相位相與,最后不會產(chǎn)生影響。
門控時鐘最好只在頂層模塊中出現(xiàn),并將其分離到一個在頂層的獨立模塊中。這同時保證了底層的每個模塊有單一的時鐘,且在本模塊中的時鐘不進行門控。
在補充教程4和補充教程5中,我們對時鐘和時序的設計進行了更詳細的討論。 Dsource_clkclk_engated_clkqoutsource_clkclk_enqoutgated_clk
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,這是隨機的,與輸入沒有必然的關系。
亞穩(wěn)態(tài)的危害主要體現(xiàn)在破壞系統(tǒng)得穩(wěn)定性上,由于輸出在穩(wěn)定下來之前可能是毛刺、振蕩、固定的某一電壓值,因此亞穩(wěn)態(tài)除了導致邏輯誤判之外,嚴重情況下輸出0~1之間的中間電壓值還會使下一級產(chǎn)生亞穩(wěn)態(tài)(即導致亞穩(wěn)態(tài)的傳播)。邏輯誤判將導致功能性錯誤,而亞穩(wěn)態(tài)的傳播則擴大了故障面,嚴重時將導致系統(tǒng)崩潰。
在異步時序電路中更容易發(fā)生亞穩(wěn)態(tài),因為異步電路一般具有多個時鐘域,數(shù)據(jù)在兩個時鐘域間傳遞時,非常容易導致setup 時間或hold 時間不滿足而發(fā)生亞穩(wěn)態(tài)。在同步時序電路中,當兩個觸發(fā)器間的組合邏輯延遲過大時,會導致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)就是無法避免的,因此設計的電路首先要減少亞穩(wěn)態(tài)導致錯誤的發(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ā)生,后果的嚴重程度依賴于你



設計系統(tǒng)對產(chǎn)生的錯誤是否敏感。
2. 異步FIFO或DPRAM
因為異步FIFO或DPRAM使用格雷碼計數(shù)器設計讀寫地址的指針,所以它可以很好地避免亞穩(wěn)態(tài)的發(fā)生。使用方法如下,將上級芯片提供的數(shù)據(jù)隨路時鐘作為寫信號,將數(shù)據(jù)寫入異步FIFO或DPRAM,然后使用本級的采樣時鐘將數(shù)據(jù)讀出即可。唯一需要注意的是,當兩級時鐘頻率不同時,需要設計好緩沖區(qū),并通過監(jiān)控full、half、empty、useword

是,當兩級時鐘頻率不同時,需要設計好緩沖區(qū),并通過監(jiān)控full、half、empty、useword3. 調整時鐘相位
這種方法的設計難度較大,

FPGA是Field Program芯片(集成電路芯片),
通常FPGA由布線資源分隔
列構成整個芯片,目前我們使用的
片的邏輯單元(
可能的結果,然后把結果事先寫入查找表中,F(xiàn)PGA工作時,輸入信號所進行的邏輯運算就查找表(Look-Up-Table)簡稱為LUT,其本質上就是一個靜態(tài)存儲器SRAM。 對于下
實際邏輯電路 LUT的實現(xiàn)方式 ....
0
...
0
1111
1
1111
1
3.1 需求定義(功能定義) 設計和實現(xiàn)一個系統(tǒng)的第一步,是明確整個系統(tǒng)的性能指標,然后進一步將系統(tǒng)功能劃 分為可實現(xiàn)的具體功能模塊,同時明確各模塊的功能與基本時序,還可大致確定模塊間的接 口,如時鐘、讀寫信號、數(shù)據(jù)流和控制信號等。 3.2 RTL HDL 描述 RTL 級(寄存器傳輸級)指不關注寄存器和組合邏輯的細節(jié)(如使用了多少邏輯門、邏 輯門的連接拓撲結構等),通過描述寄存器到寄存器之間的邏輯功能的 HDL 設計方法。RTL 級比門級更抽象,同時也更簡單和高效。RTL 級的最大特點是可以直接用綜合工具將其綜 合為門級網(wǎng)表。RTL 級設計直接決定著系統(tǒng)的功能和效率。我們使用的 HDL 語言是 verilog。 3.3 功能仿真(前仿真) 功能仿真也稱綜合前仿真,其目的是驗證 RTL 級描述是否與設計意圖一致。為了提高效 率,功能仿真需要建立testbench,其測試激勵一般使用行為級 HDL 語言描述。 3.4 管腳分配與設計約束 無論是 RTL 級還是門級的 HDL 設計方法,在實現(xiàn)該邏輯時都需要與實際的 FPGA 芯片 相匹配。管腳分配是指將設計文件的輸入輸出信號指定到器件的某個管腳,設置此管腳的電 平標準、電流強度等。設計約束指對設計的時序約束和在綜合、布局布線階段附加的約束等。 3.5 綜合 將 RTL 級 HDL 語言翻譯成由與、或、非門等基本邏輯單元組成的門級連接(網(wǎng)表),并 根據(jù)設計目標與要求(約束條件)優(yōu)化所生成的邏輯連接,輸出門級網(wǎng)表文件。 3.6 門級仿真(綜合后仿真) 在綜合后通過后仿真來檢查綜合結果是否與原設計一致。一般,綜合后仿真和功能仿真 的測試激勵相同。由于綜合工具日益完善,在目前的 FPGA 設計中,這一步驟被省略掉。 3.7 布局布線 配。也可以簡單地將布局布線理解為對 FPGA 內(nèi)部查找表和寄存器資源的合理配置,那么‘布 布局布線就是使用綜合后的網(wǎng)表文件,將工程的邏輯與時序要求與器件的可用資源相匹
局’ 可以被理解挑選可實現(xiàn)設計
資源以最優(yōu)方式連接起來。 3.8時序/時延分析布線延時。時序/時延分析的時序仿真是最準確的,能較好地反映芯片的實際工作情況,同
時發(fā)現(xiàn)時序違規(guī)(Timing Vio
時間、保持時間)的情況。3.9配置與下載
通過編程器(programmer)將布
程。文件格JTAG
4.2. ,我們舉幾個例子來說明這個問題: 的延遲語句(如:#delay)、 ,他們所描述的功能對硬件而言是不 。比如,實現(xiàn)兩個變量相除運算的代碼:c<=A/B; 我們將發(fā)現(xiàn)這句代碼只能在前仿真中正確執(zhí)行,在 QuartusⅡ和其他 EDA 軟件中都不 能將其綜合成硬件。 除、求余、移位。試除和求余需要減法器,商數(shù)和余數(shù)的中間結果必須有寄存器存儲;而這 些運算顯然不能在一 完成,它需要一個狀態(tài)機來控制時序,經(jīng)過多個時鐘周期才 能得出結果。 次描述的 EDA (注:有些 FPGA 的配套軟件提供乘除法的運算模塊, 但也只能支持直接調用,不支持把形如 C=A/B 的語句綜合成除法模塊)。 3.對于不定次數(shù)的循環(huán)運算是不可綜合的,比如對于如下的代碼段: 是有限的、固定的。當綜合軟件遇到循環(huán)語句時,總是將其展開成若干條順序執(zhí)行的語句, 是常數(shù),則展開的語句數(shù)是確定的,具有可綜合性;而 對應的硬件電路數(shù)量也不能確定,無法被綜合。這樣 的語句還包括 while,repeat,forever 等,他們都不可綜合。 通常 EDA 軟件對 HDL 代碼的綜合能力總是比人的思維差。也就是說,對于一段代碼, 那 EDA 軟件肯定也不行。比如說,加法器、 ,所以類似 A+B-C,(A>B)?C:D 這樣的運算一定可以綜合。 實 僅符合語法的HDL代碼。
1哪些是不可綜合的代碼
我們不可能將所有不可綜合的代碼都一一列出
1.對于一些抽象的行為描述代碼是不可綜合的。比如我們常見
初始化語句initial以及等待語句wait都是不可綜合的
可實現(xiàn)的。
2.對于一些抽象的運算代碼也是不可綜合的
always @(posedge clk)
試想一下,如果我們自己用筆算除法是怎么做的?從高位到低位逐次試
個時鐘延上
一句簡單的C=A/B同所有這些相比顯得太抽象,對于只能接受RTL或更低層
軟件來說確實太難實現(xiàn)。
for (i=0; i<wordlength ; i=i+1)
parity = parity xor data[ i];
當wordlength為變量時,任何EDA軟件都不能綜合這個代碼。這是因為硬件規(guī)模必須
然后再綜合成電路。若wordlength
若它是變量時,展開的語句數(shù)不確定,4.2.2如何判斷自己寫的代碼是可綜合的如果你不能想象出一個較直觀的硬件實現(xiàn)方法,多路選擇器是大家都很熟悉的電路
而除法、開根、對數(shù)等等較復雜的運算,必須通過一定的算法實現(xiàn),沒有直觀簡單的現(xiàn)方法,則可以判斷那些計算式是不能綜合的,必須按它們的算法寫出更具體的代碼才能實現(xiàn)。此外,硬件無法支持的抽象行為描述,當然也不能被綜合。不過,這樣的判斷標準非常主觀模糊,
要一個相對客觀的標準,一般來說:在RTL級的描述中,所有邏輯運算和加減法運算、
然有缺陷,所以,正確的判斷仍然要靠實踐來積累經(jīng)驗。當你可以較準確判斷代碼的可綜合性的時候,你對HDL的掌握就算完全入門了。優(yōu)化RTL代碼追求的最終目標是面積或者速度,或者是兩者的平衡。面積和速度是FPGA設計的兩個基本標準。“面積”是指一個設計所消耗FPGA的邏輯資源數(shù)量,“速度”指設計在芯片上穩(wěn)定運行所能夠達到的最高頻率。兩者是對立統(tǒng)一的,即要
面積最小、速度最高時不現(xiàn)實的。我們的設計目標應該是在滿足設計時序
更高。4.3.1 Pipelining技術器位置,用寄存器合理分割該組合邏輯路徑,從而降低路徑
具體實現(xiàn)可通過下圖的方法,首先對時延較大
時延較大的組合邏輯a_rega_pipe a_int a_reg a_pipe a_int z_reg HDL描述的結構寄存器,然后運用優(yōu)化工具自動將大組合邏輯拆分為幾個小的組合邏輯,同時將寄存器放在小組合邏輯在中間。


完整的Word格式文檔51黑下載地址:
FPGA入門教程.doc (158 KB, 下載次數(shù): 28)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女午夜免费视频 | 国产成人精品视频在线观看 | 国产精品小视频在线观看 | 国产午夜在线 | 国产乱码精品一区二区三区中文 | 夜夜草| 丁香婷婷成人 | 九九热视频这里只有精品 | 亚洲国产成人精品女人久久久 | 日韩三区| 日日天天 | 日韩久久久久久久久久久 | 久久精品国产一区二区电影 | 夜夜骑综合 | 一级片av | 古装人性做爰av网站 | 蜜臀网| 久久国产欧美日韩精品 | 黄网站涩免费蜜桃网站 | 午夜影院在线观看版 | 久久一 | 欧美一级欧美三级在线观看 | 亚洲国产精品久久 | 中文字幕一区在线观看视频 | 精国产品一区二区三区四季综 | 日韩电影中文字幕在线观看 | www.v888av.com| 久久久久久久夜 | 日韩福利| 我要看一级片 | 国产一区二区久久 | 毛片免费视频 | 一级高清 | 视频二区 | 91精品在线播放 | 久久综合久久综合久久综合 | 91在线看片 | xxx国产精品视频 | av影音资源 | 日韩欧美国产综合 | 欧美极品一区二区 |