找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 34766|回復(fù): 31
收起左側(cè)

FPGA入門教程(共37頁精彩pdf下載)

  [復(fù)制鏈接]
ID:260904 發(fā)表于 2018-2-12 15:52 | 顯示全部樓層 |閱讀模式
1.?dāng)?shù)字電路設(shè)計(jì)入門
2.FPGA 簡介
3.FPGA 開發(fā)流程
4.RTL設(shè)計(jì)
5.QuartusⅡ設(shè)計(jì)實(shí)例
6.  ModelSim和 Testbench

1.數(shù)字電路設(shè)計(jì)入門

1.1 數(shù)字電路設(shè)計(jì)

數(shù)字電路設(shè)計(jì)的核心是邏輯設(shè)計(jì)。通常,數(shù)字電路的邏輯值只有‘1’和‘0’,表征的是模擬 電壓或電流的離散值,一般‘1’代表高電平,‘0’代表低電平。
高低電平的含義可以理解為,存在一個(gè)判決電平,當(dāng)信號的電壓值高于判決電平時(shí),我 們就認(rèn)為該信號表征高電平,即為‘1’。反之亦然。
當(dāng)前的數(shù)字電路中存在許多種電平標(biāo)準(zhǔn),比較常見的有 TTL、CMOS、LVTTL、LVCMOS、

ECL、PECL、LVDS、HSTL、SSTL 等。這些電平的詳細(xì)指標(biāo)請見《補(bǔ)充教程 1:電平標(biāo)準(zhǔn)》。 數(shù)字電路設(shè)計(jì)大致可分為組合邏輯電路和時(shí)序邏輯電路。 一般的數(shù)字設(shè)計(jì)的教材中對組合邏輯電路和時(shí)序邏輯電路的定義分別為:組合邏輯電
路的輸出僅與當(dāng)前的輸入有關(guān) ,而時(shí)序邏輯電路的輸出不但與輸入有關(guān),還和系統(tǒng)上一個(gè) 狀態(tài)有關(guān)。
但是在設(shè)計(jì)中,我們一般以時(shí)鐘的存在與否來區(qū)分該電路的性質(zhì)。由時(shí)鐘沿驅(qū)動工作 的電路為時(shí)序邏輯電路。大家注意,這兩種電路并不是獨(dú)立存在的,他們相互交錯(cuò)存在于整 個(gè)電路系統(tǒng)的設(shè)計(jì)中。

1.1.1  組合邏輯電路 組合邏輯電路由任意數(shù)目的邏輯門電路組成,一般包括與門、或門、非門、
異或門、與非門、或非門等。一般的組合邏輯電路如下圖:
44.001.jpg
其中 A,B,C,D,E,F 為輸入,G 為輸出。

1.1.2
時(shí)序邏輯電路
時(shí)序邏輯電路由時(shí)鐘的上升沿或下降沿驅(qū)動工作,其實(shí)真正被時(shí)鐘沿驅(qū)動的是電路中的觸發(fā)器(Register),也稱為寄存器。觸發(fā)器的工作原理和參數(shù)如下圖:
Register的原理和參數(shù)
0.png
tsu:建立時(shí)間,在時(shí)鐘有效沿到來之前觸發(fā)器數(shù)據(jù)輸入應(yīng)保持穩(wěn)定的時(shí)間,如果建立時(shí) 間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘沿被打入觸發(fā)器。它間接約束了組合邏輯的最大延時(shí)。

thold:保持時(shí)間,在觸發(fā)器數(shù)據(jù)輸入引腳的數(shù)據(jù)在系統(tǒng)有效時(shí)鐘沿到來后,需要保持穩(wěn) 定的時(shí)間,如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。它間接約束了組合邏輯的最 小延時(shí).
tc-q: 觸發(fā)器從有效時(shí)鐘沿到來到輸出有效的最大時(shí)間。

下面是兩個(gè)簡單的時(shí)序邏輯電路例子:

(1)、時(shí)鐘分頻電路

44.003.jpg
該時(shí)序電路的功能為實(shí)現(xiàn)對時(shí)鐘’clk’的 4 分頻,其中’clk_2’為 2 分頻時(shí)鐘,’clk_4’為 4分頻時(shí)鐘,’enable’為該電路的使能信號。其功能仿真波形如下圖所示:
44.004.jpg
(2)、序列檢測器

44.005.jpg

該時(shí)序電路實(shí)現(xiàn)了一個(gè)序列檢測器,當(dāng)輸入序列‘datain’中出現(xiàn)‘101’時(shí),標(biāo)志位 F 將輸 出‘1’,其他時(shí)刻輸出‘0’。電路中‘clk’為時(shí)鐘信號,‘D1’,‘D2’,‘D3’為移位寄存器的輸出,’enable’ 為該電路的使能信號。其功能仿真波形如下圖所示:


