从 VHDL 文本文件中读取位时问号意味着什么?

问题描述 投票:0回答:1

我使用 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 处发生了变化,就像它应该的那样。但为什么我会得到“?”值而不是正确的位值?

vhdl vivado
1个回答
0
投票

这里给出了两个答案:Vivado模拟器中的问号

  1. Vivado 模拟器不支持使用 VHDL-2008 功能
  2. 这些值显示为十六进制。如果数组中有 X 或 U 值,特别是混合时,它将显示 ? 尝试将值显示为二进制,或展开波形中的位以查看它们全部是什么。

第一个已被该论坛的用户接受。

© www.soinside.com 2019 - 2024. All rights reserved.