《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > 入門:FPGA/CPLD設(shè)計(jì)的8個(gè)常見問題

入門:FPGA/CPLD設(shè)計(jì)的8個(gè)常見問題

2022-12-11
來源:電子產(chǎn)品世界
關(guān)鍵詞: C語言 FPGA 異步電路

  1. 面積與速度的平衡與互換

  這里的面積指一個(gè)設(shè)計(jì)消耗FPGA/CPLD的邏輯資源的數(shù)量,對(duì)于FPGA可以用消耗的FF(觸發(fā)器)和LUT(查找表)來衡量,,更一般的衡量方式可以用設(shè)計(jì)所占的等價(jià)邏輯門數(shù),。   速度指設(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),。   面積和速度這兩個(gè)指標(biāo)貫穿FPGA/CPLD設(shè)計(jì)的時(shí)鐘,,是設(shè)計(jì)質(zhì)量的評(píng)價(jià)的終極標(biāo)準(zhǔn) —— 面積和速度是一對(duì)對(duì)立統(tǒng)一的矛盾體。   要求一個(gè)同時(shí)具備設(shè)計(jì)面積最小、運(yùn)行頻率最高是不現(xiàn)實(shí)的,。更科學(xué)的設(shè)計(jì)目標(biāo)應(yīng)該是在滿足設(shè)計(jì)時(shí)序要求(包括對(duì)設(shè)計(jì)頻率的要求)的前提下,,占用最小的芯片面積?;蛘咴谒?guī)定的面積下,,是設(shè)計(jì)的時(shí)序余量更大、頻率跑的更高,。這兩種目標(biāo)充分體現(xiàn)了面積和速度的平衡的思想,。   作為矛盾的兩個(gè)組成部分,面積和速度的地位是不一樣的,。相比之下,,滿足時(shí)序、工作頻率的要求更重要一些,,當(dāng)兩者沖突時(shí),,采用速度優(yōu)先的準(zhǔn)則。   從理論上講,,如果一個(gè)設(shè)計(jì)時(shí)序余量較大,,所能跑的速度遠(yuǎn)遠(yuǎn)高于設(shè)計(jì)要求,那么就通過功能模塊的復(fù)用來減少整個(gè)設(shè)計(jì)消耗的芯片面積,,這就是用速度的優(yōu)勢(shì)換取面積的節(jié)約,。反之,如果一個(gè)設(shè)計(jì)的時(shí)序要求很高,,普通方法達(dá)不到設(shè)計(jì)頻率,,那么一般可以通過將數(shù)據(jù)流串并轉(zhuǎn)換,并行復(fù)制多個(gè)操作模塊,,對(duì)整個(gè)設(shè)計(jì)采取乒乓操作和串并轉(zhuǎn)換的思想運(yùn)行,。

  2. 硬件原則

  硬件原則主要針對(duì)HDL代碼編寫而言:Verilog是采用了C語言形式的硬件的抽象,它的本質(zhì)作用在于描述硬件,,它的最終實(shí)現(xiàn)結(jié)果是芯片內(nèi)部的實(shí)際電路,。所以評(píng)判一段HDL代碼的優(yōu)劣的最終標(biāo)準(zhǔn)是:其描述并實(shí)現(xiàn)的硬件電路的性能,包括面積和速度兩個(gè)方面,。   評(píng)價(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é)者片面追求代碼的整潔,、簡(jiǎn)短,,是錯(cuò)誤的,,是與HDL的標(biāo)準(zhǔn)背道而馳的。正確的編碼方法,,首先要做到對(duì)所需實(shí)現(xiàn)的硬件電路胸有成竹,,對(duì)該部分的硬件的結(jié)構(gòu)和連接十分清晰,然后再用適當(dāng)?shù)腍DL語句表達(dá)出來即可,。   另外,,Verilog作為一種HDL語言,是分層次的,。系統(tǒng)級(jí)--算法級(jí)--寄存器傳輸級(jí)--邏輯級(jí)--門級(jí)--開關(guān)級(jí),。構(gòu)建優(yōu)先級(jí)樹會(huì)消耗大量的組合邏輯,所以如果能夠使用case的地方,,盡量使用case代替if……else……

  3. 系統(tǒng)原則

  系統(tǒng)原則包含兩個(gè)層次的含義:更高層面上看,,是一個(gè)硬件系統(tǒng),一塊單板如何進(jìn)行模塊花費(fèi)和任務(wù)分配,,什么樣的算法和功能適合放在FPGA里面實(shí)現(xiàn),,什么樣的算法和功能適合放在DSP/CPU里面實(shí)現(xiàn),以及FPGA的規(guī)模估算數(shù)據(jù)接口設(shè)計(jì)等,。具體到FPGA設(shè)計(jì)就要對(duì)設(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)該對(duì)芯片內(nèi)部的各種底層硬件資源,,和可用的設(shè)計(jì)資源有一個(gè)較深刻的認(rèn)識(shí)。   比如FPGA一般觸發(fā)器資源豐富,,CPLD的組合邏輯資源更加豐富,。FPGA/CPLD一般是由底層可編程硬件單元、BRAM,、布線資源,、可配置IO單元,、時(shí)鐘資源等構(gòu)成。   底層可編程硬件單元一般由觸發(fā)器和查找表組成,。Xilinx的底層可編程硬件資源較SLICE,,由兩個(gè)FF和2個(gè)LUT構(gòu)成。Altera的底層硬件資源叫LE,,由1個(gè)FF和1個(gè)LUT構(gòu)成,。使用片內(nèi)RAN可以實(shí)現(xiàn)單口RAM、雙口RAM,、同步/異步FIFO,、ROM、CAM等常用單元模塊,。

