基於Xilinx的Synthesize

所謂綜合,就是講HDL語言、原理圖等設計輸入翻譯成由與、或、非們和RAM、觸發器登記本邏輯單元的邏輯連接(即網表)。並根據目標和要求(約束條件)優化生成的邏輯連接。

ISE-XST

XST是Xilinx公司自己的綜合(Synthsize)工具。當我們完成輸入、仿真以及管腳分配之後就可以進行綜合和實現。

雙擊Synthesize-XST,就可以完成綜合。一般而言,會有三種結果:

  • 仿真完成

  • Warn警告

  • ERROR錯誤

Warn會在Synthesize-XST出現黃色警示,而Error有紅色標識。

綜合完成之後可以通過使用XST的View RTLSchematics工具查看RTL級結構圖。


Synthesize Proprtties

  • [Optimization Goal]:優化的目標。該參數決定了綜合工具對設計進行優化時,是以面積還是以速度作爲優先原則。面積優先原則可以節省器件內部的邏輯資源,即儘可能地採用串行邏輯結構,但這是以犧牲速度爲代價的。而速度優先原則保證了器件的整體工作速度,即儘可能地採用並行邏輯結構,但這樣將會浪費器件內部大量的邏輯資源,因此,它是以犧牲邏輯資源爲代價的。

  • [Optimization Effort]:優化器努力程度。這裏有[normal]和[high]兩種選擇方式。對於[normal],優化器對邏輯設計僅僅進行普通的優化處理,其結果可能並不是最好的,但是綜合和優化流程執行地較快。如果選擇[high],優化器對邏輯設計進行反覆的優化處理和分析,並能生成最理想的綜合和優化結果,在對高性能和最終的設計通常採用這種模式;當然在綜合和優化時,需要的時間較長。

  • [Use Synthesis Constraints File]:使用綜合約束文件。如果選擇了該選項,那麼綜合約束文件XCF有效。

  • [Synthesis Constraints File]:綜合約束文件。該選項用於指定XST綜合約束文件XCF的路徑。

  • [Global Optimization Goal]:全局優化目標。可以選擇的屬性包括有[AllClockNets]、[Inpad To Outpad]、[Offest In Before]、[Offest Out After]、[Maximm Delay]。該參數僅對FPGA器件有效,可用於選擇所設定的寄存器之間、輸入引腳到寄存器之間、寄存器到輸出引腳之間,或者是輸入引腳到輸出引腳之間邏輯的優化策略。

  • [Generate RTL Schematic]:生成寄存器傳輸級視圖文件。該參數用於將綜合結果生成RTL視圖。

  • [Write Timing Constraints]:寫時序約束。該參數僅對FPGA有效,用來設置是否將HDL源代碼中用於控制綜合的時序約束傳給NGC網表文件,該文件用於佈局和佈線。

HDL語言選項

  • [FSM Encoding Algorithm]:有限狀態機編碼算法。該參數用於指定有限狀態機的編碼方式。選項有[Auto]、[One-Hot]、[Compact]、[Sequential]、[Gray]、[Johnson]、[User]、[Speed1]、[None]編碼方式,默認爲[Auto]編碼方式。

  • [Safe Implementation]:將添加安全模式約束來實現有限狀態機,將添加額外的邏輯將狀態機從無效狀態調轉到有效狀態,否則只能復位來實現,有[Yes]、[No]兩種選擇,默認爲[No]。

  • [Case Implementation Sytle]:條件語句實現類型。該參數用於控制XST綜合工具解釋和推論Verilog的條件語句。其中選項有[None]、[Full]、[Parallel]、[Full-Parallel],默認爲[None]。 對於這四種選項,區別如下:(1)[None],XST將保留程序中條件語句的原型,不進行任何處理;(2)[Full],XST認爲條件語句是完整的,避免鎖存器的產生;(3)[Parallel],XST認爲在條件語句中不能產生分支,並且不使用優先級編碼器;(4)[Full-Parallel],XST認爲條件語句是完整的,並且在內部沒有分支,不使用鎖存器和優先級編碼器。

  • [RAM Extraction]:存儲器擴展。該參數僅對FPGA有效,用於使能和禁止RAM宏接口。默認爲允許使用RAM宏接口。

  • [RAM Style]:RAM實現類型。該參數僅對FPGA有效,用於選擇是採用塊RAM還是分佈式RAM來作爲RAM的實現類型。默認爲 [Auto]。

  • [ROM Extraction]:只讀存儲器擴展。該參數僅對FPGA有效,用於使能和禁止只讀存儲器ROM宏接口。默認爲允許使用ROM宏接口。

  • [ROM Style]:ROM實現類型。該參數僅對FPGA有效,用於選擇是採用塊RAM還是分佈式RAM來作爲ROM的實現和推論類型。默認爲[Auto]。

  • [Mux Extraction]:多路複用器擴展。該參數用於使能和禁止多路複用器的宏接口。根據某些內定的算法,對於每個已識別的多路複用/選擇器,XST能夠創建一個宏,並進行邏輯的優化。可以選擇[Yes]、[No]和[Force]中的任何一種,默認爲[Yes]。

  • [Mux Style]:多路複用實現類型。該參數用於胃宏生成器選擇實現和推論多路複用/選擇器的宏類型。可以選擇[Auto]、[MUXF]和[MUXCY]中的任何一種,默認爲[Auto]。

  • [Decoder Extraction]:譯碼器擴展。該參數用於使能和禁止譯碼器宏接口,默認爲允許使用該接口。

  • [Priority Encoder Extraction]:優先級譯碼器擴展。該參數用於指定是否使用帶有優先級的編碼器宏單元。

  • [Shift Register Extraction]:移位寄存器擴展。該參數僅對FPGA有效,用於指定是否使用移位寄存器宏單元。默認爲使能。

  • [Logical Shifter Extraction]:邏輯移位寄存器擴展。該參數僅對FPGA有效,用於指定是否使用邏輯移位寄存器宏單元。默認爲使能。

  • [XOR Collapsing]:異或邏輯合併方式。該參數僅對FPGA有效,用於指定是否將級聯的異或邏輯單元合併成一個大的異或宏邏輯結構。默認爲使能。

  • [Resource Sharing]:資源共享。該參數用於指定在XST綜合時,是否允許複用一些運算處理模塊,如加法器、減法器、加/減法器和乘法器。默認爲使能。如果綜合工具的選擇是以速度爲優先原則的,那麼就不考慮資源共享。

  • [Multiplier Style]:乘法器實現類型。該參數僅對FPGA有效,用於指定宏生成器使用乘法器宏單元的方式。選項有[Auto]、Block]、[LUT]和[Pipe_LUT]。默認爲[Auto]。選擇的乘法器實現類型和所選擇的器件有關。