44.006.jpg

可見,時(shí)序電路設(shè)計(jì)的核心是時(shí)鐘和觸發(fā)器,這兩者也是我們設(shè)計(jì)電路時(shí)需重點(diǎn)關(guān)注的。



1.2毛刺的產(chǎn)生與消除
1.2.1競爭與冒險(xiǎn)

當(dāng)一個(gè)邏輯門的輸入有兩個(gè)或兩個(gè)以上的變量發(fā)生改變時(shí),由于這些變量是經(jīng)過不同路 徑產(chǎn)生的,使得它們狀態(tài)改變的時(shí)刻有先有后,這種時(shí)差引起的現(xiàn)象稱為競爭(Race)。競 爭的結(jié)果將很可能導(dǎo)致冒險(xiǎn)(Hazard)發(fā)生(例如產(chǎn)生毛刺),造成錯(cuò)誤的后果,并影響系 統(tǒng)的工作。


組合邏輯電路的冒險(xiǎn)僅在信號狀態(tài)改變的時(shí)刻出現(xiàn)毛刺,這種冒險(xiǎn)是過渡性的,它不會 使穩(wěn)態(tài)值偏離正常值,但在時(shí)序電路中,冒險(xiǎn)是本質(zhì)的,可導(dǎo)致電路的輸出值永遠(yuǎn)偏離正常 值或者發(fā)生振蕩。


避免冒險(xiǎn)的最簡單的方法是同一時(shí)刻只允許單個(gè)輸入變量發(fā)生變化,或者使用寄存器采 樣的辦法。


1.2.2毛刺的產(chǎn)生與危害

信號在 FPGA 器件中通過邏輯單元連線時(shí),一定存在延時(shí)。延時(shí)的大小不僅和連線的長 短和邏輯單元的數(shù)目有關(guān),而且也和器件的制造工藝、工作環(huán)境等有關(guān)。因此,信號在器件 中傳輸?shù)臅r(shí)候,所需要的時(shí)間是不能精確估計(jì)的,當(dāng)多路信號同時(shí)發(fā)生跳變的瞬間,就產(chǎn)生 了“競爭冒險(xiǎn)”。這時(shí),往往會出現(xiàn)一些不正確的尖峰信號,這些尖峰信號就是“毛刺”。


讓我們來具體看一下毛刺是如何產(chǎn)生的。下圖是一個(gè)與門電路,


44.007.jpg
我們期望的設(shè)計(jì)是,a 和 b 信號同時(shí)變化,這樣輸出 OUT 將一直為 0,但是實(shí)際中 OUT

產(chǎn)生了毛刺,它的仿真波形如下所示:


44.008.jpg

可見,即使是在最簡單的邏輯運(yùn)算中,如果出現(xiàn)多路信號同時(shí)跳變的情況,在通過內(nèi)部 走線之后,就一定會產(chǎn)生毛刺。而現(xiàn)在數(shù)字電路設(shè)計(jì)中的信號往往是由時(shí)鐘控制的,如果將 帶有毛刺的輸出信號直接連接到時(shí)鐘輸入端、清零或置位端口的設(shè)計(jì),可能會導(dǎo)致嚴(yán)重的后 果;此外對于多數(shù)據(jù)輸入的復(fù)雜運(yùn)算系統(tǒng),每個(gè)數(shù)據(jù)都由相當(dāng)多的位數(shù)組成。這時(shí),每一級 的毛刺都會對結(jié)果有嚴(yán)重的影響,如果是多級的設(shè)計(jì),那么毛刺累加后甚至?xí)绊懻麄€(gè)設(shè)計(jì) 的可靠性和精確性。

判斷一個(gè)邏輯電路在某些輸入信號發(fā)生變化時(shí)是否會產(chǎn)生毛刺,首先要判斷信號是否會 同時(shí)變化,然后判斷在信號同時(shí)變化的時(shí)候,是否會產(chǎn)生毛刺,這可以通過邏輯函數(shù)的卡諾 圖或邏輯函數(shù)表達(dá)式來進(jìn)行判斷。

1.2.3毛刺的消除


毛刺是數(shù)字電路設(shè)計(jì)中的棘手問題,它的出現(xiàn)會影響電路工作的穩(wěn)定性、可靠性,嚴(yán)重 時(shí)會導(dǎo)致整個(gè)數(shù)字系統(tǒng)的誤動作和邏輯紊亂。



可以通過以下幾種方法來消除毛刺:

1、輸出加 D觸發(fā)器

這是一種比較傳統(tǒng)的去除毛刺的方法。原理就是用一個(gè) D 觸發(fā)器去讀帶毛刺的信號, 利用 D 觸發(fā)器對輸入信號的毛刺不敏感的特點(diǎn),去除信號中的毛刺。在實(shí)際中,對于簡單 的邏輯電路,尤其是對信號中發(fā)生在非時(shí)鐘跳變沿的毛刺信號,去除效果非常的明顯。

