FPGA實戰(zhàn)開發(fā)技巧(3)
5.3.1 綜合工具XST的使用
所謂綜合,就是將HDL語言、原理圖等設(shè)計輸入翻譯成由與、或、非門和RAM、觸發(fā)器等基本邏輯單元的邏輯連接( 網(wǎng)表),并根據(jù)目標(biāo)和要求( 約束條件) 優(yōu)化所生成的邏輯連接,生成EDF 文件。XST 內(nèi)嵌在ISE 3 以后的版本中,并且在不斷完善。此外,由于XST 是賽靈思公司自己的綜合工具,對于部分賽靈思芯片獨有的結(jié)構(gòu)具有更好的融合性。
本文引用地址:http://m.butianyuan.cn/article/201710/365619.htm完成了輸入、仿真以及管腳分配后就可以進(jìn)行綜合和實現(xiàn)了。在過程管理區(qū)雙擊Synthesize-XST,如圖5-1所示,就可以完成綜合,并且能夠給出初步的資源消耗情況。圖5-2 給出了模塊所占用的資源。
圖5-1 設(shè)計綜合窗口
圖5-2 綜合結(jié)果報告
綜合可能有3 種結(jié)果:如果綜合后完全正確,則在Synthesize-XST 前面有一個打鉤的綠色小圈圈;如果有警告,則出現(xiàn)一個帶感嘆號的黃色小圓圈;如果有錯誤,則出現(xiàn)一個帶叉的紅色小圈圈。綜合完成之后,可以通過雙擊View RTL SchemaTIcs 來查看RTL 級結(jié)構(gòu)圖,察看綜合結(jié)構(gòu)是否按照設(shè)計意圖來實現(xiàn)電路。ISE 會自動調(diào)用原理圖編輯器ECS 來瀏覽RTL 結(jié)構(gòu)。對于一個計數(shù)器,其RTL 結(jié)構(gòu)圖如圖5-3 所示,綜合結(jié)果符合設(shè)計者的意圖,調(diào)用了加法器和寄存器來完成邏輯。
圖5-3 經(jīng)過綜合后的RTL級結(jié)構(gòu)圖
2.綜合參數(shù)的設(shè)置
一般在使用XST 時,所有的屬性都采用默認(rèn)值。其實XST 對不同的邏輯設(shè)計可提供豐富、靈活的屬性配置。下面對ISE9.1 中內(nèi)嵌的XST 屬性進(jìn)行說明。打開ISE 中的設(shè)計工程,在過程管理區(qū)選中“Synthesis –XST”并單擊右鍵,彈出界面如圖5-4 所示。
圖5-4 綜合選項
由圖5-4 可以看出,XST 配置頁面分為綜合選項(Synthesis OpTIons)、HDL 語言選項(HDL OpTIons) 以及賽靈思特殊選項(Xilinx Specific OpTIons) 等三大類,分別用于設(shè)置綜合的全局目標(biāo)和整體策略、HDL 硬件語法規(guī)則以及賽靈思特有的結(jié)構(gòu)屬性。
1) 綜合選項參數(shù)
綜合參數(shù)配置界面如圖5-4 所示,包括8 個選項,具體如下所列:
【Optimization Goal】:優(yōu)化的目標(biāo)。該參數(shù)決定了綜合工具對設(shè)計進(jìn)行優(yōu)化時,是以面積還是以速度作為優(yōu)先原則。面積優(yōu)先原則可以節(jié)省器件內(nèi)部的邏輯資源,即盡可能地采用串行邏輯結(jié)構(gòu),但這是以犧牲速度為代價的。而速度優(yōu)先原則保證了器件的整體工作速度,即盡可能地采用并行邏輯結(jié)構(gòu),但這樣將會浪費器件內(nèi)部大量的邏輯資源,因此,它是以犧牲邏輯資源為代價的。
【Optimization Effort】:優(yōu)化器努力程度。這里有【normal】和【high】兩種選擇方式。對于【normal】,優(yōu)化器對邏輯設(shè)計僅僅進(jìn)行普通的優(yōu)化處理,其結(jié)果可能并不是最好的,但是綜合和優(yōu)化流程執(zhí)行地較快。如果選擇【high】,優(yōu)化器對邏輯設(shè)計進(jìn)行反復(fù)的優(yōu)化處理和分析,并能生成最理想的綜合和優(yōu)化結(jié)果,在對高性能和最終的設(shè)計通常采用這種模式;當(dāng)然在綜合和優(yōu)化時,需要的時間較長。
【Use Synthesis Constraints File】:使用綜合約束文件。如果選擇了該選項,那么綜合約束文件XCF 有效。
【Synthesis Constraints File】:綜合約束文件。該選項用于指定XST 綜合約束文件XCF 的路徑。
【Global Optimization Goal】:全局優(yōu)化目標(biāo)??梢赃x擇的屬性包括有【AllClockNets】、【Inpad To
Outpad】、【Offest In Before】、【Offest Out After】、【Maximm Delay】。該參數(shù)僅對FPGA 器件有效,可用于選擇所設(shè)定的寄存器之間、輸入引腳到寄存器之間、寄存器到輸出引腳之間,或者是輸入引腳到輸出引腳之間邏
輯的優(yōu)化策略。
【Generate RTL Schematic】:生成寄存器傳輸級視圖文件。該參數(shù)用于將綜合結(jié)果生成RTL 視圖。
【W(wǎng)rite Timing Constraints】:寫時序約束。該參數(shù)僅對FPGA 有效,用來設(shè)置是否將HDL 源代碼中用于控制綜合的時序約束傳給NGC 網(wǎng)表文件,該文件用于布局和布線。
【Verilog 2001】:選擇是否支持Verilog 2001 版本。
HDL語言選項
HDL 語言選項的配置界面如圖5-5 所示,包括16 個選項,具體如下所列:
圖5-5 HDL語言選項的配置界面選項
【FSM Encoding Algorithm】:有限狀態(tài)機(jī)編碼算法。該參數(shù)用于指定有限狀態(tài)機(jī)的編碼方式。選項有【Auto】、
【One-Hot】、【Compact】、【Sequential】、【Gray】、【Johnson】、【User】、【Speed1】、【None】編碼方式,默認(rèn)為【Auto】編碼方式。
【Safe Implementation】:將添加安全模式約束來實現(xiàn)有限狀態(tài)機(jī),將添加額外的邏輯將狀態(tài)機(jī)從無效狀態(tài)
調(diào)轉(zhuǎn)到有效狀態(tài),否則只能復(fù)位來實現(xiàn),有【Yes】、【No】兩種選擇,默認(rèn)為【No】。
【Case Implementation Sytle】:條件語句實現(xiàn)類型。該參數(shù)用于控制XST 綜合工具解釋和推論Verilog 的
條件語句。其中選項有【None】、【Full】、【Parallel】、【Full-Parallel】,默認(rèn)為【None】。 對于這四種選項,區(qū)別如下:(1)【None】,XST 將保留程序中條件語句的原型,不進(jìn)行任何處理;(2)【Full】,XST 認(rèn)為條件語句是完整的,避免鎖存器的產(chǎn)生;(3)【Parallel】,XST 認(rèn)為在條件語句中不能產(chǎn)生分支,并且不使用優(yōu)先級編碼器;(4)【Full-Parallel】,XST 認(rèn)為條件語句是完整的,并且在內(nèi)部沒有分支,不使用鎖存器和優(yōu)先級編碼器。
【RAM Extraction】:存儲器擴(kuò)展。該參數(shù)僅對FPGA 有效,用于使能和禁止RAM 宏接口。默認(rèn)為允許使用RAM 宏接口。
【RAM Style】:RAM 實現(xiàn)類型。該參數(shù)僅對FPGA 有效,用于選擇是采用塊RAM 還是分布式RAM 來作為RAM 的實現(xiàn)類型。默認(rèn)為【Auto】。
【ROM Extraction】:只讀存儲器擴(kuò)展。該參數(shù)僅對FPGA 有效,用于使能和禁止只讀存儲器ROM 宏接口。默認(rèn)為允許使用ROM 宏接口。
【ROM Style】:ROM 實現(xiàn)類型。該參數(shù)僅對FPGA 有效,用于選擇是采用塊RAM 還是分布式RAM 來作為ROM 的實現(xiàn)和推論類型。默認(rèn)為【Auto】。
【Mux Extraction】:多路復(fù)用器擴(kuò)展。該參數(shù)用于使能和禁止多路復(fù)用器的宏接口。根據(jù)某些內(nèi)定的算法,對于每個已識別的多路復(fù)用/ 選擇器,XST 能夠創(chuàng)建一個宏,并進(jìn)行邏輯的優(yōu)化??梢赃x擇【Yes】、【No】和【Force】
中的任何一種,默認(rèn)為【Yes】。
【Mux Style】:多路復(fù)用實現(xiàn)類型。該參數(shù)用于胃宏生成器選擇實現(xiàn)和推論多路復(fù)用/ 選擇器的宏類型。可以選擇【Auto】、【MUXF】和【MUXCY】中的任何一種,默認(rèn)為【Auto】。
【Decoder Extraction】:譯碼器擴(kuò)展。該參數(shù)用于使能和禁止譯碼器宏接口,默認(rèn)為允許使用該接口。
【Priority Encoder Extraction】:優(yōu)先級譯碼器擴(kuò)展。該參數(shù)用于指定是否使用帶有優(yōu)先級的編碼器宏單元。
【Shift Register Extraction】:移位寄存器擴(kuò)展。該參數(shù)僅對FPGA 有效,用于指定是否使用移位寄存器宏單元。默認(rèn)為使能。
【Logical Shifter Extraction】:邏輯移位寄存器擴(kuò)展。該參數(shù)僅對FPGA 有效,用于指定是否使用邏輯移位寄存器宏單元。默認(rèn)為使能。
【XOR Collapsing】:異或邏輯合并方式。該參數(shù)僅對FPGA 有效,用于指定是否將級聯(lián)的異或邏輯單元合并成一個大的異或宏邏輯結(jié)構(gòu)。默認(rèn)為使能。
【Resource Sharing】:資源共享。該參數(shù)用于指定在XST 綜合時,是否允許復(fù)用一些運算處理模塊,如加法器、減法器、加/ 減法器和乘法器。默認(rèn)為使能。如果綜合工具的選擇是以速度為優(yōu)先原則的,那么就不考慮資源共享。
【Multiplier Style】:乘法器實現(xiàn)類型。該參數(shù)僅對FPGA 有效,用于指定宏生成器使用乘法器宏單元的方式。選項有【Auto】、【Block】、【LUT】和【Pipe_LUT】。默認(rèn)為【Auto】。選擇的乘法器實現(xiàn)類型和所選擇的器件有關(guān)。
2) 賽靈思特殊選項
賽靈思特殊選項用于將用戶邏輯適配到賽靈思芯片的特殊結(jié)構(gòu)中,不僅能節(jié)省資源,還能提高設(shè)計的工作頻率,其配置界面如圖5-6 所示,包括10 個配置選項,具體如下所列。
圖5-6 賽靈思指定的選項
【Add I/O Buffers】:插入I/O 緩沖器。該參數(shù)用于控制對所綜合的模塊是否自動插入I/O 緩沖器。默認(rèn)為自動插入。
【Max Fanout】:最大扇出數(shù)。該參數(shù)用于指定信號和網(wǎng)線的最大扇出數(shù)。這里扇出數(shù)的選擇與設(shè)計的性能有直接的關(guān)系,需要用戶合理選擇。
【Register Duplication】:寄存器復(fù)制。該參數(shù)用于控制是否允許寄存器的復(fù)制。對于高扇出和時序不能滿足要求的寄存器進(jìn)行復(fù)制,可以減少緩沖器輸出的數(shù)目以及邏輯級數(shù),改變時序的某些特性,提高設(shè)計的工作頻率。默認(rèn)為允許寄存器復(fù)制。
【Equivalent Register Removal】:等效寄存器刪除。該參數(shù)用于指定是否把寄存器傳輸級功能等效的寄存器刪除,這樣可以減少寄存器資源的使用。如果某個寄存器是用賽靈思的硬件原語指定的,那么就不會被刪除。默認(rèn)為使能。
【Register Balancing】:寄存器配平。該參數(shù)僅對FPGA 有效,用于指定是否允許平衡寄存器??蛇x項有【No】、【Yes】、【Forward】和【Backward】。采用寄存器配平技術(shù),可以改善某些設(shè)計的時序條件。其中【Forward】
為前移寄存器配平,【Backward】為后移寄存器配平。采用寄存器配平后,所用到的寄存器數(shù)就會相應(yīng)地增減。默認(rèn)為寄存器不配平。
【Move First Flip-Flop Stage】:移動前級寄存器。該參數(shù)僅對FPGA 有效,用于控制在進(jìn)行寄存器配平時,是否允許移動前級寄存器。如果【Register Balancing】的設(shè)置為【No】,那么該參數(shù)的設(shè)置無效。
【Move Last Flip-Flop Stage】:移動后級寄存器。該參數(shù)僅對FPGA 有效,用于控制在進(jìn)行寄存器配平時,是否允許移動后級寄存器。如果【Register Balancing】的設(shè)置為【No】,那么該參數(shù)的設(shè)置無效。
【Pack I/O Registers into IOBs】:I/O 寄存器置于輸入輸出塊。該參數(shù)僅對FPGA 有效,用于控制是否將邏輯設(shè)計中的寄存器用IOB 內(nèi)部寄存器實現(xiàn)。在賽靈思系列FPGA 的IOB 中分別有輸入和輸出寄存器。如果將設(shè)計中的第一級寄存器或最后一級寄存器用IOB 內(nèi)部寄存器實現(xiàn),那么就可以縮短IO 引腳到寄存器之間的路徑,這通??梢钥s短大約1~2ns 的傳輸時延。默認(rèn)為【Auto】。
【Slice Packing】:優(yōu)化Slice 結(jié)構(gòu)。該參數(shù)僅對FPGA 有效,用于控制是否將關(guān)鍵路徑的查找表邏輯盡量配置在同一個Slice 或者CLB 模塊中,由此來縮短LUT 之間的布線。這一功能對于提高設(shè)計的工作頻率、改善時序特性是非常有用的。 默認(rèn)為允許優(yōu)化Slice 結(jié)構(gòu)。
【Optimize Instantiated Primitives】:優(yōu)化已例化的原語。該參數(shù)控制是否需要優(yōu)化在HDL 代碼中已例化的原語。默認(rèn)為不優(yōu)化。
評論