在VHDL中修改字符串的最佳方法

时间:2015-06-03 21:46:55

标签: vhdl

我目前正在为我制作的VHDL设计编写测试平台,我需要在文本文件中写一条消息。消息的格式为

[instance_name];[simulation_time] 

(即U0;700 ns),文件名必须为[instance_name].log。获取实例名称和模拟时间没有问题,但写入自定义文件名一直存在问题。在模拟下,实例名称将以以下格式给出:

"U0\ComponentX\test\" 

我想用下划线替换斜杠。有一个简单的方法吗?

2 个答案:

答案 0 :(得分:3)

我们的PoC Library对字符串操作/函数有很大的收集。 PoC.strings中有一个str_replace函数可以解决您的问题。还有PoC.utils包含非字符串相关函数,这对于处理字符串和文件I / O也很有帮助。

一个简单的实现:

function replace(str : STRING) return STRING
  variable Result : STRING(str'range) := str;
begin
  for i in str'range loop
    if (Result(i) = '\') then
      Result(i)  := '_';
    end if;
  loop;
  return Result;
end function;

用法:

constant original : STRING := "U0\ComponentX\test\";
constant replaced : STRING := replace(original);

答案 1 :(得分:2)

简单替换字符功能,功能更多,做同样的工作(@ Paebbels答案没有错)

      function fReplaceChar(
        a : character;
        x : character;
        s : string) return string
      is
        variable ret : string(s'range) := s;
      begin
        for i in ret'range loop
          if(ret(i) = a) then
            ret(i) := x;
          end if;
        end loop;
        return ret;
      end function fReplaceChar;

如果要替换多个字符,可以随时堆叠该函数:

  function fReplaceChar(
    a : character;
    b : character;
    x : character;
    s : string) return string
  is
  begin
    return fReplaceChar(b, x, fReplaceChar(a, x, s));
  end function fReplaceChar;

或函数调用:

 fReplaceChar(')','_',fReplaceChar(':','(','_',tb'instance_name));

例如:

 process 
 begin
     report lf & tb'instance_name & lf &
     fReplaceChar(')','_',fReplaceChar(':','(','_',tb'instance_name));
     wait;
 end process;

给出:

  

#**注意:
  #:tb(sim):
  #_tb_sim__