日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Perl在ASIC中的應(yīng)用—高級(jí)篇(1):正則表達(dá)式

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

掃碼添加小助手

加入工程師交流群

從今天開始,我們介紹 Perl 在 ASIC 應(yīng)用中的高級(jí)篇。高級(jí)篇主要介紹正則表達(dá)式、module、package、面向?qū)ο?、進(jìn)程等。

正則表達(dá)式最常見的有兩個(gè)應(yīng)用,高級(jí)查找和替換。而替換的核心部分也是查找。

那么,我們?nèi)绾味x這個(gè)查找(或者說(shuō)叫匹配)的規(guī)則。匹配的基本語(yǔ)法是:


m/.../


匹配規(guī)則就寫在 m 開頭的兩個(gè)斜杠之間。

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


分類一:(轉(zhuǎn)義)


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


/b 匹配單詞邊界


/B 非單詞邊界


/d 數(shù)字,就是 0-9 中的任一個(gè)字符


/D 非數(shù)字


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


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


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


/S 非空白字符


/n 換行符,ASCII 的 0x0A


/t 制表符


/x /x 后接十六進(jìn)制數(shù),匹配這個(gè)數(shù)的 ASCII 符號(hào)

分類二:


^ 匹配開頭


$ 匹配結(jié)尾


. 區(qū)配除換行符以外的所有字符

分類三:(匹配次數(shù))


* 匹配零次或多次


+ 匹配一次或多次


? 匹配零次或一次

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


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


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


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


{n} 匹配 n 次


{n,m} 匹配 n 到 m 次


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


? 當(dāng)?跟在*,+,?等后面時(shí),表示非貪婪模式。如,


my $test = "aaaaabb";


$test =~ m/a+?/;


匹配的結(jié)果是"a",而不是"aaaaa"



Perl 的綁定操作符


=~ 表示滿足匹配


!~ 表示不滿足匹配


如:


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


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

正則表達(dá)式的匹配模式
i 忽略大小寫


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


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


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


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


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

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

表示查換 ab+c,并把找到的結(jié)果傳給 replace()函數(shù),用函數(shù)的返回值來(lái)替換。這種方法可用于復(fù)雜的查找替換。這種用法,我在編輯 APR 的 IO 坐標(biāo)文件時(shí)實(shí)際用過(guò),比 GVIM 或者 Emacs 的列填充更強(qiáng)大。

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


2. s//s*(/w+)/s*/.$1/t/t($1)/ 可用來(lái)模塊例化時(shí),自動(dòng)連接端口


3. my @testcase = `ls`;


foreach my $tc (@testcase){


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


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


}


}

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


... #通過(guò)腳本確認(rèn)當(dāng)前目錄是否是項(xiàng)目根目錄


}

Perl 正則表達(dá)式是非常博大精深的,需要在工作中慢慢積累。所以,今天的練習(xí)題多一點(diǎn),主要是想多提供一些實(shí)際使用場(chǎng)景,并自己動(dòng)手解決問(wèn)題。

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