65.JPG

  一般的FPGA系統(tǒng)規(guī)劃的簡(jiǎn)化流程

  4. 同步設(shè)計(jì)原則

  異步電路的邏輯核心是用組合邏輯電路實(shí)現(xiàn),,比如異步的FIFO/RAM讀寫信號(hào),地址譯碼等電路,。電路的主要信號(hào),、輸出信號(hào)等并不依賴于任何一個(gè)時(shí)鐘性信號(hào),不是由時(shí)鐘信號(hào)驅(qū)動(dòng)FF產(chǎn)生的,。異步時(shí)序電路的最大缺點(diǎn)是容易產(chǎn)生毛刺,,在布局布線后仿真和用邏輯分析儀觀測(cè)實(shí)際信號(hào)時(shí),這種毛刺尤其明顯,。   同步時(shí)序電路的核心邏輯用各種各樣的觸發(fā)器實(shí)現(xiàn),,電路的主要信號(hào)、輸出信號(hào)都是由某個(gè)時(shí)鐘沿驅(qū)動(dòng)觸發(fā)器產(chǎn)生出來的,。同步時(shí)序電路可以很好的避免毛刺,,布局布線后仿真,和用邏輯分析儀采樣實(shí)際工作信號(hào)都沒有毛刺,。

  是否時(shí)序電路一定比異步電路使用更多的資源呢,?從單純的ASCI設(shè)計(jì)來看,大約需要7個(gè)門來實(shí)現(xiàn)一個(gè)D觸發(fā)器,,而一個(gè)門即可實(shí)現(xiàn)一個(gè)2輸入與非門,,所以一般來說,同步時(shí)序電路比異步電路占用更大的面積,。(FPGA/CPLD中不同,,主要是因?yàn)閱卧獕K的計(jì)算方式)

  如何實(shí)現(xiàn)同步時(shí)序電路的延時(shí)?異步電路產(chǎn)生延時(shí)的一般方法是插入一個(gè)Buffer,、兩級(jí)與非門等,,這種延時(shí)調(diào)整手段是不適用同步時(shí)序設(shè)計(jì)思想的。首先要明確一點(diǎn)HDL語法中的延時(shí)控制語法,,是行為級(jí)的代碼描述,,常用于仿真測(cè)試激勵(lì),,但是在電路綜合是會(huì)被忽略,并不能啟動(dòng)延時(shí)作用,。

  同步時(shí)序電路的延時(shí)一般是通過時(shí)序控制完成的,,換句話說,同步時(shí)序電路的延時(shí)被當(dāng)做一個(gè)電路邏輯來設(shè)計(jì),。對(duì)于比較大的和特殊定時(shí)要求的延時(shí),,一般用高速時(shí)鐘產(chǎn)生一個(gè)計(jì)數(shù)器,通過計(jì)數(shù)器的計(jì)數(shù)控制延遲,;對(duì)于比較小的延時(shí),,可以用D觸發(fā)器打一下,這種做法不僅僅使信號(hào)延時(shí)了一個(gè)時(shí)鐘周期,,而且完成了信號(hào)與時(shí)鐘的初次同步,,在輸入信號(hào)采樣和增加時(shí)序約束余量中使用。

  同步時(shí)序電路的時(shí)鐘如何產(chǎn)生,?時(shí)鐘的質(zhì)量和穩(wěn)定性直接決定著同步時(shí)序電路的性能,。輸入信號(hào)的同步時(shí)序電路要求對(duì)輸入信號(hào)進(jìn)行同步化,如果輸入數(shù)據(jù)的節(jié)拍和本級(jí)芯片的處理時(shí)鐘同頻,,并且建立保持時(shí)間匹配,,可以直接用本級(jí)芯片的主時(shí)鐘對(duì)輸入數(shù)據(jù)寄存器采樣,完成輸入數(shù)據(jù)的同步化,。如果輸入數(shù)據(jù)和本級(jí)芯片的處理時(shí)鐘是異步的,,特別是頻率不匹配的時(shí)候,則要用處理時(shí)鐘對(duì)輸入數(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),。

  5. 乒乓操作

  “ 乒乓操作 ” 是一個(gè)常常應(yīng)用于數(shù)據(jù)流控制的處理技巧,,乒乓操作的處理流程為:輸入數(shù)據(jù)流通過 “ 輸入數(shù)據(jù)選擇單元 ” 將數(shù)據(jù)流等時(shí)分配到兩個(gè)數(shù)據(jù)緩沖區(qū),數(shù)據(jù)緩沖模塊可以為任何存儲(chǔ)模塊,,比較常用的存儲(chǔ)單元為雙口 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),。

  64.JPG

  典型的乒乓操作方法   乒乓操作的最大特點(diǎn)是,,通過輸入數(shù)據(jù)選擇單元和輸出數(shù)據(jù)選擇單元、進(jìn)行運(yùn)算和處理,。把乒乓操作模塊當(dāng)成一個(gè)整體,,站在兩端看數(shù)據(jù),輸入數(shù)據(jù)和輸出數(shù)據(jù)流都是連續(xù)不斷的,,沒有任何停頓,,因此非常適合對(duì)數(shù)據(jù)流進(jìn)行流水線式處理。所以乒乓操作常常應(yīng)用于流水線式算法,,完成數(shù)據(jù)的無縫緩沖和處理,。    乒乓操作的第二個(gè)優(yōu)點(diǎn)是可以節(jié)約緩沖區(qū)空間。比如在WCDMA基帶應(yīng)用中,,1幀是由15個(gè)時(shí)隙組成的,,有時(shí)需要將1整幀的數(shù)據(jù)延時(shí)一個(gè)時(shí)隙后處理,比較直接的方法就是將這幀數(shù)據(jù)緩存起來,,然后延時(shí)一個(gè)時(shí)隙,,進(jìn)行處理。這時(shí)緩沖區(qū)的長(zhǎng)度為1幀的數(shù)據(jù)長(zhǎng),,假設(shè)數(shù)據(jù)速率是3.84Mb/s,,1幀10ms,此時(shí)需要緩沖區(qū)的長(zhǎng)度是38400bit,,如果采用乒乓操作,,只需定義兩個(gè)緩沖1時(shí)隙的數(shù)據(jù)RAM,當(dāng)向一個(gè)RAM寫數(shù)據(jù)時(shí),,從另一塊RAM讀數(shù)據(jù),,然后送到處理單元處理,此時(shí)每塊RAM的容量?jī)H需2560bit,,2塊加起來5120bit的容量,。

  63.JPG

  乒乓操作用低速模塊處理高速數(shù)據(jù)流

  另外,,巧妙運(yùn)用乒乓操作還可以達(dá)到用低速模塊處理高速數(shù)據(jù)流的效果。如圖 2 所示,,數(shù)據(jù)緩沖模塊采用了雙口 RAM ,,并在 DPRAM 后引入了一級(jí)數(shù)據(jù)預(yù)處理模塊,這個(gè)數(shù)據(jù)預(yù)處理可以根據(jù)需要的各種數(shù)據(jù)運(yùn)算,,比如在 WCDMA 設(shè)計(jì)中,,對(duì)輸入數(shù)據(jù)流的解擴(kuò)、解擾,、去旋轉(zhuǎn)等,。假設(shè)端口 A 的輸入數(shù)據(jù)流的速率為 100Mbps ,乒乓操作的緩沖周期是 10ms ,。

  6. 串并轉(zhuǎn)換設(shè)計(jì)技巧

  串并轉(zhuǎn)換是 FPGA 設(shè)計(jì)的一個(gè)重要技巧,,它是數(shù)據(jù)流處理的常用手段,也是面積與速度互換思想的直接體現(xiàn),。串并轉(zhuǎn)換的實(shí)現(xiàn)方法多種多樣,,根據(jù)數(shù)據(jù)的排序和數(shù)量的要求,可以選用寄存器,、 RAM 等實(shí)現(xiàn),。   前面在乒乓操作的圖例中,就是通過 DPRAM 實(shí)現(xiàn)了數(shù)據(jù)流的串并轉(zhuǎn)換,,而且由于使用了 DPRAM ,,數(shù)據(jù)的緩沖區(qū)可以開得很大,對(duì)于數(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ù)輸入。對(duì)于排列順序有規(guī)定的串并轉(zhuǎn)換,,可以用 case 語句判斷實(shí)現(xiàn),。對(duì)于復(fù)雜的串并轉(zhuǎn)換,還可以用狀態(tài)機(jī)實(shí)現(xiàn),。串并轉(zhuǎn)換的方法比較簡(jiǎn)單,,在此不必贅述。

  7. 流水線操作設(shè)計(jì)思想

  首先需要聲明的是,這里所講述的流水線是指一種處理流程和順序操作的設(shè)計(jì)思想,,并非 FPGA ,、 ASIC 設(shè)計(jì)中優(yōu)化時(shí)序所用的 “Pipelining” ,。   流水線處理是高速設(shè)計(jì)中的一個(gè)常用設(shè)計(jì)手段,。如果某個(gè)設(shè)計(jì)的處理流程分為若干步驟,而且整個(gè)數(shù)據(jù)處理是 “ 單流向 ” 的,,即沒有反饋或者迭代運(yùn)算,,前一個(gè)步驟的輸出是下一個(gè)步驟的輸入,則可以考慮采用流水線設(shè)計(jì)方法來提高系統(tǒng)的工作頻率,。

