我目前正在为我制作的VHDL设计编写测试平台,我需要在文本文件中写一条消息。消息的格式为
[instance_name];[simulation_time]
(即U0;700 ns
),文件名必须为[instance_name].log
。获取实例名称和模拟时间没有问题,但写入自定义文件名一直存在问题。在模拟下,实例名称将以以下格式给出:
"U0\ComponentX\test\"
我想用下划线替换斜杠。有一个简单的方法吗?
答案 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__