【问题标题】:Tips and tricks for vhdl design debuggingvhdl 设计调试的提示和技巧
【发布时间】:2015-03-06 09:38:02
【问题描述】:

我使用 VHDL 已经有一段时间了,我发现调试 VHDL 设计比设计它更难。由于进程是并发的,因此很难知道设计的哪个部分存在错误。

像 C 一样,我们可以使用一些简单的调试规则,例如放置 printf 语句来查看错误位置,是否有任何简单的提示和技巧可以在 VHDL 中找到此类错误。

还请给我推荐任何网站或做文档,可以用于相同的。

【问题讨论】:

  • 断言语句,带有报告语句和允许 VHDL 仿真继续进行的严重性级别、自行报告语句、使用 textio(如 C 或更接近 Ada)直接输出到标准输出、波形转储和外部子程序(术语调试仅出现在与 VHPI 相关的 VHDL 标准中)。请注意,您的问题只会引发意见。

标签: vhdl


【解决方案1】:

这个问题可能有点含糊,但我会尝试做一些事情来使设计更容易进行。它是基于意见的,但确实来自个人经验。

  • 为您的模块编写测试平台。测试是一个非常大的主题,我不会尝试深入讨论,但是您应该进行某种测试,以便您可以在模拟器中评估您的设计。除了微不足道的设计之外,在模拟器中发现代码中的问题要比在目标 PCB 上更容易、更快捷。
  • 保持设计模块化。与真正的任何编程一样,您通常不应该拥有 3000 行的巨大文件,因为很难一次将功能牢牢记在脑海中。一个例外可能是查找表。即便如此,我还是倾向于将表格放在自己的文件中,不做任何其他事情,以保持“真实”的功能代码更具可读性。
  • 您可以在模拟过程中使用简单的断言来捕捉某些类型的问题。示例:

    if (rising_edge(clk)) then
        assert (a /= b)
            report "a and b should never be equal!"
            severity error;
    end if;
    
  • 同样,您可以单独使用report 语句来打印信号值。示例:

    if (rising_edge(clk)) then
        report "count is now " & integer'image(count);
    end if;
    

    Report 不会在您编译的 FPGA 中做任何事情,它只是用于模拟。

  • 如果您已经为您的设计提供了测试平台,但仍然难以调试,请尝试为设计中的各个模块编写简单的测试平台。使用 C 或其他语言进行编程,您不会等到程序完成后再进行任何测试;您将在编写新功能时不断测试它。 VHDL 中的等价物是在编写单个模块时对其进行测试,然后再组装它们以形成更复杂的功能。
  • 尝试一些更高级的验证技术。您的模拟器可能会首先生成代码覆盖率指标。除此之外,还有几种改进测试的方法,例如约束随机测试、自检测试、基于断言的验证等等。这本身就是一个完整的话题。

【讨论】:

    【解决方案2】:

    相对于其他编程语言(如 C、Python 等),我实际上发现 VHDL 更易于调试。该语言本身相当简单,因为它不能很容易地创建复杂的算法。 以我的经验,易于调试的秘诀是使模块尽可能简单,并将它们组合在一起以创建复杂的结构。这样,发现错误变得更加容易。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多