【发布时间】:2014-12-25 18:53:30
【问题描述】:
我有点难过。
我有一个相当大的 verilog 模块,我已经在 Simulation (iSim) 中进行了测试,它可以按我的意愿运行。现在我已经在现实生活中使用 SPI 将它连接到另一个设备,有些东西可以工作,有些东西不能。
例如,
我可以使用命令 A 发送一个值,并验证使用命令 B 接收到正确的值。没有问题。
但是如果我使用命令 C 发送一个值,我无法验证它是使用命令 D 接收到的。在模拟中它工作正常,所以我觉得我无法从模拟中获得任何收益。
我查看了逻辑分析仪上的信号,控制器设备(不是我的设计)发送了正确的消息。当我发出命令 B 时,我可以从我的设备中看到正确的返回值(我知道 SPI 无论如何都可以工作)。我不知道 C 或 D 是否正常工作。 D 只返回 0,所以也许 C 一开始就不起作用。没有办法单步执行 Verilog,这个模块被打包为 Vivado 的 IP。
这里有两张截图。首先是模拟(我发送 5,然后发送 2,然后我希望它在下一次发送时返回 4,它确实如此;然后是零)。
这是我在现实中得到的(前两个字节无关紧要,5 是先前发送的值的剩余部分):
这是一个返回正确值的命令 (B)(它响应正在发送的 0x01):
有人对调试有什么建议吗?我真的不知道如何进行。 我无法在模拟中真正重现这种行为。
【问题讨论】:
-
你是否合成了 RTL 以获得 gates 文件。您应该能够模拟门并获得等效的结果。 RTL 与门的不匹配通常是由于未遵循 RTL 最佳实践。您能否创建一个显示问题的最小示例?