- FPGA進(jìn)階開發(fā)與實(shí)踐
- 田亮 張瑞 蔡偉等編著
- 2304字
- 2021-02-22 16:30:19
1.2 可編程邏輯常用設(shè)計(jì)思想和技巧
1.2.1 乒乓操作
乒乓操作實(shí)際上是利用兩個(gè)數(shù)據(jù)緩存模塊來(lái)進(jìn)行流水操作,如圖1-2所示。兩個(gè)數(shù)據(jù)緩存模塊輪流緩存數(shù)據(jù),并輪流輸出數(shù)據(jù)給后端處理,可以將它們看成一個(gè)連續(xù)處理數(shù)據(jù)的黑盒。實(shí)現(xiàn)乒乓操作的前提是輸入數(shù)據(jù)的吞吐率小于輸出數(shù)據(jù)的吞吐率,否則會(huì)造成數(shù)據(jù)覆蓋。如果輸入數(shù)據(jù)速率大于輸出數(shù)據(jù)速率,但是輸入數(shù)據(jù)有停頓,造成輸入數(shù)據(jù)的吞吐率小于輸出數(shù)據(jù)的吞吐率,就可以實(shí)現(xiàn)高速數(shù)據(jù)輸入、低速數(shù)據(jù)輸出的效果。另外,串行高速輸入和并行低速輸出的乒乓操作是在輸入數(shù)據(jù)吞吐率小于或等于輸出數(shù)據(jù)吞吐率的前提下進(jìn)行的。

圖1-2 乒乓操作
1.2.2 串并轉(zhuǎn)換
串并轉(zhuǎn)換就是把串行輸入的數(shù)據(jù)并行輸出,它有效地利用了FPGA可編程邏輯高并行性的特點(diǎn)。
1.2.3 流水操作
流水操作的實(shí)質(zhì)是時(shí)序電路處理,如圖1-3所示。只有把數(shù)據(jù)處理的各階段精確分配到時(shí)序的每一個(gè)時(shí)鐘周期,才能保證全流水處理輸入數(shù)據(jù)。這種設(shè)計(jì)方式通常會(huì)和乒乓操作及串并轉(zhuǎn)換結(jié)合起來(lái),以保證各級(jí)流水處理的輸入數(shù)據(jù)被準(zhǔn)備好,并及時(shí)輸出數(shù)據(jù)給下一級(jí)流水處理。

圖1-3 流水操作
1.2.4 異步時(shí)鐘域的數(shù)據(jù)同步
設(shè)計(jì)中經(jīng)常會(huì)碰到不同時(shí)鐘域之間的數(shù)據(jù)傳輸,處理好異步時(shí)鐘域的數(shù)據(jù)同步問(wèn)題非常重要。
1.兩種典型異步時(shí)鐘域
(1)兩個(gè)時(shí)鐘域的時(shí)鐘同頻不同相。
(2)兩個(gè)時(shí)鐘域的時(shí)鐘既不同頻也不同相。
2.異步時(shí)鐘域數(shù)據(jù)傳輸方式
對(duì)于異步時(shí)鐘域的數(shù)據(jù)傳輸(圖1-4),核心思想是建立一個(gè)緩存空間,使輸入數(shù)據(jù)的吞吐率小于或等于輸出數(shù)據(jù)的吞吐率。這個(gè)緩存空間要支持兩種時(shí)鐘的讀寫。FPGA中的異步FIFO緩存是基于讀寫信號(hào)進(jìn)行數(shù)據(jù)讀寫的,可以把輸入數(shù)據(jù)用寫信號(hào)異步寫入FIFO緩存,輸出一個(gè)半滿或者滿信號(hào)給讀出端,讀出端用讀信號(hào)讀出數(shù)據(jù)。

