$monitor和$strobe都看的是啥


注:本文来自硅芯思见


在编写测试平时,经常会用到$monitor和$strobe监测某些信号,并且使用格式上与$display比较类似,但是它们之间还是存在差异的,它们在当前仿真时间槽(time-slot)中被执行的区间是不同的。$display发生在Active区,而$monitor和$strobe发生在当前仿真的最后时刻,即post-pone区,并且一个time-slot是存在很多区域的,因此,它们在观测具体信号值时是存在一定差异的。

【示例】 

图片

【仿真结果】 

图片

出现示例中的结果,是因为非阻塞赋值的LHS更新发生在Non-Active区,而此时的$display已经执行完毕,所以$display观测不到sig更新后的值,但是$monitor发生在Post-pone区,晚于Non-Active区执行,所以可以观测到sig更新后的值。因此,$display和$monitor观测到sig的值不同。在实际使用过程中,具体使用哪一种监测方式则根据两种监测执行的区间特点自行选择,$strobe与$monitor在本例中监测到的结果是一样都发生在Post-pone区,执行类似,在此不赘述。那么既然$strobe和$monitor执行效果一样,都发生在Post-pone区,那么为什么还要同时存在呢?两者之间有些什么差异呢?下面我们就两者之间的一些差异进行示例说明。

1 $strobe的执行

$strobe只有在被调用时才会对其中的参数进行监测,此时的参数所具有的值可以认为是其所在当前时间槽(time-slot)中的最终值。另外,$strobe在设计中可以多次被调用,且多次调用相互之间不产生任何影响。

【示例】 

图片

【仿真结果】 

图片

示例中,在always过程块中,当敏感时间列表中的信号发生一次变化,always过程块中的$strobe就会执行一次,并且输出此次执行时对应参数的稳定值。在initial过程块中,等待4个时间单位后$strobe执行,并且输出此时对应参数的稳定值,而在sig变化的其他时刻,该语句并未执行(因为initial块只执行了一次,并且完成了他的历史使命)。可见$strobe的执行取决于对其的调用,它的执行并不取决于其中参数的变化,同时可见该语句在代码中可以被多次调用,并且多次调用之间不会产生相互影响。

2 $monitor的执行

$monitor和$strobe虽然它们监测的参数都是当前时间槽该参数最后的稳定值,但两者在具体执行上还是有一定差别的,下面通过示例说明$monitor的用法。

【示例】 

图片

【仿真结果】 

图片

示例中,$monitor位于过程块中,sig从0时刻开始,每发生一次变化,$monitor就会执行一次,可见$monitor会持续监测其中参数的变化,只要其中参数发生变化,$monitor就会执行。那么是不是其中的任何参数的变化都会触发$monitor的执行,例如,可不可以使用$monitor监测时间的变化呢?

【示例】 

图片

【仿真结果】 

图片

示例中,随着仿真时间的推进,$monitor仅执行了一次。这主要是因为在$monitor中,如果监测的参数是$time、$stime和$realtime这些系统函数的返回值,$monitor对这些时间参数的变化并不敏感。

另外,当$monitor中具有多个参数同时发生变化时,这是因为这些参数在当前时间槽中调用$monitor时都已经处于稳定状态了,所以此时$monitor只调用一次,如下所示。

【示例】 

图片

【仿真结果】 

图片

那么,我们可不可以使用多个$monitor监测信号的变化呢?此时$monitor会如何执行呢?我们看看下面的示例。

【示例】 

图片

【仿真结果】 

图片

示例中,使用了两个$monitor分别检测sig1和sig2信号的变化,但是仿真结果仅有一个$monitor执行。这主要是因为$monitor执行上的一个特点,在任意仿真时刻,只有一个$monitor系统任务处于激活执行状态,至于多个$monitor执行的顺序,一般则取决于哪一个$monitor最近一次被调用。除此之外,$nonitor还提供了其他的配置系统任务,可以通过这些系统任务实现对于$monitor执行的控制。

【示例】 

图片

【仿真结果】 

图片

示例中,$monitoroff和$monitoron之间sig的变化并没有触发$monitor系统任务的执行。这主要是因为$monitoroff会不使能当前所有激活的$monitor任务对于其中参数的监测,所以在$monitoroff之后,$monitor监测的参数如果发生变化,将不会触发$monitor的执行。$monitoron的效果与$monitoroff刚好相反,主要用于再次启动激活$monitor任务,在$monitoron执行后,如果$monitor监测的参数发生变化,则会触发$monitor的执行。

