在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

正則表達式在Vivado約束文件中的應用

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-08 11:26 ? 次閱讀

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/yinyeyy/article/details/106422415

使用xdc文件進行管腳、位置、時序和屬性等約束的時候,經常會使用各種get命令。Vivado提供了很豐富的匹配表達式,比如等于==、不等于!=、匹配=~、不匹配!~、、=等等,這些表達式可以通過&&和||進行組合;同時還有大量的狀態、屬性和單元名稱可用,比如DIRECTION、IN、IS_LOC_FIXED、IS_PRIMITIVE、NAME等等。

我在xdc文件中匹配目標的時候,在可行的情況下更傾向于使用正則表達式。本文就介紹一下我常使用的正則表達式和一些在Vivado中應用的特殊之處,同時也有個別自己尚未解決的問題。

1. -hierarchical和-regexp的使用

在匹配FPGA內部資源時,比如get_pins、get_cells、get_nets的時候,需要同時使用-hierarchical和-regexp。

-hierarchical表示Vivado在匹配對象的時候,將在工程中不同的層次內對該信號進行搜索。如果沒有加這個選項,就必須在匹配字符中顯式且精確的指出匹配對象所在的層次。需要注意的是,當使用get_ports時,不能使用-hierarchical選項。因為ports應該位于頂層,沒有層次之分。

-regexp是指本次匹配將使用正則表達式,是必須使用的。

以下是一個使用-hierarchical的例子和注意事項。

pIYBAGAKB9yAJCbYAAA5Hntw-xs125.png

首先看第一行藍色的get_cells命令,這里用來獲得ConfigRegs_i這個實例內的滿足bus_hsio_dly/。.*_fine_sel.*要求的對象。可以看到運行該命令后得到了下面黑色部分的對象。第三行指令在第一行的基礎上,把頂層實例ConfigRegs_i的限制去掉,也獲得了想要的對象。

再來看第五行的指令。此處去掉了-hierarchical,意味著匹配過程不能穿越不同的層次結構。同時“.*”雖然可以匹配任何除換行符之外的任何數量的字符,但是卻不能替代在Vivado中表示層次概念的“/”符號。所以匹配過程只在頂層進行搜索,其結果就如第六行,不能找到所需的對象。

第七行也犯了一樣的錯誤。在沒有使用-hierarchical的情況下,雖然想通過“ConfigRegs_i.*”來匹配頂層的ConfigRegs_i實例,但是“.*”是不能匹配層次符號“/”的。同樣無法獲取對象。

第九行雖然沒有使用-hierarchical,但是通過ConfigRegs_i/指定了對象的層次結構,是可以獲得想要的對象的。但是這里有一個限制,即cmph_fine_sel_reg[0]這些對象必須位于ConfigRegs_i下。如果cmph_fine_sel_reg[0]和ConfigRegs_i中間還隔了別的實例,比如ConfigRegs_i例化了CmpDef_i,CmpDef_i內部定義了cmph_fine_sel_reg[0]。這種情況下,第九行是無法找到所需對象的。

2. 常用的匹配方法

正則表達式功能強大且復雜,要完全掌握會花費很長時間。但是對于我們編寫xdc而言,只需要掌握很小一部分內容就可以應對絕大多數情況了。最常用的應該就是特殊字符和限定符了。下面是比較常用的特殊字符。

pIYBAGAKCF-AbiVSAABn6kj4D0s793.png

常用限定符如下。

pIYBAGAKCJ2AALooAABAaZ5sz04170.png

我們在FPGA工程中使用正則表達式不是為了進行字符處理,不需要考慮太多的容錯性和可能性。對于我們而言,絕大多數命名都是確定的,使用正則是為了更方便的獲取對象和簡化匹配過程。

3. 使用示例

3.1 獲取總線類對象

看以下例子。在進行物理約束的時候,為一個總線設置信號類型,如果一個一個的寫即慢又可能犯錯。使用正則可以將這類信號全部提取出來。以一個從0到31共32路的總線為例。

set_property IOSTANDARD SSTL18_I_DCI [get_ports -regexp {c2c_sync/[.*]}]

以上指令可以獲取所有名字為c2c_sync[]的端口,方括號內可能是任意多個數字。這種寫法不夠準確,在文字處理程序里面會出大問題,但是在FPGA工程中足夠了。當然也可以寫的稍微嚴格點,比如:

set_property IOSTANDARD SSTL18_I_DCI [get_ports -regexp {c2c_sync/[[0-9]{1,2}]}]

