首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VHDL中正确使用assert?

如何在VHDL中正确使用assert?
EN

Stack Overflow用户
提问于 2019-12-29 23:17:28
回答 1查看 6.4K关注 0票数 2

我在VHDL语言中有一段代码,这让我不确定它是否正确:a和b是std_logic_vectors。c1和c0是std_logic。这是正确的书写吗?尤其是"c1 = '1‘和c0 = '0'“这一部分让我头疼。

代码语言:javascript
运行
复制
if unsigned(a) > unsigned(b) then
    assert(c1 = '1' and c0 = '0')

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

代码语言:javascript
运行
复制
    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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-29 23:49:43

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

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

因此:

代码语言:javascript
运行
复制
if unsigned(a) > unsigned(b) then
    assert c1 = '1' and c0 = '0' report "<Error message>" severity warning;
end if;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59520632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档