但是如果毛刺信號發(fā)生在時(shí)鐘信號的跳變沿,D 觸發(fā)器的效果就沒有那么明顯了(加 D 觸發(fā)器以后的輸出 q,仍含有毛刺)。另外,D 觸發(fā)器的使用還會給系統(tǒng)帶來一定的延時(shí), 特別是在系統(tǒng)級數(shù)較多的情況下,延時(shí)也將變大,因此在使用 D 觸發(fā)器去除毛刺的時(shí)候, 一定要視情況而定,并不是所有的毛刺都可以用 D 觸發(fā)器來消除。

2、信號同步法 設(shè)計(jì)數(shù)字電路的時(shí)候采用同步電路可以大大減少毛刺。由于大多數(shù)毛刺都比較短(大

概幾個(gè)納秒),只要毛刺不出現(xiàn)在時(shí)鐘跳變沿,毛刺信號就不會對系統(tǒng)造成危害了。因此一 般認(rèn)為,只要在整個(gè)系統(tǒng)中使用同一個(gè)時(shí)鐘就可以實(shí)現(xiàn)系統(tǒng)同步。但是,時(shí)鐘信號在 FPGA 器件中傳遞時(shí)是有延時(shí)的,我們無法預(yù)知時(shí)鐘跳變沿的精確位置。也就是說我們無法保證在 某個(gè)時(shí)鐘的跳變沿讀取的數(shù)據(jù)是一個(gè)穩(wěn)定的數(shù)據(jù),尤其是在多級設(shè)計(jì)中,這個(gè)問題就更加突 出。因此,做到真正的"同步"就是去除毛刺信號的關(guān)鍵問題。所以同步的關(guān)鍵就是保證在時(shí) 鐘的跳變沿讀取的數(shù)據(jù)是穩(wěn)定的數(shù)據(jù)而不是毛刺數(shù)據(jù)。以下為兩種具體的信號同步方法。

(1)信號延時(shí)同步法 信號延時(shí)法,它的原理就是在兩級信號傳遞的過程中加一個(gè)延時(shí)環(huán)節(jié),從而保證在下一

個(gè)模塊中讀取到的數(shù)據(jù)是穩(wěn)定后的數(shù)據(jù),即不包含毛刺信號。這里所指的信號延時(shí)可以是數(shù) 據(jù)信號的延時(shí),也可以是時(shí)鐘信號的延時(shí)。

(2)狀態(tài)機(jī)控制 使用狀態(tài)機(jī)也可以實(shí)現(xiàn)信號的同步和消除毛刺的目的。在數(shù)據(jù)傳遞比較復(fù)雜的多模塊系

統(tǒng)中,由狀態(tài)機(jī)在特定的時(shí)刻分別發(fā)出控制特定模塊的時(shí)鐘信號或者模塊使能信號,狀態(tài)機(jī) 的循環(huán)控制就可以使得整個(gè)系統(tǒng)協(xié)調(diào)運(yùn)作,同時(shí)減少毛刺信號。那么只要我們在狀態(tài)機(jī)的觸 發(fā)時(shí)間上加以處理,就可以避免競爭冒險(xiǎn),從而抑制毛刺的產(chǎn)生。


3、格雷碼計(jì)數(shù)器


對于一般的二進(jìn)制或十進(jìn)制計(jì)數(shù)器,在計(jì)數(shù)時(shí),將有多位信號同時(shí)跳變。例如一個(gè) 3bit

二進(jìn)制計(jì)數(shù)器,由’111’轉(zhuǎn)換為’000’時(shí),必將產(chǎn)生毛刺。此時(shí),使用格雷碼計(jì)數(shù)器將避免毛


刺的出現(xiàn),因?yàn)楦窭状a計(jì)數(shù)器的輸出每次只有一位跳變。 其他關(guān)于毛刺的詳細(xì)討論,請見補(bǔ)充教程 2:關(guān)于毛刺問題的探討。




1.3同步電路設(shè)計(jì)

同步電路是指所有電路在同一個(gè)公共時(shí)鐘的上升沿或下降沿的觸發(fā)下同步地工作。但在 實(shí)際系統(tǒng)中,往往存在多時(shí)鐘域的情況,這時(shí)同步的概念有所延伸,不再專指整個(gè)設(shè)計(jì)同步 于同一時(shí)鐘沿,而是指設(shè)計(jì)應(yīng)該做到局部同步,在每個(gè)時(shí)鐘域內(nèi)的電路要同步于同一時(shí)鐘沿。


1.3.1同步電路設(shè)計(jì)的優(yōu)點(diǎn):

1.同步設(shè)計(jì)能有效地避免毛刺的影響,使得設(shè)計(jì)更可靠;

