我有的
我正在尝试制作一个测试台,其中包含一行文件,其中可能的字符是“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 需要有一个定义的大小,我不知道文件行大小。
我试过什么
我尝试了不同的方法来完成它,比如每次将 4 个字符从rdline
一个字符串中读取,处理它,然后重复。但是,我无法让它工作。
我在 Google 上找到了很多关于使用 VHDL 读取文件的示例,但它们都非常相似,并且都定义了行格式,例如列或预期的整数,其中我只有一行的未知文本。
我想这可以通过rdline
以某种方式读取 var 来实现,但我无法实现。你能帮我写代码吗?
先感谢您