如何调试Verilog代码,其中仿真功能如预期的那样工作,但实现没有?

问题描述:

我有点难住。如何调试Verilog代码,其中仿真功能如预期的那样工作,但实现没有?

我有我的模拟(ISIM)测试过的一个相当大的Verilog模块,并将其用作我想要的。现在我已经将它与现实生活中的其他设备结合使用,并且一些东西可以工作,而有些东西不会。

例如,

我可以发送使用指令A的值,并验证使用命令B.,正确值被接收工作没有问题。

但是,如果我用指示C发送的值,我无法验证它是使用命令D.在模拟它工作正常接收,所以我觉得我真的不能从模拟更多的获得任何。

我已经看过逻辑分析仪上的信号,并且控制器设备(不是我的设计)发送正确的消息。当我发出命令B时,我可以看到从我的设备返回的值是正确的(我知道SPI工作正常)。我不知道C或D是否正常工作。 D只返回0,所以也许C首先不起作用。没有办法通过Verilog,而且这个模块被封装为Vivado的IP。

这里有两个截图。首先是模拟(我发送5,然后是2,然后我希望它在下一次发送时返回4,它会发送;后面是零)。 enter image description here

以下是我在现实中得到(前两个字节并不重要,5是从之前发送值遗漏): enter image description here

这里是一个命令(B),在工作返回一个正确的值(它响应正在发送的0x01): enter image description here

有没有人有任何建议来调试?我几乎不知道如何着手。 我不能在模拟中真正重现此行为。

+1

你是否合成了RTL来获得一个门文件。你应该能够模拟大门并获得相同的结果。 RTL门限不匹配通常是由于不遵循RTL最佳实践。你能否创建一个显示问题的最小例子? – Morgan 2014-10-29 22:01:44

由于您正在合成FPGA,因此您可以在如何调试合成的片上设计方面有更多的选择。在您使用Vivado时,您可以使用ChipScope查看系统中的任何信号;使您可以像仿真一样随时查看该信号的波形(尽管受到更多限制)。通过将ChipScope IP包含在综合中,您可以将波形数据发送回Vivaod软件,该软件将显示所选信号的波形,以帮助您在系统运行时查看FPGA内部发生的情况。 (注意,如果你使用的是Altera的东西,你可以使用它们相当的SignalTap;它几乎是一样的东西)

有许多关于如何合并和运行ChipScope的教程,来自Xilinx网站的继承人: http://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_4/ug936-vivado-tutorial-programming-debugging.pdf 许多其他使用ISE,但步骤非常相似,因为两者通常都涉及到使用coregen工具(尽管我认为您还可以通过合成流程添加ChipScope,因此有多种方法可以将它合并到您的设计中)。

在FPGA上,您可以访问实际上是内部逻辑分析仪的内容。请注意,它会占用FPGA上的一些LE,并可能占用相当数量的Block RAM,具体取决于您想要取出信号的样本数。

蒂姆的回答提供了一个很好的描述如何处理片上调试,如果你是纯粹的ASIC设计;所以如果您想了解更多关于标准的非FPGA调试解决方案的信息,请参阅他的答案。

+0

谢谢!我一直在试图让ChipScope做任何事情,但事实证明这很困难(就像一个'困难'的孩子)。我不明白为什么,但它不让我查看所有信号。例如,我只能查看控制寄存器的第5位和第7位。其次,与Xilinx SDK(ARM代码)的集成是痛苦的。我目前正在通过在C++代码中设置断点来解决它,当然它不想。它似乎也没有执行C++代码,只是永远坐在反汇编器的某个随机点。 – Mewa 2014-10-30 23:26:21

+0

有趣;不幸的是,自从我用ChipScope做了任何事情并且没有访问我可能帮助你的FPGA之后,它已经有一段时间了。它是正确的工具,但与工作可能有点令人讨厌。尽管祝你好运! – Unn 2014-10-31 00:04:40

在这种情况下,您可能想要考虑添加仅用于调试的附加逻辑。 ('调试设计')是用于思考这种逻辑的通用术语。

所以你有一个芯片接口(SPI),你不知道它是否工作正常。由于它看起来没有工作,所以你不能相信通过这个接口的调试,因为如果你得到一个奇怪的结果,你不能确定它的意思。

由于您正在使用FPGA,除SPI之外是否还有其他接口可以正常工作?也许7段显示器,LED,JTAG,VGA等?

试着想想其他创造性的方式来从芯片中获取不需要SPI接口的数据。

  • 如果有4个LED,A通过d,即可点亮每个LED对于每次接收到该类型的命令时间为1秒?

  • 你能有一个7段显示您的SPI接收器的状态机的当前状态,还是有它一定的指示错误代码如果收到一些不知名的命令?

  • 你能VGA笼络到监视器传入SPI比特流的二进制序列?

一旦你可以开始缩小与数据什么是真正的硬件里面发生的事情,你可以缩小问题空间去检查是否有可能出现的问题。

+3

自从他使用Vivado以来,一件很酷的事情是:他可以使用ChipScope模块直接查看内部信号。 ChipScope是赛灵思的FPGA调试工具,它将充当逻辑分析仪,并将波形数据直接发送到Vivado软件,让他在芯片上进行调试,而无需实现可能有其自身缺陷的新界面。如果要使用ASIC,拥有JTAG或其他东西真的很理想,但对于FPGA的工作,ChipScope相当不错。 (Altera主板上的SignalTap) – Unn 2014-10-29 23:03:51

+0

Tim,谢谢。我知道SPI接口是独立工作的,它的内部工作显然与模拟工作不一样。我使用板上的8个LED显示RX数据。我也检查过C(write)命令的工作原理,但我认为它不会在寄存器之间传输,这很奇怪。但是在任何情况下,命令D都会返回0,因为所需的寄存器实际上是0.我将尝试连接其他一些状态信号。我有一个VGA接口,但我没有实现字符打印界面。 – Mewa 2014-10-30 15:03:24

+0

@Unn,ChipScope是一个独立的调试工具吗?我现在只是使用USB电缆。去看看我能否在实验室里找到ChipScope。 – Mewa 2014-10-30 15:07:04