2.同步設(shè)計(jì)易于添加異步復(fù)位reset,以使整個(gè)電路有一個(gè)確定的初始狀態(tài);

3.同步設(shè)計(jì)可以減小環(huán)境對芯片的影響,避免器件受溫度,電壓,工藝的影響;

4.同步設(shè)計(jì)可以使靜態(tài)時(shí)序分析變得簡單和可靠;

5.同步設(shè)計(jì)可以很容易地組織流水線,提高芯片的運(yùn)行速度。

1.3.2同步電路的設(shè)計(jì)準(zhǔn)則:
1.盡可能在設(shè)計(jì)中使用同一時(shí)鐘,時(shí)鐘走全局時(shí)鐘網(wǎng)絡(luò)。走全局時(shí)鐘網(wǎng)絡(luò)的時(shí)鐘是 最簡單、最可預(yù)測的時(shí)鐘,它具有很強(qiáng)的驅(qū)動能力,可以驅(qū)動 FPGA 內(nèi)部中的所有觸發(fā)器, 并保證 Clock skew 可以小到忽略的地步。
2.避免使用混合時(shí)鐘沿采樣數(shù)據(jù),即避免在設(shè)計(jì)中同時(shí)使用時(shí)鐘的上升沿和下降沿。
3.盡量少在模塊內(nèi)部使用計(jì)數(shù)器分頻所產(chǎn)生的時(shí)鐘。計(jì)數(shù)器分頻時(shí)鐘需完成的邏輯 功能完全可由 PLL 鎖相環(huán)或時(shí)鐘使能電路替代。計(jì)數(shù)器分頻時(shí)鐘的缺點(diǎn)是使得系統(tǒng)內(nèi)時(shí)鐘 不可控,并產(chǎn)生較大的 Clock skew,還使靜態(tài)時(shí)序分析變得復(fù)雜。
4.避免使用門控時(shí)鐘。因?yàn)榻?jīng)組合邏輯產(chǎn)生的門控時(shí)鐘極可能產(chǎn)生毛刺,使 D 觸發(fā) 器誤動作。
5.當(dāng)整個(gè)電路需要多個(gè)時(shí)鐘來實(shí)現(xiàn),則可以將整個(gè)電路分成若干局部同步電路(盡 量以同一個(gè)時(shí)鐘為一個(gè)模塊),局部同步電路之間接口當(dāng)作異步接口考慮,而且每個(gè)時(shí)鐘信 號的時(shí)鐘偏差(△T)要嚴(yán)格控制。
6.電路的實(shí)際最高工作頻率不應(yīng)大于理論最高工作頻率,留有設(shè)計(jì)余量,保證芯片 可靠工作。
7.電路中所有寄存器、狀態(tài)機(jī)在系統(tǒng)被 reset 復(fù)位時(shí)應(yīng)處在一個(gè)已知的狀態(tài)。 關(guān)于同步電路設(shè)計(jì)中的其他問題請?jiān)斠娧a(bǔ)充教程 3:華為同步電路設(shè)計(jì)規(guī)范。

1.3.3關(guān)于時(shí)鐘設(shè)計(jì)的討論

目前的工程設(shè)計(jì)中一般使用同步時(shí)序電路來完成整個(gè)系統(tǒng)的設(shè)計(jì),由上一節(jié)可見,時(shí)鐘 在同步電路設(shè)計(jì)中起著至關(guān)重要的作用。那么,我們在設(shè)計(jì)時(shí)首先要完成的是對時(shí)鐘的設(shè)計(jì)。 如今在設(shè)計(jì)中常見的時(shí)鐘類型包括: 全局時(shí)鐘、內(nèi)部邏輯時(shí)鐘和門控時(shí)鐘。

1. 全局時(shí)鐘

全局時(shí)鐘即同步時(shí)鐘,它通過 FPGA 芯片內(nèi)的全局時(shí)鐘布線網(wǎng)絡(luò)或區(qū)域時(shí)鐘網(wǎng)絡(luò)來驅(qū) 動,全局時(shí)鐘具有高扇出、高精度、低 Jitter 和低Skew 的特點(diǎn),它到芯片中的每一個(gè)寄存 器的延遲最短,且該延遲可被認(rèn)為是固定值。所以我們推薦在所有的設(shè)計(jì)中的時(shí)鐘都使用全 局時(shí)鐘。全局時(shí)鐘的設(shè)計(jì)有以下幾種方法:

(1). 由 PLL 鎖相環(huán)來產(chǎn)生全局時(shí)鐘。

(2). 將 FPGA 芯片內(nèi)部邏輯產(chǎn)生的時(shí)鐘分配至全局時(shí)鐘布線網(wǎng)絡(luò)。 (3). 將外部時(shí)鐘通過專用的全局時(shí)鐘輸入引腳引入 FPGA。 在我們的設(shè)計(jì)中,一般推薦電路中的所有的時(shí)鐘都由 PLL 鎖相環(huán)產(chǎn)生。一方面,PLL