圖1-4 異步時(shí)鐘域的數(shù)據(jù)傳輸
另外,如果采集時(shí)鐘頻率大于輸入數(shù)據(jù)時(shí)鐘頻率,即倍頻采樣,則可能出現(xiàn)亞穩(wěn)態(tài)問(wèn)題。
這個(gè)問(wèn)題不能百分之百地避免,因?yàn)槿绻麆偤貌蓸拥疆惒叫盘?hào)的跳變狀態(tài),后級(jí)寄存器輸出的就是一個(gè)不確定的亞穩(wěn)態(tài)信號(hào)。這時(shí)的解決方法是采用多級(jí)寄存器連續(xù)采樣,這樣可以保證最后的輸出不是亞穩(wěn)態(tài)信號(hào),但不能完全保證后級(jí)輸出是前級(jí)輸入的正確值。要實(shí)現(xiàn)完全無(wú)錯(cuò)誤傳輸,還要增加系統(tǒng)級(jí)糾錯(cuò)機(jī)制,如圖1-5所示。

圖1-5 加入糾錯(cuò)機(jī)制的異步時(shí)鐘域的數(shù)據(jù)傳輸
1.2.5 英特爾推薦的Coding Style
采用英特爾推薦的Coding Style的好處在于代碼的可移植性和可綜合性。因?yàn)槟壳霸O(shè)計(jì)和器件都是超大規(guī)模的,所以依靠自動(dòng)仿真、手動(dòng)仿真或者設(shè)計(jì)工具的優(yōu)化來(lái)使整個(gè)設(shè)計(jì)滿足時(shí)序要求是很難的。在這種情況下,采用好的Coding Style能獲得事半功倍的效果。
1.Coding Style的含義
Coding Style是指編程風(fēng)格,好的Coding Style不依賴于具體的EDA工具和器件。也就是說(shuō),用任何一種EDA工具或者將代碼移植到任何廠家的器件中,實(shí)現(xiàn)的功能都差不多。
2.模塊層次化編程
模塊層次化編程如圖1-6所示。首先設(shè)計(jì)一個(gè)頂層模塊,頂層模塊不做具體的邏輯運(yùn)算,只實(shí)現(xiàn)外部I/O和內(nèi)部各模塊之間的連接;頂層模塊下面是第一層模塊,它們可以相互通信;第一層模塊下面的子模塊只能與本層子模塊和對(duì)應(yīng)的第一層模塊通信,不能與其他模塊下面的子模塊通信。這種結(jié)構(gòu)便于以后的維護(hù)及測(cè)試階段信號(hào)的搜索。
3.組合邏輯編程
組合邏輯設(shè)計(jì)最好采用assign直接賦值語(yǔ)句,系統(tǒng)會(huì)自動(dòng)生成組合邏輯電路(圖1-7)。如果采用always@()加敏感信號(hào)高低電平有效的賦值語(yǔ)句,當(dāng)語(yǔ)句中的條件判斷不完全時(shí),非常容易生成鎖存器,而在組合邏輯電路中生成鎖存器,不利于靜態(tài)時(shí)序分析。

圖1-6 模塊層次化編程

圖1-7 組合邏輯電路
另外,要避免用組合邏輯鏈來(lái)產(chǎn)生延時(shí)信號(hào)。圖1-8中顯示了兩種不同的邏輯門。因?yàn)槊靠頕PGA器件的邏輯門的傳輸時(shí)間不固定,所以產(chǎn)生的信號(hào)寬度不一樣,這不利于程序移植。

圖1-8 兩種不同的邏輯門
4.時(shí)鐘設(shè)計(jì)編程
時(shí)鐘設(shè)計(jì)的基本原則是外部主時(shí)鐘通過(guò)時(shí)鐘專用引腳連接到內(nèi)部PLL,再由PLL產(chǎn)生各種時(shí)鐘去驅(qū)動(dòng)全局時(shí)鐘網(wǎng)絡(luò),如圖1-9所示。如果PLL資源有限,需要的時(shí)鐘又太多,可以考慮用計(jì)數(shù)器生成時(shí)鐘。但是,盡量不要用組合邏輯的延時(shí)來(lái)產(chǎn)生時(shí)鐘,因?yàn)檫@樣會(huì)產(chǎn)生毛刺。

