在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2997|回复: 10

[求助] 仿真遇到的一个诡异问题

[复制链接]
发表于 2017-3-30 12:12:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 ccxqn 于 2017-3-30 12:27 编辑

把问题简化一下,即:
已知信号a,以及按某种规则生成b。
想检测a、b是否一直相等,一旦发现不相等,就触发一个行为。


代码为




  1. assign b=a;
  2. assign delta = a-b;

  3. initial begin
  4.     @ (delta)
  5.     $display("not equal");
  6. end


复制代码


显然,因为b恒等于a,所以delta应该一直为0,所以$display("not equal");应该永远不被触发。
但在实际仿真中发现,如果用vcs仿真,那么$display("not equal");会被不断地触发,触发位置是b的跳变沿。
而如果用ModelSim仿真,结果就一切正常。


怀疑是某处竞争导致,以至于不同的编译器仿出不同的结果。
但这应该是一个很基本的case,按说编译器不应该如此弱智才是……
或者在vcs中该怎样避免遇到的问题呢?


恳请高人指点,谢谢!
发表于 2017-3-30 13:39:43 | 显示全部楼层
何不用 clock qualify 過?
发表于 2017-3-30 13:52:48 | 显示全部楼层
遇到过,我是加上了‘#1’在做检测的
 楼主| 发表于 2017-3-30 14:45:57 | 显示全部楼层
回复 3# mndzjsjczex


您好!请问兄台可以具体写一下code吗?(#1是加在哪个位置?)谢谢!
 楼主| 发表于 2017-3-30 14:47:03 | 显示全部楼层
 楼主| 发表于 2017-3-30 15:12:30 | 显示全部楼层
回复 2# kuolifeng

请问,什么是clock qualify?(好像网上搜不到……)谢谢!
发表于 2017-3-30 15:55:25 | 显示全部楼层
回复 4# ccxqn


   我是



  1. always @(posedge clk) begin
  2.   #1;
  3.   if (条件) begin
  4.     if (比对两信号不一致)
  5.       $display ("ERROR");
  6.   end
  7. end


复制代码


这么干的
 楼主| 发表于 2017-3-30 17:07:17 | 显示全部楼层
回复 7# mndzjsjczex


   懂了,谢谢谢谢!
发表于 2017-3-30 18:25:38 | 显示全部楼层
好像跟仿真的事件所在区域有关,我不会翻译,自己翻看sv标准第四章节 scheduling semantics。

详细第4.8节 竞争冒险。

下面我自己的理解:
你的例子,a变化触发两个事件,一个是更新b,一个是更新delta,仿真工具的算法,如果更新b在前,delta就不会触发变化,如果更新delta在前,delta就可能会总是被触发,两种结果都是正确的,标准说的很清楚。
发表于 2017-3-30 21:27:39 | 显示全部楼层
time slot问题。楼上说的对 sv里有讲
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 12:09 , Processed in 0.023041 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表