如何在 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;
您不确定的部分是正确的。 c0
、c1
、'0'
、'1'
都是std_logic
,这样比较是对的。 (在 VHDL 中 =
是相等比较运算符。它不执行赋值,就像在许多软件编程语言中一样)。每次比较的结果都是布尔值(true
或 false
),因此可以与 assert
语句一起使用。
我认为唯一错误的部分是您必须以 end if
结束 if
。通常还建议,每当您使用 assert
时,您 report
一个错误消息并设置一个 severity
(例如 note
、warning
、error
或 failure
,具体取决于错误的严重程度)。当然也必须以;
.
结束
因此:
if unsigned(a) > unsigned(b) then
assert c1 = '1' and c0 = '0' report "<Error message>" severity warning;
end if;
我在 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;
您不确定的部分是正确的。 c0
、c1
、'0'
、'1'
都是std_logic
,这样比较是对的。 (在 VHDL 中 =
是相等比较运算符。它不执行赋值,就像在许多软件编程语言中一样)。每次比较的结果都是布尔值(true
或 false
),因此可以与 assert
语句一起使用。
我认为唯一错误的部分是您必须以 end if
结束 if
。通常还建议,每当您使用 assert
时,您 report
一个错误消息并设置一个 severity
(例如 note
、warning
、error
或 failure
,具体取决于错误的严重程度)。当然也必须以;
.
因此:
if unsigned(a) > unsigned(b) then
assert c1 = '1' and c0 = '0' report "<Error message>" severity warning;
end if;