设置断点和查看变量
- 在软件执行过程中,通过设置断点可以查看在程序执行到断点处时变量数值。
- 设置断点可以便于查看软件程序(function、task、object)中局部变量的数值。要注意的是,软件部分的变量(即动态变量,与硬件变量即静态变量相对)是无法添加到波形窗口的,原因之一例如软件变量会在0时刻中完成多次运算,而波形窗口无法反映出在0时刻的若干变化,而且这么做对于波形存储的压力也很大。因此软件部分的变量只可以通过设置断点来查看当前程序中的变量数值。
- 设置断点的另一个作用在于可以用来调试程序执行的顺序,设置多个位置断点缩小调试范围。
- 信号窗口针对的是静态变量,而局部变量窗口针对的是动态变量。
breakpoint.sv示例代码
module breakpoint1;
int val1;
int val2;
int result;
function int incr_static(input int a);
result = a + 1;
return result;
endfunction
function automatic int incr_dynamic(input int a);
int result;
result = a + 1;
return result;
endfunction
initial begin
val1 = 0;
val1 = incr_static(val1);
val1 = incr_static(val1);
end
initial begin
val2 = 0;
val2 = incr_dynamic(val2);
val2 = incr_dynamic(val2);
end
endmodule
静态变量
我们在result=a+1
处打上断点,会在这一行代码之前停下。
第一次执行incr_static(val1)
点击下一步,此时执行了result=a+1
result的值变成了1
继续执行,到第二次执行incr_static(val1)
因为result是静态变量,所以此时result的值还是1
第二次执行完result=a+1
此时静态变量result的值变成了2
动态变量
在动态函数incr_dynamic
的result = a + 1
处打上断点,第一次执行
result为局部变量,此时值为0
执行完result = a + 1
局部变量result的值变成1
第二次执行incr_dynamic
执行到断点处
此时的result为动态变量,所以值为0
通过给静态变量和动态变量打断点,可以对比静态变量和动态变量的区别,也可以看出断点在的调试能力和控制程序执行流程方面非常方便,可以查看和追踪变量的变化。