資料介紹
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/yinyeyy/article/details/106422415
使用xdc文件進(jìn)行管腳、位置、時(shí)序和屬性等約束的時(shí)候,經(jīng)常會(huì)使用各種get命令。Vivado提供了很豐富的匹配表達(dá)式,比如等于==、不等于!=、匹配=~、不匹配!~、、=等等,這些表達(dá)式可以通過(guò)&&和||進(jìn)行組合;同時(shí)還有大量的狀態(tài)、屬性和單元名稱可用,比如DIRECTION、IN、IS_LOC_FIXED、IS_PRIMITIVE、NAME等等。
我在xdc文件中匹配目標(biāo)的時(shí)候,在可行的情況下更傾向于使用正則表達(dá)式。本文就介紹一下我常使用的正則表達(dá)式和一些在Vivado中應(yīng)用的特殊之處,同時(shí)也有個(gè)別自己尚未解決的問(wèn)題。
1. -hierarchical和-regexp的使用
在匹配FPGA內(nèi)部資源時(shí),比如get_pins、get_cells、get_nets的時(shí)候,需要同時(shí)使用-hierarchical和-regexp。
-hierarchical表示Vivado在匹配對(duì)象的時(shí)候,將在工程中不同的層次內(nèi)對(duì)該信號(hào)進(jìn)行搜索。如果沒(méi)有加這個(gè)選項(xiàng),就必須在匹配字符中顯式且精確的指出匹配對(duì)象所在的層次。需要注意的是,當(dāng)使用get_ports時(shí),不能使用-hierarchical選項(xiàng)。因?yàn)閜orts應(yīng)該位于頂層,沒(méi)有層次之分。
-regexp是指本次匹配將使用正則表達(dá)式,是必須使用的。
以下是一個(gè)使用-hierarchical的例子和注意事項(xiàng)。

首先看第一行藍(lán)色的get_cells命令,這里用來(lái)獲得ConfigRegs_i這個(gè)實(shí)例內(nèi)的滿足bus_hsio_dly/..*_fine_sel.*要求的對(duì)象??梢钥吹竭\(yùn)行該命令后得到了下面黑色部分的對(duì)象。第三行指令在第一行的基礎(chǔ)上,把頂層實(shí)例ConfigRegs_i的限制去掉,也獲得了想要的對(duì)象。
再來(lái)看第五行的指令。此處去掉了-hierarchical,意味著匹配過(guò)程不能穿越不同的層次結(jié)構(gòu)。同時(shí)“.*”雖然可以匹配任何除換行符之外的任何數(shù)量的字符,但是卻不能替代在Vivado中表示層次概念的“/”符號(hào)。所以匹配過(guò)程只在頂層進(jìn)行搜索,其結(jié)果就如第六行,不能找到所需的對(duì)象。
第七行也犯了一樣的錯(cuò)誤。在沒(méi)有使用-hierarchical的情況下,雖然想通過(guò)“ConfigRegs_i.*”來(lái)匹配頂層的ConfigRegs_i實(shí)例,但是“.*”是不能匹配層次符號(hào)“/”的。同樣無(wú)法獲取對(duì)象。
第九行雖然沒(méi)有使用-hierarchical,但是通過(guò)ConfigRegs_i/指定了對(duì)象的層次結(jié)構(gòu),是可以獲得想要的對(duì)象的。但是這里有一個(gè)限制,即cmph_fine_sel_reg[0]這些對(duì)象必須位于ConfigRegs_i下。如果cmph_fine_sel_reg[0]和ConfigRegs_i中間還隔了別的實(shí)例,比如ConfigRegs_i例化了CmpDef_i,CmpDef_i內(nèi)部定義了cmph_fine_sel_reg[0]。這種情況下,第九行是無(wú)法找到所需對(duì)象的。
2. 常用的匹配方法
正則表達(dá)式功能強(qiáng)大且復(fù)雜,要完全掌握會(huì)花費(fèi)很長(zhǎng)時(shí)間。但是對(duì)于我們編寫xdc而言,只需要掌握很小一部分內(nèi)容就可以應(yīng)對(duì)絕大多數(shù)情況了。最常用的應(yīng)該就是特殊字符和限定符了。下面是比較常用的特殊字符。

常用限定符如下。

