如何调试Verilog代码,其中模拟按预期运行,但实现并不是这样?

时间:2014-10-29 21:31:26

标签: debugging verilog fpga

我有点难过。

我有一个相当大的verilog模块,我已在Simulation(iSim)中测试过,它可以按我的意愿运行。现在我已经在现实生活中将它连接到使用SPI的另一个设备,有些东西可以工作,有些东西没有。

例如,

我可以使用命令A发送一个值,并使用命令B验证是否收到了正确的值。没问题。

但是如果我使用命令C发送一个值,我无法使用命令D验证它是否已收到。在模拟中它工作正常,所以我觉得我无法通过模拟获得任何东西。

我查看了逻辑分析仪上的信号,控制器设备(不是我的设计)发送了正确的信息。当我发出命令B时,我可以从我的设备看到正确的返回值(我知道SPI仍可正常工作)。我不知道C或D是否正常工作。 D只返回0,所以也许C首先没有工作。没有办法逐步完成Verilog,这个模块打包为Vivado的IP。

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

这是我在现实中得到的(前两个字节不重要,5是先前发送的值的剩余部分): enter image description here

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

有人有任何调试建议吗?我真的不知道如何继续。 我无法在模拟中重现这种行为。

2 个答案:

答案 0 :(得分:3)

由于您正在合成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,并且可能占用大量的块RAM,具体取决于您想要取出信号的样本数量。

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

答案 1 :(得分:2)

在这种情况下,您可能需要考虑添加仅用于调试的其他逻辑。 ('Design for debug')是用于思考这种逻辑的常用术语。

所以你有一个芯片接口(SPI),你不知道它是否正常工作。由于它似乎不起作用,你不能相信这个界面的调试,因为如果你得到一个奇怪的结果,你无法确定它的含义。

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

尝试考虑其他创造性方法,从芯片中获取不需要SPI接口的数据。

  • 如果您有4个LED,A到D,每次收到该类型的命令时,您可以点亮每个LED 1秒钟吗?

  • 您是否可以使用7-seg显示SPI接收器状态机的当前状态,或者如果收到某个未知命令,是否显示某些错误代码?

  • 您可以通过VGA将监听到输入SPI比特流的二进制序列吗?

一旦您可以开始缩小硬件内部实际发生的数据,您可以缩小问题空间以检查可能出现的问题。