【发布时间】:2016-02-04 17:46:53
【问题描述】:
我正在尝试制作一个测试台,其中包含单行文件,其中可能的字符是“1”和“0”。我必须全部阅读它们,并在我的 DUT 中一一使用作为输入。
因此,在我的 TB 中,我定义了一个类似以下的过程,以便读取文件并将其值传递给我的 DUT。
stim_proc: process
file input_file: TEXT is in "DatosEntrada.dat";
variable rdline : LINE;
variable line_content : string ( 1 to 4);
variable readed_char : character;
variable j : integer := 0;
begin
while not endfile(input_file) loop
readline(input_file, rdline);
--read(rdline, line_content);
for j in 1 to rdline'length-1 loop
readed_char := line_content(j);
if (readed_char = '1') then
input <= '1';
else
input <= '0';
end if;
wait for clk_period;
end loop;
end loop;
end process;
我正在读取我的文件的第一行(也是唯一一行),第一次执行 readline。此后,此循环不应再次执行。
那么,文件中的数据应该在rdline 中。所以我必须处理它。为了做到这一点,我尝试循环 rdline 长度,但是这个循环没有执行。
for j in 1 to rdline'length-1 loop
所以我认为我需要阅读这一行以便循环它,并尝试将其数据移动到string var。问题是,vector var like string 需要有一个定义的大小,而我不知道文件行大小。
我尝试每次将来自rdline 的 4 个字符读入一个字符串,处理它,然后重复。但是,我无法让它工作。
我发现了很多关于读取已定义行格式(如列或预期整数)的文件的示例。
但是我如何才能阅读一行未知的文本呢?
【问题讨论】:
-
如果你只想要一个 Readline 调用(读取一行),只需删除外部循环。然后我建议报告 rdline'length 和实际文本是什么,看看发生了什么。
标签: testing vhdl test-bench