基於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特有的結構屬性。