如何在 VHDL 中正确使用断言?

How do I use assert in VHDL correctly?

我在 VHDL 中有一个代码段,这让我不确定它是否正确: a 和 b 是 std_logic_vectors。 c1 和 c0 是 std_logic。这样写对吗?尤其是 "c1 = '1' and c0 = '0'" 部分让我很纠结。

if unsigned(a) > unsigned(b) then
    assert(c1 = '1' and c0 = '0')

编辑:这是一个更大的代码段:

    signal a: std_logic_vector(3 downto 0);
    signal b: std_logic_vector(3 downto 0);
    signal c1: std_logic;
    signal c0: std_logic;

    begin
    TEST: forBitComperator port map(a, b, c1, c0);
      process
      begin
        for i in 0 to 2**4-1 loop
            for k in 0 to 2**4-1 loop

                wait for 0 ns;

                a <= conv_std_logic_vector(i, 4);
                b <= conv_std_logic_vector(k, 4);

                if i > k then
                  assert c1 = '1' and c0 = '0'
                  report "error ";
               end if;
        end loop;
    end loop;
    wait;
  end process;
end;

您不确定的部分是正确的。 c0c1'0''1'都是std_logic,这样比较是对的。 (在 VHDL 中 = 是相等比较运算符。它不执行赋值,就像在许多软件编程语言中一样)。每次比较的结果都是布尔值(truefalse),因此可以与 assert 语句一起使用。

我认为唯一错误的部分是您必须以 end if 结束 if。通常还建议,每当您使用 assert 时,您 report 一个错误消息并设置一个 severity(例如 notewarningerrorfailure,具体取决于错误的严重程度)。当然也必须以;.

结束

因此:

if unsigned(a) > unsigned(b) then
    assert c1 = '1' and c0 = '0' report "<Error message>" severity warning;
end if;