我正在尝试使用 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 ==>等于= 1
我想它会一点一点地比较,所以 Equal 应该是 '0' 如果你知道一本书或一个网站来解释合成后信号的行为或未定义信号背后的逻辑,如果你把它放在评论中我会很感激的
谢谢你