如何在系统verilog中的另一个字符串中搜索字符串?

时间:2014-12-04 07:04:27

标签: system-verilog

例如:如果我想知道字符串a是否包含字符串“qwerty”,是否有一种简单的方法可以在系统verilog中执行此操作?如下面的C代码?

a.strstr("qwerty");

4 个答案:

答案 0 :(得分:3)

目前我这样做,它的工作原理。但我想知道是否有更好的方法......

int len = a.len();
for( int i =0; i < len;i++) begin
    if(a.substr(i,i+6-1) =="qwerty")
       $display("found it");
end

答案 1 :(得分:1)

您可以使用Verilab的svlib库来包装我们在SystemVerilog函数中熟悉和喜爱的C函数。它提供了自己的Str类,可以告诉您字符串是否包含某个子字符串:

Str my_str = Str::create(a);
if my_str.first("qwerty")
  $display("found it");

您可以在this location

找到svlib

答案 2 :(得分:0)

根据awill的答案,我编写了这两个函数:

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

答案 3 :(得分:0)

    module test;
      string mainString = "hello world";
      string subString = "rld";

      initial begin
        for (int i=0; i<mainString.len()-subString.len()+1; i++) begin
          if( mainString.substr(i,i+subString.len()-1) == subString ) begin
            $display("\n it Contraints \n");
          end
        end
      end
  endmodule