我目前正在为我制作的VHDL设计编写测试台架,我需要将消息写入文本文件。消息的格式为
[instance_name];[simulation_time]
(即。U0;700 ns
),文件名必须为[instance_name].log
。获取实例名称和模拟时间没有问题,但是写入自定义文件名就有问题了。在模拟情况下,实例名称将以以下格式给出:
"U0ComponentXtest"
,我想用下划线代替斜杠。有简单的方法吗?
我们的PoC库有相当大的关于字符串操作/函数的集合。PoC中有一个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 := "U0ComponentXtest";
constant replaced : STRING := replace(original);
简单的替换字符函数,这是更通用的,做同样的工作将是(@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__