Я пытаюсь проверить дизайн, написанный на VHDL, используя утверждения SystemVerilog.однако у меня возникла проблема, когда у меня есть неопределенный сигнал '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 = 1
Я полагаю, он сравнивается побитно, поэтому Equal должен быть равен 0. Пожалуйста, если вы знаете книгу или веб-сайт, объясняющий поведение сигналов после синтеза илилогика за неопределенными сигналами Буду благодарен, если вы добавите это в комментарий
спасибо