這個表達式比上一個更進一步的約束了中括號內的內容。這里的/[是為了匹配“[”本身,而里面的[0-9]則定義了一個從數字0到數字9的字符集,[0-9]后面的{1,2}則表示[0-9]中的任意數字將出現1次,或以任意兩個數字的組合出現1次。對于我們的應用,做到這一步就夠了。

3.2 簡化匹配表達式

工程中會有一些名字很特殊的信號,比如全局復位信號,這種信號在工程中往往只會出現一次,我用更加簡單粗暴的方式來獲得。

set_false_path -from [get_cells -regexp -hierarchical .*rst_global_reg.*]

比如上面的例子。通過使用-hierarchical搜索所有層次,通過在rst_global_reg的前后都使用.*來匹配任何可能出現的字符。其中。表示匹配任何非換行符的字符,*表示。可以出現任意次。當然并不推薦這種寫法,因為會增加編譯時匹配對象的負擔。可以使用更精準的匹配。

對于層次很深的信號,只要保證列出的匹配字符能夠找到我們所要的對象即可。比如某工程有下圖的層次結構。

比如設計者發現A_i0模塊內部的D_i0內的某個關鍵信號的位置需要優化,且設計者知道該信號在D_i0中唯一。為了拿到這個關鍵信號,可以使用正則表達式,并且可以略過中間層次的所有模塊。

get_cells -regexp -hierarchical {A_i0/.*/D_i0/start_reg}

3.3 特殊字符的獲取

前面提到過一些特殊字符,比如?、。、/、[等等,如果需要匹配這些字符,需要用到轉義符“/”。比如“/。”表示“。”這個字符本身,而不再是匹配符。。

比如在上文提到的get_ports -regexp {c2c_sync/[[0-9]{1,2}]}。這個總線的完整名稱是c2c_sync[0]、c2c_sync[1]。..。..,此處的“/[”就是表示左方括號這個字符本身。而[0-9]中單獨使用的[]就表示一個字符集合。這里有個需要注意的地方,作為字符使用的左方括號左側加了轉義符“/“,而右方括號則不需要加”/“。

另外一個需要注意的是上文中提到的get_cells -regexp -hierarchical ConfigRegs_i/bus_hsio_dly.*_fine_sel.*。這里面bus_hsio_dly是一個systemverilog中的interface,獲取的對象是bus_hsio_dly接口中的cmph_fine_sel_reg信號,其表達方式應該是bus_hsio_dly.cmph_fine_sel_reg。此處我使用”.*“來匹配任何非換行字符,所以可以匹配”。“字符。

更合適一點的匹配表達式應該是ConfigRegs_i/bus_hsio_dly/。.*_fine_sel_reg。第一處修改是明確使用/。來匹配”。“,第二處修改時添加了_reg后綴(Vivado會給寄存器變量默認添加_reg后綴)。如果不添加該后綴,可能會獲取一些不期望的對象。比如使用get_cells時,可能或獲取帶_fine_sel的LUT,比如_fine_sel_i_1等等。

再進一步,我們可能注意到上述匹配獲得的對象打印出來是:

bus_hsio_dly//.cmph_fine_sel_reg

打印結果不是/。,而是//。。對于這種情況,我猜想是//用來表示轉義符”/“。而”//“表示的轉義符則作用于特殊字符”。“,用來表示普通字符”。“。

這是個人猜測,但是為什么會這樣?如果哪位清楚原因,不吝賜教。

審核編輯:何安

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Vivado
    +關注

    關注

    19

    文章

    832

    瀏覽量

    68358
  • xdc
    xdc
    +關注

    關注

    1

    文章

    24

    瀏覽量

    6027
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Cubeide1.18.1在線調試改變\"現場表達式\"的值提示找不到地址,為什么?

    Cubeide1.18.1在線調試時,\"現場表達式\"添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 06-12 06:50

    干貨分享 | 零基礎上手!TSMaster圖形信號表達式實操指南

    TSMaster軟件支持圖形里面的信號表達式功能,主要用于多信號表達式運算和顯示的場景。本文將以A2L的標定變量為例,介紹如何使用圖形
    的頭像 發表于 06-06 20:03 ?139次閱讀
    干貨分享 | 零基礎上手!TSMaster圖形信號<b class='flag-5'>表達式</b>實操指南

    Cubeide1.18.1在線調試改變\"現場表達式\"的值提示找不到地址,怎么解決?

    Cubeide1.18.1在線調試時,\"現場表達式\"添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 06-06 08:27

    Cubeide1.18.1在線調試改變\"現場表達式\"的值提示找不到地址怎么解決?

    Cubeide1.18.1在線調試時,\"現場表達式\"添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 04-27 06:18

    Linux中文本處理命令的用法

    Linux 三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表達式作為基礎,而在Linux系統,支持兩種正則表達式,分別為“標準
    的頭像 發表于 04-15 10:22 ?244次閱讀
    Linux中文本處理命令的用法

    一文詳解Vivado時序約束

    Vivado的時序約束是保存在xdc文件,添加或創建設計的工程源文件后,需要創建xdc文件設置
    的頭像 發表于 03-24 09:44 ?3029次閱讀
    一文詳解<b class='flag-5'>Vivado</b>時序<b class='flag-5'>約束</b>

    Linux grep命令詳解

    Linux grep命令是一種非常常用的文本搜索工具,它可以在給定的文件搜索匹配的字符串,并輸出匹配的行。grep是全稱“global search regular expression print”,可以識別正則表達式,并使
    的頭像 發表于 12-25 09:39 ?795次閱讀

    詳解nginx正則表達式

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 12-03 09:59 ?801次閱讀
    詳解nginx<b class='flag-5'>中</b>的<b class='flag-5'>正則表達式</b>

    Verilog表達式的位寬確定規則

    很多時候,Verilog中表達式的位寬都是被隱式確定的,即使你自己設計了位寬,它也是根據規則先確定位寬后,再擴展到你的設計位寬,這常常會導致結果產生意想不到的錯誤。
    的頭像 發表于 10-22 15:41 ?1425次閱讀
    Verilog<b class='flag-5'>表達式</b>的位寬確定規則

    nginx正則表達式和location路徑匹配指南

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 09-29 16:02 ?1628次閱讀
    nginx<b class='flag-5'>中</b>的<b class='flag-5'>正則表達式</b>和location路徑匹配指南

    求助,以下恒流源電路Io的計算表達式怎么計算?

    這個恒流源電路Io的計算表達式怎么計算,求給出詳細計算過程
    發表于 08-22 08:16

    TestStand表達式中常用的語法規則和運算符使用

    TestStand也有自己的語言嘛?回答這個問題之前大家可以想一下使用TestStand時有一個和語言密切相關的屬性。沒錯那就是表達式(Expressions),在這篇文章,小編
    的頭像 發表于 08-15 18:10 ?3239次閱讀
    TestStand<b class='flag-5'>表達式</b>中常用的語法規則和運算符使用

    Java表達式引擎選型調研分析

    1 簡介 我們項目組主要負責面向企業客戶的業務系統, 企業的需求往往是多樣化且復雜的,對接不同企業時會有不同的定制化的業務模型和流程。 我們在業務系統 使用表達式引擎,集中配置管理業務規則,并實現
    的頭像 發表于 08-15 14:25 ?602次閱讀
    Java<b class='flag-5'>表達式</b>引擎選型調研分析

    鴻蒙原生應用元服務開發-倉頡基本概念表達式(二)

    }, ${y}\") } } 運行以上程序,將輸出: 1, 2 3, 4 5, 63.迭代變量不可修改 for-in 表達式的循環體,不能修改迭代變量,例如以下程序在編譯時會
    發表于 08-09 14:26

    鴻蒙原生應用元服務開發-倉頡基本概念表達式(一)

    程序能夠表達更復雜的邏輯,倉頡,這種用來控制執行流的語言元素就是條件表達式和循環表達式
    發表于 08-08 10:27
    主站蜘蛛池模板: 成 人 在 线 免费 8888 www | jiucao视频在线观看 | 影音先锋在线亚洲精品推荐 | 黄网站免费大全 | 国产精品天天操 | 亚洲免费播放 | 久久六月丁香婷婷婷 | 天天舔天天色 | 初恋视频黄色 | 狠狠狠狠狠狠 | 日本美女黄色一级片 | 欧美一卡二卡科技有限公司 | 国产一区二区三区在线观看视频 | 久久国产精品网 | 操爽视频 | 亚洲一区二区三区中文字幕 | 69日本xxxxxxxx59| 色老头在线官方网站 | 久久久网站亚洲第一 | 国产传媒在线观看视频免费观看 | 五月天婷婷免费视频观看 | 欧美人与z0xxxx另类 | 夜夜爱夜夜做夜夜爽 | 亚洲狠狠色丁香婷婷综合 | 初恋视频黄色 | 日本在线播放一区 | 一区二区三区欧美在线 | 欧美激情亚洲色图 | 第四色播日韩第一页 | 粉嫩尤物在线456 | 欧美午夜精品久久久久久黑人 | 九九精品国产 | 理论片国产 | 免费一级毛片视频 | 欧美成人免费大片888 | 久久艹影院 | 天天色天天综合 | 性欧美高清极品猛交 | 久久夜色撩人精品国产 | 天天摸天天添人人澡 | 天天精品在线 |