用于向输入数据注入错误的一段VHDL代码如下所示:
entity error_test
Port (
clk : in STD_LOGIC;
force_error_i : in STD_LOGIC_VECTOR(1 downto 0);
din : in STD_LOGIC_VECTOR(127 downto 0);
dout : out STD_LOGIC_VECTOR(127 downto 0)
);
end error_test;
architecture Behavioral of error_test is
signal single_error_2 : std_logic_vector(127 downto 0) := x"00000000000000000000000000000001";
signal double_error_2 : std_logic_vector(127 downto 0) := x"00000000000000000000000000000003";
signal triple_error_2 : std_logic_vector(127 downto 0) := x"00000000000000000000000000000007";
signal din_errinj_2 : std_logic_vector(127 downto 0);
process (force_error_i, din, single_error, double_error, triple_error)
begin
case (force_error_i) is
when "00" =>
din_errinj_2 <= din;
when "01" =>
din_errinj_2 <= din xor single_error_2(127 downto 0);
when "10" =>
din_errinj_2 <= din xor double_error_2(127 downto 0);
when "11" =>
din_errinj_2 <= din xor triple_error_2(127 downto 0);
when others =>
din_errinj_2 <= din;
end case;
end process;
end Behavioral;
该模块在主设计和测试平台模拟中都能正常工作。
但问题在于代码覆盖率工具分析。代码覆盖工具(来自Aldec的Reviera-PRO)显示当输入 force_error_i(2)是&#34; 00&#34;然后当&#34; 00&#34; 被覆盖时,当其他条件也被覆盖时!这是当其他人条件多余时?或者我们是否需要其他声明,但这里还有其他错误?
答案 0 :(得分:0)
不,它不是多余的,因为你可以拥有像&#34; UU&#34;这样的值。我猜这是你的问题,因为你不是同步的,这个过程最初会运行一次。不知道你的模拟器中的覆盖率是多少。