我們?cè)贔PGA工程中使用正則表達(dá)式不是為了進(jìn)行字符處理,不需要考慮太多的容錯(cuò)性和可能性。對(duì)于我們而言,絕大多數(shù)命名都是確定的,使用正則是為了更方便的獲取對(duì)象和簡(jiǎn)化匹配過(guò)程。
3. 使用示例
3.1 獲取總線類對(duì)象
看以下例子。在進(jìn)行物理約束的時(shí)候,為一個(gè)總線設(shè)置信號(hào)類型,如果一個(gè)一個(gè)的寫即慢又可能犯錯(cuò)。使用正則可以將這類信號(hào)全部提取出來(lái)。以一個(gè)從0到31共32路的總線為例。
set_property IOSTANDARD SSTL18_I_DCI [get_ports -regexp {c2c_sync/[.*]}]
以上指令可以獲取所有名字為c2c_sync[]的端口,方括號(hào)內(nèi)可能是任意多個(gè)數(shù)字。這種寫法不夠準(zhǔn)確,在文字處理程序里面會(huì)出大問(wèn)題,但是在FPGA工程中足夠了。當(dāng)然也可以寫的稍微嚴(yán)格點(diǎn),比如:
set_property IOSTANDARD SSTL18_I_DCI [get_ports -regexp {c2c_sync/[[0-9]{1,2}]}]
這個(gè)表達(dá)式比上一個(gè)更進(jìn)一步的約束了中括號(hào)內(nèi)的內(nèi)容。這里的/[是為了匹配“[”本身,而里面的[0-9]則定義了一個(gè)從數(shù)字0到數(shù)字9的字符集,[0-9]后面的{1,2}則表示[0-9]中的任意數(shù)字將出現(xiàn)1次,或以任意兩個(gè)數(shù)字的組合出現(xiàn)1次。對(duì)于我們的應(yīng)用,做到這一步就夠了。
3.2 簡(jiǎn)化匹配表達(dá)式
工程中會(huì)有一些名字很特殊的信號(hào),比如全局復(fù)位信號(hào),這種信號(hào)在工程中往往只會(huì)出現(xiàn)一次,我用更加簡(jiǎn)單粗暴的方式來(lái)獲得。
set_false_path -from [get_cells -regexp -hierarchical .*rst_global_reg.*]
比如上面的例子。通過(guò)使用-hierarchical搜索所有層次,通過(guò)在rst_global_reg的前后都使用.*來(lái)匹配任何可能出現(xiàn)的字符。其中.表示匹配任何非換行符的字符,*表示.可以出現(xiàn)任意次。當(dāng)然并不推薦這種寫法,因?yàn)闀?huì)增加編譯時(shí)匹配對(duì)象的負(fù)擔(dān)。可以使用更精準(zhǔn)的匹配。
對(duì)于層次很深的信號(hào),只要保證列出的匹配字符能夠找到我們所要的對(duì)象即可。比如某工程有下圖的層次結(jié)構(gòu)。

