1. 面積與速度的平衡與互換
這里的面積指一個(gè)設計消耗FPGA/CPLD的邏輯資源的數量,對于FPGA可以用消耗的FF(觸發(fā)器)和LUT(查找表)來(lái)衡量,更一般的衡量方式可以用設計所占的等價(jià)邏輯門(mén)數。 速度指設計在芯片上穩定運行所能達到的最高頻率,這個(gè)頻率由設計的時(shí)序狀況來(lái)決定,以及設計滿(mǎn)足的時(shí)鐘要求:PAD to PAD time 、Clock Setup Time、Clock Hold Time、Clock-to-Output Delay等眾多時(shí)序特征量密切相關(guān)。 面積和速度這兩個(gè)指標貫穿FPGA/CPLD設計的時(shí)鐘,是設計質(zhì)量的評價(jià)的終極標準 ——面積和速度是一對對立統一的矛盾體。 要求一個(gè)同時(shí)具備設計面積最小、運行頻率最高是不現實(shí)的。更科學(xué)的設計目標應該是在滿(mǎn)足設計時(shí)序要求(包括對設計頻率的要求)的前提下,占用最小的芯片面積?;蛘咴谒幎ǖ拿娣e下,是設計的時(shí)序余量更大、頻率跑的更高。這兩種目標充分體現了面積和速度的平衡的思想。 作為矛盾的兩個(gè)組成部分,面積和速度的地位是不一樣的。相比之下,滿(mǎn)足時(shí)序、工作頻率的要求更重要一些,當兩者沖突時(shí),采用速度優(yōu)先的準則。 從理論上講,如果一個(gè)設計時(shí)序余量較大,所能跑的速度遠遠高于設計要求,那么就通過(guò)功能模塊的復用來(lái)減少整個(gè)設計消耗的芯片面積,這就是用速度的優(yōu)勢換取面積的節約。反之,如果一個(gè)設計的時(shí)序要求很高,普通方法達不到設計頻率,那么一般可以通過(guò)將數據流串并轉換,并行復制多個(gè)操作模塊,對整個(gè)設計采取乒乓操作和串并轉換的思想運行。
2.硬件原則
硬件原則主要針對HDL代碼編寫(xiě)而言:Verilog是采用了C語(yǔ)言形式的硬件的抽象,它的本質(zhì)作用在于描述硬件,它的最終實(shí)現結果是芯片內部的實(shí)際電路。所以評判一段HDL代碼的優(yōu)劣的最終標準是:其描述并實(shí)現的硬件電路的性能,包括面積和速度兩個(gè)方面。 評價(jià)一個(gè)設計的代碼水平較高,僅僅是說(shuō)這個(gè)設計是由硬件想HDL代碼這種表現形式的轉換更加流暢、合理。而一個(gè)設計最終性能,在更大程度上取決于設計工程師所構想的硬件實(shí)現方案的效率以及合理性。(HDL代碼僅僅是硬件設計的表達形式之一) 初學(xué)者片面追求代碼的整潔、簡(jiǎn)短,是錯誤的,是與HDL的標準背道而馳的。正確的編碼方法,首先要做到對所需實(shí)現的硬件電路胸有成竹,對該部分的硬件的結構和連接十分清晰,然后再用適當的HDL語(yǔ)句表達出來(lái)即可。 另外,Verilog作為一種HDL語(yǔ)言,是分層次的。系統級--算法級--寄存器傳輸級--邏輯級--門(mén)級--開(kāi)關(guān)級。構建優(yōu)先級樹(shù)會(huì )消耗大量的組合邏輯,所以如果能夠使用case的地方,盡量使用case代替if.....else......
3. 系統原則
系統原則包含兩個(gè)層次的含義:更高層面上看,是一個(gè)硬件系統,一塊單板如何進(jìn)行模塊花費和任務(wù)分配,什么樣的算法和功能適合放在FPGA里面實(shí)現,什么樣的算法和功能適合放在DSP/CPU里面實(shí)現,以及FPGA的規模估算數據接口設計等。具體到FPGA設計就要對設計的全局有個(gè)宏觀(guān)上的合理安排,比如時(shí)鐘域、模塊復用、約束、面積、速度等問(wèn)題,在系統上模塊的優(yōu)化最為重要。 一般來(lái)說(shuō)實(shí)時(shí)性要求高,頻率快的功能模塊適合FPGA實(shí)現。而FPGA和CPLD相比,更適合實(shí)現規模較大、頻率較高、寄存器較多的設計。使用FPGA/CPLD設計時(shí),應該對芯片內部的各種底層硬件資源,和可用的設計資源有一個(gè)較深刻的認識。 比如FPGA一般觸發(fā)器資源豐富,CPLD的組合邏輯資源更加豐富。FPGA/CPLD一般是由底層可編程硬件單元、BRAM、布線(xiàn)資源、可配置IO單元、時(shí)鐘資源等構成。 底層可編程硬件單元一般由觸發(fā)器和查找表組成。Xilinx的底層可編程硬件資源較SLICE,由兩個(gè)FF和2個(gè)LUT構成。Altera的底層硬件資源叫LE,由1個(gè)FF和1個(gè)LUT構成。使用片內RAN可以實(shí)現單口RAM、雙口RAM、同步/異步FIFO、ROM、CAM等常用單元模塊。
一般的FPGA系統規劃的簡(jiǎn)化流程
4. 同步設計原則
異步電路的邏輯核心是用組合邏輯電路實(shí)現,比如異步的FIFO/RAM讀寫(xiě)信號,地址譯碼等電路。電路的主要信號、輸出信號等并不依賴(lài)于任何一個(gè)時(shí)鐘性信號,不是由時(shí)鐘信號驅動(dòng)FF產(chǎn)生的。異步時(shí)序電路的最大缺點(diǎn)是容易產(chǎn)生毛刺,在布局布線(xiàn)后仿真和用邏輯分析儀觀(guān)測實(shí)際信號時(shí),這種毛刺尤其明顯。 同步時(shí)序電路的核心邏輯用各種各樣的觸發(fā)器實(shí)現,電路的主要信號、輸出信號都是由某個(gè)時(shí)鐘沿驅動(dòng)觸發(fā)器產(chǎn)生出來(lái)的。同步時(shí)序電路可以很好的避免毛刺,布局布線(xiàn)后仿真,和用邏輯分析儀采樣實(shí)際工作信號都沒(méi)有毛刺。
是否時(shí)序電路一定比異步電路使用更多的資源呢?從單純的ASCI設計來(lái)看,大約需要7個(gè)門(mén)來(lái)實(shí)現一個(gè)D觸發(fā)器,而一個(gè)門(mén)即可實(shí)現一個(gè)2輸入與非門(mén),所以一般來(lái)說(shuō),同步時(shí)序電路比異步電路占用更大的面積。(FPGA/CPLD中不同,主要是因為單元塊的計算方式)
如何實(shí)現同步時(shí)序電路的延時(shí)?異步電路產(chǎn)生延時(shí)的一般方法是插入一個(gè)Buffer、兩級與非門(mén)等,這種延時(shí)調整手段是不適用同步時(shí)序設計思想的。首先要明確一點(diǎn)HDL語(yǔ)法中的延時(shí)控制語(yǔ)法,是行為級的代碼描述,常用于仿真測試激勵,但是在電路綜合是會(huì )被忽略,并不能啟動(dòng)延時(shí)作用。
同步時(shí)序電路的延時(shí)一般是通過(guò)時(shí)序控制完成的,換句話(huà)說(shuō),同步時(shí)序電路的延時(shí)被當做一個(gè)電路邏輯來(lái)設計。對于比較大的和特殊定時(shí)要求的延時(shí),一般用高速時(shí)鐘產(chǎn)生一個(gè)計數器,通過(guò)計數器的計數控制延遲;對于比較小的延時(shí),可以用D觸發(fā)器打一下,這種做法不僅僅使信號延時(shí)了一個(gè)時(shí)鐘周期,而且完成了信號與時(shí)鐘的初次同步,在輸入信號采樣和增加時(shí)序約束余量中使用。
同步時(shí)序電路的時(shí)鐘如何產(chǎn)生?時(shí)鐘的質(zhì)量和穩定性直接決定著(zhù)同步時(shí)序電路的性能。輸入信號的同步時(shí)序電路要求對輸入信號進(jìn)行同步化,如果輸入數據的節拍和本級芯片的處理時(shí)鐘同頻,并且建立保持時(shí)間匹配,可以直接用本級芯片的主時(shí)鐘對輸入數據寄存器采樣,完成輸入數據的同步化。如果輸入數據和本級芯片的處理時(shí)鐘是異步的,特別是頻率不匹配的時(shí)候,則要用處理時(shí)鐘對輸入數據做兩次寄存器采樣,才能完成輸入數據的同步化。
是不是定義為Reg型,就一定綜合成寄存器,并且是同步時(shí)序電路呢?答案的否定的。Verilog中最常用的兩種數據類(lèi)型Wire和Reg,一般來(lái)說(shuō),Wire型指定書(shū)數據和網(wǎng)線(xiàn)通過(guò)組合邏輯實(shí)現,而reg型指定的數據不一定就是用寄存器實(shí)現。
5. 乒乓操作
“ 乒乓操作 ” 是一個(gè)常常應用于數據流控制的處理技巧,乒乓操作的處理流程為:輸入數據流通過(guò) “ 輸入數據選擇單元 ” 將數據流等時(shí)分配到兩個(gè)數據緩沖區,數據緩沖模塊可以為任何存儲模塊,比較常用的存儲單元為雙口 RAM(DPRAM) 、單口 RAM(SPRAM) 、 FIFO 等。
在第一個(gè)緩沖周期,將輸入的數據流緩存到 “ 數據緩沖模塊 1” ;在第 2 個(gè)緩沖周期,通過(guò) “ 輸入數據選擇單元 ” 的切換,將輸入的數據流緩存到 “ 數據緩沖模塊 2” ,同時(shí)將 “ 數據緩沖模塊 1” 緩存的第 1 個(gè)周期數據通過(guò) “ 輸入數據選擇單元 ” 的選擇,送到 “ 數據流運算處理模塊 ” 進(jìn)行運算處理;在第 3 個(gè)緩沖周期通過(guò) “ 輸入數據選擇單元 ” 的再次切換,將輸入的數據流緩存到 “ 數據緩沖模塊 1” ,同時(shí)將 “ 數據緩沖模塊 2” 緩存的第 2 個(gè)周期的數據通過(guò) “ 輸入數據選擇單元 ” 切換,送到 “ 數據流運算處理模塊 ” 進(jìn)行運算處理。如此循環(huán)。
典型的乒乓操作方法 乒乓操作的最大特點(diǎn)是,通過(guò)輸入數據選擇單元和輸出數據選擇單元、進(jìn)行運算和處理。把乒乓操作模塊當成一個(gè)整體,站在兩端看數據,輸入數據和輸出數據流都是連續不斷的,沒(méi)有任何停頓,因此非常適合對數據流進(jìn)行流水線(xiàn)式處理。所以乒乓操作常常應用于流水線(xiàn)式算法,完成數據的無(wú)縫緩沖和處理。 乒乓操作的第二個(gè)優(yōu)點(diǎn)是可以節約緩沖區空間。比如在WCDMA基帶應用中,1幀是由15個(gè)時(shí)隙組成的,有時(shí)需要將1整幀的數據延時(shí)一個(gè)時(shí)隙后處理,比較直接的方法就是將這幀數據緩存起來(lái),然后延時(shí)一個(gè)時(shí)隙,進(jìn)行處理。這時(shí)緩沖區的長(cháng)度為1幀的數據長(cháng),假設數據速率是3.84Mb/s,1幀10ms,此時(shí)需要緩沖區的長(cháng)度是38400bit,如果采用乒乓操作,只需定義兩個(gè)緩沖1時(shí)隙的數據RAM,當向一個(gè)RAM寫(xiě)數據時(shí),從另一塊RAM讀數據,然后送到處理單元處理,此時(shí)每塊RAM的容量?jì)H需2560bit,2塊加起來(lái)5120bit的容量。
乒乓操作用低速模塊處理高速數據流
另外,巧妙運用乒乓操作還可以達到用低速模塊處理高速數據流的效果。如圖 2 所示,數據緩沖模塊采用了雙口 RAM ,并在 DPRAM 后引入了一級數據預處理模塊,這個(gè)數據預處理可以根據需要的各種數據運算,比如在 WCDMA 設計中,對輸入數據流的解擴、解擾、去旋轉等。假設端口 A 的輸入數據流的速率為 100Mbps ,乒乓操作的緩沖周期是 10ms 。
6. 串并轉換設計技巧
串并轉換是 FPGA 設計的一個(gè)重要技巧,它是數據流處理的常用手段,也是面積與速度互換思想的直接體現。串并轉換的實(shí)現方法多種多樣,根據數據的排序和數量的要求,可以選用寄存器、 RAM 等實(shí)現。 前面在乒乓操作的圖例中,就是通過(guò) DPRAM 實(shí)現了數據流的串并轉換,而且由于使用了 DPRAM ,數據的緩沖區可以開(kāi)得很大,對于數量比較小的設計可以采用寄存器完成串并轉換。如無(wú)特殊需求,應該用同步時(shí)序設計完成串并之間的轉換。比如數據從串行到并行,數據排列順序是高位在前,可以用下面的編碼實(shí)現:prl_temp<={prl_temp,srl_in}。 ? 其中, prl_temp 是并行輸出緩存寄存器, srl_in 是串行數據輸入。對于排列順序有規定的串并轉換,可以用 case 語(yǔ)句判斷實(shí)現。對于復雜的串并轉換,還可以用狀態(tài)機實(shí)現。串并轉換的方法比較簡(jiǎn)單,在此不必贅述。
7.流水線(xiàn)操作設計思想
首先需要聲明的是,這里所講述的流水線(xiàn)是指一種處理流程和順序操作的設計思想,并非 FPGA 、 ASIC 設計中優(yōu)化時(shí)序所用的 “Pipelining” 。 流水線(xiàn)處理是高速設計中的一個(gè)常用設計手段。如果某個(gè)設計的處理流程分為若干步驟,而且整個(gè)數據處理是 “ 單流向 ” 的,即沒(méi)有反饋或者迭代運算,前一個(gè)步驟的輸出是下一個(gè)步驟的輸入,則可以考慮采用流水線(xiàn)設計方法來(lái)提高系統的工作頻率。
流水線(xiàn)設計的結構 流水線(xiàn)設計的結構示意圖如圖所示。其基本結構為:將適當劃分的 n 個(gè)操作步驟單流向串聯(lián)起來(lái)。流水線(xiàn)操作的最大特點(diǎn)和要求是,數據流在各個(gè)步驟的處理從時(shí)間上看是連續的,如果將每個(gè)操作步驟簡(jiǎn)化假設為通過(guò)一個(gè) D 觸發(fā)器 ( 就是用寄存器打一個(gè)節拍 ) ,那么流水線(xiàn)操作就類(lèi)似一個(gè)移位寄存器組,數據流依次流經(jīng) D 觸發(fā)器,完成每個(gè)步驟的操作。
流水線(xiàn)設計時(shí)序 流水線(xiàn)設計的一個(gè)關(guān)鍵在于整個(gè)設計時(shí)序的合理安排,要求每個(gè)操作步驟的劃分合理。如果前級操作時(shí)間恰好等于后級的操作時(shí)間,設計最為簡(jiǎn)單,前級的輸出直接匯入后級的輸入即可;如果前級操作時(shí)間大于后級的操作時(shí)間,則需要對前級的輸出數據適當緩存才能匯入到后級輸入端;如果前級操作時(shí)間恰好小于后級的操作時(shí)間,則必須通過(guò)復制邏輯,將數據流分流,或者在前級對數據采用存儲、后處理方式,否則會(huì )造成后級數據溢出。 在 WCDMA 設計中經(jīng)常使用到流水線(xiàn)處理的方法,如 RAKE 接收機、搜索器、前導捕獲等。流水線(xiàn)處理方式之所以頻率較高,是因為復制了處理模塊,它是面積換取速度思想的又一種具體體現。
8. 數據接口的同步方法
數據接口的同步是 FPGA/CPLD 設計的一個(gè)常見(jiàn)問(wèn)題,也是一個(gè)重點(diǎn)和難點(diǎn),很多設計不穩定都是源于數據接口的同步有問(wèn)題。在電路圖設計階段,一些工程師手工加入 BUFT 或者非門(mén)調整數據延遲,從而保證本級模塊的時(shí)鐘對上級模塊數據的建立、保持時(shí)間要求。 還有一些工程師為了有穩定的采樣,生成了很多相差 90 度的時(shí)鐘信號,時(shí)而用正沿打一下數據,時(shí)而用負沿打一下數據,用以調整數據的采樣位置。這兩種做法都十分不可取,因為一旦芯片更新?lián)Q代或者移植到其它芯片 組的芯片上,采樣實(shí)現必須重新設計。而且,這兩種做法造成電路實(shí)現的余量不夠,一旦外界條件變換 ( 比如溫度升高 ) ,采樣時(shí)序就有可能完全紊亂,造成電路癱瘓。
輸入、輸出的延時(shí) ( 芯片間、 PCB 布線(xiàn)、一些驅動(dòng)接口元件的延時(shí)等 ) 不可測,或者有可能變動(dòng)的條件下,如何完成數據同步?對于數據的延遲不可測或變動(dòng),就需要建立同步機制,可以用一個(gè)同步使能或同步指示信號。另外,使數據通過(guò) RAM 或者 FIFO 的存取,也可以達到數據同步目的。
設計數據接口同步是否需要添加約束?建議最好添加適當的約束,特別是對于高速設計,一定要對周期、建立、保持時(shí)間等添加相應的約束。這里附加約束的作用有兩點(diǎn):提高設計的工作頻率,滿(mǎn)足接口數據同步要求;獲得正確的時(shí)序分析報告。
審核編輯:郭婷
-
FPGA
+關(guān)注
關(guān)注
1610文章
21374瀏覽量
595061 -
cpld
+關(guān)注
關(guān)注
32文章
1244瀏覽量
168514 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1916瀏覽量
60668
原文標題:干貨|FPGA設計的八個(gè)重要知識點(diǎn),你都會(huì )嗎?
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關(guān)注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論