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 が定義済みの値を持っている場合、それらの 1 つが未定義の値を持っていてもシミュレーションは正常に動作しますが、両方の信号が未定義の値を持っているとエラーが発生します。例:
Comp_int1= 48xx_xxxx; Comp_int2=47xx_xxxx ==>等しい = 1
ビットごとに比較すると思うので、Equal は '0' である必要があります 合成後の信号の動作または未定義信号の背後にあるロジックを説明している本または Web サイトを知っている場合は、コメントに入れていただければ幸いです。
ありがとうございました