鎖相環(huán)可實(shí)現(xiàn)倍頻和移相的操作,使我們很方便地獲得所需頻率和相位的時(shí)鐘;另一方面,

PLL 鎖相環(huán)默認(rèn)將其驅(qū)動的時(shí)鐘分配至全局時(shí)鐘網(wǎng)絡(luò)或區(qū)域時(shí)鐘網(wǎng)絡(luò),Jitter 和 Skew 都很小。 下圖取自我們項(xiàng)目中的一個(gè) PLL 鎖相環(huán)設(shè)計(jì),該P(yáng)LL 用于驅(qū)動 DDR 的接口模塊。因?yàn)?/font>


功能所需,DDR 接口需要三個(gè) 133MHz 的時(shí)鐘,相位分別是‘-90 o ’、‘0 o ’、‘-180 o ’,圖中所示 即為該時(shí)鐘的產(chǎn)生模塊。我們使用 QuartusⅡ的Megawizard 生成 PLL 鎖相環(huán)的 IP core。其 中‘inclk_66’為 PLL 鎖相環(huán)的輸入時(shí)鐘,由外部的 66MHz 晶振提供,經(jīng)過 PLL 倍頻和移相

后得到所需的三個(gè)全局時(shí)鐘。

44.019.jpg


2. 內(nèi)部邏輯時(shí)鐘 內(nèi)部邏輯時(shí)鐘即指由芯片內(nèi)部的組合邏輯或計(jì)數(shù)器分頻產(chǎn)生的時(shí)鐘。 對于組合邏輯時(shí)鐘,特別是由多級組合邏輯產(chǎn)生的時(shí)鐘,是要被嚴(yán)格禁止使用的,因

為一方面組合邏輯極容易產(chǎn)生毛刺,特別是對多級組合邏輯;另一方面組合邏輯電路的 Jitter 和 Skew 比較大,這將惡化時(shí)鐘的質(zhì)量。所以,一般組合邏輯產(chǎn)生的內(nèi)部時(shí)鐘僅僅適用于時(shí) 鐘頻率較低、時(shí)鐘精度要求不高的情況。

對于計(jì)數(shù)器分頻產(chǎn)生的時(shí)鐘,也應(yīng)該盡量少地使用,因?yàn)檫@種時(shí)鐘會帶來比較大的延 遲,降低設(shè)計(jì)的可靠性,也使得靜態(tài)時(shí)序分析變得復(fù)雜。計(jì)數(shù)器分頻時(shí)鐘需完成的邏輯功能 完全可由 PLL 鎖相環(huán)或時(shí)鐘使能電路替代。

還有一種由觸發(fā)器產(chǎn)生的時(shí)鐘—行波時(shí)鐘,即一個(gè)觸發(fā)器的輸出用作另一個(gè)觸發(fā)器的 時(shí)鐘輸入。文中 1.1.2 節(jié)描述的時(shí)鐘分頻電路就是一種行波時(shí)鐘。因?yàn)楦饔|發(fā)器的時(shí)鐘之間 產(chǎn)生較大的時(shí)間偏移,很容易就會違反建立時(shí)間、保持時(shí)間的要求,導(dǎo)致亞穩(wěn)態(tài)的發(fā)生。所 以,這種行波時(shí)鐘要被嚴(yán)格禁止使用。

3. 門控時(shí)鐘 一般情況下,應(yīng)該避免使用門控時(shí)鐘。因?yàn)榻?jīng)組合邏輯產(chǎn)生的門控時(shí)鐘極可能產(chǎn)生毛

刺,對系統(tǒng)造成很大危害。但對于某些功耗很大的系統(tǒng)而言,需要使用門控時(shí)鐘來降低功耗。


我們推薦使用右圖中描述的門控時(shí)鐘的設(shè)計(jì),該設(shè)計(jì)一般不會產(chǎn)生毛刺和亞穩(wěn)態(tài)的問題。 因?yàn)橛|發(fā)器避免了毛刺的產(chǎn)生,而亞穩(wěn)態(tài)只可能 出現(xiàn)在源時(shí)鐘的下降沿,但是隨后它與源時(shí)鐘低 相位相與,最后不會產(chǎn)生影響。
0.png

門控時(shí)鐘最好只在頂層模塊中出現(xiàn),并將其分離到一個(gè)在頂層的獨(dú)立模塊中。這同時(shí)保

證了底層的每個(gè)模塊有單一的時(shí)鐘,且在本模塊中的時(shí)鐘不進(jìn)行門控。

在補(bǔ)充教程 4 和補(bǔ)充教程 5 中,我們對時(shí)鐘和時(shí)序的設(shè)計(jì)進(jìn)行了更詳細(xì)的討論。

