您的位置:首页 > 健康 > 养生 > 网站制作成品_中国外协加工网官网_惠东seo公司_网络推广公司服务内容

网站制作成品_中国外协加工网官网_惠东seo公司_网络推广公司服务内容

2025/4/17 19:41:28 来源:https://blog.csdn.net/qq_29362849/article/details/147126277  浏览:    关键词:网站制作成品_中国外协加工网官网_惠东seo公司_网络推广公司服务内容
网站制作成品_中国外协加工网官网_惠东seo公司_网络推广公司服务内容

vcs仿真 提供 死循环debug 的参数 +vcs+loopreport+10000 +debug_access_all

环境中出现死循环会报如下错误:

Error-[VCS LOOP DETECTED] Infinite loop in simulation
Detected an infinite loop in the simulation at time 2199114829 ps.
Details written to"loop-info-91947.log,loop-info-verbose-91947.log"

在 单独的sv module 中测试,代码如下:

module test_loop();integer A;while(1) A++;
endmodule

仿真该module 卡住,添加上述编译选项并未报错。chatgpt解析:
这是一个静态代码,可能会被vcs优化或者卡死,所以不会触发loopreport。
所以在编写循环时,建议开始结束前后添加打印,并且确认有合理的退出机制。

=================================================
关于退出机制的编程规范,建议避免深层嵌套,提高代码可读性和可维护性:

// 错误示例:嵌套过深
if (condition1) beginif (condition2) begin// ... end
end// 正确示例:提前返回
if (!condition1) return;
if (!condition2) return;
// 主逻辑

对于该示例的测试代码如下:

module test_sv_return();intial begintest_run_time(0,0);test_run_time(0,1);test_run_time(1,0);      endfunction test_run_time(input a, b);$display(time, "function start");if(~(a|b) return;if(a)  $display(time, "cond 1");if(b)  $display(time, "cond 2");         $display(time, "function end");           endfunction
endmodule//打印结果如下:
//0function start
//0function start
//cond 1
//0function done
//0function start
//cond 2
//0function done

以前以为return 语句只能用在函数的最后一行,但是实际上是逻辑的最后一行。满足return语句之后,后面的代码都不会执行。突然理解了为什么有些代码没看到 wuwuwuwu

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com