圖1-9 時(shí)鐘設(shè)計(jì)
另外,在FPGA內(nèi)部不要使用門控時(shí)鐘和時(shí)鐘切換等操作,這樣也會(huì)產(chǎn)生毛刺。如果有嚴(yán)格的功耗要求,建議選擇低功耗的器件。
5.全局復(fù)位編程
全局同步或異步復(fù)位信號(hào)一般由全局時(shí)鐘網(wǎng)絡(luò)驅(qū)動(dòng)。
6.狀態(tài)機(jī)編程
狀態(tài)機(jī)可以將復(fù)雜的時(shí)序控制和狀態(tài)跳轉(zhuǎn)簡(jiǎn)單圖形化。狀態(tài)機(jī)編程應(yīng)注意以下幾點(diǎn)。
1)狀態(tài)機(jī)的編碼方式
狀態(tài)機(jī)的編碼方式有binary、gray-code和one-hot,編碼方式直接決定譯碼的復(fù)雜度和速度。binary和gray-code使用的碼位少,占用的寄存器資源少,但是譯碼的復(fù)雜度高;one-hot占用的寄存器資源多,但是譯碼的復(fù)雜度低,速度快。一般來(lái)說(shuō),小型狀態(tài)機(jī)使用binary和gray-code編碼,大型狀態(tài)機(jī)使用one-hot編碼。
2)編程方式
狀態(tài)機(jī)編程有三種方式:第一種是把所有的狀態(tài)跳轉(zhuǎn),以及跳轉(zhuǎn)條件判斷和狀態(tài)機(jī)輸入/輸出寫在一個(gè)always塊中;第二種是將狀態(tài)跳轉(zhuǎn)寫在一個(gè)always塊中,將跳轉(zhuǎn)條件判斷和狀態(tài)機(jī)輸入/輸出寫在另一個(gè)always塊中;第三種是把狀態(tài)跳轉(zhuǎn)、跳轉(zhuǎn)條件判斷、狀態(tài)機(jī)輸入/輸出分別寫在一個(gè)always塊中,示例代碼如下。


為了便于以后維護(hù),可采用第二種或者第三種編程方式。如果要避免產(chǎn)生鎖存器,或者需要同時(shí)確定當(dāng)前狀態(tài)、當(dāng)前狀態(tài)前后狀態(tài)、狀態(tài)跳轉(zhuǎn)判斷條件及其對(duì)輸入/輸出的影響,則建議采用第一種編程方式,這樣更容易掌握各種狀態(tài)的具體情況,而且目前的開發(fā)軟件能自動(dòng)識(shí)別狀態(tài)機(jī)的代碼,綜合出正確的邏輯。
3)狀態(tài)機(jī)的初始狀態(tài)和默認(rèn)跳轉(zhuǎn)狀態(tài)
每個(gè)狀態(tài)機(jī)要有一個(gè)初始狀態(tài),通常采用異步復(fù)位信號(hào);每個(gè)狀態(tài)機(jī)還要有一個(gè)默認(rèn)跳轉(zhuǎn)狀態(tài)。
4)狀態(tài)機(jī)的輸出默認(rèn)狀態(tài)
狀態(tài)機(jī)必須有一個(gè)輸出默認(rèn)狀態(tài),以防生成鎖存器。
7.三態(tài)信號(hào)編程
三態(tài)信號(hào)一般用于將頂層模塊連接到PAD上面的I/O,這種I/O通常通過(guò)軟件用可編程I/O模塊來(lái)實(shí)現(xiàn)。因此,建議在頂層模塊中實(shí)現(xiàn)三態(tài)信號(hào)。三態(tài)信號(hào)編程示例如下。

- 筆記本電腦使用、維護(hù)與故障排除實(shí)戰(zhàn)
- 觸摸屏實(shí)用技術(shù)與工程應(yīng)用
- Effective STL中文版:50條有效使用STL的經(jīng)驗(yàn)(雙色)
- 深入淺出SSD:固態(tài)存儲(chǔ)核心技術(shù)、原理與實(shí)戰(zhàn)
- Intel FPGA/CPLD設(shè)計(jì)(高級(jí)篇)
- micro:bit魔法修煉之Mpython初體驗(yàn)
- Mastering Adobe Photoshop Elements
- 筆記本電腦應(yīng)用技巧
- Creating Flat Design Websites
- 基于PROTEUS的電路設(shè)計(jì)、仿真與制板
- 數(shù)字媒體專業(yè)英語(yǔ)(第2版)
- 觸摸屏應(yīng)用技術(shù)從入門到精通
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)案例教程(Windows 7+Office 2010)
- 電腦主板維修技術(shù)
- Nagios系統(tǒng)監(jiān)控實(shí)踐(原書第2版)