1.3.4亞穩(wěn)態(tài)

44.028.jpg

在同步電路或異步電路中,如果觸發(fā)器的 setup 時(shí)間或 hold 時(shí)間不能得到滿足,就可 能產(chǎn)生亞穩(wěn)態(tài),此時(shí)觸發(fā)器輸出端 Q 在有效時(shí)鐘沿之后比較長的一段時(shí)間處于不確定的狀 態(tài),在這段時(shí)間里 Q 端將會產(chǎn)生毛刺并不斷振蕩、最終固定在某一電壓值上,此電壓值并 不一定等于原來數(shù)據(jù)輸入端 D

的值。這段時(shí)間稱為決斷時(shí)間

(resolution time)。經(jīng)過決斷 時(shí)間之后,Q 端將穩(wěn)定到 0 或

1 上,但是究竟是 0 還是 1, 這是隨機(jī)的,與輸入沒有必然 的關(guān)系。


亞穩(wěn)態(tài)的危害主要體 現(xiàn)在破壞系統(tǒng)得穩(wěn)定性上,由于輸出在穩(wěn)定下來之前可能是毛刺、振蕩、固定的某一電壓值, 因此亞穩(wěn)態(tài)除了導(dǎo)致邏輯誤判之外,嚴(yán)重情況下輸出 0~1 之間的中間電壓值還會使下一級 產(chǎn)生亞穩(wěn)態(tài)(即導(dǎo)致亞穩(wěn)態(tài)的傳播)。 邏輯誤判將導(dǎo)致功能性錯(cuò)誤,而亞穩(wěn)態(tài)的傳播則擴(kuò) 大了故障面,嚴(yán)重時(shí)將導(dǎo)致系統(tǒng)崩潰。

在異步時(shí)序電路中更容易發(fā)生亞穩(wěn)態(tài),因?yàn)楫惒诫娐芬话憔哂卸鄠€(gè)時(shí)鐘域,數(shù)據(jù)在兩個(gè) 時(shí)鐘域間傳遞時(shí),非常容易導(dǎo)致 setup 時(shí)間或 hold 時(shí)間不滿足而發(fā)生亞穩(wěn)態(tài)。在同步時(shí)序 電路中,當(dāng)兩個(gè)觸發(fā)器間的組合邏輯延遲過大時(shí),會導(dǎo)致 setup 時(shí)間不滿足而發(fā)生亞穩(wěn)態(tài)。


1.3.5對跨時(shí)鐘域數(shù)據(jù)的處理

對跨時(shí)鐘域數(shù)據(jù)的處理的核心就是要保證下級時(shí)鐘對上級數(shù)據(jù)采樣的 setup 時(shí)間或 hold 時(shí)間滿足要求,即盡量避免亞穩(wěn)態(tài)的發(fā)生和傳播。但是,我們知道,只要系統(tǒng)中有異 步元件,亞穩(wěn)態(tài)就是無法避免的,因此設(shè)計(jì)的電路首先要減少亞穩(wěn)態(tài)導(dǎo)致錯(cuò)誤的發(fā)生,其次 要使系統(tǒng)對產(chǎn)生的錯(cuò)誤不敏感。我們推薦使用以下方法來解決異步時(shí)鐘域數(shù)據(jù)同步問題。

1. 用觸發(fā)器打兩拍 如下圖,左邊為異步輸入端,經(jīng)過兩級觸發(fā)器同步,在右邊的輸出將是同步的,而且

該輸出基本不存在亞穩(wěn)態(tài)。其原理是即使第一個(gè)觸發(fā)器的輸出端存在亞穩(wěn)態(tài),經(jīng)過一個(gè) CLK 周期后,第二個(gè)觸發(fā)器 D 端的電平仍未穩(wěn)定的概率非常小,因此第二個(gè)觸發(fā)器 Q 端基本不 會產(chǎn)生亞穩(wěn)態(tài)。然而,亞穩(wěn)態(tài)是無法被根除的,一旦亞穩(wěn)態(tài)發(fā)生,后果的嚴(yán)重程度依賴于你


設(shè)計(jì)系統(tǒng)對產(chǎn)生的錯(cuò)誤是否敏感。

44.029.jpg


2. 異步 FIFO 或 DPRAM

因?yàn)楫惒?FIFO 或 DPRAM 使用格雷碼計(jì)數(shù)器設(shè)計(jì)讀寫地址的指針,所以它可以很 好地避免亞穩(wěn)態(tài)的發(fā)生。使用方法如下,將上級芯片提供的數(shù)據(jù)隨路時(shí)鐘作為寫信號,將數(shù) 據(jù)寫入異步 FIFO 或 DPRAM,然后使用本級的采樣時(shí)鐘將數(shù)據(jù)讀出即可。唯一需要注意的 是,當(dāng)兩級時(shí)鐘頻率不同時(shí),需要設(shè)計(jì)好緩沖區(qū),并通過監(jiān)控 full、half、empty、useword
信號,保證數(shù)據(jù)不會溢出,也不會被讀空。

