打印

说说你对状态机的理解

[复制链接]
3575|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
sxhhhjicbb| | 2011-4-15 21:10 | 只看该作者
LZ:设计时序电路时候,就得用状态机.按时钟来做事的,几乎都可以认为是状态机的应用.

使用特权

评论回复
板凳
lacewood_jesse| | 2011-4-19 13:54 | 只看该作者
状态机可以理解像单片机一样的流水作业,先干什么再干什么,顺序执行下去!如果要循环也可以!

使用特权

评论回复
地板
lelee007| | 2011-4-19 15:16 | 只看该作者
状态机就是不同状态处理不同事务,有点类似单片机指令的执行吧,不同的指令码进行不同的操作

而指令码就对应于状态机的状态变量的值

使用特权

评论回复
5
wxfxwk1986|  楼主 | 2011-4-20 11:49 | 只看该作者
谢谢大家的回复,学习fpga大半年了,以前写代码就没有使用过状态机,现在正开始学习状态机,现在学习的时候有一点迷惑:第一点就是我们一般情况下设计完成什么样的功能用状态机实现会简单.举例说我现在完成的一个小功能。那我现在用状态机与不用状态机都能完成。
该信号在IO卡端以12.288MHz发出。每一帧数据都在250Hz的上升沿之后开始发出。每帧数据开始都有一个连线8个‘1’作为帧同步头。每帧数据有256字节。当所有数据发送完毕后,该信号线保持低电平。

使用特权

评论回复
6
wxfxwk1986|  楼主 | 2011-4-20 11:51 | 只看该作者
数据格式如下

QQ截图未命名.gif (4.63 KB )

QQ截图未命名.gif

使用特权

评论回复
7
wxfxwk1986|  楼主 | 2011-4-20 11:52 | 只看该作者
象上面的这个小功能你觉得有必要用状态机吗?
第二个迷惑就是当我用状态机时,觉得难点在于如何划分状态,请高手介绍下你的经验,谢谢!

使用特权

评论回复
8
tf_0991| | 2011-4-20 12:12 | 只看该作者
复杂的时序逻辑设计就需要使用状态机。建议楼主找个实例看看就明白了,状态机本身原理很简单,我也是刚学完一阵子。所以楼主的这个小功能并非一定要用状态机,但是不用状态机设计起来会比较麻烦,用状态机反而更清晰、简单一些。状态划分要根据你这个设计的功能而定,可以根据不同的输出状态来定,你的这个需要楼主自己分析。

使用特权

评论回复
9
lelee007| | 2011-4-20 13:42 | 只看该作者
复杂的事务处理如果使用状态机,往往可以让逻辑清晰明了,每个状态作什么处理,处理完后需要继续干什么,进入那个状态才可以完成。。。类推

如果不使用状态机,事务关系错综复杂,关系不易理清

使用特权

评论回复
10
wxfxwk1986|  楼主 | 2011-4-20 16:17 | 只看该作者
复杂的时序逻辑设计就需要使用状态机。建议楼主找个实例看看就明白了,状态机本身原理很简单,我也是刚学完一阵子。所以楼主的这个小功能并非一定要用状态机,但是不用状态机设计起来会比较麻烦,用状态机反而更清晰 ...
tf_0991 发表于 2011-4-20 12:12

非常感谢你的回复,我知道怎么划分关键需要自己分析。但是高手们经常使用状态机的话可能会有一些深刻的体会,如果你能分享下你划分时一贯采用的方法,这样我或许能学的快点,我是这个意思呵呵。顺便耽误你几分钟,你对上面的这个小功能你会怎么划分状态呢?

使用特权

评论回复
11
tf_0991| | 2011-4-20 23:09 | 只看该作者

RE: 说说你对状态机的理解

本帖最后由 tf_0991 于 2011-4-20 23:17 编辑

10# wxfxwk1986
我的想法,先将模块划分,写一个能并转串的小模块能发送一个字节数据,将整个任务划分为3个状态机:空闲,发送数据帧头,发送数据。空闲(发送信号上升沿)----->发送数据帧头----->发送数据,判断发送了多少字节数据(已经发送256byte)------>空闲。
个人愚见。
楼主一定要用状态机吗,其实仔细一看,这个逻辑比较简单。

使用特权

评论回复
12
wxfxwk1986|  楼主 | 2011-4-21 09:43 | 只看该作者
10# wxfxwk1986
我的想法,先将模块划分,写一个能并转串的小模块能发送一个字节数据,将整个任务划分为3个状态机:空闲,发送数据帧头,发送数据。空闲(发送信号上升沿)----->发送数据帧头----->发送数据,判断发 ...
tf_0991 发表于 2011-4-20 23:09

不是说必须用状态机,我是对状态机不熟,通过这个小例子来体会下什么情况下用状态机比较好。谢谢你的回答,望以后有更多交流,共同进步!顺便说下我的想法,与你大致类似,我是四个状态,第一个空闲第二个判断枕头,剩下的状态是把你的发送数据状态分为两个状态:一个是移位状态(完成每个字节的串并转换)另一个是一个每个字节的最后一位的状态。我之所以这样是因为,我要在每个每八位并成一字节后产生一个使能写信号。

使用特权

评论回复
13
tf_0991| | 2011-4-21 12:38 | 只看该作者
不是说必须用状态机,我是对状态机不熟,通过这个小例子来体会下什么情况下用状态机比较好。谢谢你的回答,望以后有更多交流,共同进步!顺便说下我的想法,与你大致类似,我是四个状态,第一个空闲第二个判断枕头 ...
wxfxwk1986 发表于 2011-4-21 09:43

恩,互相学习吧。

使用特权

评论回复
14
xiaoyuan_ly| | 2011-4-25 16:21 | 只看该作者
对于状态机,我的理解:  用状态机来表示,是一个对象在实现方法描述上的不同表现--更加容易细化本质和实现方法。至于一个对象是否要再深入细化成一系列“小对象”的集合,那要看你要实现的对象,你能够不细化的情况下实现吗?!  如果能实现了,那就没有必要再细化了-也就是说没有必要用状态机了。也有一种可能就是为了更好的利用硬件提供的资源、减少硬件资源的使用而去细化对象--至少用状态机也是一种可能。

使用特权

评论回复
15
smartlxy| | 2011-4-26 23:47 | 只看该作者
当你代码写不出来的时候,就尝试着用状态机!

使用特权

评论回复
16
fpga_play| | 2011-5-14 10:40 | 只看该作者
时间、状态、步骤

使用特权

评论回复
17
quanqinghua| | 2011-9-15 20:15 | 只看该作者
状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法

使用特权

评论回复
18
zhoujiewen| | 2011-9-17 14:32 | 只看该作者
潘松的《EDA技术与VHDL》第五章已经很详细的介绍了状态机,你可以认真看看,并且按照要求把后面的习题做一遍,相信你能掌握状态机。感觉你所给的时序图,完全没必要使用状态机。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

250

帖子

1

粉丝