Поиск и замена строк в SystemVerilog

Какой самый простой способ поиска и замены строк в SystemVerilog?

Например, у меня есть:

string hdl_path = "DUT.my_red39";

Как мне создать новый string что заменяет красный на синий?

EDA Playground link

1 ответ

Вы можете использовать одну из библиотек утилит SystemVerilog, которые были созданы недавно.

ClueLib

svlib

В качестве альтернативы, вы можете сделать это с простым SystemVerilog, сравнивая отдельные символы:

  function automatic string search_replace(string original, string old, string replacement);
    // First find the index of the old string
    int start_index = 0;
    int original_index = 0;
    int replace_index = 0;
    bit found = 0;

    while(1) begin
      if (original[original_index] == old[replace_index]) begin
        if (replace_index == 0) begin
          start_index = original_index;
        end
        replace_index++;
        original_index++;
        if (replace_index == old.len()) begin
          found = 1;
          break;
        end
      end else if (replace_index != 0) begin
        replace_index = 0;
        original_index = start_index + 1;
      end else begin
        original_index++;
      end
      if (original_index == original.len()) begin
        // Not found
        break;
      end
    end

    if (!found) return original;

    return {
      original.substr(0, start_index-1),
      replacement,
      original.substr(start_index+old.len(), original.len()-1)
    };

  endfunction

SystemVerilog заменить пример на детской площадке EDA

Другие вопросы по тегам