44.030.jpg

3. 調(diào)整時(shí)鐘相位

這種方法的設(shè)計(jì)難度較大,而且適用面有限。首先需對跨時(shí)鐘域數(shù)據(jù)的路徑進(jìn)行詳

細(xì)的靜態(tài)時(shí)序分析,然后將違反 setup 時(shí)間和 hold 時(shí)間的情況一一列出,在不影響其它設(shè) 計(jì)性能的前提下,綜合考慮調(diào)整兩級時(shí)鐘的相位關(guān)系,最終使其 setup 時(shí)間和 hold 時(shí)間滿 足要求。



2.FPGA簡介

2.1什么是 FPGA

FPGA 是 Field Programmable Gate Array 的縮寫,即現(xiàn)場可編程門陣列, 是一種可編程的 IC
44.031.jpg 芯片(集成電路芯片),以下是目前項(xiàng)目中使用的幾種 FPGA 芯片:

44.032.jpg 44.033.jpg

2.2FPGA的結(jié)構(gòu)與組成


通常 FPGA 由布線資源分隔的可編程邏輯單元構(gòu)成陣列,又由可編程 I/O 單元圍繞陣

列構(gòu)成整個(gè)芯片,排成陣列的邏輯單元由布線通道中的可編程內(nèi)連線連接起來實(shí)現(xiàn)一定的邏

輯功能。

目前我們使用的 FPGA 的可編程邏輯單元一般由查找表和觸發(fā)器構(gòu)成。下圖所示即

為 Cyclone 系列 FPGA 芯片的邏輯單元(LE)組成。


44.034.jpg


查找表(Look-Up-Table)簡稱為 LUT,其本質(zhì)上就是一個(gè)靜態(tài)存儲器 SRAM。 對于下圖左邊所示的電路,查找表是這樣實(shí)現(xiàn)的:首先 FPGA 開發(fā)軟件會自動計(jì)算邏輯電路的所有可能的結(jié)果,然后把結(jié)果事先寫入查找表中,F(xiàn)PGA 工作時(shí),輸入信號所進(jìn)行的邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對應(yīng)的內(nèi)容后輸出,即實(shí)現(xiàn)了該邏輯功能。
0.png

如果所設(shè)計(jì)的是時(shí)序電路,需要觸發(fā)器,則 FPGA 開發(fā)軟件會自動將觸發(fā)器配置在查 找表的后面,實(shí)現(xiàn)組合邏輯時(shí)就將觸發(fā)器旁路掉。

當(dāng)然,對于復(fù)雜的設(shè)計(jì),一個(gè) LUT 是無法完成的,F(xiàn)PGA 可以通過進(jìn)位邏輯將多個(gè) LUT

相連起來,實(shí)現(xiàn) n 輸入的查找表,實(shí)現(xiàn)設(shè)計(jì)要求。

44.037.jpg
通俗地說,F(xiàn)PGA 就是由查找表、觸發(fā)器和布線資源組成。下圖 是一個(gè) Cyclone 系列 FPGA 芯片的 內(nèi)部結(jié)構(gòu),其中一對查找表和觸發(fā) 器構(gòu)成邏輯單元 LE,若干個(gè) LE 組 成邏輯陣列塊 LAB,最后再配上
各種布線資源,就是一個(gè) FPGA 芯

片了。
詳細(xì)的介紹請見:補(bǔ)充教程 6 FPGA PLD 結(jié)構(gòu)與原理。
2.3FPGAASIC設(shè)計(jì)的區(qū)別


ASIC 是 Application Specific Integrated Circuit 的縮寫,即專用集成電路。ASIC 和 FPGA

屬于 SOC(System on a chip 片上系統(tǒng))的兩個(gè)發(fā)展方向,兩者唯一的區(qū)別在于,ASIC 的邏

輯電路是固化在其芯片中的,我們可以將 ASIC 理解為不可編程的 FPGA。


由于 FPGA 設(shè)計(jì)是基于固有的硬件結(jié)構(gòu)(如邏輯單元、塊 RAM、PLL/DLL、時(shí)鐘資源
等)的;而 ASIC 設(shè)計(jì)結(jié)構(gòu)靈活,目標(biāo)多樣,所以 ASIC 設(shè)計(jì)的代碼風(fēng)格和 FPGA 設(shè)計(jì)的代 碼風(fēng)格有明顯差異,特別是在功耗、速度、時(shí)序等要求上。例如 ASIC 設(shè)計(jì)中根據(jù)要求會有

意識地采用某些組合邏輯、門控時(shí)鐘等,以降低功耗或提高速度。


3.FPGA開發(fā)流程



