86 lines
2.2 KiB
Systemverilog
86 lines
2.2 KiB
Systemverilog
//----------------------------------------------------------------------
|
|
// Copyright 2010-2012 Mentor Graphics Corporation
|
|
// Copyright 2010-2018 Cadence Design Systems, Inc.
|
|
// All Rights Reserved Worldwide
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in
|
|
// compliance with the License. You may obtain a copy of
|
|
// the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in
|
|
// writing, software distributed under the License is
|
|
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
// CONDITIONS OF ANY KIND, either express or implied. See
|
|
// the License for the specific language governing
|
|
// permissions and limitations under the License.
|
|
//----------------------------------------------------------------------
|
|
|
|
|
|
|
|
`ifndef UVM_REGEX_NO_DPI
|
|
import "DPI-C" context function int uvm_re_match(string re, string str);
|
|
import "DPI-C" context function string uvm_glob_to_re(string glob);
|
|
|
|
`else
|
|
|
|
// The Verilog only version does not match regular expressions,
|
|
// it only does glob style matching.
|
|
function int uvm_re_match(string re, string str);
|
|
int e, es, s, ss;
|
|
string tmp;
|
|
e = 0; s = 0;
|
|
es = 0; ss = 0;
|
|
|
|
if(re.len() == 0)
|
|
return 0;
|
|
|
|
// The ^ used to be used to remove the implicit wildcard, but now we don't
|
|
// use implicit wildcard so this character is just stripped.
|
|
if(re[0] == "^")
|
|
re = re.substr(1, re.len()-1);
|
|
|
|
//This loop is only needed when the first character of the re may not
|
|
//be a *.
|
|
while (s != str.len() && re.getc(e) != "*") begin
|
|
if ((re.getc(e) != str.getc(s)) && (re.getc(e) != "?"))
|
|
return 1;
|
|
e++; s++;
|
|
end
|
|
|
|
while (s != str.len()) begin
|
|
if (re.getc(e) == "*") begin
|
|
e++;
|
|
if (e == re.len()) begin
|
|
return 0;
|
|
end
|
|
es = e;
|
|
ss = s+1;
|
|
end
|
|
else if (re.getc(e) == str.getc(s) || re.getc(e) == "?") begin
|
|
e++;
|
|
s++;
|
|
end
|
|
else begin
|
|
e = es;
|
|
s = ss++;
|
|
end
|
|
end
|
|
while (e < re.len() && re.getc(e) == "*")
|
|
e++;
|
|
if(e == re.len()) begin
|
|
return 0;
|
|
end
|
|
else begin
|
|
return 1;
|
|
end
|
|
endfunction
|
|
|
|
function string uvm_glob_to_re(string glob);
|
|
return glob;
|
|
endfunction
|
|
|
|
`endif
|