我们可以在模拟器中强制为用户定义的数据类型赋值吗?

Can we force value for user defined datatypes in simulator?

抱歉,这可能是非常基本的问题。但是我找不到在线和离线的任何解决方案。 我正在为我的任务使用 vivado 2013.4 版本。这是我的代码。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.math_real.all;
use IEEE.NUMERIC_STD.ALL;

package my_package is
    type my_datatype is 
    record 
        n1 : real ;
        n2 : unsigned(31 downto 0);
        n3 : unsigned(31 downto 0);
        n4 : unsigned(31 downto 0);
        nE : integer;
    end record;
end my_package;

use work.my_package.all;

entity read_mydata is
     Port (a_in : inout my_datatype ; b_out : out my_datatype );
end read_mydata;

architecture Behavioral of read_mydata is
begin
    b_out <= (abs(a_in.n1), a_in.n2, a_in.n3, a_in.n4, abs(a_in.nE));  
end Behavioral;

代码没有明显的错误。我的问题是,如何在模拟器中强制输入?我尝试使用逗号和分号分隔符强制 a_in。有错误。例如,在 Tcl 控制台中,

 add_force {/read_file/a_in} -radix bin {2.5, 5, 4, 3, -2 0ns}
 ERROR: [#UNDEF] Time value 5, is not a valid number

这个程序可以合成吗?

根据 Vivado 2013.4 的 UG835,您的 TCL 命令不正确。您不能一次分配记录中的所有字段。看来您同时也更改了包的名称,因为原始代码中未提及 read_file 。无论如何,您可以运行以下内容:

add_force {/read_mydata/a_in.n1} -radix dec {2.5 0ns}
add_force {/read_mydata/a_in.n2} -radix dec {5 0ns}
add_force {/read_mydata/a_in.n3} -radix dec {4 0ns}
add_force {/read_mydata/a_in.n4} -radix dec {3 0ns}
add_force {/read_mydata/a_in.nE} -radix dec {-2 0ns}

我在 Vivado 2017.1 中尝试了您的代码。 (我手头没有2013.4。)在我的版本中,您还可以右键单击"Name"列中的信号和select "Force Constant..."