我正在尝试使用SystemVerilog的断言来验证用VHDL编写的设计。但是当我有一个未定义的信号“ X”时我遇到了一个问题
例如,下面是比较器的代码:
entity FP_comparator_V2 is
port (
comp_in1 : in std_logic_vector(31 downto 0);
comp_in2 : in std_logic_vector(31 downto 0);
less : out std_logic;
equal : out std_logic;
greater : out std_logic
);
end FP_comparator_V2;
architecture behav of FP_comparator_V2 is
-- signal, component etc. declarations
begin
-- architecture body
process(comp_in1, comp_in2)
begin
if comp_in1 = comp_in2 then
equal <= '1';
less <= '0';
greater <= '0';
else
equal <= '0';
...
end if;
end process;
end behav;
和断言
property FP_Comparator_V2_1_1;
@(posedge `assertion_check_clk29M4912 or negedge `assertion_check_clk29M4912)
(fp_comp_intf.Comp_in1 === fp_comp_intf.Comp_in2) |-> (fp_comp_intf.equal);
endproperty
DS_3_4_69_1_1:
assert property(FP_Comparator_V2_1_1);
cover property(FP_Comparator_V2_1_1);
property FP_Comparator_V2_1_2;
@(posedge `assertion_check_clk29M4912 or negedge `assertion_check_clk29M4912)
(fp_comp_intf.Comp_in1 !== fp_comp_intf.Comp_in2) |-> (!fp_comp_intf.equal);
endproperty
DS_3_4_69_1_2:
assert property(FP_Comparator_V2_1_2);
cover property(FP_Comparator_V2_1_2);
当Comp_int1和Comp_int2具有定义的值时,如果其中一个具有未定义的值也可以正常工作,则模拟工作正常,但是当两个信号都具有未定义的值时,都会产生错误,例如:
Comp_int1 = 48xx_xxxx; Comp_int2 = 47xx_xxxx ==>等于=
我想它会一点一点地进行比较,所以Equal应该为'0'。如果您知道一本书或一个网站在解释合成后的信号行为或未定义信号背后的逻辑,请在注释中进行感谢
谢谢
答案 0 :(得分:-1)
我建议先消除设计中信号的不确定值。您可以通过在所有可能的情况下初始化这些信号的值来实现此目的。这有助于消除设计中的X传播。