2. 用正則表達(dá)式把門級(jí)網(wǎng)表拆分成多個(gè)僅包含單個(gè) module 的文件。


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

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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • asic
    +關(guān)注

    關(guān)注

    34

    文章

    1278

    瀏覽量

    124991
  • PERL
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    條件的執(zhí)行語(yǔ)句

    條件執(zhí)行語(yǔ)句大多在if語(yǔ)句中使用,也使用關(guān)系運(yùn)算符(<,==,>等) 或者布爾值表達(dá)式(,!等)計(jì)算復(fù)雜表達(dá)式時(shí)使用。對(duì)于包含函數(shù)調(diào) 用的代碼片段,由于函數(shù)返回值會(huì)被
    發(fā)表于 12-12 08:25

    布爾表達(dá)式及范圍檢查

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

    布爾表達(dá)式和零值比較處理

    (int x, int y) { if (x + y < 0) return 1; else return 0; } 盡可能的使用上面的判斷方式,這可以關(guān)鍵循環(huán)中減少比較指令的調(diào)用
    發(fā)表于 12-12 06:16

    C語(yǔ)言強(qiáng)制類型轉(zhuǎn)換

    表達(dá)式都必須加括號(hào), 如把(int)(x/2+y)寫成(int)x/2+y則成了把x轉(zhuǎn)換成int型之后再除2再與y相加了。 轉(zhuǎn)換后不會(huì)改變?cè)瓟?shù)據(jù)的類型及變量值,只本次運(yùn)算臨時(shí)性轉(zhuǎn)換。 強(qiáng)制轉(zhuǎn)換后的運(yùn)算結(jié)果不遵循四舍五入原則
    發(fā)表于 11-24 06:32

    第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.5 4.6)

    (表達(dá)式) ? ? ? ?{ ? ? ? ? ? ?循環(huán)體語(yǔ)句; ? ? ? ?} C語(yǔ)言里,通?!?b class='flag-5'>表達(dá)式”符合條件叫做真,不符合條件,叫做假。比如前邊i while(表達(dá)式)這個(gè)
    的頭像 發(fā)表于 11-06 11:21 ?537次閱讀

    inline ASM(內(nèi)聯(lián)匯編)的細(xì)節(jié)分享

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

    示例3x3矩陣求和簡(jiǎn)析

    冒號(hào)之后是輸出表達(dá)式,r代表隨機(jī)分配一個(gè)寄存器,括號(hào)是C語(yǔ)言對(duì)應(yīng)的變量。第二個(gè)冒號(hào)之后是輸入表達(dá)式,如果除了輸入輸出之外還有別的寄存器使用則需添加第三個(gè)冒號(hào),冒號(hào)之后的表達(dá)式代表除了
    發(fā)表于 10-30 06:25

    I1電流計(jì)算對(duì)不對(duì)?怎么推導(dǎo)不出來(lái)I1表達(dá)式是圖中那樣

    I1電流計(jì)算對(duì)不對(duì)?怎么推導(dǎo)不出來(lái)I1表達(dá)式是圖中那樣
    發(fā)表于 09-28 18:01

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

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

    基礎(chǔ)3:掌握Python的條件語(yǔ)句與循環(huán)

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

    Cubeide1.18.1在線調(diào)試改變\"現(xiàn)場(chǎng)表達(dá)式\"的值提示找不到地址,為什么?

    Cubeide1.18.1在線調(diào)試時(shí),\"現(xiàn)場(chǎng)表達(dá)式\"添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-12 06:50

    《ESP32S3 Arduino開發(fā)指南》第三章 C/C++語(yǔ)言基礎(chǔ)

    for語(yǔ)句表達(dá)式情況具體執(zhí)行流程:for語(yǔ)句被執(zhí)行前,首先會(huì)執(zhí)行表達(dá)式1,然后再檢查表達(dá)式2的值:假如為假,不執(zhí)行循環(huán)體,結(jié)束for語(yǔ)句
    發(fā)表于 06-10 09:20

    Cubeide1.18.1在線調(diào)試改變\"現(xiàn)場(chǎng)表達(dá)式\"的值提示找不到地址是怎么回事?

    Cubeide1.18.1在線調(diào)試時(shí),\"現(xiàn)場(chǎng)表達(dá)式\"添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-10 08:26

    干貨分享 | 零基礎(chǔ)上手!TSMaster圖形信號(hào)表達(dá)式實(shí)操指南

    TSMaster軟件支持圖形里面的信號(hào)表達(dá)式功能,主要用于多信號(hào)表達(dá)式運(yùn)算和顯示的場(chǎng)景。本文將以A2L的標(biāo)定變量為例,介紹如何使用圖形
    的頭像 發(fā)表于 06-06 20:03 ?1035次閱讀
    干貨分享 | 零基礎(chǔ)上手!TSMaster圖形信號(hào)<b class='flag-5'>表達(dá)式</b>實(shí)操指南

    Cubeide1.18.1在線調(diào)試改變\"現(xiàn)場(chǎng)表達(dá)式\"的值提示找不到地址,怎么解決?

    Cubeide1.18.1在線調(diào)試時(shí),\"現(xiàn)場(chǎng)表達(dá)式\"添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-06 08:27
    禄丰县| 沿河| 曲沃县| 陆良县| 城步| 宝鸡市| 阿瓦提县| 翁源县| 沙坪坝区| 腾冲县| 塘沽区| 贵州省| 宣武区| 遂溪县| 延庆县| 根河市| 互助| 呼和浩特市| 嘉黎县| 天镇县| 大城县| 抚顺县| 拉萨市| 黑山县| 河北区| 宝坻区| 河东区| 沙雅县| 九寨沟县| 绵竹市| 汝城县| 阿拉善盟| 乌苏市| 邛崃市| 调兵山市| 临夏市| 四子王旗| 金川县| 葵青区| 鱼台县| 红原县|