1.面積與速度的平衡與互換
這里的面積指一個設計消耗FPGA/CPLD的邏輯資源的數(shù)量,對于FPGA可以用消耗的FF(觸發(fā)器)和LUT(查找表)來衡量,更一般的衡量方式可以用設計所占的等價邏輯門數(shù)。
速度指設計在芯片上穩(wěn)定運行,所能達到的最高頻率,這個頻率由設計的時序狀況來決定,和設計滿足的時鐘要求,PAD?to?PAD?time ,Clock?Setup?Time,Clock?Hold?Time,Clock-to-Output?Delay等眾多時序特征量密切相關。
面積和速度這兩個指標貫穿FPGA/CPLD設計的時鐘,是設計質量的評價的終極標準。
面積和速度是一對對立統(tǒng)一的矛盾體。要求一個同事具備設計面積最小,運行頻率最高是不現(xiàn)實的。更科學的設計目標應該是在滿足設計時序要求(包括對設計頻率的要求)的前提下,占用最小的芯片面積。或者在所規(guī)定的面積下,是設計的時序余量更大,頻率跑的更高。這兩種目標充分體現(xiàn)了面積和速度的平衡的思想。
作為矛盾的兩個組成部分,面積和速度的地位是不一樣的。相比之下,滿足時序、工作頻率的要求更重要一些,當兩者沖突時,采用速度優(yōu)先的準則。
從理論上講,如果一個設計時序余量較大,所能跑的速度遠遠高于設計要求,那么就通過功能模塊的復用來減少整個設計消耗的芯片面積,這就是用速度的優(yōu)勢換取面積的節(jié)約。反之,如果一個設計的時序要求很高,普通方法達不到設計頻率,那么一般可以通過將數(shù)據(jù)流串并轉換,并行復制多個操作模塊,對整個設計采取乒乓操作和串并轉換的思想運行。
2.硬件原則
硬件原則主要針對HDL代碼編寫而言
Verilog?是采用了C語言形式的硬件的抽象,它的本質作用在于描述硬件!它的最終實現(xiàn)結果是芯片內部的實際電路。所以評判一段HDL代碼的優(yōu)劣的最終標準是:其描述并實現(xiàn)的硬件電路的性能。包括面積和速度兩個方面。評價一個設計的代碼水平較高,僅僅是說這個設計是由硬件想HDL代碼這種表現(xiàn)形式的轉換更加流暢、合理。而一個設計最終性能,在更大程度上取決于設計工程師所構想的硬件實現(xiàn)方案的效率以及合理性。(HDL代碼僅僅是硬件設計的表達形式之一)
初學者,片面追求代碼的整潔、簡短,是錯誤的。是與HDL的標準背道而馳的。正確的編碼方法,首先要做到對所需實現(xiàn)的硬件電路胸有成竹,對該部分的硬件的結構和連接十分清晰,然后再用適當?shù)腍DL語句表達出來即可。
另外,Verilog作為一種HDL語言,是分層次的。系統(tǒng)級--算法級--寄存器傳輸級--邏輯級--門級--開關級。
構建優(yōu)先級樹會消耗大量的組合邏輯,所以如果能夠使用case的地方,盡量使用case代替if.....else......
3.系統(tǒng)原則
系統(tǒng)原則包含兩個層次的含義:更高層面上看,是一個硬件系統(tǒng),一塊單板如何進行模塊花費和任務分配,什么樣的算法和功能適合放在FPGA里面實現(xiàn),什么樣的算法和功能適合放在DSP,CPU里面實現(xiàn),以及FPGA的規(guī)模估算數(shù)據(jù)接口設計等。具體到FPGA設計就要對設計的全局有個宏觀上的合理安排,比如時鐘域,模塊復用,約束,面積,速度等問題。在系統(tǒng)上模塊的優(yōu)化最為重要。
一般來說實時性要求高,頻率快的功能模塊適合FPGA實現(xiàn)。而FPGA和CPLD相比,更適合實現(xiàn)規(guī)模較大,頻率較高、寄存器較多的設計。使用FPGA/CPLD設計時,應該對芯片內部的各種底層硬件資源,和可用的設計資源有一個較深刻的認識。比如FPGA一般觸發(fā)器資源豐富,CPLD的組合邏輯資源更加豐富。FPGA/CPLD一般是由底層可編程硬件單元,BRAM,布線資源,可配置IO單元,時鐘資源等構成。底層可編程硬件單元一般由觸發(fā)器和查找表組成。Xilinx的底層可編程硬件資源較SLICE,由兩個FF和2個LUT構成。Altera?的底層硬件資源叫LE,由1個FF和1個LUT構成。
使用片內RAN可以實現(xiàn)單口RAM,雙口RAM,同步、異步FIFO,ROM,CAM等常用單元模塊。
一般的FPGA系統(tǒng)規(guī)劃的簡化流程
4.同步設計原則
異步電路
電路的邏輯核心是用組合邏輯電路實現(xiàn)。比如異步的FIFO/RAM讀寫信號,地址譯碼等電路。電路的主要信號、輸出信號等并不依賴于任何一個時鐘性信號,不是由時鐘信號驅動FF產生的。
異步時序電路的最大缺點是容易產生毛刺。在布局布線后仿真和用邏輯分析儀觀測實際信號時,這種毛刺尤其明顯。
同步時序?
電路的核心邏輯用各種各樣的觸發(fā)器實現(xiàn)
電路的主要信號、輸出信號都是由某個時鐘沿驅動觸發(fā)器產生出來的。
同步時序電路可以很好的避免毛刺。布局布線后仿真,和用邏輯分析儀采樣實際工作信號都沒有毛刺。
是否時序電路一定比異步電路使用更多的資源呢?
從單純的ASCI設計來看,大約需要7個門來實現(xiàn)一個D觸發(fā)器,而一個門即可實現(xiàn)一個2輸入與非門,所以一般來說,同步時序電路比異步電路占用更大的面積。(FPGA/CPLD中不同,主要是因為單元塊的計算方式)
如何實現(xiàn)同步時序電路的延時?
異步電路產生延時的一般方法是插入一個Buffer,兩級與非門等。這種延時調整手段是不適用同步時序設計思想的。首先要明確一點HDL語法中的延時控制語法,是行為級的代碼描述,常用于仿真測試激勵,但是在電路綜合是會被忽略,并不能啟動延時作用。
同步時序電路的延時一般是通過時序控制完成的。換句話說,同步時序電路的延時被當做一個電路邏輯來設計。對于比較大的和特殊定時要求的延時,一般用高速時鐘產生一個計數(shù)器,通過計數(shù)器的計數(shù)控制延遲;對于比較小的延時,可以用D觸發(fā)器打一下,這種做法不僅僅使信號延時了一個時鐘周期,而且完成了信號與時鐘的初次同步,在輸入信號采樣和增加時序約束余量中使用。
同步時序電路的時鐘如何產生?
時鐘的質量和穩(wěn)定性直接決定著同步時序電路的性能。
輸入信號的同步
同步時序電路要求對輸入信號進行同步化,如果輸入數(shù)據(jù)的節(jié)拍和本級芯片的處理時鐘同頻,并且建立保持時間匹配,可以直接用本級芯片的主時鐘對輸入數(shù)據(jù)寄存器采樣,完成輸入數(shù)據(jù)的同步化。如果輸入數(shù)據(jù)和本級芯片的處理時鐘是異步的,特別是頻率不匹配的時候,則要用處理時鐘對輸入數(shù)據(jù)做兩次寄存器采樣,才能完成輸入數(shù)據(jù)的同步化。
是不是定義為Reg型,就一定綜合成寄存器,并且是同步時序電路呢?
答案的否定的。Verilog中最常用的兩種數(shù)據(jù)類型Wire和Reg,一般來說,Wire型指定書數(shù)據(jù)和網(wǎng)線通過組合邏輯實現(xiàn),而reg型指定的數(shù)據(jù)不一定就是用寄存器實現(xiàn)。
5.乒乓操作
乒乓操作是一個常常應用于數(shù)據(jù)流控制的處理技巧。
數(shù)據(jù)緩沖模塊可以為任何的存儲模塊,比較常用的存儲模塊為雙口RAM(DPRAM),單口RAM(SPRAM),F(xiàn)IFO等。在等一個緩沖周期,將輸入的數(shù)據(jù)流緩存到數(shù)據(jù)緩存模塊1,在第二個緩沖周期,通過輸入數(shù)據(jù)流選擇單元,將輸入的數(shù)據(jù)流緩存到數(shù)據(jù)緩沖模塊2.乒乓操作的最大特點是,通過輸入數(shù)據(jù)選擇單元和輸出數(shù)據(jù)選擇單元,進行運算和處理。把乒乓操作模塊當成一個整體,站在兩端看數(shù)據(jù),輸入數(shù)據(jù)和輸出數(shù)據(jù)流都是連續(xù)不斷的,沒有任何停頓,因此非常適合對數(shù)據(jù)流進行流水線式處理。所以乒乓操作常常應用于流水線式算法,完成數(shù)據(jù)的無縫緩沖和處理。
乒乓操作的第二個優(yōu)點是可以節(jié)約緩沖區(qū)空間。比如在WCDMA基帶應用中,1幀是由15個時隙組成的,有時需要將1整幀的數(shù)據(jù)延時一個時隙后處理,比較直接的方法就是將這幀數(shù)據(jù)緩存起來,然后延時一個時隙,進行處理。這時緩沖區(qū)的長度為1幀的數(shù)據(jù)長,假設數(shù)據(jù)速率是3.84Mb/s,1幀10ms,此時需要緩沖區(qū)的長度是38400bit,如果采用乒乓操作,只需定義兩個緩沖1時隙的數(shù)據(jù)RAM,當向一個RAM寫數(shù)據(jù)時,從另一塊RAM讀數(shù)據(jù),然后送到處理單元處理,此時每塊RAM的容量僅需2560bit,2塊加起來5120bit的容量。
巧妙的運用乒乓操作,還可以達到低速模塊處理高速數(shù)據(jù)流的效果。
6.串并轉換
7.流水線操作
流水線處理是高速設計中一個常用的設計手段。如果某個設計的處理流程分為若干步驟,而且整個數(shù)據(jù)處理是單流向的。則可以考慮采用流水線設計方法提高系統(tǒng)的工作頻率。
其基本結構為:將適當劃分的n個操作步驟單流向串聯(lián)起來。流水線操作的最大特點和要求是,數(shù)據(jù)在各個步驟的處理,從時間上是連續(xù)的,如果將每個操作步驟簡化假設為一個通過D觸發(fā)器(就是用寄存器打一個節(jié)拍),那么流水線操作就類似一個移位寄存器組,數(shù)據(jù)流依次流經D觸發(fā)器,完成每個步驟的操作。流水線設計時序圖如下:
流水線設計的關鍵在于,整個設計時序的合理安排。要求每個操作步驟的劃分合理。如果前級操作時間恰好等于后級操作時間,設計最為簡單,前級的輸出直接匯入后級的輸入即可。如果前級操作時間大于后級操作時間,則需要進行適當緩存。如果前級操作時間小于后級操作時間,則必須通過復制邏輯,將數(shù)據(jù)流分流,或在前級對數(shù)據(jù)采用存儲、后處理的方式。否則會造成后級數(shù)據(jù)的溢出。
8.數(shù)據(jù)接口的同步方法
數(shù)據(jù)接口的同步在FPGA/CPLD設計中一個常見問題。很多設計工作不穩(wěn)定都是源于數(shù)據(jù)接口的同步問題。
1.輸入輸出的延時不可測,或者可能有變動,如何完成數(shù)據(jù)的同步?
對于數(shù)據(jù)延遲不可測或者變動,就需要建立同步機制?;蛘哂靡粋€同步使能,或者同步指示信號。另外使數(shù)據(jù)通過RAM或者FIFO的存取,也可以達到數(shù)據(jù)同步的目的。
把數(shù)據(jù)存放在RAM或FIFO的方法如下,將上級芯片提供的數(shù)據(jù)隨路時鐘作為寫信號,將數(shù)據(jù)寫入RAM或者FIFO,然后使用本級時鐘的采樣時鐘(一般是數(shù)據(jù)處理的主時鐘),將數(shù)據(jù)讀出來即可。這種做法的關鍵是數(shù)據(jù)寫入RAM或者FIFO要可靠,如果使用同步RAM或者FIFO,就要求有一個與數(shù)據(jù)延遲相對關系固定的隨路指示信號。
評論
查看更多