xilinx fpga學習筆記3

第三章:HDL高級設計技術(1)

一、設計要點:

(1)根據綜合工具設計FPGA:很多綜合工具都有特殊的算法,取決於不同的目標器件,執行不同的約束和編譯選項,在創建FPGA設計之前,設計者應該充分了解所用的綜合工具如何處理設計。

(2)根據芯片特性設計FPGA:使用FPGA系統特性,比如DCM,乘法器,移位寄存器,和存儲器等創建HDL代碼,必須考慮大小(寬度和深度)和功能特性,這都可以通過充分了解FPGA的資源做出正確的系統選擇,即使用最合適的目標底層結構來實現。

(3)設計分層:分層爲設計帶來了極大的靈活性。爲了保證模塊邊界對於優化不是一個障礙,模塊應該有寄存的輸出。檢查綜合工具,確認每個模塊適合的最大門數,如果可用的話,使用綜合器的分組命令,模塊的大小和內容影響着綜合的結果和設計實現。

(4)爲了滿足時序要求,在綜合佈局佈線工具中必須設置時序約束。


二、if和case的比較

(1)if描述指定了一個有優先級的編碼邏輯,而case描述生成的邏輯是並行的

(2)if描述可以包含一系列不同的表達式,而case描述比較的是一個公共表達式

(3)if-else結構速度慢,但佔用面積小。case描述速度快,但佔用面積大。

(4)避免出現鎖存器:a、當if描述中包含所有條件分支時,不會生成鎖存器結構。

  b、當case描述包含所有條件分支時,不會產生鎖存器。

ps:鎖存器是電平觸發的存儲器,觸發器是邊沿觸發的存儲器。鎖存器對毛刺敏感,不能異步復位,因此在上電後處於不確定的狀態。


三、邏輯複製和複用技術

(1)、邏輯複製是通過增加面積而改善設計時序的優化方法,經常用於調整信號的扇出。

ps:扇出是指某一器件的輸出驅動與之相連的後續器件的能力,一個器件的扇出數是有限制的。扇出的越多,所要求的驅動能力就越高,就需要在邏輯單元的輸出部分相應的添加輸出緩存器來增強輸出部分的驅動能力,從而會導致增大輸出部分信號的傳輸延遲。

另外:很多廠商的EDA軟件具有自動調節邏輯單元扇出的功能,對於簡單的數字系統,由EDA軟件自動處理。

              例: always @(posedge clk ) 

                          begin

                              ce1 = ce ; 

                              ce2 = ce ;     

  end

                     always @(posedge clk )

                        begin

                            if(ce1)                                                   //begin和end之間的兩個if是並行的,if-else才存在優先級

                                 res[31:0] <= data[31:0] ;

                            if(ce2)

                                res[63:32] <= data[63:32] ;

                        end

(2)、邏輯複用是通過資源共享減少算術運算符的數量,這樣就進一步減少所使用的資源。

ps:XST所支持的資源共享暴扣加法器、減法器、加法/加法器和乘法器。在XST默認使能資源共享,和設計者選擇的整個優化策略無關。如果電路性能是優化目標,而不能滿足時序目標,則禁止資源共享是有幫助的。


四、並行和流水技術

1、並行設計技術:並行處理就是用多個處理流程同時處理到達的數據流,提高對多數據的處理能力,並行處理要求這些處理任務之間是不相關的,如果數據流之間存在相互依賴,那麼用並行處理的方法就很難提高對數據流的處理速率。

2、流水設計技術:設計要求事件所分成的n個處理步驟在處理時間上具有相同的數量級,這樣的處理規則是爲了保證流水線不會因爲處理時間的差異而發生阻塞。

  (1)使用流水線可以增加延遲(更多的時鐘週期用於處理數據)爲代價,動態的提高目標器件的性能;

  (2)通過重建帶有幾級邏輯的長數據路徑,來增加系統的性能;

  (3)實現更快的時鐘週期,結果是,以格外的數據延遲爲代價,增加了數據的吞吐量。



