vhdl设计调试的提示和技巧

jim*_*ons 1 vhdl

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

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

还请向我建议任何可用于同一网站的网站或文档。

sca*_*eff 5

这个问题可能有点含糊,但是我尝试做一些事情来简化设计工作。它基于观点,但确实来自个人经验。

  • 为您的模块编写测试平台。测试是一个非常大的主题,我不会尝试深入探讨,但是您应该进行某种测试,以便可以在模拟器中评估设计。对于琐碎的设计而言,在模拟器中查找代码中的问题要比在目标PCB上容易得多且更快。
  • 保持设计模块化。实际上,与任何编程一样,您通常不应拥有3000个大行文件,因为很难一次性掌握该功能。查找表可能是一个例外。即使那样,我也倾向于将表放在其他文件中,以保持“真实的”功能代码更易读。
  • 您可以使用简单的断言在仿真过程中捕获某些类型的问题。例:

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

    if (rising_edge(clk)) then
        report "count is now " & integer'image(count);
    end if;
    
    Run Code Online (Sandbox Code Playgroud)

    Report 在已编译的FPGA中不执行任何操作,仅用于仿真。

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