Vhdl 仿真中的未定义信号
我试图使用SystemVerilog的断言验证用VHDL编写的设计。然而,当我有一个未定义的信号'X'时,我遇到了一个问题 举个例子,这里有一个比较器的代码:Vhdl 仿真中的未定义信号,vhdl,system-verilog,system-verilog-assertions,synopsys-vcs,Vhdl,System Verilog,System Verilog Assertions,Synopsys Vcs,我试图使用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 downt
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;
当Comp_int1和Comp_int2具有定义值时,如果其中一个具有未定义值,则模拟工作正常,但当两个信号都具有未定义值时,则会产生错误,例如:
Comp_int1=48xx_xxxx;Comp_int2=47xx_xxxx==>Equal=1
我想它一点一点地比较,所以相等应该是“0”,如果你知道一本书或一个网站解释合成后信号的行为或未定义信号背后的逻辑,如果你把它放在评论中,我将不胜感激
谢谢我建议首先在设计中消除信号的未定义值。您可以通过在所有可能的情况下初始化这些信号的值来实现这一点。这有助于消除设计中的X射线传播。您至少需要有来自世界两侧的信号值。有IEEE出版物和白皮书描述了verilog/vhdl互操作性,涉及信号值映射、定时和同步。即。可能想直接和synopsys谈谈。请你发一封邮件好吗?
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);