我正在使用 Synopsis VCS 编译器。我的测试台是用 UVM 编码的。我有一组执行一些独立功能的 C 例程。我通过 UVM 环境中的 DPI 导入调用这些 C 例程。
这是一个简单的代码片段,
uint64_t blah, var1, blah_1;
var1 = UVM_class::C_function_1(uint64_t blah);
blah_1 = UVM_class::C_function_2(uint64_t var1);
if(blah_1 != blah) assert(0);
#
uint64_t C_function_1(uint64_t blah)
{
.....
.....
uint64_t x = function1(...);
return x;
}
#
uint64_t function1(...)
{
uint64_t y;
calculate some stuff
return y;
}
问题是:如果我将其作为回归的一部分运行,大约 10000 次它可以完美运行。
在第 10001 次,这就是发生的事情。
function1 重新运行正确的值,当我打印 y 时我看到了。但是,当我在 C_function_1 中打印 x 时,x 的值类似于 0xffffff_fffff_y。那就是 y 的值存在,但有一些垃圾附加在它上面。这会打乱涉及 x 的后续计算。
我阅读了很多关于堆栈混乱的信息,并确保我 malloc'd 和 free'd 所有作为各种函数参数的指针。
我还尝试将 C 部分独立运行,没有错误,回归很干净。
唯一的问题是当我运行调用 C 回归例程的 UVM 测试时。
我花了很多时间调试这个无济于事。
有人有什么建议吗?