我使用 VIVADO 作为我的模拟器。我正在尝试读取一个非常简单的输入文件,该文件有 2 列、时间和我要设置的位的值。这是输入文件:
104 us 1
108 us 0
116 us 1
以及VHDL代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use std.textio.all;
entity tb_input_from_txt is
end tb_input_from_txt;
architecture rtl_tb_input_from_txt of tb_input_from_txt is
constant file_name_c : string := "input_data.txt";
signal clk_100M_s : std_logic := '0';
signal reset_s : std_logic := '0';
signal dig_s : bit;
file fptr: text;
--signal line_sig : line;
begin
clk_100M_s <= not clk_100M_s after 5 ns;
reset_s <= '0', '1' after 40 us;
GetData_proc: process
variable fstatus : file_open_status;
variable file_line : line;
variable timewhen_v : time;
variable value_set_v : bit;
variable ok : boolean;
begin
wait until reset_s = '1';
file_open(fstatus, fptr, file_name_c, read_mode);
while (not endfile(fptr)) loop
readline(fptr, file_line);
read(file_line, timewhen_v, ok);
assert ok
report "Read 'wait_time' failed for line: " & file_line.all
severity failure;
dread(file_line, value_set_v, ok);
assert ok
report "Read 'value_set_v' failed for line: " & file_line.all
severity failure;
wait for timewhen_v - NOW;
dig_s <= value_set_v;
end loop;
wait for 5 ns;
end process GetData_proc;
end architecture rtl_tb_input_from_txt;
当我运行此命令时,dig_s信号开始具有值“?” (问号)从 104 us 开始。所以我知道文件的读取几乎是正确的,因为 dig_s 的值在 104 us 处发生了变化,就像它应该的那样。但为什么我会得到“?”值而不是正确的位值?
这里给出了两个答案:Vivado模拟器中的问号
第一个已被该论坛的用户接受。