например: если я хочу знать, содержит ли строка a
строку «qwerty», есть ли простой способ сделать это в системном verilog? как ниже код в C?Как искать строку внутри другой строки в системном verilog?
a.strstr("qwerty");
например: если я хочу знать, содержит ли строка a
строку «qwerty», есть ли простой способ сделать это в системном verilog? как ниже код в C?Как искать строку внутри другой строки в системном verilog?
a.strstr("qwerty");
Вы можете использовать svlib
библиотеку из Verilab, что оборачивает функции C мы знаем и любим в SystemVerilog функции. Он предоставляет свой собственный Str
класс, который может сказать вам, если строка содержит определенную подстроку:
Str my_str = Str::create(a);
if my_str.first("qwerty")
$display("found it");
Вы можете найти svlib
на this location
UVM также предоставляет аналогичное средство для сопоставления регулярных выражений с использованием DPI, если вы уже используете это. Посмотрите на функции в 'uvm_svcmd_dpi.svh'. –
@ Tudor Timi- whihch одна из функций? – sara8d
В настоящее время я делаю так, это работает. но мне интересно, если есть лучший способ ...
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 я закодированы эти две функции:
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- выражения), которые r Получил очень всесторонний/полезный ответ. – AndresM