五、同步單元處理技術

    1、在實際的數字系統中,常存在多時鐘源驅動多邏輯單元的情況,因此實際的數字系統應該是一個異步系統,對於這樣的系統可以採用先局部同步處理,然後對全局異步單元加入異步單元同步化處理機制來實現。

    2、同步系統中包括由組合邏輯部分完成的邏輯運算及由存儲單元對於邏輯運算結果的存儲:實際的存儲過程由時鐘信號控制,併發生在信號從邏輯門的輸出端穩定後。該模型中的每個時鐘週期開始時,輸入信號以及存儲單元存儲的數據輸入組合邏輯,經過一定邏輯門以及傳輸的時延後,組合邏輯產生結果輸出並保持穩定,在這個時鐘週期的末尾將輸出組合邏輯的結果並存入存儲單元,並在下一個時鐘週期重新參加組合邏輯的操作。

    3、數字系統可以看成由一系列同時執行的由組合邏輯構成的計算單元組成的,如圖給出了本地數據通路對模型的抽象。可以看出,組合邏輯的時延被限制在一個時鐘週期內。在本地數據通路的始端,前段寄存器Rs是存儲單元,用於在時鐘週期開始的時候給組合邏輯提供部分或者全部的輸入信號,同時在本地數據通路的末端,組合邏輯的結果在時鐘週期的末尾被正確的鎖存於末端寄存器Rd中




   4、爲了使同步系統具有良好的可控性,系統時鐘提供了一種時間窗的機制保證可有足夠的時間讓信號在邏輯門以及邏輯門的連線上傳播,並最後成功鎖存與寄存器,實際上這個時間窗就是數據信息的建立和保持時間。

   5、在數字系統中同步電路的設計應遵循以下準則。
  (1)儘量在設計中使用單時鐘,且走全局時鐘網絡。在單時鐘設計中,很容易就將整個設計同步於驅動時鐘,使設計簡化。全局時鐘網絡的時鐘是性能最優,便於預測的時鐘,具有最強的驅動能力,不僅能保證驅動每個寄存器,且時鐘漂移可以忽略。在多時鐘應用中,要做到局部時鐘同步。在設計中,應將時鐘信號通過FPGA芯片的專用時鐘引腳接入,以獲得低抖動的時鐘信號。
  (2)儘量避免使用混合時鐘沿來採樣數據或驅動電路,使用混合時鐘沿將會使靜態時序分析複雜,並導致電路工作頻率降低,
  (3)避免使用門控時鐘。如果一個時鐘節點由組合邏輯驅動,那麼就形成了門控時鐘。門控時鐘常用來減少功耗,但其相關的邏輯電路不是同步電路,即有可能帶有毛刺,而任何一點點小毛刺都可以造成D觸發器誤翻轉;此外,門控時鐘會降低時鐘的質量,產生毛刺,並降低偏移和抖動等性能指標。
  (4)儘量不要在模塊內部使用計數器分頻產生所需時鐘。各個模塊內部各自分頻會導致時鐘管理混亂,不僅使時序分析變得複雜,產生較大的時鐘漂移,浪費了寶貴的時序裕量,降低了設計可靠性。其功能可以通過時鐘使能電路來實現。


六、異步單元處理技術

  (1) 異步時序單元指的是在設計中有兩個或兩個以上的時鐘,且時鐘之間是不同頻率或同頻不同相的關係。而且異步時序設計的關鍵就是把數據或者控制信號正確的進行跨

時鐘域傳輸,也就是在異步單元之間引入局部同步化的處理機制。

  (2) 在異步電路的處理中,主要是數據的建立和保持時間參數的處理,在FPGA內的每一個觸發器都有給定的建立和保持時間參數,在這個時間參數內,數據信息不允許變化

,如果違反了這個規則,那麼數據將出現亞穩態。

  (3)爲了避免亞穩態問題,通常採用的方法是雙鎖存器法,即在一個信號進入另一個時鐘之前,將該信號用鎖存器連續鎖存兩次,最後得到的採樣結果可以消除亞穩態問題,

另一種方法是使用異步fifo對跨越不同時間域的數據信息進行處理。


七、使用時鐘使能引腳代替門控時鐘

xilinx建議使用CLB時鐘使能引腳代替門控時鐘,門控時鐘可能導致毛刺,增加時鐘延遲,時鐘抖動,以及其他不希望出現的結果。使用時鐘使能能節省時鐘資源,改善時序特性和設計分析,如果想用門控時鐘以降低功耗,大多數的fpga器件有時鐘使能全局緩衝區資源,稱爲bufgce,然而,時鐘使能仍是減少或停止設計中部分時鐘的首選方法

    門控時鐘的Verilog HDL描述如下:

module gate_clock(

input DATA,IN1,IN2,LOAD,CLOCK,

output reg OUT1 );

wire GATECLK ;

assign GATECLK = (IN1 & IN2 & LOAD & CLOCK);

always @(posedge GATECLK)

  OUT1 <= DATA ;

endmodule

      時鐘使能的Verilog HDL描述如下:             

module gate_clock(

input DATA,IN1,IN2,LOAD,CLOCK,

output reg OUT1 );

wire ENABLE ;

assign ENABLE = (IN1 & IN2 & LOAD) ;

always @(posedge CLOCK)

if(ENABLE)

OUT1 <= DATA ;

endmodule