综上所述,$strobe和$monitor执行的主要特定如下:

Ø$strobe和$monitor监测的相关变量的值,都是这些变量在当前时间槽中的最终稳定值;

Ø$strobe只有在被调用时才会对其中的参数进行监测,而$monitor只要监测的参数发生变化,$monitor就会执行;

Ø代码中可以存在多个$strobe,并且多个$strobe的调用相互之间不影响;

Ø在$strobe和$monitorr中,如果监测的参数是$time、$stime和$realtime这些系统函数的返回值,$strobe和$monitor对这些时间参数的变化并不敏感

Ø在任意仿真时刻,只有一个$monitor系统任务处于激活执行状态,至于多个$monitor执行的顺序,一般则取决于哪一个$monitor最近一次被调用;

Ø可以通过$monitoroff和$monitoron对$monitor的执行进行监测;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434593.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero 大家好 我是寸铁👊 总结了一篇Windows11安装go-zero代码生成工具goctl的文章✨ 喜欢的小伙伴可以点点关注 💝 goctl介绍 背景:goctl 的最早功能是为了解决 GRPC 内网…

leetcode:1768. 交替合并字符串(python3解法)

难度:简单 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 1: 输入:w…

一些反序列化总结

1 反序列化漏洞原理 如果反序列化的内容就是那串字符串,是用户可以控制的(即变量的值),且后台不正当的使用了PHP中的魔法函数,就会导致反序列化漏洞,可以执行任意命令。Java 序列化指 Java 对象转换为字节序…

迷人的数据结构:揭秘数组和链表的不同

数据结构中的数组和链表的区别 一、简介二、数组的特点和特性三、链表的特点和特性四、数组和链表的对比五、数组和链表的代码实现六、总结 一、简介 数据结构是组织和存储数据的方式,直接影响着程序性能、内存利用和资源管理等关键方面。 数据结构提供了各种方法来…

如何使用react框架进行两个html页面的切换?

如何使用react框架进行两个html页面的切换? 项目背景首先是古老的做法login.htmlindex.html 正文->react框架如何设置两个页面的跳转?配置react框架的环境react框架如何实现两个页面的跳转? 项目背景 古老的html页面跳转的做法无法在react框架中直接适配,所以非常有必要…

代码随想录算法刷题训练营day16

代码随想录算法刷题训练营day16:LeetCode(104)二叉树的最大深度 、LeetCode(559)n叉树的最大深度、LeetCode(111)二叉树的最小深度、LeetCode(222)完全二叉树的节点个数 LeetCode(104)二叉树的最大深度 题目 代码 /*** Definition for a binary tree node.* publ…

NC开发客户端(前端)连接启动失败can‘t connect to server, please wait

效果图 解决方法 IP地址和端口要对应 1-IP地址中间启动,肯定是这个127.0.0.1 2-端口号,要对应中间件启动在控制台输出的端口 或者是在home目录-》bin-》sysConfig.bat这里面的服务器, 里面可以看到对应启动ip地址和端口

一天吃透面试八股文

内容摘自我的学习网站:topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池:一个管理线程的池子。 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程有两个缺点 不受控风险频繁创…

include文件包含

include 文件包含利用日志文件什么是日志文件 之所以会burp抓包上传就可以成功的原因,是因为burp可以绕过url编码,导致写入日志文件中的代码没有进行编码,可以直接解析成php文件 声明:其中图片并非本人实操,而是直接截…

java生成验证码工具类,java生成图片验证码

java生成验证码工具类,java生成图片验证码 java生成验证码工具类,java生成图片验证码,java生成彩色图片验证码,带干扰线验证码。 调用结果: 工具类调用: GetMapping("/validateCode")public vo…

Qt项目文件以及对象树

"在哪里走散,你都会找到我~" 前篇,我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目,Qt会为自动创建诸如:.pro、.h\.cpp、.iu等文件,这些文件到底是什么?我们在使用Qt时 应该…

机器人顶会IROS,ICRA论文模板下载及投稿须知,以及机器人各大会议查询

一、背景 机器人方向,不止期刊TRO,TASE,RAM,RAL上的成果被认可,机器人顶会上的成果也是非常好的,一般来说一篇机器人顶会顶一篇trans。当决定要写一篇IROS论文时,结果IROS论文模板和投稿须知找…