比如設(shè)計(jì)者發(fā)現(xiàn)A_i0模塊內(nèi)部的D_i0內(nèi)的某個(gè)關(guān)鍵信號(hào)的位置需要優(yōu)化,且設(shè)計(jì)者知道該信號(hào)在D_i0中唯一。為了拿到這個(gè)關(guān)鍵信號(hào),可以使用正則表達(dá)式,并且可以略過(guò)中間層次的所有模塊。
get_cells -regexp -hierarchical {A_i0/.*/D_i0/start_reg}
3.3 特殊字符的獲取
前面提到過(guò)一些特殊字符,比如?、.、/、[等等,如果需要匹配這些字符,需要用到轉(zhuǎn)義符“/”。比如“/.”表示“.”這個(gè)字符本身,而不再是匹配符.。
比如在上文提到的get_ports -regexp {c2c_sync/[[0-9]{1,2}]}。這個(gè)總線的完整名稱是c2c_sync[0]、c2c_sync[1]......,此處的“/[”就是表示左方括號(hào)這個(gè)字符本身。而[0-9]中單獨(dú)使用的[]就表示一個(gè)字符集合。這里有個(gè)需要注意的地方,作為字符使用的左方括號(hào)左側(cè)加了轉(zhuǎn)義符“/“,而右方括號(hào)則不需要加”/“。
另外一個(gè)需要注意的是上文中提到的get_cells -regexp -hierarchical ConfigRegs_i/bus_hsio_dly.*_fine_sel.*。這里面bus_hsio_dly是一個(gè)systemverilog中的interface,獲取的對(duì)象是bus_hsio_dly接口中的cmph_fine_sel_reg信號(hào),其表達(dá)方式應(yīng)該是bus_hsio_dly.cmph_fine_sel_reg。此處我使用”.*“來(lái)匹配任何非換行字符,所以可以匹配”.“字符。
更合適一點(diǎn)的匹配表達(dá)式應(yīng)該是ConfigRegs_i/bus_hsio_dly/..*_fine_sel_reg。第一處修改是明確使用/.來(lái)匹配”.“,第二處修改時(shí)添加了_reg后綴(Vivado會(huì)給寄存器變量默認(rèn)添加_reg后綴)。如果不添加該后綴,可能會(huì)獲取一些不期望的對(duì)象。比如使用get_cells時(shí),可能或獲取帶_fine_sel的LUT,比如_fine_sel_i_1等等。
再進(jìn)一步,我們可能注意到上述匹配獲得的對(duì)象打印出來(lái)是:
bus_hsio_dly//.cmph_fine_sel_reg
打印結(jié)果不是/.,而是//.。對(duì)于這種情況,我猜想是//用來(lái)表示轉(zhuǎn)義符”/“。而”//“表示的轉(zhuǎn)義符則作用于特殊字符”.“,用來(lái)表示普通字符”.“。
這是個(gè)人猜測(cè),但是為什么會(huì)這樣?如果哪位清楚原因,不吝賜教。
- visual C++ 2010 CLR字符串與正則表達(dá)式 0次下載
- Python正則表達(dá)式指南 10次下載
- Python正則表達(dá)式的學(xué)習(xí)指南 0次下載
- Python正則表達(dá)式教程之標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例說(shuō)明 3次下載
- 如何在C++?Builder6上使用Boost正則表達(dá)式庫(kù)的詳細(xì)資料概述 1次下載
- 基于改進(jìn)正則表達(dá)式規(guī)則分組的內(nèi)網(wǎng)行為審計(jì)方案 0次下載
- 正則表達(dá)式學(xué)習(xí)心得 8次下載
- php 記憶卡 字符串 正則表達(dá)式 6次下載
- 基于正則表達(dá)式匹配的網(wǎng)絡(luò)設(shè)備自動(dòng)管理系統(tǒng)_李林廣 0次下載
- 基于正則表達(dá)式的數(shù)據(jù)處理應(yīng)用方斌 0次下載
- 源碼-正則表達(dá)式應(yīng)用一例 1次下載
- 正則表達(dá)式應(yīng)用一例 3次下載
- 精通正則表達(dá)式 5次下載
- PHP正則表達(dá)式 0次下載
- 正則表達(dá)式匹配器 0次下載
- 詳解nginx中的正則表達(dá)式 300次閱讀
- nginx中的正則表達(dá)式和location路徑匹配指南 892次閱讀
- 你還不會(huì)gvim正則表達(dá)式?一文搞懂! 1256次閱讀
- GVIM正則表達(dá)式介紹和使用示例 1360次閱讀
- 什么是正則表達(dá)式?正則表達(dá)式如何工作?哪些語(yǔ)法規(guī)則適用正則表達(dá)式? 3826次閱讀
- OpenHarmony中使用正則表達(dá)式 1507次閱讀
- shell腳本基礎(chǔ):正則表達(dá)式grep 1287次閱讀
- 正則表達(dá)式(RegularExpression)使用指南 1596次閱讀
- 文本處理技巧之正則表達(dá)式 4026次閱讀
- C語(yǔ)言如何使用正則表達(dá)式 4972次閱讀
- 不懂正則表達(dá)式?不如借助這三個(gè)神器 2200次閱讀
- 教你如何輕松搞定Linux正則表達(dá)式 3646次閱讀
- 3分鐘搞定Linux正則表達(dá)式! 2853次閱讀
- 校驗(yàn)數(shù)字校驗(yàn)字符和特殊需求的常用正則表達(dá)式大全 5w次閱讀
- 快速入門IPv6和正則表達(dá)式 9051次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1491次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費(fèi)
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機(jī)和 SG3525的程控開(kāi)關(guān)電源設(shè)計(jì)
- 0.23 MB | 4次下載 | 免費(fèi)
- 8基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537793次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論