八、有限自動狀態機設計
有限自動狀態機(finate state machine,FSM)的設計是複雜數字系統中非常重要的一部分,是實現高效率高可靠性邏輯控制的重要途徑。大部分數字系統都是由控制單元和數據單元組成的。數據單元負責數據的處理和傳輸,而控制單元主要是控制數據單元的操作的順序。而在數字系統中,控制單元往往是通過使用有限狀態機實現的,有限狀態機接受外部的信號以及數據單元產生的狀態信息,產生控制信號序列。

1、一段式狀態機(單進程狀態機)

整體的過程用一個進程描述,即在一個並行序列中。

2、二段式狀態機(雙進程狀態機)

輸出函數用一個進程描述,而狀態寄存器和下一狀態函數用另一進程描述。

3、三段式狀態機(三進程狀態機)

輸出函數用一個進程描述。而狀態寄存器和下一狀態函數分別用兩個進程描述。

  通常情況下,在默認模式,爲了達到最好的速度或者最小的面積,綜合工具試圖尋找用於fsm最好的編碼方法。綜合工具支持很多編碼方法,比如ont-hot,sequencial或gray方法。通常one-hot編碼允許設計者創建狀態機實現,這種實現對FPGA結構來說是高效率的。

    如果對自動解決方案不滿意,設計者可以迫使綜合工具使用一個指定的編碼方法。

九、基於srl的移位寄存器的實現
   xst實現基於srl資源類型推斷移位寄存器,srl資源類型包括srl16,srl6e,srlc16,srlc16e和srlc32e。
1、基於srl16e的移位寄存器的實現
    srl16e是一種不使用觸發器資源來創建移位寄存器的有效方式。可以創建長度爲1~16位移位寄存器。srl16e是一個移位寄存器查找表,輸入決定了移位寄存器的長度,移位寄存器lut的初始內容是通過指定一個4位十六進制到init屬性來實現的,如果init屬性沒有指定,默認值爲0,使移位寄存器lut在配置中清零。如下圖所示,當時鍾由低到高跳變時,數據加載到移位寄存器的下一位。在隨後的時鐘上升沿,新數據被加載,同時原數據移動到下一位。當達到由輸入地址線決定的移位寄存器的長度時,q輸出端開始出現最初送入的d端的數據。

2、使用srlc32e創建移位寄存器
  virtex-5器件後,FPGA結構的一個特點是有一個較大的移位寄存器srlc32e原語。如下圖所示,該32位的移位寄存器充分利用了較大規模的lut並提供相同的專門時鐘使能和srl16e的串聯功能。這些移位寄存器的推斷和16位版本是一樣的,但在許多情況下,需要較少的原語。


3、 基於bram的移位寄存器的實現
   可以使用ram資源實現延遲線的功能。特別是在延遲線相對較長時,節約功耗方面,這個技術帶來相當大的優勢。 一個可以利用的bram的關鍵特性是read-first同步模式。這個技術中另一個重要的元素是計數器,它順序的掃描地址空間,當計數器的值達到延遲線減2的時候,計數值歸0。爲了保證最大的性能,使用bram輸出鎖存和可選的輸出寄存器級。比如一個512深度的延遲線,使用ram內510個可尋址的數據字,數據的輸出鎖存和可選的輸出寄存器提供了最後兩級。

十、I/O寄存器的實現
  所有的xilinx的fpga都包含用於fpga輸入和輸出上的專用寄存器。通過利用這些寄存器,減少了輸入路徑上的建立時間和輸出通路的clock_to_out時間,這樣使得非常容易滿足時序要求,用於爲外部設備捕獲和提供數據。然而,有時候使用專用的寄存器可能會對時序帶來負面影響,這是因爲使用I/O寄存器增加了到內部邏輯的佈線時延。當需要滿足I/O時序時,這些寄存器就應該放在I/O,或者是當I/O時序要求允許時,這些寄存器就應該放在FPGA中。一些綜合工具,比如Syntheis工具不支持自動放置,如果希望手工放置I/O寄存器,按照下面的步驟進行手動設置:
 (1)在XST綜合工具中禁止全局I/O寄存器放置選項;
 (2)在UCF文件或者HDL代碼中,添加IO=TURE,說明寄存器是否應該放在I/O;
 (3)在XST實現工具的map屬性中進行手動的設置off,禁止自動將寄存器放到I/O。


   控制I/O寄存器的使用平衡了進入和離開FPGA的數據路徑時序,需要滿足FPGA內的時序規範。另一個值得注意的嚮導是,在頂層HDL代碼中,在所有的輸入和輸出端口上描述寄存器。在頂層中指明寄存器,可以避免當使用層次的設計方法實現FPGA時,產生布局衝突。這樣也避免爲描述端口創建層次名字,一些原理圖捕獲工具不接受。


  注意:禁止全局填充寄存器到I/O單元。對於在PCB板上比較苛刻的時序約束,將寄存器填充到FPGA I/O單元。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章