使用SV實現模式匹配

2021-10-17 18:26:30 字數 1874 閱讀 3828

模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。

假設p是給定的子串,t是待查詢的字串,要求從t中找出與p相同的所有子串,這個問題成為模式匹配問題。p稱為模式,t稱為目標。如果t中存在乙個或多個模式為p的子串,就給出該子串在t中的位置,稱為匹配成功;否則匹配失敗。

**如下(示例):

function match

(string s1,s2)

;int l1,l2;

l1 = s1.

len();

l2 = s2.

len();

match =0;

if( l2 > l1 )

return0;

for(

int i =

0;i < l1 - l2 +

1; i ++)if

( s1.

substr

(i,i+l2 -1)

== s2)

return1;

endfunction

程式舉例:

program main;

string str1,str2;

int i;

initial

begin

str1 =

"this is first string"

;str2 =

"this";if

(match

(str1,str2)

)$display

(" str2 : %s : found in :%s:"

,str2,str1)

;str1 =

"this is first string"

;str2 =

"first";if

(match

(str1,str2)

)$display

(" str2 : %s : found in :%s:"

,str2,str1)

;str1 =

"this is first string"

;str2 =

"string";if

(match

(str1,str2)

)$display

(" str2 : %s : found in :%s:"

,str2,str1)

;str1 =

"this is first string"

;str2 =

"this is ";if

(match

(str1,str2)

)$display

(" str2 : %s : found in :%s:"

,str2,str1)

;str1 =

"this is first string"

;str2 =

"first string";if

(match

(str1,str2)

)$display

(" str2 : %s : found in :%s:"

,str2,str1)

;str1 =

"this is first string"

;str2 =

"first string "

;// one space at endif(

match

(str1,str2)

)$display

(" str2 : %s : found in :%s:"

,str2,str1)

;end

endprogram

SV 中巨集的使用

在sv中,養成使用巨集的習慣可以大大提高code 的可閱讀性,讓我們從簡單重複的工作中脫離出來,聚焦技術方法本身或者硬體的理解上,可以有效的提高我們的驗證效率。在我們驗證的過程或多或少的會遇到在tb test中使用巨集的方法,當然我們是看的懂的,但是我們一定要思考這個tb test為什麼要這麼寫,有...

模式匹配 關於模式匹配的演算法實現2

參照我上篇部落格,只不過多了乙個識別率的演算法而已,還是參考歸併排序寫的,很簡單。上篇部落格位址 很多的解釋都在 裡面了,各位看看就明白了 author seen time 2015 09 20 include include include using namespace std struct p...

SV 使用斷言(Assertion)的優點

朋友們,這次我決定寫關於斷言的文章。我個人認為斷言是非常方便和非常有用的資產,當我們談 能驗證時,即在給定的rtl設計中發現缺陷 確保驗證完整性。它是一種令人驚嘆的驗證技術,用較少的 提供了如此多的好處。如果你閱讀了我之前關於斷言的文章 關於斷言的基礎知識 我們在這裡討論了乙個斷言示例,並與相應的v...