我在VHDL语言中有一段代码,这让我不确定它是否正确:a和b是std_logic_vectors。c1和c0是std_logic。这是正确的书写吗?尤其是"c1 = '1‘和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;
发布于 2019-12-29 23:49:43
您不确定的部分是正确的。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;
https://stackoverflow.com/questions/59520632
复制相似问题