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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4647|回复: 6

[求助] 发现个Verilog里面force的奇怪的事

[复制链接]
发表于 2020-11-23 13:30:37 | 显示全部楼层 |阅读模式

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

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

x
reg [11:0] data;
initial begin
    data = 12'h000;
    forever #1000 begin
        data = data + 12'h001;
    end
end
上面这段代码仿真是符合预期的,每隔1000ns data值加1,但是如果把第五行改成:
force data = data + 12'h001;
那么仿真结果就变成data每隔1000ns加2了,这是什么原理?想了半天没想出来为啥,网上也没找到解释,仿真器是vcs,难道force是先算data = data + 1,然后又把这个值加1再赋值给等号左边的变量?这样就加了两次?

发表于 2020-11-23 15:26:54 | 显示全部楼层
image.jpg
 楼主| 发表于 2020-11-23 16:47:20 | 显示全部楼层


image.png
卧槽,为啥咱两结果不一样?难道12'h000 12'h001 和 12'h0 12'h1还不一样?我再试试
 楼主| 发表于 2020-11-23 16:52:42 | 显示全部楼层


image.png
还是一样的结果,那可能是VCS的版本或者仿真命令选项有关?
发表于 2020-11-24 10:45:06 | 显示全部楼层
force  变量的类型一般都是wire,在这里,这种表达式data = data + 1的时候一般都会隐式的定义了一个data_wire变量,data_wire = data (这个在initial 块外面); data = data_wire + 1, 当使用了force的时候,force的内容又作用到这个data_wire上了,这个initial块内的表达式又等效于,data= data_wire + 1; force data_wire = data + 1 。
发表于 2023-1-15 04:47:16 | 显示全部楼层
所以兄弟现在知道是啥原因了不
 楼主| 发表于 2023-2-6 14:34:45 | 显示全部楼层


bt_zhao 发表于 2023-1-15 04:47
所以兄弟现在知道是啥原因了不


不知道,没去管了,可能是仿真器理解的问题吧,反正也不是可综合的,不要这么写就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-5 17:20 , Processed in 0.021006 second(s), 9 queries , Gzip On, Redis On.

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