HDL(Hardware Design Language)和原理圖是兩種最常用的數(shù)字硬件電路描述方法,HDL 設(shè)計(jì)法具有更好的可移植性、通用性和模塊劃分與重用性的特點(diǎn),在目前的工程設(shè)計(jì)
0.png 0.png

余下內(nèi)容預(yù)覽:
0.png 0.png

完整的pdf格式文檔51黑下載地址(共37頁):
FPGA入門教程.pdf (672.08 KB, 下載次數(shù): 478)



評分

參與人數(shù) 2黑幣 +55 收起 理由
327643785z + 5 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:379542 發(fā)表于 2018-7-26 17:19 | 顯示全部樓層
看看資料,多謝分享
回復(fù)

使用道具 舉報(bào)

ID:197415 發(fā)表于 2018-8-2 13:40 | 顯示全部樓層
多謝分享
回復(fù)

使用道具 舉報(bào)

ID:30894 發(fā)表于 2018-8-13 15:45 | 顯示全部樓層

多謝分享
回復(fù)

使用道具 舉報(bào)

ID:380389 發(fā)表于 2018-8-13 19:18 來自觸屏版 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:388207 發(fā)表于 2018-8-20 16:31 | 顯示全部樓層
沒有積分下載怎么辦
回復(fù)

使用道具 舉報(bào)

ID:392630 發(fā)表于 2018-9-2 16:41 | 顯示全部樓層
小白,學(xué)習(xí)一下,下個(gè)資料看看
回復(fù)

使用道具 舉報(bào)

ID:305111 發(fā)表于 2018-10-8 09:32 | 顯示全部樓層
真小白,謝謝分享,打算先大致了解下,然后從語言學(xué)起,,,,,
回復(fù)

使用道具 舉報(bào)

ID:186249 發(fā)表于 2018-10-13 06:28 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:409058 發(fā)表于 2018-10-13 15:16 | 顯示全部樓層
最好的入門
回復(fù)

使用道具 舉報(bào)

ID:30894 發(fā)表于 2018-10-16 09:03 | 顯示全部樓層
最好的入門
回復(fù)

使用道具 舉報(bào)

ID:412723 發(fā)表于 2018-10-20 14:51 | 顯示全部樓層
很不錯(cuò)!感謝分享!
回復(fù)

使用道具 舉報(bào)

ID:433186 發(fā)表于 2018-11-26 09:02 | 顯示全部樓層
謝謝分享.....................
回復(fù)

使用道具 舉報(bào)

ID:437700 發(fā)表于 2018-12-2 15:29 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:456139 發(fā)表于 2018-12-27 09:53 | 顯示全部樓層
感謝大神分享~
回復(fù)

使用道具 舉報(bào)

ID:464806 發(fā)表于 2019-1-8 18:45 | 顯示全部樓層
謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:484186 發(fā)表于 2019-3-4 13:18 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:493865 發(fā)表于 2019-3-19 13:03 | 顯示全部樓層
很好,厲害了
回復(fù)

使用道具 舉報(bào)

ID:475757 發(fā)表于 2019-3-22 10:44 | 顯示全部樓層
學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

ID:502260 發(fā)表于 2019-4-1 11:35 | 顯示全部樓層
小白,剛開始學(xué),怎么下載??還是百度網(wǎng)盤吧
回復(fù)

使用道具 舉報(bào)

ID:510276 發(fā)表于 2019-4-12 16:04 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:174941 發(fā)表于 2019-4-14 23:27 | 顯示全部樓層
謝謝樓主@!
回復(fù)

使用道具 舉報(bào)

ID:528491 發(fā)表于 2019-5-6 14:14 | 顯示全部樓層
不錯(cuò),下了看看
回復(fù)

使用道具 舉報(bào)

ID:528491 發(fā)表于 2019-5-6 14:16 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:568074 發(fā)表于 2019-6-20 16:44 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:228360 發(fā)表于 2019-6-21 09:02 | 顯示全部樓層
謝謝分享,支持。
回復(fù)

使用道具 舉報(bào)

ID:155719 發(fā)表于 2019-7-8 11:05 | 顯示全部樓層
51黑的教程都是精品
回復(fù)

使用道具 舉報(bào)

ID:580264 發(fā)表于 2019-7-10 19:50 | 顯示全部樓層
謝謝分享,支持。
回復(fù)

使用道具 舉報(bào)

ID:600307 發(fā)表于 2019-8-15 09:04 | 顯示全部樓層
感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:541246 發(fā)表于 2019-8-23 11:11 | 顯示全部樓層
多看資料多學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:658564 發(fā)表于 2019-12-7 23:28 | 顯示全部樓層
多謝分享
回復(fù)

使用道具 舉報(bào)

ID:732396 發(fā)表于 2020-4-18 22:34 | 顯示全部樓層
看看資料,多謝分享
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表