例如:如果我想知道字符串a
是否包含字符串“qwerty”,是否有一种简单的方法可以在系统verilog中执行此操作?像下面的C代码?如何在系统verilog中的另一个字符串内搜索字符串?例如:
a.strstr("qwerty");
例如:如果我想知道字符串a
是否包含字符串“qwerty”,是否有一种简单的方法可以在系统verilog中执行此操作?像下面的C代码?如何在系统verilog中的另一个字符串内搜索字符串?例如:
a.strstr("qwerty");
您可以使用从Verilab的svlib
库包装SystemVerilog中的功能,我们知道C函数和爱。它提供了自己的Str
类,它可以告诉你,如果一个字符串包含特定字符串:
Str my_str = Str::create(a);
if my_str.first("qwerty")
$display("found it");
您可以在this location
UVM还提供了一个使用DPI进行regexp匹配的类似工具,以防您已使用该工具。看看'uvm_svcmd_dpi.svh'中的函数。 – 2014-12-04 09:26:52
@都铎Timi whihch的功能之一? – sara8d 2016-11-10 09:04:28
目前我这样做,它的工作原理。但我想知道是否有更好的办法...
int len = a.len();
for(int i =0; i < len;i++) begin
if(a.substr(i,i+6-1) =="qwerty")
$display("found it");
end
根据答案通过awill找到svlib
我编写了这两个功能:
function int contains(string a, string b);
// checks if string A contains string B
int len_a;
int len_b;
len_a = a.len();
len_b = b.len();
$display("a (%s) len %d -- b (%s) len %d", a, len_a, b, len_b);
for(int i=0; i<len_a; i++) begin
if(a.substr(i,i+len_b-1) == b)
return 1;
end
return 0;
endfunction
function int startswith(string a, string b);
// checks if string A starts-with string B
int len_b;
len_b = b.len();
if(a.substr(0, len_b-1) == b)
return 1;
return 0;
endfunction
即使这个问题在很久以前就已经回答了,但我认为把这个[其他相关问题]的链接放在一起会很有用(https://stackoverflow.com/questions/44948561/system-verilog-regular-表达式),收到了AV全面/有用的答案。 – AndresM 2017-12-06 20:49:48