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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3368|回复: 11

[求助] vcs仿真三段式状态机遇到的问题

[复制链接]
发表于 2020-1-7 20:46:15 | 显示全部楼层 |阅读模式

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

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

x
核心代码如下所示。
always @ (posedge clk)

   histo_cs <= histo_ns;


然后看到了histo_cs 正常跳转,而histo_ns竟然没有变化。。。。。
01.png

发表于 2020-1-8 09:00:34 | 显示全部楼层
其他驱动了。。
发表于 2020-1-8 09:50:09 | 显示全部楼层
堵塞和非堵塞要注意一下
发表于 2020-1-8 17:17:51 | 显示全部楼层
从你的逻辑和波形看,cs在后面应该一直为2才对,你是不是搞反了
 楼主| 发表于 2020-1-8 22:07:10 | 显示全部楼层
谢谢,只是histo_cs只在这个always 语句中使用(驱动)哦
 楼主| 发表于 2020-1-8 22:12:27 | 显示全部楼层


A1985 发表于 2020-1-8 09:00
其他驱动了。。


谢谢,状态机的第一段就是直接用时序逻辑,是得需要用到非阻塞赋值。
后面我觉得,不是代码原因,只是在VCS中仿真的时候,因为不同的事件触发在不同的区域中进行,导致了这个现象,只是比较奇怪的是,histo_ns仿真没有发生变化,但是histo_cs仿真竟然变化了,而且跑起来状态跳转正常。正常来说,代码中的histo_cs只是与histo_ns差一拍而已。。。。代码中的histo_cs在其他always语句块中没有使用(仅仅在状态机的一段中用到了)。。。
 楼主| 发表于 2020-1-8 22:16:10 | 显示全部楼层


夏尔 发表于 2020-1-8 17:17
从你的逻辑和波形看,cs在后面应该一直为2才对,你是不是搞反了


谢谢提醒,这个确认过了,并没有搞反
确实出现了histo_cs发生变化,而histo_ns没有发生变化的怪异现象。状态机属于正常的三段式状态机,histo_ns在第二段中发生跳转(组合逻辑)。
发表于 2020-1-13 11:29:24 | 显示全部楼层
这么怪异?
发表于 2020-1-26 12:54:24 | 显示全部楼层
本帖最后由 zhangli542 于 2020-1-26 12:57 编辑

3楼的解释是正解,verilog基本知识一定要吃透,三段式状态机中用有非阻塞赋值操作的。

1、非阻塞(Non_Blocking)赋值方式(如 b <= a;)
•块结束后才完成赋值操作;
•b的值并不是立刻就改变;
•这是一种比较常用的赋值方法。(特别在编写可综合模块时)

2、阻塞(Blocking)赋值方式(如: b = a;)
•赋值语句执行完后,块才结束;
•b的值在赋值语句执行完后立刻就改变;
•可能产生意想不到的结果。

发表于 2020-1-26 21:04:22 | 显示全部楼层
用来仿真的源代码文件搞错了吧?按着你的核心代码不可能出现那样的波形
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-19 18:08 , Processed in 0.029354 second(s), 7 queries , Gzip On, Redis On.

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