VCS仿真基础

Verilog仿真事件队列

仿真规范

在这里插入图片描述
verilog中的语句(如initial、always)是并行执行的。在verilog中,对于不同的事件在同一时刻调用时没有规定先执行哪一个,只要在同一层的事件,任意的执行顺序都是可以的

VCS是如何处理事件队列的:

在这里插入图片描述注:RHS:非阻塞赋值符号右侧的语句
m o n i t o r 在 m o n i t o r 域 , 而 monitor在monitor域,而 monitormonitordisplay在active域
UDP:user define primitive
PLI:Programming Language Interface

仿真队列的例子

在这里插入图片描述如上图所示,当定义了CASE1时,会并行执行前两个always语句。当检测到clk信号变化时,第一个always语句会将a赋值成1。但与此同时,第二个always语句中的zin会被赋值成a的值。由于这两个操作处于同一时刻,所以就无法确认是a赋值成了1还是zin先被赋值成了a,因为两个语句不同的执行顺序将会造成不同的结果。

使用不同的仿真工具对其进行仿真将会得到不同的结果。例如上图中,使用VCS和用Questa进行仿真,得到的结果就是不同的。

如何避免这种情况的发生:
1、对于时序逻辑,应采用非阻塞赋值(<=)替代阻塞赋值(=)。非阻塞赋值是先将需要赋值的结果算出来,在结束以后才会进行赋值。而阻塞赋值则是直接将结果赋值以后才进行下面的语句。
2、在组合逻辑中使用always块时,最好使用always(*)的方式进行检测敏感列表,这样可以避免遗漏敏感信号。
3、避免#0延时的出现

VCS处理verilog/systemverilog的流程

在这里插入图片描述

VCS的编译和仿真

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
编译命令:vcs +v2k filename.v -debug_all
v2k:支持ieee2001 verilog规范
仿真命令:./simv -gui &
simv:编译产生的可执行文件

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值