微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 大家一起来讨论状态机的设计和化简

大家一起来讨论状态机的设计和化简

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

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

这两种方案,第一种要比第2种逻辑更清晰,代码编写起来更简单。
第2种虽然状态少了几个,但是状态机还需要2个计数器分别对钱币的个数进行计数。这样状态机还需要管理这个计数器。在init状态先复位然后打开它,然后在2元和2.5 元状态上关闭计数器。这使得编程复杂了一点。

今天就先从编程的角度谈论状态机的设计,如果大家对这个问题感兴趣,我就续上一些状态编码,逻辑化简等其他问题

这个比较的感兴趣,怎么没有后话了呢

个人还是比较倾向于第一种方法,毕竟逻辑比较清楚,还有更好的方法么?
lz?

如何保证用户只投入了2个银币?(机械方式?)如果他/她一次投入好多枚,第一种方案就无能为力了。个人倾向于第二种。

我以前也做过,用的是第二种,但只是用modelsim仿真了一下,没下到FPGA中。

不错,挺有意思,顶一个!

我要是一次投了5块钱,买一张邮票。怎么找钱给我?两个状态机似乎都不能解决。



设计3个输入信号,0.5y, 1y, cancel 2个输出使能信号,sample=1 时使能出票,  charge=1 使能找零钱.    一个reg money_sum为当前状态的累积投币数额。


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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top