-1

我正在尝试使用 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' 如果你知道一本书或一个网站来解释合成后信号的行为或未定义信号背后的逻辑,如果你把它放在评论中我会很感激的

谢谢你

4

1 回答 1

-1

我建议首先在设计中消除未定义的信号值。您可以通过在所有可能的情况下初始化这些信号的值来做到这一点。这有助于消除设计中的 X 传播。

于 2018-10-16T18:32:33.670 回答