大家一起来讨论状态机的设计和化简
时间:10-02
整理:3721RD
点击:
命题如下:
基本要求:设计一个自动售邮票机。每次只允许投入一枚五角或者一元的硬币,累计投入两元硬币给出一张邮票。如果投入一元五角硬币以后再投入一枚一元硬币,则给出邮票的同时还应找回五角钱。(这个命题是 我从edacn上 e人小编的帖子里看到的,下边的附件条件是我加上的)
附加要求:用户可以放弃购买,在放弃购买后能将所有投入钱币返回。
请绘出你认为的最优化的状态机,并给出原因。
下面帖我自己画的几种方案的状态转换图。
第一种:这种是根据投入钱币的数量来设计状态的转移,每投入一枚硬币,状态就转换一次。
基本要求:设计一个自动售邮票机。每次只允许投入一枚五角或者一元的硬币,累计投入两元硬币给出一张邮票。如果投入一元五角硬币以后再投入一枚一元硬币,则给出邮票的同时还应找回五角钱。(这个命题是 我从edacn上 e人小编的帖子里看到的,下边的附件条件是我加上的)
附加要求:用户可以放弃购买,在放弃购买后能将所有投入钱币返回。
请绘出你认为的最优化的状态机,并给出原因。
下面帖我自己画的几种方案的状态转换图。
第一种:这种是根据投入钱币的数量来设计状态的转移,每投入一枚硬币,状态就转换一次。

第2种设计思路...
在不断投入钱币的过程种状态为维持在积累状态上,用另外的计数器对钱币的数额进行计数。

这两种方案,第一种要比第2种逻辑更清晰,代码编写起来更简单。
第2种虽然状态少了几个,但是状态机还需要2个计数器分别对钱币的个数进行计数。这样状态机还需要管理这个计数器。在init状态先复位然后打开它,然后在2元和2.5 元状态上关闭计数器。这使得编程复杂了一点。
今天就先从编程的角度谈论状态机的设计,如果大家对这个问题感兴趣,我就续上一些状态编码,逻辑化简等其他问题
这个比较的感兴趣,怎么没有后话了呢
个人还是比较倾向于第一种方法,毕竟逻辑比较清楚,还有更好的方法么?
lz?
如何保证用户只投入了2个银币?(机械方式?)如果他/她一次投入好多枚,第一种方案就无能为力了。个人倾向于第二种。
我以前也做过,用的是第二种,但只是用modelsim仿真了一下,没下到FPGA中。
不错,挺有意思,顶一个!
我要是一次投了5块钱,买一张邮票。怎么找钱给我?两个状态机似乎都不能解决。

一次投不了5元,只能0.5,1 一次只能塞一个硬币,到2元、2.5元之后就已经满足出票,再投继续出下一张
