在FPGA設(shè)計(jì)里,設(shè)計(jì)仿真完成RTL代碼設(shè)計(jì)后便是交給設(shè)計(jì)套件進(jìn)行綜合及布局布線。在綜合過(guò)程里,Vivado里提供的參數(shù)選項(xiàng)有點(diǎn)兒多,今天閑暇抽空梳理下。
-flatten_hierarchy
該參數(shù)提供三個(gè)可選項(xiàng):
full:將我們整個(gè)設(shè)計(jì)層次打平,只保留頂層設(shè)計(jì),對(duì)模塊間進(jìn)行邊界優(yōu)化(可以理解為我們整個(gè)設(shè)計(jì)被塞到一個(gè)Module里)。
none:完全保留設(shè)計(jì)原始層次,不執(zhí)行任何邊界優(yōu)化。該選項(xiàng)工具進(jìn)行的優(yōu)化最少,消耗的資源最多,層次保留最完整。
rebuild:在進(jìn)行綜合時(shí)將原始設(shè)計(jì)打平,執(zhí)行邊界優(yōu)化,但將網(wǎng)表文件按照原始設(shè)計(jì)層次顯示。
對(duì)于在Verilog中使用的"keep_hierarchy"屬性?xún)?yōu)先級(jí)高于flatten_hierarchy。
gated_clock_conversion
在ASIC中門(mén)控時(shí)鐘用的比較多,而在FPGA設(shè)計(jì)中,門(mén)控時(shí)鐘并不是專(zhuān)用時(shí)鐘模塊生成,而且Vivado并不會(huì)對(duì)門(mén)控時(shí)鐘插入BUFG,在設(shè)計(jì)中應(yīng)極力避免。該選項(xiàng)可將門(mén)控時(shí)鐘信號(hào)轉(zhuǎn)換為使能信號(hào),從而避免門(mén)控時(shí)鐘的使用。該選項(xiàng)存在三個(gè)參數(shù):
off:不允許門(mén)控時(shí)鐘轉(zhuǎn)換。
on:允許門(mén)控時(shí)鐘轉(zhuǎn)換,Verilog里添加“gated_clocked”的門(mén)控時(shí)鐘將會(huì)自動(dòng)轉(zhuǎn)換。
auto:Verilog中添加“gated_clocked”的門(mén)控時(shí)鐘或者工具檢測(cè)到門(mén)控時(shí)鐘而且有相應(yīng)可用的時(shí)鐘約束選項(xiàng)時(shí)將進(jìn)行門(mén)控時(shí)鐘轉(zhuǎn)換。
當(dāng)門(mén)控時(shí)鐘負(fù)載較少且時(shí)鐘頻率并不高時(shí)可以適當(dāng)使用門(mén)控時(shí)鐘,但建議手動(dòng)插入BUFG。
-fanout_limit
該選項(xiàng)用于設(shè)定信號(hào)所能承受的最大負(fù)載。該選項(xiàng)對(duì)于設(shè)計(jì)中的控制信號(hào),如置位,復(fù)位和使能信號(hào)是無(wú)效的。
-fanout_limit只是一個(gè)宏觀指導(dǎo)原則,并非強(qiáng)制命令。如果需要很明確的對(duì)某個(gè)信號(hào)降扇出,應(yīng)使用MAX_FANOUT而不是-fanout_limit。
MAX_FANOUT可應(yīng)用于RTL代碼中,也可應(yīng)用于XDC中,優(yōu)先級(jí)高于-fanout_limit。當(dāng)需要控制扇出的寄存器與負(fù)載不在同一層次時(shí),flatten_hierarchy不要設(shè)置為none模式,否則將會(huì)無(wú)法生效。
-directive
Vivado提供的一些優(yōu)化策略:
RuntimeOptimized:執(zhí)行較少的時(shí)序優(yōu)化及RTL優(yōu)化以降低運(yùn)行時(shí)間。
AreaOptimized_high:執(zhí)行常規(guī)面積優(yōu)化,包括強(qiáng)制執(zhí)行三進(jìn)制加法器,在比較器中使用新閾值以使用進(jìn)位鏈以及實(shí)現(xiàn)面積優(yōu)化的多路復(fù)用器。
AreaOptimized_medium:執(zhí)行常規(guī)面積優(yōu)化,包括更改控制集優(yōu)化的閾值,強(qiáng)制執(zhí)行三進(jìn)制加法器,將推理的乘法器閾值降低到DSP模塊,將移位寄存器移入BRAM,在比較器中使用較低閾值以使用進(jìn)位鏈,以及進(jìn)行區(qū)域優(yōu)化的MUX操作。
AlternateRoutability:通過(guò)算法提升路由能力(使用更少的MUXF和CARRYs)。
AreaMapLargeShiftRegToBRAM:檢測(cè)大型移位寄存器,并使用專(zhuān)用的Block RAM實(shí)現(xiàn)它們。
AreaMultThresholdDSP:減少DSP的推斷及使用。
FewerCarryChains:通過(guò)LUT使用降低進(jìn)位鏈的使用。
-retiming
在不改變?cè)荚O(shè)計(jì)及功能時(shí)通過(guò)調(diào)整LUT和寄存器位置來(lái)進(jìn)行時(shí)序優(yōu)化調(diào)整。
-fsm_extraction
設(shè)定狀態(tài)機(jī)編碼方式,默認(rèn)為auto,此時(shí)Vivado會(huì)自行決定最佳的編碼方式。
-keep_equivalent_registers
當(dāng)勾選時(shí),對(duì)于輸入的同源寄存器,綜合時(shí)將會(huì)被合成一個(gè)。如下例所示:
always@(posedge clk)begin rx<=a; ry<=a; r<=b;??resa<=rx & r;??resb<=ry^y;end
當(dāng)該選項(xiàng)不勾選時(shí),rx,ry將會(huì)被合并成一個(gè)寄存器。
-resource_shring
對(duì)算數(shù)運(yùn)算符通過(guò)資源共享優(yōu)化設(shè)計(jì)資源,有三個(gè)可選項(xiàng):auto、on、off。設(shè)置為auto時(shí),工具會(huì)根據(jù)時(shí)序要求進(jìn)行調(diào)整。
-control_set_opt_threshold
觸發(fā)器的控制集由時(shí)鐘信號(hào),復(fù)位/置位吸納后和使能信號(hào)構(gòu)成,通常只有{clk,set/rst,ce}均相同的觸發(fā)器才可以被放在一個(gè)SLICE中。該選項(xiàng)將時(shí)鐘使能優(yōu)化的閾值設(shè)置為較少的控制集。默認(rèn)值為自動(dòng),這意味著該工具將根據(jù)目標(biāo)設(shè)備選擇一個(gè)值。支持任何正整數(shù)值。
給定值是工具將控制集移入寄存器的D邏輯所需的扇出數(shù)量。如果扇出大于該值,則該工具嘗試使該信號(hào)驅(qū)動(dòng)該寄存器上的control_set_pin。
-no_lc
使能該選項(xiàng)時(shí),工具將不會(huì)嘗試LUT的整合。雖然LUT整合能夠降低LUT的使用,但也有可能導(dǎo)致布局布線擁塞。當(dāng)“LUT as Logic”超過(guò)15%時(shí),建議勾選該選項(xiàng)。
-no_slrextract -shreg_min_size
移位寄存器可以被綜合成LUT實(shí)現(xiàn)。-shreg_min_size用于管理移位寄存器是否映射為L(zhǎng)UT,默認(rèn)值為3.當(dāng)移位寄存器的深度不超過(guò)-shereg_min_size時(shí),最終采用移位寄存器實(shí)現(xiàn),否則采用FF+LUT+FF形式實(shí)現(xiàn)。
-no_slrextract用于阻止工具將移位寄存器映射為L(zhǎng)UT。優(yōu)先級(jí)高于-shreg_min_size。
其他選項(xiàng)我們基本就用不上了,若需使用可參照ug901手冊(cè)。
原文標(biāo)題:亂花漸欲迷人眼—Vivado之Synthesis
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
寄存器
+關(guān)注
關(guān)注
31文章
5321瀏覽量
120016 -
Vivado
+關(guān)注
關(guān)注
19文章
808瀏覽量
66330 -
RTL代碼
+關(guān)注
關(guān)注
0文章
4瀏覽量
6816
原文標(biāo)題:亂花漸欲迷人眼—Vivado之Synthesis
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論