乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      高級篇:第1章 可編程邏輯設(shè)計指導(dǎo)原則

       zhangquanling 2011-11-05

      第1章 可編程邏輯設(shè)計指導(dǎo)原則


      (1)面積和速度的平衡與互換原則。


                 “面積”指一個設(shè)計所消耗FPGA/CPLD的邏輯資源數(shù)量:對于FPGA,可以用所消耗的觸發(fā)器(FF)和查找表(LUT)來衡量;對于CPLD,常用宏單元(MC)衡量。


                  “速度”指設(shè)計在芯片上穩(wěn)定運行時所能達到的最高頻率,這個頻率由設(shè)計的時序狀況決定,與設(shè)計滿足的時鐘周期、PAD to PAD time、clock setup time、clock hold time和clock-to-output delay等眾多時序特征量密切相關(guān)。


                  如果設(shè)計的時序余量比較大,運行的頻率比較高,則意味著設(shè)計的健壯性更強,整個系統(tǒng)的質(zhì)量更有保證;另一方面,設(shè)計所消耗的面積更小,則意味著在單位芯片上實現(xiàn)的功能模塊更多,需要的芯片數(shù)量更少,整個系統(tǒng)的成本也隨之大幅度消減。相比之下,滿足時序、工作頻率的要求更重要一些,當兩者沖突時,采用速度優(yōu)先的準則。


                從理論上講,一個設(shè)計如果時序余量較大,所能跑的頻率遠遠高于設(shè)計要求,那么就能通過功能模塊復(fù)用減少整個設(shè)計消耗的芯片面積,用速度的優(yōu)勢換面積的節(jié)約;反之,如果設(shè)計的時序要求很高,普通方法達不到設(shè)計頻率,那么一般可以通過將數(shù)據(jù)流串并轉(zhuǎn)換,并行復(fù)制多個操作模塊,對整個設(shè)計進行“乒乓操作”和“串并轉(zhuǎn)換”的思想進行處理,在芯片輸出模塊處再對數(shù)據(jù)進行“并串轉(zhuǎn)換”。


      “面積換速度”的思想:首先將輸入的高速數(shù)據(jù)進行串并轉(zhuǎn)換,然后利用較低的速度對多個模塊并行處理所分配的數(shù)據(jù),最后將處理結(jié)果“并串轉(zhuǎn)換”,完成數(shù)據(jù)速率的要求。這樣我們在整個處理模塊的兩端看都是高速數(shù)據(jù)流。路由器設(shè)計的例子:


      點擊看大圖


       


      操作過程中還涉及很多的方法和技巧,例如,對高速數(shù)據(jù)流進行串并轉(zhuǎn)換,采用“乒乓操作”方法提高數(shù)據(jù)處理速率等。


      (2)硬件原則。


                 for循環(huán)語句的使用:實際工作中,除了描述仿真測試激勵(testbench)時使用for循環(huán)語句外,極少在RTL級編碼中使用for循環(huán),因為for循環(huán)會被綜合器展開為所有變量情況的執(zhí)行語句,每個變量獨立占用寄存器資源,每條執(zhí)行語句并不能有效地復(fù)用硬件邏輯資源,造成巨大的資源浪費。在RTL級描述中,遇到類似算法,推薦的方式是先搞清楚設(shè)計的時序要求,做一個reg型計數(shù)器,在每個時鐘沿累加,并在每個時鐘判斷計數(shù)器情況,并相應(yīng)的處理,能復(fù)用的處理模塊盡量復(fù)用,即使所有操作都不能服用,也可采用case語句展開處理。


      casex和casez 應(yīng)用一定要小心,要注意是否可綜合。


      if……else……與case語句的使用:在verilog語法中,if……else……語句是有“優(yōu)先級”的,一般來說第一個if的優(yōu)先級最高,最后一個else的優(yōu)先級最低。如果描述編碼器,在有些綜合器的參數(shù)中就有關(guān)于優(yōu)先級編碼器硬件原語的選項priority encoder extraction。而case語句是“平行”的結(jié)構(gòu),所有的case的條件和執(zhí)行都沒有“優(yōu)先級”。而建立優(yōu)先級結(jié)構(gòu)(優(yōu)先級樹)會消耗大量的組合邏輯,所以能夠使用case語句的地方盡量用case替換if……else…


      (3)系統(tǒng)原則。


                 對設(shè)計的全局有個宏觀的合理安排,比如時鐘域、模塊復(fù)用、約束、面積和速度等問題。


                一般來說,實時性要求高、頻率快的功能模塊適合使用FPGA/CPLD實現(xiàn)。而FPGA和CPLD相比,更適合實現(xiàn)規(guī)模較大、頻率較高、寄存器資源使用較多的設(shè)計。使用FPGA/CPLD設(shè)計時,應(yīng)該對芯片內(nèi)部的各種底層硬件資源、可用的設(shè)計資源有一個較深刻的認識,F(xiàn)PGA一般觸發(fā)器資源比較豐富,CPLD組合邏輯資源更豐富一些,這直接影響著兩者使用的編碼風(fēng)格。


              RAM資源的使用: altera高端器件(如stratix II、stratix GX、stratix等)內(nèi)部同時含有3種塊RAM結(jié)構(gòu),分別是M512 (512bit)RAM、M4K RAM(4kbit)、M-RAM(512kbit),其中M512 RAM適合做一些靈活的小塊buffer、FIFO、DPRAM、SPRAM、ROM等;M4K RAM應(yīng)用最廣,適用于一般的需求;M-RAM適合做大塊數(shù)據(jù)的緩沖區(qū),如在通信的SDH/SONET傳輸領(lǐng)域,有一些900Kbit的大數(shù)據(jù)包,用M-RAM實現(xiàn)緩沖結(jié)構(gòu)非常方便。


            軟核的使用:FPGA的一個發(fā)展趨勢是越來越多的FPGA產(chǎn)品將包含DSP或CPU等軟處理核,從而FPGA將由傳統(tǒng)的硬件設(shè)計手段逐步過渡為系統(tǒng)級設(shè)計工具。內(nèi)嵌在FPGA之中的DSP或CPU處理模塊比較適合應(yīng)用于運算密集的FIR濾波器、編碼解碼、FFT等操作,其工作效率可以達到系統(tǒng)DSP和CPU 的幾百倍。


             串行收發(fā)器的使用:很多高端FPGA內(nèi)嵌了SERDES以完成高速串行信號的收發(fā)。SERializer和DESerializer的英文縮寫,即串行收發(fā)器,它由兩部分組成:發(fā)端是串行發(fā)送單元SERializer,用高速時鐘調(diào)制編碼數(shù)據(jù)流;接收端為串行接收單元DESerializer,其主要作用是從數(shù)據(jù)流中恢復(fù)出時鐘信號,并解調(diào)還原數(shù)據(jù),根據(jù)其功能,接收單元還有一個名稱叫時鐘數(shù)據(jù)恢復(fù)器(CDR,clock and data recovery)。FPGA中SERDES技術(shù)的應(yīng)用很好的解決了高速系統(tǒng)數(shù)據(jù)傳輸?shù)钠款i,節(jié)約了單板面積,提高了系統(tǒng)的穩(wěn)定性,是高速系統(tǒng)設(shè)計的強有力支撐。


           根據(jù)設(shè)計的速度要求,要合理選擇器件的速度等級,并在設(shè)計中正確地分頻不同速度等級的布線資源與時鐘資源,需要提醒的是:選擇高等級的器件和改善布線資源分配僅僅是提高芯片工作速度的輔助手段,設(shè)計速度主要由電路的整體結(jié)構(gòu)、代碼的coding style等因素決定,善用芯片內(nèi)部的PLL或DLL資源完成時鐘的分頻、倍頻、移相等操作不僅簡化了設(shè)計,并且能有效地提高系統(tǒng)各的精度和穩(wěn)定性。


       


      (4)同步設(shè)計原則。


      同步設(shè)計原則:


      早期PLD設(shè)計經(jīng)常采用行波計數(shù)器(ripple counter)或者異步脈沖生成器等典型的異步邏輯設(shè)計方式以節(jié)約設(shè)計所消耗的面積資源,但異步邏輯設(shè)計的時序正確性完全依賴于每個邏輯元件和布線的延遲,所以其時序相對繁雜而困難,并且極易產(chǎn)生亞穩(wěn)態(tài)、毛刺等,造成設(shè)計穩(wěn)定性下降和設(shè)計頻率不高,但FPGA/CPLD的一個顯著發(fā)展趨勢是低成本器件不斷經(jīng)濟化,器件資源不再成為設(shè)計的主要矛盾,而同步時序電路對全面提高設(shè)計的頻率和穩(wěn)定性至關(guān)重要,從這個層面上來講,盡量使用同步時序電路更加重要。


      現(xiàn)代PLD設(shè)計推薦采用同步時序設(shè)計方式。


       


      同步時序設(shè)計的注意事項:


      穩(wěn)定可靠的數(shù)據(jù)采樣必須遵從以下兩個原則:


      . setup時間原則:在有效時鐘沿到達前,數(shù)據(jù)輸入至少已經(jīng)穩(wěn)定了采樣寄存器的setup時間之久。


      . hold時間原則:在有效時鐘沿到達后,數(shù)據(jù)輸入至少還將穩(wěn)定保持采樣寄存器的hold時間之久。


       


      同步時序電路的延遲:最常用的設(shè)計方法是用分頻或倍頻的時鐘或者同步計數(shù)器完成所需的延遲。換句話說,同步時序電路的延遲被當做一個電路邏輯來設(shè)計,對于比較大的和特殊定時要求的演示,一般要用高速時鐘產(chǎn)生一個計數(shù)器,根據(jù)計數(shù)器的計數(shù)控制延時;對于比較小的延時,可以用D觸發(fā)器打一下,這種做法不僅僅使信號延時了一個時鐘周期,而且完成了信號與時鐘的初次同步,在輸入信號采樣和增加時序約束余量中使用,另外許多初學(xué)者用行為級(behavioral level)方法描述延時,如“#5 a <= 4’b0101;”這種行為級描述方法常用于仿真測試激勵,但是在電路綜合時會被忽略,并不能起到延時作用。


       


      Verilog定義為reg型,不一定綜合成寄存器。


      Verilog代碼中最常用的兩種數(shù)據(jù)類型是wirereg,一般來說,wire型指定的數(shù)據(jù)和網(wǎng)線通過組合邏輯實現(xiàn),而reg型指定的數(shù)據(jù)不一定就是用寄存器實現(xiàn)。


       


      可編程邏輯常用設(shè)計思想和技巧


      4種思想和技巧:乒乓操作、串并轉(zhuǎn)換、流水線操作和數(shù)據(jù)接口同步)


      “乒乓操作”:常用于數(shù)據(jù)流控制的處理技巧。


             特點:


      1.把乒乓操作模塊當作一個整體,站在這個模塊的兩端看數(shù)據(jù),輸入數(shù)據(jù)流和輸出數(shù)據(jù)流都是連續(xù)不斷的,非常適合對數(shù)據(jù)流進行流水線式處理,因此乒乓操作常常應(yīng)用于流水線式算法,完成數(shù)據(jù)的無縫緩沖與處理。


      2.可以節(jié)約緩沖區(qū)空間。


      3. 可以用低速模塊處理高速數(shù)據(jù)流。所要求的數(shù)據(jù)處理速率僅僅為輸入數(shù)據(jù)速率的1/2


      “串并轉(zhuǎn)換”:面積換速度,SERDES技術(shù)就是串并轉(zhuǎn)換的典型應(yīng)用。


       


      “流水線操作”:是高速設(shè)計的一個常用設(shè)計手段。如果某個設(shè)計的處理流程分為若干步驟,而且整個數(shù)據(jù)處理是“單流向的”,即沒有反饋或者迭代運算,前一個步驟的輸出是下一個步驟的輸入,則可以考慮采用流水線設(shè)計方法提高系統(tǒng)的工作效率。


       


      異步時鐘域數(shù)據(jù)同步


      很多設(shè)計工作部穩(wěn)定都是源于異步時鐘域數(shù)據(jù)同步不穩(wěn)定。


      異步時鐘域數(shù)據(jù)同步,也被稱為數(shù)據(jù)接口同步,指任何兩個時鐘不同步的數(shù)據(jù)域之間可靠地進行數(shù)據(jù)交換的問題,數(shù)據(jù)的時鐘域不同步主要有兩種情況:


      . 兩個域的時鐘頻率相同,但是相差不固定,或者相差固定但是不可測,簡稱為同頻異相問題。


      . 兩個時鐘域頻率根本不同,簡稱為異頻問題。


       


      兩種不推薦的異步時鐘域操作方法:


      一種是通過增加buffer或者其他門延時調(diào)整采樣;另一種是盲目使用時鐘正負沿調(diào)整數(shù)據(jù)采樣。


      (1)       通過增加buffer等組合邏輯延遲線調(diào)整采樣時間。


      在早期邏輯電路圖設(shè)計階段,有些設(shè)計者習(xí)慣通過手工加入buffer或者非門調(diào)整數(shù)據(jù)延遲的習(xí)慣,從而保證本級模塊的時鐘對上級模塊數(shù)據(jù)的建立、保持時間的要求,這種做法主要應(yīng)用場合為:一是使用分立邏輯元件(如74系列)搭建數(shù)字邏輯電路;另一種是在ASIC設(shè)計領(lǐng)域。但是是由你過組合邏輯方法產(chǎn)生延遲容易產(chǎn)生毛刺,而且時序余量較差,一旦外界條件變換(環(huán)境試驗、特別是高低溫試驗),采樣時序就有可能完全紊亂,造成電路癱瘓,電路的可維護性和繼承性都很差。


      但是如果使用者使用了同一個時鐘的兩個沿,但是保證沒有在同一個周期內(nèi)同時使用雙沿,則不會增加時鐘頻率。


       


      (2)       盲目使用時鐘正負沿調(diào)整數(shù)據(jù)采樣。


      很多人習(xí)慣隨意使用時鐘的正負沿調(diào)整采樣,甚至產(chǎn)生一系列不同相位或不同占空比的時鐘,使用其正負沿調(diào)整數(shù)據(jù)。該做法不推薦,原因如下:


      . 第一,如果在一個時鐘周期內(nèi)使用時鐘的雙沿同時操作,則使用該時鐘的同相倍頻時鐘也能實現(xiàn)相同的功能,換句話說,一個時鐘周期內(nèi),使用時鐘的雙沿同時操作,相當于使用了一個同相的倍頻時鐘,此時因為設(shè)計的時鐘頻率提升,所有相關(guān)的使用約束都會變得更緊,不利于可靠實現(xiàn)。


      . 第二,FPGAPLLDLL都能較好地保證某個時鐘沿的jitterskew和占空比等各種參數(shù)指標,而對于另一個時鐘沿的指標控制并不是那么嚴格,特別對于綜合、實現(xiàn)等EDA的軟件,如果明確對另外一個沿進行相關(guān),這個沿的時序分析不一定完善,其綜合或?qū)崿F(xiàn)結(jié)果就不一定能嚴格滿足用戶期望的時序要求(如setup、hold時間等),往往造成在該沿操作部穩(wěn)定的結(jié)果。


       


      兩類異步時鐘域操作的解決方法:


      (1)       同頻異相問題。


      簡單解決方法是用后級時鐘對前級數(shù)據(jù)采樣兩次,即通常所述的用寄存器打兩拍,這樣有效減少了亞穩(wěn)態(tài)的傳播,使后級電路數(shù)據(jù)都是有效電平值。但這種做法并不能保證兩級寄存器采樣后的數(shù)據(jù)是正確的電平值,因為一旦setuphold時間不滿足,采樣發(fā)生亞穩(wěn)態(tài),則經(jīng)判決時間(resolution time)后,可能判決到錯誤電平值。所以這種方法僅僅適用于對少量錯誤不敏感的功能單元。


      可靠的做法是用DPRAMFIFO或者一段寄存器buffer完成異步時鐘域的數(shù)據(jù)轉(zhuǎn)換。把數(shù)據(jù)存放在DPRAMFIFO的方法如下:將上級芯片提供的數(shù)據(jù)隨路時鐘作為寫信號,將數(shù)據(jù)寫入DPRAMFIFO,然后使用本級的采樣時鐘將數(shù)據(jù)讀出即可,由于時鐘頻率相同,所以DPRAMFIFO兩端的數(shù)據(jù)吞吐率一致。


      (2)       異頻問題。


      解決方法是使用DPRAMFIFO。思路同上。用上級隨路時鐘寫入上級數(shù)據(jù),然后用本級時鐘讀出數(shù)據(jù),但是由于時鐘頻率不同,所以兩個端口的數(shù)據(jù)吞吐率不一致,設(shè)計時一定要開好緩沖區(qū),并通過監(jiān)控(fullhalf、empty等指示)確保數(shù)據(jù)流不會溢出。


       


      異步時鐘域的轉(zhuǎn)換核心問題就是要保證下級時鐘對上級數(shù)據(jù)采樣的setup時間和hold時間。如果觸發(fā)器的setup時間和hold時間不滿足,就可能出現(xiàn)亞穩(wěn)態(tài),此時,觸發(fā)器輸出端Q在有效時鐘沿之后比較長的一段時間內(nèi)處于不確定的狀態(tài),在這段時間內(nèi)Q端產(chǎn)生毛刺并不斷震蕩,最終固定在某一電壓值,此電壓值并不一定等于原來數(shù)據(jù)輸入端D的數(shù)值,這段時間稱為決斷時間(resolution time)。經(jīng)過resolution time之后Q端將穩(wěn)定到01上,但究竟是0還是1是隨機的,與輸入沒有必然關(guān)系。


      亞穩(wěn)態(tài)破壞系統(tǒng)的穩(wěn)定性。


      只要系統(tǒng)中有異步元件,亞穩(wěn)態(tài)就無法避免,因此設(shè)計的電路首先要減少亞穩(wěn)態(tài)導(dǎo)致的錯誤,其次要使系統(tǒng)對產(chǎn)生的錯誤不敏感。前者要靠同步設(shè)計來實現(xiàn),后者根據(jù)不同的設(shè)計應(yīng)用有不同的處理方法。


      使用兩級寄存器采樣可以有效地減少亞穩(wěn)態(tài)繼續(xù)傳播的概率。其原理是即使第一個觸發(fā)器的輸出端存在亞穩(wěn)態(tài),經(jīng)過一個clk周期后,第二個觸發(fā)器D端的電平仍未穩(wěn)定的概率非常小,因此第二個觸發(fā)器Q端基本不會產(chǎn)生亞穩(wěn)態(tài)。理論上如果再添加一級寄存器,使同步采樣達到3級,則末級輸出為亞穩(wěn)態(tài)的概率幾乎為0.


      兩級寄存器采樣僅能降低亞穩(wěn)態(tài)的概率,但并不能保證第二級輸出的穩(wěn)態(tài)的電平就是正確電平,由于經(jīng)過resolution time之后寄存器輸出的電平是一個不確定的穩(wěn)態(tài)值,也就是說這種處理方法并不能排除采樣錯誤的產(chǎn)生,這時就要求說設(shè)計的系統(tǒng)對采樣錯誤有一定的容忍度。


       


      Altera推薦的coding style


      良好的coding style對設(shè)計的工作頻率,說消耗的芯片面積,甚至整個系統(tǒng)的穩(wěn)定性都非常重要,而且良好規(guī)范的coding style將更便于設(shè)計的移植,如從一個器件族移植到另一個器件族,或者同一個器件族不同速度等級之間的移植,還包括altera FPGA利用hard copy向結(jié)構(gòu)化ASIC的移植等。


         “好的coding style會使綜合、實現(xiàn)等優(yōu)化事半功倍,達到最優(yōu)化的結(jié)果;不良的coding style會使綜合、實現(xiàn)南轅北轍,甚至產(chǎn)生錯誤的結(jié)果?!保?,綜合、實現(xiàn)等EDA工具的優(yōu)化能力和正確性最終取決于設(shè)計的coding style的優(yōu)劣。


       


      Coding style分為一般性coding style和針對綜合工具、實現(xiàn)工具、器件類型的coding style。另有一部分coding style是針對altera器件的特點和硬件結(jié)構(gòu)的,與器件緊密聯(lián)系。使用altera推薦的coding style能夠正確地實例化底層單元模塊,合理地利用其固有的硬件結(jié)構(gòu),以達到最優(yōu)化的設(shè)計效果。


      這里所說的coding style主要是基于RTL級而言的。


      (1)       結(jié)構(gòu)層次化編碼(hierarchical coding


      (2)       模塊化劃分的技巧(design partitioning


      模塊劃分的基本原則如下:


      1.       對每個同步時序設(shè)計的子模塊的輸出使用寄存器。使用寄存器分割同步時序單元的好處有:便于綜合工具權(quán)衡所分割的子模塊中的組合電路部分和同步時序電路部分,從而達到更好的時序優(yōu)化效果,這種模塊劃分符合時序約束的習(xí)慣,便于利用約束屬性進行時序約束。


      2.       將相關(guān)的邏輯或者可以服用的邏輯劃分在同一模塊內(nèi)(呼應(yīng)系統(tǒng)原則)??勺畲蟪潭壬蠌?fù)用資源,減少設(shè)計所消耗的面積;更利于綜合工具優(yōu)化某個具體功能的時序關(guān)鍵路徑;


      3.       將不同優(yōu)化目標的邏輯分開。


      對于時序緊張的部分,應(yīng)獨立劃分為一個模塊,其優(yōu)化目標為“speed”,以便于時序約束,也便于綜合和實現(xiàn)工具進行優(yōu)化;將資源消耗過大的部分劃分為獨立的模塊,優(yōu)化目標設(shè)定為“area”,有利于區(qū)域布局與約束。這種同時考慮兩種優(yōu)化目標會使綜合器陷入互相制約的困境,耗費巨大的綜合優(yōu)化時間也得不到令人滿意的綜合優(yōu)化結(jié)果。


      4.       將松約束的邏輯歸到同一個模塊。


      5.       將存儲邏輯獨立劃分成模塊。大多數(shù)的仿真器對大面積的RAM都有獨特的內(nèi)存管理方式,以提高仿真效率。


      6.       合適的模塊規(guī)模。


      龐大的模塊將要求對綜合器同時處理更多的邏輯結(jié)構(gòu),對綜合器的處理能力和計算機的配置提出了較高的要求;不利于發(fā)揮目前非常流行的增量綜合與實現(xiàn)技術(shù)的優(yōu)勢。


       


      組合邏輯的注意事項:


      1.       避免組合邏輯反饋環(huán)路(combinational loops)。組合邏輯反饋環(huán)路是PLD設(shè)計的大忌,最容易因震蕩、毛刺、時序違規(guī)等引起整個系統(tǒng)的不穩(wěn)定和不可靠。


      具體操作方法:. 牢記任何反饋環(huán)路必須包含寄存器;


                    . 檢查綜合、實現(xiàn)報告的warning信息,發(fā)現(xiàn)combinational loops后進行相應(yīng)的修改。


      (3)       替換延遲鏈(delay chains)。避免使用異步的delay chains。


      (4)       替換異步脈沖產(chǎn)生單元(pulse generator


      在異步設(shè)計中,常用delay chains完成脈沖產(chǎn)生。這類異步方法設(shè)計的脈沖產(chǎn)生電路的脈沖寬度取決于delay chains的門延遲和線延遲。會帶來穩(wěn)定性、可靠性問題,故必須避免使用。同步時序設(shè)計脈沖電路的常用方法設(shè)計的脈沖寬度不因器件改變或設(shè)計移植而改變,恒等于時鐘周期,而且避免了異步設(shè)計的諸多不確定因素,其時序路徑編譯計算、STA分析和仿真驗證。


      (5)       慎用鎖存器(latch)。同步時序設(shè)計要盡量避免使用latch。如在設(shè)計組合邏輯時使用不完全的條件判斷語句,如有if沒有else或者不完整的case語句等;另一種情況是設(shè)計中有組合邏輯的反饋環(huán)路等異步邏輯。


       


      時鐘設(shè)計的注意事項:


      同步時序電路推薦的時鐘使用方式:時鐘經(jīng)全局時鐘輸入引腳輸入,通過FPGA內(nèi)部專用PLLDLL進行倍頻/分頻移相等調(diào)整與運算,然后經(jīng)FPGA內(nèi)部全局時鐘布線資源驅(qū)動到達芯片內(nèi)所有寄存器和其他模塊的時鐘輸入端。


      對于內(nèi)部邏輯產(chǎn)生的時鐘必須在組合邏輯產(chǎn)生的時鐘后插入寄存器,否則會使設(shè)計部穩(wěn)定,對于時鐘路徑必須插入寄存器以過濾毛刺。


      另外組合邏輯產(chǎn)生的時鐘的jitterSkew都比較大,如果時鐘產(chǎn)生邏輯的延遲比數(shù)據(jù)路徑的延遲更大,會帶來負的skew,負的skew同步邏輯設(shè)計而言是災(zāi)難性的,所以使用組合邏輯產(chǎn)生內(nèi)部時鐘僅僅適用于時鐘頻率較低、時鐘精度要求不高的情況;另外這類時鐘應(yīng)該使用全局布線資源或者第二全局布線資源之類的快速布線資源布線,而且需要對組合邏輯電路附加一定的約束條件。


       


      Ripple counter(行波計數(shù)器):結(jié)構(gòu)為一組寄存器級聯(lián),每個寄存器的輸出端接到下一級寄存器的時鐘管腳,這種計數(shù)器常常用于異步分頻電路,典型的異步時序邏輯。異步時序邏輯會帶來各種各樣的時序問題,在同步時序電路設(shè)計中必須嚴格避免使用ripple counter


       


      時鐘選擇:為適應(yīng)不同數(shù)據(jù)速率要求,經(jīng)常要進行時鐘切換。切換的最佳途徑是使用FPGA/CPLD內(nèi)部的專用clock MUX(全局時鐘網(wǎng)絡(luò)),這些MUX反應(yīng)速度快,鎖定時間短,切換瞬間帶來的抖動和沖擊小。如果器件沒有專用的clock MUX,應(yīng)盡量滿足:


      . 時鐘切換控制邏輯在配置后將不再改變;


      . 時鐘切換后,對所有相關(guān)電路復(fù)位,以保證所有寄存器、狀態(tài)機和RAM等電路的狀態(tài)不會鎖死進入死循環(huán);


      . 所有設(shè)計系統(tǒng)對時鐘切換過程發(fā)生的短暫錯誤不敏感。


       


      門控時鐘:一種常用減少功耗的手段,在同步時序電路中,應(yīng)該盡量不適用Geted Clock。門控時鐘會污染clock的質(zhì)量,通過門控后產(chǎn)生毛刺并使時鐘的skew,jitter等指標惡化。如果真的要減少功耗,可采用低核電壓FPGAcore電壓為1.0v),FPGA休眠功能,動態(tài)部分重構(gòu)技術(shù),clock MUX等技術(shù)。


       


      時鐘同步使能端:大多數(shù)如寄存器等同步單元都支持時鐘的同步使能(synchromous clock enable),通過使用synchromous clock enable端完成某些邏輯功能,有時可以節(jié)約芯片面積并提高設(shè)計頻率。


       


      全局異步復(fù)位資源:大多數(shù)FPGA都具有專用的全局異步復(fù)位/置位資源,這類資源通常使用專用的低skew、低delay布線資源,直接到達寄存器、block RAM等底層單元,以保證高性能的復(fù)位/置位效果。Altera器件中一般使用全局時鐘網(wǎng)絡(luò)驅(qū)動全局同步或異步復(fù)位/置位信號。全局同步或異步置位/復(fù)位信號的應(yīng)用比較復(fù)雜,不是所有的情況都推薦使用,但是一般情況下使用全局同步或異步復(fù)位/置位信號可以簡化設(shè)計、節(jié)約芯片面積。


       


      使用pipeline技術(shù)優(yōu)化時序:即流水線時序優(yōu)化方法,其本質(zhì)是調(diào)整一個較長的組合邏輯路徑中寄存器位置,用寄存器合理分割該組合邏輯路徑,從而降低了對路徑的clock-to-outputsetup 等時間參數(shù)的要求,達到提高設(shè)計頻率的目的。但是必須注意的是pipeline優(yōu)化技術(shù)只能合理地調(diào)整寄存器位置,而不應(yīng)該憑空增加寄存器級數(shù),所以pipeline有時也被稱為register balance


       


      模塊復(fù)用與resource sharing:不要依靠綜合工具的優(yōu)化能力進行優(yōu)化,主要還是要通過提高coding style的修養(yǎng)來提高代碼質(zhì)量。


       


      邏輯復(fù)制:扇出非常大時,為了增加信號的驅(qū)動能力,必須插入多級buffer,這樣就在一定程度上增加了這個型號路徑的延遲,這時我們可以復(fù)制生成這個信號的邏輯,使多路同頻同相的信號驅(qū)動后續(xù)電路,平均到每路的扇出變低,不需要加buffer也能滿足驅(qū)動能力的要求,這樣就節(jié)約了該信號的路徑時延。


           邏輯復(fù)制與前面的resource sharing是兩個對立統(tǒng)一的概念。Resource sharing目的是為了節(jié)省面積資源,而邏輯復(fù)制的目的是為了提高工作頻率。當使用邏輯復(fù)制手段提高工作頻率的時候,必然會增加面積資源,對立統(tǒng)一,是面積與速度的平衡。


       


      信號敏感表:時序邏輯的信號敏感表比較好寫,在信號敏感表寫明時鐘信號的正負觸發(fā)沿即可,關(guān)于信號敏感表的主要問題幾種在組合邏輯的信號敏感表的寫法,需強調(diào)的是:


      (1)       將操作進程(verilog always blockVHDLprocess block)中使用到的所有輸入信號和條件判斷信號都列在信號敏感表中。


      (2)       希望通過證件信號敏感表來完成某項邏輯功能的大錯特錯;


      (3)       不完整的信號敏感表會造成前仿真結(jié)果和綜合、實現(xiàn)后仿真結(jié)果不一致;


      (4)       一般綜合工具對于不完整的信號敏感表的默認做法是,將處理進程中用到的所有輸入和判斷條件信號都默認到綜合結(jié)果的信號敏感表中,并對原設(shè)計代碼敏感表中遺漏的信號報警告信息。


       


      狀態(tài)機設(shè)計的一般原則:


      (1)       選擇狀態(tài)機的編碼方式。Binary、gray-code編碼使用最少的觸發(fā)器,較多的組合邏輯,而one-hot編碼反之。由于CPLD更多地提供組合邏輯資源,而FPGA更多地提供觸發(fā)器資源,所以CPLD多使用gray-code,而FPGA多使用one-hot編碼。另一方面,對于小型設(shè)計使用gray-codebinary編碼更有效,而大型狀態(tài)機使用one-hot更高效。


      (2)       兩種狀態(tài)機的設(shè)計方法。第一種,將狀態(tài)機轉(zhuǎn)移和狀態(tài)的操作、判斷等寫到一個模塊中;另一種是將狀態(tài)轉(zhuǎn)移單獨寫成一個模塊,將狀態(tài)的操作和判斷等寫到另一個模塊中。后者方式較好。


      因為:狀態(tài)轉(zhuǎn)移是用寄存器實現(xiàn)的,是同步時序部分。狀態(tài)轉(zhuǎn)移條件的判斷是通過組合邏輯判斷實現(xiàn)的,之所以后者更合理就在于第二種編碼將同步時序和組合邏輯分別放到不同的程序塊中實現(xiàn),這樣不但便于閱讀、理解、維護,更重要的是鯉魚綜合器優(yōu)化代碼,利于用戶添加合適的時序約束條件,利于布局布線器實現(xiàn)設(shè)計。


      (3)       初始狀態(tài)和默認狀態(tài)。


      (4)       指定默認輸出值。所有輸出指定一個默認的輸出值;所有輸出最好用寄存器打一拍。


      (5)       狀態(tài)機輸出邏輯復(fù)用。將輸出邏輯獨立出來,單獨寫一個部分。


       


      三態(tài)信號的設(shè)計:altera推薦在設(shè)計頂層中所有的雙向總線(既做輸入又做輸出的總線)定義為三態(tài)信號。但必須注意的是,禁止在除頂層以外的其他子層次定義雙向端口,除非是頂層中直接驅(qū)動雙向端口的,禁止賦值高阻態(tài)Z。


       


      Stratix IIALM可以配置成6輸入LUT,使用6-LUT可以同時完成3bit加法;


      大多數(shù)FPGA都是基于LE結(jié)構(gòu)的,一個LE由一個4輸入查找表加上一個觸發(fā)器組成

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多