01面積與速度的平衡與互換原則
面積通常指一個(gè)設(shè)計(jì)消耗FPGA/CPLD的邏輯資源的數(shù)量,通常用可消耗的FF(觸發(fā)器)和LUT(查找表)來衡量。速度指設(shè)計(jì)在芯片上穩(wěn)定運(yùn)行所能達(dá)到的最高頻率,這個(gè)頻率由設(shè)計(jì)的時(shí)序狀況來決定,以及設(shè)計(jì)滿足的時(shí)鐘要求:PAD to PAD time 、Clock Setup Time、Clock Hold Time、Clock-to-Output Delay等眾多時(shí)序特征量密切相關(guān),具體示意圖如下圖所示:
要求同時(shí)具備設(shè)計(jì)面積最小、運(yùn)行頻率最高是不現(xiàn)實(shí)的。更科學(xué)的設(shè)計(jì)目標(biāo)應(yīng)該是在滿足設(shè)計(jì)時(shí)序要求(包括對設(shè)計(jì)頻率要求)的前提下,占用最小的芯片面積。或者在所規(guī)定的面積下,使設(shè)計(jì)的時(shí)序余量更大、頻率跑得更高。這兩種目標(biāo)充分體現(xiàn)了面積和速度的平衡思想。
作為矛盾的兩個(gè)組成部分,面積和速度的地位是不一樣的。相比之下,滿足時(shí)序、工作頻率的要求更重要一些,當(dāng)兩者沖突時(shí),采用速度優(yōu)先的準(zhǔn)則。
02硬件和系統(tǒng)原則
硬件原則主要針對HDL代碼編寫而言:Verilog是采用了C語言形式的硬件的抽象,它的本質(zhì)作用在于描述硬件;它的最終實(shí)現(xiàn)結(jié)果是芯片內(nèi)部的實(shí)際電路。所以評判一段HDL代碼優(yōu)劣的最終標(biāo)準(zhǔn)是:其描述并實(shí)現(xiàn)的硬件電路性能,包括面積和速度兩個(gè)方面。
評價(jià)一個(gè)設(shè)計(jì)的代碼水平較高,僅僅是說這個(gè)設(shè)計(jì)是由硬件向HDL代碼這種表現(xiàn)形式的轉(zhuǎn)換更加流暢、合理。而一個(gè)設(shè)計(jì)最終性能,在更大程度上取決于設(shè)計(jì)工程師所構(gòu)想的硬件實(shí)現(xiàn)方案的效率以及合理性。(HDL代碼僅僅是硬件設(shè)計(jì)的表達(dá)形式之一)。
初學(xué)者片面追求代碼的整潔、簡短是錯(cuò)誤的,是與HDL的標(biāo)準(zhǔn)背道而馳的。正確的編碼方法首先要做到對所需實(shí)現(xiàn)的硬件電路胸有成竹,對該部分的硬件的結(jié)構(gòu)和連接十分清晰,然后再用適當(dāng)?shù)腍DL語句表達(dá)出來即可。
系統(tǒng)原則包含兩個(gè)層次的含義:更高層面上看,是一個(gè)硬件系統(tǒng),一塊單板如何進(jìn)行模塊劃分和任務(wù)分配、什么樣的算法和功能適合放在FPGA里面實(shí)現(xiàn)、什么樣的算法和功能適合放在DSP/CPU里面實(shí)現(xiàn)、以及FPGA的規(guī)模估算數(shù)據(jù)接口設(shè)計(jì)等。具體到FPGA設(shè)計(jì)就要對設(shè)計(jì)的全局有個(gè)宏觀上的合理安排,比如時(shí)鐘域、模塊復(fù)用、約束、面積、速度等問題,在系統(tǒng)上模塊的優(yōu)化最為重要。
一般來說實(shí)時(shí)性要求高,頻率快的功能模塊適合FPGA實(shí)現(xiàn)。而FPGA和CPLD相比,更適合實(shí)現(xiàn)規(guī)模較大、頻率較高、寄存器較多的設(shè)計(jì)。使用FPGA/CPLD設(shè)計(jì)時(shí),應(yīng)該對芯片內(nèi)部的各種底層硬件資源和可用的設(shè)計(jì)資源有一個(gè)較深刻的認(rèn)識。
03同步設(shè)計(jì)原則
異步電路的邏輯核心是用組合邏輯電路實(shí)現(xiàn),比如異步的FIFO/RAM讀寫信號,地址譯碼等電路。電路的主要信號、輸出信號等并不依賴于任何一個(gè)時(shí)鐘性信號,不是由時(shí)鐘信號驅(qū)動FF產(chǎn)生的。異步時(shí)序電路的最大缺點(diǎn)是容易產(chǎn)生毛刺,毛刺產(chǎn)生的機(jī)理主要有爭和冒險(xiǎn)導(dǎo)致毛刺、組合延時(shí)和布線延時(shí)不平衡導(dǎo)致譯碼輸出毛刺以及線間的信號耦合導(dǎo)致毛刺。具體如下圖所示:
同步時(shí)序電路的核心邏輯是用各種各樣的觸發(fā)器實(shí)現(xiàn),電路的主要信號、輸出信號都是由某個(gè)時(shí)鐘沿驅(qū)動觸發(fā)器產(chǎn)生出來的。同步時(shí)序電路可以很好的避免毛刺。
同步時(shí)序電路的延時(shí)一般是通過時(shí)序控制完成的,換句話說,同步時(shí)序電路的延時(shí)被當(dāng)做一個(gè)電路邏輯來設(shè)計(jì)。對于比較大的和特殊定時(shí)要求的延時(shí),一般用高速時(shí)鐘產(chǎn)生一個(gè)計(jì)數(shù)器,通過計(jì)數(shù)器的計(jì)數(shù)控制延遲;對于比較小的延時(shí),可以用D觸發(fā)器打一下,這種做法不僅僅使信號延時(shí)了一個(gè)時(shí)鐘周期,而且完成了信號與時(shí)鐘的初次同步,在輸入信號采樣和增加時(shí)序約束余量中使用。
同步時(shí)序電路的時(shí)鐘如何產(chǎn)生?時(shí)鐘的質(zhì)量和穩(wěn)定性直接決定著同步時(shí)序電路的性能。輸入信號的同步時(shí)序電路要求對輸入信號進(jìn)行同步化,如果輸入數(shù)據(jù)的節(jié)拍和本級芯片的處理時(shí)鐘同頻,并且建立保持時(shí)間匹配,可以直接用本級芯片的主時(shí)鐘對輸入數(shù)據(jù)寄存器采樣,完成輸入數(shù)據(jù)的同步化。如果輸入數(shù)據(jù)和本級芯片的處理時(shí)鐘是異步的,特別是頻率不匹配的時(shí)候,則要用處理時(shí)鐘對輸入數(shù)據(jù)做兩次寄存器采樣,才能完成輸入數(shù)據(jù)的同步化。
是不是定義為Reg型,就一定綜合成寄存器,并且是同步時(shí)序電路呢?答案是否定的。Verilog中最常用的兩種數(shù)據(jù)類型Wire和Reg,一般來說,Wire型指定輸數(shù)據(jù)和網(wǎng)線通過組合邏輯實(shí)現(xiàn),而reg型指定的數(shù)據(jù)不一定就是用寄存器實(shí)現(xiàn)。
04乒乓操作及串并轉(zhuǎn)換設(shè)計(jì)
“ 乒乓操作 ”是一個(gè)常常應(yīng)用于數(shù)據(jù)流控制的處理技巧。乒乓操作的處理流程為:輸入數(shù)據(jù)流通過“ 輸入數(shù)據(jù)選擇單元 ”將數(shù)據(jù)流等時(shí)分配到兩個(gè)數(shù)據(jù)緩沖區(qū),數(shù)據(jù)緩沖模塊可以為任何存儲模塊,比較常用的存儲單元為雙口 RAM(DPRAM) 、單口 RAM(SPRAM) 、 FIFO 等。
在第一個(gè)緩沖周期,將輸入的數(shù)據(jù)流緩存到“ 數(shù)據(jù)緩沖模塊 1”;在第 2 個(gè)緩沖周期,通過“ 輸入數(shù)據(jù)選擇單元 ”的切換,將輸入的數(shù)據(jù)流緩存到“ 數(shù)據(jù)緩沖模塊 2”,同時(shí)將“ 數(shù)據(jù)緩沖模塊 1”緩存的第 1 個(gè)周期數(shù)據(jù)通過“ 輸入數(shù)據(jù)選擇單元 ”的選擇,送到“ 數(shù)據(jù)流運(yùn)算處理模塊 ”進(jìn)行運(yùn)算處理;在第 3 個(gè)緩沖周期通過“ 輸入數(shù)據(jù)選擇單元 ”的再次切換,將輸入的數(shù)據(jù)流緩存到“ 數(shù)據(jù)緩沖模塊 1”,同時(shí)將“ 數(shù)據(jù)緩沖模塊 2”緩存的第 2 個(gè)周期的數(shù)據(jù)通過“ 輸入數(shù)據(jù)選擇單元 ”切換,送到“ 數(shù)據(jù)流運(yùn)算處理模塊 ”進(jìn)行運(yùn)算處理。如此循環(huán)。
典型的乒乓操作方法
乒乓操作的最大特點(diǎn)是,通過輸入數(shù)據(jù)選擇單元和輸出數(shù)據(jù)選擇單元進(jìn)行運(yùn)算和處理。把乒乓操作模塊當(dāng)成一個(gè)整體,站在兩端看數(shù)據(jù),輸入數(shù)據(jù)和輸出數(shù)據(jù)流都是連續(xù)不斷的,沒有任何停頓,因此非常適合對數(shù)據(jù)流進(jìn)行流水線式處理。所以乒乓操作常常應(yīng)用于流水線式算法,完成數(shù)據(jù)的無縫緩沖和處理。另外,巧妙運(yùn)用乒乓操作還可以達(dá)到用低速模塊處理高速數(shù)據(jù)流的效果。如下圖所示:
從理論上講,如果一個(gè)設(shè)計(jì)時(shí)序余量較大,所能跑的速度遠(yuǎn)遠(yuǎn)高于設(shè)計(jì)要求,那么就通過功能模塊的復(fù)用來減少整個(gè)設(shè)計(jì)消耗的芯片面積,這就是用速度的優(yōu)勢換取面積的節(jié)約。反之,如果一個(gè)設(shè)計(jì)的時(shí)序要求很高,普通方法達(dá)不到設(shè)計(jì)頻率,那么一般可以通過將數(shù)據(jù)流串并轉(zhuǎn)換,并行復(fù)制多個(gè)操作模塊,對整個(gè)設(shè)計(jì)采取乒乓操作和串并轉(zhuǎn)換的思想運(yùn)行。
串并轉(zhuǎn)換是 FPGA 設(shè)計(jì)的一個(gè)重要技巧,它是數(shù)據(jù)流處理的常用手段,也是面積與速度互換思想的直接體現(xiàn)。串并轉(zhuǎn)換的實(shí)現(xiàn)方法多種多樣,根據(jù)數(shù)據(jù)的排序和數(shù)量的要求,可以選用寄存器、 RAM 等實(shí)現(xiàn)。
前面在乒乓操作的圖例中,就是通過 FIFO 實(shí)現(xiàn)了數(shù)據(jù)流的串并轉(zhuǎn)換,而且由于使用了 FIFO ,數(shù)據(jù)的緩沖區(qū)可以開得很大,對于數(shù)量比較小的設(shè)計(jì)可以采用寄存器完成串并轉(zhuǎn)換。如無特殊需求,應(yīng)該用同步時(shí)序設(shè)計(jì)完成串并之間的轉(zhuǎn)換。比如數(shù)據(jù)從串行到并行,數(shù)據(jù)排列順序是高位在前,可以用下面的編碼實(shí)現(xiàn):prl_temp<={prl_temp,srl_in}。其中, prl_temp 是并行輸出緩存寄存器, srl_in 是串行數(shù)據(jù)輸入。對于排列順序有規(guī)定的串并轉(zhuǎn)換,可以用 case 語句判斷實(shí)現(xiàn)。對于復(fù)雜的串并轉(zhuǎn)換,還可以用狀態(tài)機(jī)實(shí)現(xiàn)。串并轉(zhuǎn)換的方法比較簡單,在此不必贅述。
05流水線操作設(shè)計(jì)思想
流水線處理是高速設(shè)計(jì)中的一個(gè)常用設(shè)計(jì)手段。如果某個(gè)設(shè)計(jì)的處理流程分為若干步驟,而且整個(gè)數(shù)據(jù)處理是“ 單流向 ”的,即沒有反饋或者迭代運(yùn)算,前一個(gè)步驟的輸出是下一個(gè)步驟的輸入,則可以考慮采用流水線設(shè)計(jì)方法來提高系統(tǒng)的工作頻率。
流水線設(shè)計(jì)的結(jié)構(gòu)示意圖如圖所示。其基本結(jié)構(gòu)為:將適當(dāng)劃分的 n 個(gè)操作步驟單流向串聯(lián)起來。流水線操作的最大特點(diǎn)和要求是,數(shù)據(jù)流在各個(gè)步驟的處理從時(shí)間上看是連續(xù)的,如果將每個(gè)操作步驟簡化假設(shè)為通過一個(gè) D 觸發(fā)器 ( 就是用寄存器打一個(gè)節(jié)拍 ) ,那么流水線操作就類似一個(gè)移位寄存器組,數(shù)據(jù)流依次流經(jīng) D 觸發(fā)器,完成每個(gè)步驟的操作。
流水線設(shè)計(jì)的一個(gè)關(guān)鍵在于整個(gè)設(shè)計(jì)時(shí)序的合理安排,要求每個(gè)操作步驟的劃分合理。如果前級操作時(shí)間恰好等于后級的操作時(shí)間,設(shè)計(jì)最為簡單,前級的輸出直接匯入后級的輸入即可;如果前級操作時(shí)間大于后級的操作時(shí)間,則需要對前級的輸出數(shù)據(jù)適當(dāng)緩存才能匯入到后級輸入端;如果前級操作時(shí)間恰好小于后級的操作時(shí)間,則必須通過復(fù)制邏輯,將數(shù)據(jù)流分流,或者在前級對數(shù)據(jù)采用存儲、后處理方式,否則會造成后級數(shù)據(jù)溢出。
流水線處理方式之所以頻率較高,是因?yàn)閺?fù)制了處理模塊,它是面積換取速度思想的又一種具體體現(xiàn)。
06異步時(shí)鐘處理原則
許多系統(tǒng)要求在同一設(shè)計(jì)內(nèi)采用多時(shí)鐘,最常見的例子是“兩個(gè)異步微處理器之間的接口”或“微處理器和異步通信通道的接口”。由于兩個(gè)時(shí)鐘信號之間要求一定的建立和保持時(shí)間, 所以上述應(yīng)用引進(jìn)了附加的定時(shí)約束條件, 它們會要求將某些異步信號同步化。
如果一個(gè)系統(tǒng)中存在多個(gè)獨(dú)立(異步)時(shí)鐘,并且存在多時(shí)鐘域(clock domain)之間的信號傳輸,那么電路會出現(xiàn)亞穩(wěn)態(tài)。具體如下圖所示:
在許多應(yīng)用中只將異步信號同步化還是不夠的,當(dāng)系統(tǒng)中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數(shù)據(jù)的建立和保持時(shí)間很難得到保證,設(shè)計(jì)人員將面臨復(fù)雜的時(shí)間分析問題。最好的方法是將所有非同源時(shí)鐘同步化。這時(shí)就需要使用帶使能端的D觸發(fā)器, 并引入一個(gè)高頻時(shí)鐘來實(shí)現(xiàn)信號的同步化。具體如下圖所示:
07數(shù)據(jù)接口的同步原則
數(shù)據(jù)接口的同步是 FPGA/CPLD 設(shè)計(jì)的一個(gè)常見問題,也是一個(gè)重點(diǎn)和難點(diǎn),很多設(shè)計(jì)不穩(wěn)定都是源于數(shù)據(jù)接口的同步有問題。輸入、輸出的延時(shí) ( 芯片間、 PCB 布線、一些驅(qū)動接口元件的延時(shí)等 ) 不可測,或者有可能變動的條件下,如何完成數(shù)據(jù)同步?對于數(shù)據(jù)的延遲不可測或變動,就需要建立同步機(jī)制,可以用一個(gè)同步使能或同步指示信號。另外,使數(shù)據(jù)通過 RAM 或者 FIFO 的存取,也可以達(dá)到數(shù)據(jù)同步目的。
設(shè)計(jì)數(shù)據(jù)接口同步是否需要添加約束?建議最好添加適當(dāng)?shù)募s束,特別是對于高速設(shè)計(jì),一定要對周期、建立、保持時(shí)間等添加相應(yīng)的約束。這里附加約束的作用有兩點(diǎn):提高設(shè)計(jì)的工作頻率,滿足接口數(shù)據(jù)同步要求;獲得正確的時(shí)序分析報(bào)告。
總 結(jié)
數(shù)字系統(tǒng)設(shè)計(jì)應(yīng)該明確如下觀點(diǎn):
無論是ASIC、FPGA還是DSP,都只是一種實(shí)現(xiàn)手段;
無論采用哪種HDL或哪種開發(fā)工具,都不能單純從語言或工具本身作出評價(jià);
關(guān)鍵是看應(yīng)用環(huán)境,只有選擇最適合于應(yīng)用的實(shí)現(xiàn)方式和工具才是最好的設(shè)計(jì)方案;
設(shè)計(jì)應(yīng)該注重硬件設(shè)計(jì)本身,只有先有了良好的設(shè)計(jì),才可能有高效的描述和實(shí)現(xiàn)。
數(shù)字模擬電路、HDL語言等知識和實(shí)際經(jīng)驗(yàn)比了解軟件更重要。比如FPGA一般觸發(fā)器資源豐富,CPLD的組合邏輯資源更加豐富。FPGA/CPLD一般是由底層可編程硬件單元、BRAM、布線資源、可配置IO單元、時(shí)鐘資源等構(gòu)成。
原文標(biāo)題:幾個(gè)FPGA設(shè)計(jì)的重要原則
文章出處:【微信公眾號:云腦智庫】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1643文章
21954瀏覽量
613910 -
cpld
+關(guān)注
關(guān)注
32文章
1257瀏覽量
170966 -
數(shù)字系統(tǒng)
+關(guān)注
關(guān)注
0文章
150瀏覽量
21129
原文標(biāo)題:幾個(gè)FPGA設(shè)計(jì)的重要原則
文章出處:【微信號:CloudBrain-TT,微信公眾號:云腦智庫】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
fpga開發(fā)流程攻略與fpga器件選型七大原則分享

如何選擇IDC服務(wù)商十大原則
Python設(shè)計(jì)模式六大原則
三大原則,讓你選對繼電器
一文匯總PCB電路設(shè)計(jì)的六大原則

制造業(yè)組裝線設(shè)計(jì)必須要納入的五大原則?
如何構(gòu)造原型系統(tǒng)?八大原則不得不知

電路布線的七大原則

電子元件選用的八大原則
設(shè)計(jì)模式(1)—什么是設(shè)計(jì)模式?設(shè)計(jì)模式的六大原則是什么?

評論