vhdl设计调试的提示和技巧

时间:2015-03-06 09:38:03

标签: vhdl

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

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

还请建议我使用任何网站或做同样的文件。

2 个答案:

答案 0 :(得分:4)

这个问题可能有点模糊,但我尝试做的一些事情是为了让设计更容易处理。它以意见为基础,但确实来自个人经验。

  • 为您的模块编写测试平台。测试是一个非常大的主题,我不会尝试深入介绍,但您应该进行某种测试,以便您可以在模拟器中评估您的设计。除了琐碎的设计之外,在模拟器中查找代码中的问题比在目标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中的等价物是在编写单个模块时对它们进行测试,然后再组装它们以形成更复杂的功能。
  • 尝试一些更高级的验证技巧。您的模拟器可能会为一个开始生成代码覆盖率指标。除此之外,还有一些改进测试的方法,例如约束随机测试,自检测试,基于断言的验证等等。这本身就是一个完整的话题。

答案 1 :(得分:1)

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