62.JPG

  流水線設(shè)計(jì)的結(jié)構(gòu)   流水線設(shè)計(jì)的結(jié)構(gòu)示意圖如圖所示,。其基本結(jié)構(gòu)為:將適當(dāng)劃分的 n 個(gè)操作步驟單流向串聯(lián)起來。流水線操作的最大特點(diǎn)和要求是,,數(shù)據(jù)流在各個(gè)步驟的處理從時(shí)間上看是連續(xù)的,,如果將每個(gè)操作步驟簡(jiǎn)化假設(shè)為通過一個(gè) D 觸發(fā)器 ( 就是用寄存器打一個(gè)節(jié)拍 ) ,那么流水線操作就類似一個(gè)移位寄存器組,,數(shù)據(jù)流依次流經(jīng) D 觸發(fā)器,,完成每個(gè)步驟的操作。

61.JPG

  流水線設(shè)計(jì)時(shí)序   流水線設(shè)計(jì)的一個(gè)關(guān)鍵在于整個(gè)設(shè)計(jì)時(shí)序的合理安排,,要求每個(gè)操作步驟的劃分合理,。如果前級(jí)操作時(shí)間恰好等于后級(jí)的操作時(shí)間,設(shè)計(jì)最為簡(jiǎn)單,,前級(jí)的輸出直接匯入后級(jí)的輸入即可,;如果前級(jí)操作時(shí)間大于后級(jí)的操作時(shí)間,則需要對(duì)前級(jí)的輸出數(shù)據(jù)適當(dāng)緩存才能匯入到后級(jí)輸入端,;如果前級(jí)操作時(shí)間恰好小于后級(jí)的操作時(shí)間,,則必須通過復(fù)制邏輯,將數(shù)據(jù)流分流,,或者在前級(jí)對(duì)數(shù)據(jù)采用存儲(chǔ),、后處理方式,否則會(huì)造成后級(jí)數(shù)據(jù)溢出,。   在 WCDMA 設(shè)計(jì)中經(jīng)常使用到流水線處理的方法,,如 RAKE 接收機(jī)、搜索器,、前導(dǎo)捕獲等,。流水線處理方式之所以頻率較高,是因?yàn)閺?fù)制了處理模塊,,它是面積換取速度思想的又一種具體體現(xiàn),。

  8. 數(shù)據(jù)接口的同步方法

  數(shù)據(jù)接口的同步是 FPGA/CPLD 設(shè)計(jì)的一個(gè)常見問題,也是一個(gè)重點(diǎn)和難點(diǎn),很多設(shè)計(jì)不穩(wěn)定都是源于數(shù)據(jù)接口的同步有問題,。在電路圖設(shè)計(jì)階段,,一些工程師手工加入 BUFT 或者非門調(diào)整數(shù)據(jù)延遲,從而保證本級(jí)模塊的時(shí)鐘對(duì)上級(jí)模塊數(shù)據(jù)的建立,、保持時(shí)間要求,。   還有一些工程師為了有穩(wěn)定的采樣,生成了很多相差 90 度的時(shí)鐘信號(hào),,時(shí)而用正沿打一下數(shù)據(jù),,時(shí)而用負(fù)沿打一下數(shù)據(jù),用以調(diào)整數(shù)據(jù)的采樣位置,。這兩種做法都十分不可取,,因?yàn)橐坏┬酒聯(lián)Q代或者移植到其它芯片 組的芯片上,采樣實(shí)現(xiàn)必須重新設(shè)計(jì),。而且,,這兩種做法造成電路實(shí)現(xiàn)的余量不夠,一旦外界條件變換 ( 比如溫度升高 ) ,,采樣時(shí)序就有可能完全紊亂,,造成電路癱瘓。

  輸入,、輸出的延時(shí) ( 芯片間,、 PCB 布線、一些驅(qū)動(dòng)接口元件的延時(shí)等 ) 不可測(cè),,或者有可能變動(dòng)的條件下,,如何完成數(shù)據(jù)同步?對(duì)于數(shù)據(jù)的延遲不可測(cè)或變動(dòng),,就需要建立同步機(jī)制,,可以用一個(gè)同步使能或同步指示信號(hào)。另外,,使數(shù)據(jù)通過 RAM 或者 FIFO 的存取,,也可以達(dá)到數(shù)據(jù)同步目的。

  設(shè)計(jì)數(shù)據(jù)接口同步是否需要添加約束,?建議最好添加適當(dāng)?shù)募s束,,特別是對(duì)于高速設(shè)計(jì),一定要對(duì)周期,、建立,、保持時(shí)間等添加相應(yīng)的約束。這里附加約束的作用有兩點(diǎn):提高設(shè)計(jì)的工作頻率,,滿足接口數(shù)據(jù)同步要求,;獲得正確的時(shí)序分析報(bào)告,。



更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

mmexport1621241704608.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。