国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

Perl在ASIC中的應用—高級篇(1):正則表達式

454398 ? 2023-02-03 15:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

從今天開始,我們介紹 Perl 在 ASIC 應用中的高級篇。高級篇主要介紹正則表達式、module、package、面向對象、進程等。

正則表達式最常見的有兩個應用,高級查找和替換。而替換的核心部分也是查找。

那么,我們如何定義這個查找(或者說叫匹配)的規則。匹配的基本語法是:


m/.../


匹配規則就寫在 m 開頭的兩個斜杠之間。

定義規則中的特殊字符稱為元字符。元字符有以下這些(只列了常用的,基本夠用了):


分類一:(轉義)


/ 反斜杠加接元字符表示轉義,比如 /+, /*, /?等,表示這些字符本身


/b 匹配單詞邊界


/B 非單詞邊界


/d 數字,就是 0-9 中的任一個字符


/D 非數字


/w 匹配大小寫字母和下劃線


/W 非大小寫字母和下劃線


/s 匹配空白字符,包括空格、制表符等


/S 非空白字符


/n 換行符,ASCII 的 0x0A


/t 制表符


/x /x 后接十六進制數,匹配這個數的 ASCII 符號

分類二:


^ 匹配開頭


$ 匹配結尾


. 區配除換行符以外的所有字符

分類三:(匹配次數)


* 匹配零次或多次


+ 匹配一次或多次


? 匹配零次或一次

分類四:括號(), [], {}


() 圓括號表示取值,把()里的值存到$1, $2, ... , $n 里


[] 表示多選一。如[abc]匹配 a 或 b 或 c。連續的字符可以簡寫,如[a-z],[0-9]


[^] 表示[]里列出的其它字符


{n} 匹配 n 次


{n,m} 匹配 n 到 m 次


| 分組,如 m/bill|mike/,表示 bill 或 mike


? 當?跟在*,+,?等后面時,表示非貪婪模式。如,


my $test = "aaaaabb";


$test =~ m/a+?/;


匹配的結果是"a",而不是"aaaaa"



Perl 的綁定操作符


=~ 表示滿足匹配


!~ 表示不滿足匹配


如:


if($tc =~ m/^tc_/){ ... } 表示如果$tc 變量以 tc_ 開頭,則執行{}里的語句。


if($tc !~ m/^tc_/){ ... } 表示如果$tc 變量不以 tc_ 開頭,則執行{}里的語句。

正則表達式的匹配模式
i 忽略大小寫


m 多行處理,即字符串中的換行符把字符串分為多行。匹配時不能越行


s 單行處理,在這個模式下,元字符 . 可以匹配換行符


x 允許正則表達式換行和加注釋,忽略空白字符


g 查到全局所有可能的匹配,即會匹配多次


e 用于替換,表示替換的新值要先計算,如

s/(ab+c)/&replace($1)/e

表示查換 ab+c,并把找到的結果傳給 replace()函數,用函數的返回值來替換。這種方法可用于復雜的查找替換。這種用法,我在編輯 APR 的 IO 坐標文件時實際用過,比 GVIM 或者 Emacs 的列填充更強大。

下面舉幾個例子:
1. m/(output|input|inout)/s+wire|reg/s*(/[.*/])?(/w+),/ 腳本提取 RTL 端口定義


2. s//s*(/w+)/s*/.$1/t/t($1)/ 可用來模塊例化時,自動連接端口


3. my @testcase = `ls`;


foreach my $tc (@testcase){


if($tc =~ m/^tc_/){


... #查找目錄下的"tc_"開頭所有的文件名,在寫仿真腳本時常用到


}


}

4. if($pwd =~ m///(trunk|tags|release)$/){


... #通過腳本確認當前目錄是否是項目根目錄


}

Perl 正則表達式是非常博大精深的,需要在工作中慢慢積累。所以,今天的練習題多一點,主要是想多提供一些實際使用場景,并自己動手解決問題。

練習題:
1. 用正則表達式從 RTL 里抓取所有寄存器的路徑。(用于自動產生 UVM 寄存器模型)


2. 用正則表達式把門級網表拆分成多個僅包含單個 module 的文件。


3. 用正則表達式把 PR 網表中大小寫敏感的 net 改成大小寫不敏感。(用于 calibre 做 LVS)

下一次,我們將開始介紹 module。

審核編輯 黃宇

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

    關注

    34

    文章

    1274

    瀏覽量

    124594
  • PERL
    +關注

    關注

    0

    文章

    14

    瀏覽量

    10713
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    布爾表達式及范圍檢查

    一個常用的布爾表達式是用于判斷變量是否位于某個范圍內, 例如,檢查一個圖形坐標是否位于一個窗口內: bool PointInRectangelArea (Point p, Rectangle
    發表于 12-12 07:08

    C語言強制類型轉換

    表達式都必須加括號, 如把(int)(x/2+y)寫成(int)x/2+y則成了把x轉換成int型之后再除2再與y相加了。 轉換后不會改變原數據的類型及變量值,只本次運算臨時性轉換。 強制轉換后的運算結果不遵循四舍五入原則
    發表于 11-24 06:32

    第4章 C語言基礎以及流水燈的實現(4.5 4.6)

    (表達式) ? ? ? ?{ ? ? ? ? ? ?循環體語句; ? ? ? ?} C語言里,通常“表達式”符合條件叫做真,不符合條件,叫做假。比如前邊i while(表達式)這個
    的頭像 發表于 11-06 11:21 ?355次閱讀

    inline ASM(內聯匯編)的細節分享

    , \"r\"(_in1)被編號為2 \"r\"(_in2)被編號為2; 如果某個Input操作表達式使用數字0到9的一個數字(假設為1)作為它的操作約束,則等于向
    發表于 10-31 09:11

    I1電流計算對不對?怎么推導不出來I1表達式是圖中那樣

    I1電流計算對不對?怎么推導不出來I1表達式是圖中那樣
    發表于 09-28 18:01

    labview如何使用VISA串口資源查找的正則表達式提取串口的資源名稱?

    如圖,如何利用VISA資源查找的正則表達式從很多串口當中提取想要的目標串口(Quectel USB AT Port這個串口)?
    發表于 07-07 17:20

    基礎3:掌握Python的條件語句與循環

    不同的條件執行不同的代碼塊。Python的條件語句主要使用if、elif(else if的縮寫)和else關鍵字。 if語句 最簡單的條件語句是if語句,它的工作方式如下: 復制代碼 if 條件表達式
    發表于 07-03 16:13

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

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

    《ESP32S3 Arduino開發指南》第三章 C/C++語言基礎

    for語句表達式情況具體執行流程:for語句被執行前,首先會執行表達式1,然后再檢查表達式2的值:假如為假,不執行循環體,結束for語句
    發表于 06-10 09:20

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

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

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

    TSMaster軟件支持圖形里面的信號表達式功能,主要用于多信號表達式運算和顯示的場景。本文將以A2L的標定變量為例,介紹如何使用圖形
    的頭像 發表于 06-06 20:03 ?888次閱讀
    干貨分享 | 零基礎上手!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 ?771次閱讀
    Linux中文本處理命令的用法

    HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試Evaluate and log

    開發者可以通過 Evaluate and log 能力代碼執行到斷點行時打印開發者指定的表達式。 操作步驟 需要打印表達式結果的地方設置斷點。 右鍵斷點,然后點擊More按鈕。 勾
    發表于 03-14 16:49