Estoy tratando de verificar un diseño escrito en VHDL usando las aserciones de SystemVerilog. sin embargo, tengo un problema cuando tengo una señal 'X' no definida
Por ejemplo, aquí hay un código de un comparador:
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;
y las afirmaciones
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);
Cuando Comp_int1 y Comp_int2 tienen valores definidos, la simulación funciona bien Si uno de ellos tiene un valor indefinido, también funciona bien. pero cuando ambas señales tienen un valor indefinido, da error Por ejemplo:
Comp_int1 = 48xx_xxxx; Comp_int2 = 47xx_xxxx == > Igual = 1
Supongo que se compara poco a poco, por lo que Igual debería ser '0' Por favor, si conoce un libro o un sitio web que explique el comportamiento de las señales después de la síntesis o la lógica detrás de las señales indefinidas, le agradecería que lo pusiera en un comentario
gracias