特殊選項

Xilinx特殊選項用於將用戶邏輯適配到Xilinx芯片的特殊結構中,不僅能節省資源,還能提高設計的工作頻率

  • [Add I/O Buffers]:插入I/O緩衝器。該參數用於控制對所綜合的模塊是否自動插入I/O緩衝器。默認爲自動插入。

  • [Max Fanout]:最大扇出數。該參數用於指定信號和網線的最大扇出數。這裏扇出數的選擇與設計的性能有直接的關係,需要用戶合理選擇。

  • [Register Duplication]:寄存器複製。該參數用於控制是否允許寄存器的複製。對於高扇出和時序不能滿足要求的寄存器進行復制,可以減少緩衝器輸出的數目以及邏輯級數,改變時序的某些特性,提高設計的工作頻率。默認爲允許寄存器複製。

  • [Equivalent Register Removal]:等效寄存器刪除。該參數用於指定是否把寄存器傳輸級功能等效的寄存器刪除,這樣可以減少寄存器資源的使用。如果某個寄存器是用Xilinx的硬件原語指定的,那麼就不會被刪除。默認爲使能。

  • [Register Balancing]:寄存器配平。該參數僅對FPGA有效,用於指定是否允許平衡寄存器。可選項有[No]、[Yes]、 [Forward]和[Backward]。採用寄存器配平技術,可以改善某些設計的時序條件。其中,[Forward]爲前移寄存器配平,[Backward]爲後移寄存器配平。採用寄存器配平後,所用到的寄存器數就會相應地增減。默認爲寄存器不配平。

  • [Move First Flip-Flop Stage]:移動前級寄存器。該參數僅對FPGA有效,用於控制在進行寄存器配平時,是否允許移動前級寄存器。如果[Register Balancing]的設置爲[No],那麼該參數的設置無效。

  • [Move Last Flip-Flop Stage]:移動後級寄存器。該參數僅對FPGA有效,用於控制在進行寄存器配平時,是否允許移動後級寄存器。如果[Register Balancing]的設置爲[No],那麼該參數的設置無效。

  • [Pack I/O Registers into IOBs]:I/O寄存器置於輸入輸出塊。該參數僅對FPGA有效,用於控制是否將邏輯設計中的寄存器用IOB內部寄存器實現。在Xilinx系列FPGA的IOB中分別有輸入和輸出寄存器。如果將設計中的第一級寄存器或最後一級寄存器用IOB內部寄存器實現,那麼就可以縮短IO引腳到寄存器之間的路徑,這通常可以縮短大約1~2ns的傳輸時延。默認爲[Auto]。

  • [Slice Packing]:優化Slice結構。該參數僅對FPGA有效,用於控制是否將關鍵路徑的查找表邏輯儘量配置在同一個Slice或者CLB模塊中,由此來縮短LUT之間的佈線。這一功能對於提高設計的工作頻率、改善時序特性是非常有用的。 默認爲允許優化Slice結構。

  • [Optimize Instantiated Primitives]:優化已例化的原語。該參數控制是否需要優化在HDL代碼中已例化的原語。默認爲不優化。

以上三個部分分別用於設置綜合的全局目標和整體策略、HDL硬件語法規則以及Xilinx特有的結構屬性。

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