1.题目: 饮料1.5 元, 可投入硬币1 元 0.5 元,输出饮料 零钱

2. 画出状态机。

3.仿真结果:coin=1 --> 0.5 元 coin=2-->1元

4.关键代码分析:

本次设计采用了5个状态,输出结果采用寄存器输出,确保输出后稳定可靠,采用的是case(nx_state )语句输出判断的结果,提前一个周期判断,就可以确保输出与当前状态想要的条件到达时的输出条件一直。如上在S3 状态时,直接输出10,S4状态时,直接输出11. 同样的功能还可以用assign 语句,assign {drink_out,change}=(state==S3)?10:00; 但这是组合逻辑输出形式。对于后续模块时序上不太友好。

5.完整代码:

  1. module auto_machine(
  2. input clk,rst_n,
  3. input [1:0] coin,
  4. output reg drink_out, change
  5. );//coin =0 no coin ,coin =1--->0.5 yuan coin =2---> 1 yuan
  6. reg [2:0] state,nx_state;
  7.  
  8. parameter [2:0] IDLE=3'd0,S1=3'd1,S2=3'd2 ,S3=3'd3,S4=3'd4;
  9.  
  10. always @(posedge clk or negedge rst_n)
  11. if(!rst_n)
  12. state<=IDLE;
  13. else
  14. state<=nx_state;
  15.  
  16. always @(*) begin
  17. nx_state=IDLE;
  18. case(state)
  19. IDLE: if(coin==2'd1) nx_state=S1;else if(coin==2'd2)
  20. nx_state=S2; else nx_state=IDLE;
  21. S1: if(coin==2'd1) nx_state=S2;else if(coin==2'd2)
  22. nx_state=S3; else nx_state=S1;
  23.  
  24. S2: if(coin==2'd1) nx_state=S3;else if(coin==2'd2)
  25. nx_state=S4; else nx_state=S2;
  26. S3: nx_state=IDLE;
  27. S4: nx_state=IDLE;
  28. default:nx_state=IDLE;
  29. endcase
  30.  
  31. end
  32.  
  33. always @(posedge clk or negedge rst_n)
  34. if(!rst_n)
  35. {drink_out, change}<='b0;
  36. else
  37. case(nx_state)
  38. S3: {drink_out, change}<=10;
  39. S4: {drink_out, change}<=11;
  40. endcase
  41.  
  42. endmodule

6.测试代码;

  1. `timescale 1ns/1ps
  2.  
  3. module auto_tb();
  4. reg rst_n,clk;
  5.  
  6. reg [1:0]coin;
  7. wire drink_out, change;
  8. initial begin
  9. rst_n=0;
  10. clk=0;
  11. coin=2'd0;
  12. #100
  13. rst_n=1;
  14. #10
  15. coin=2'd1;
  16. #20
  17. coin=2'd0;
  18. #20
  19. coin=2'd1;
  20. #20
  21. coin=2'd1; //have drink_out
  22. #20
  23. coin=2'd1;
  24. #20
  25. coin=2'd2; //have drink_out
  26. #20
  27. coin=2'd2;
  28. #20
  29. coin=2'd2; //have drink_out and change out
  30. #20
  31. coin=2'd2;
  32.  
  33. end
  34.  
  35. always #10 clk=~clk;
  36.  
  37. auto_machine auto2(
  38. clk,rst_n,
  39. coin,
  40. drink_out, change
  41. );
  42.  
  43. endmodule

tb

FSM自动售货机 verilog 实现及 code 细节讲解的更多相关文章

  1. 有限状态机FSM(自动售报机Verilog实现)

    有限状态机FSM(自动售报机Verilog实现) FSM 状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法. 状态机有两大类:Mealy型和Moore型. Moore型状态机的输出只与当前状态有 ...

  2. 09自动售货机综设实验(含按键消抖,led和状态机)

    一设计功能 1.上次状态机的练习 2这次自动售货机综设 (一)对比两次的售货机 上次售货机的关键是画出状态转移图.明确输入分几种,输出是啥,有哪些状态.如下图所示 (二)系统或综合设计的经验: 既然这 ...

  3. 使用NewLife网络库构建可靠的自动售货机Socket服务端(一)

    最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客 ...

  4. YTU 2598: 编程题B-小平智斗自动售货机

    2598: 编程题B-小平智斗自动售货机 时间限制: 1 Sec  内存限制: 128 MB 提交: 268  解决: 69 题目描述 LYH自动售货机在销售商品时,具有自动找钱功能.但是找零的最小单 ...

  5. 玩转华为物联网IoTDA服务系列三-自动售货机销售分析场景示例

    场景简介 通过收集自动售货机系统的销售数据,EI数据分析售货销量状况. 该场景主要描述的是设备可以通过MQTT协议与物联网平台进行交互,应用侧可以到物联网平台订阅设备侧变化的通知,用户可以在控制台或通 ...

  6. 开发实践丨用小熊派STM32开发板模拟自动售货机

    摘要:本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代码,通过云端开发和设备终端开发,实现终端数据在的华为云平台显示. 本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代 ...

  7. C#骏鹏自动售货机接口

    MachineJP类: 第1部分:串口初始化,串口数据读写 using System; using System.Collections.Generic; using System.IO.Ports; ...

  8. Java开发自动售货机

    1:先写一个类,包括商品的基本属性 package com.xt.java.base25; public class Goods { private int ID; private String na ...

  9. 用户点击确认登录,自动跳转下面地址得到code

    PHP获取微信openid 简单教程 WEB   2014年10月29日  10868浏览  6评论 获取code https://open.weixin.qq.com/connect/oauth2/ ...

随机推荐

  1. codeforces 830E dp

    大致题意: n场比赛,k个钱币.赢一场获得一个钱币,输一场失去一个钱币,一旦钱币数量为2k个或者0个,就马上离开比赛.给出n个长度字符串,由W,D,L,?四个字符组成,W表示赢,L表示输,D表示平局, ...

  2. C++智能指针之shared_ptr与右值引用(详细)

    1. 介绍 在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露.解决这个问题最有效的方法是使用智能指针(smart pointer).智能指针是存储指向动态分配(堆)对象指针 ...

  3. 资源:Kafka消息队列下载路径

    Kafka下载路径 http://kafka.apache.org/downloads.html

  4. (转发)forward与(重定向)redirect的区别

    (转发)forward与(重定向)redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服 ...

  5. 安卓开发--探究碎片Fragment

    简述: 最近做开发的时候又遇到了Fragment,发现太久没写,都快忘了,就抓紧写个笔记(我太懒的了233) Fragment可以简单的看成迷你的活动,它和活动一样都有布局和生命周期,它可以嵌入活动之 ...

  6. python之学生信息管理系统

    1 #!usr/bin/python 2 #encoding=utf-8 3 4 #1. 打印学生管理系统界面 5 def printStd(): 6 print ("*"*50) ...

  7. 备战-Java 基础

    备战-Java 基础 仰天大笑出门去,我辈岂是蓬蒿人. 简介:备战-Java 基础. 一.基本数据类型 1.Java基本数据类型 基本数据类型有8种:byte.short.int.long.float ...

  8. Oracle中使用hash_hmac() 函数报错问题/以及Oracle遇到Oauth1.0授权和oauth_signature生成规则

    最近在Oracle上发现使用hash_hmac()报找不到此函数.为此特意查到oracle的文档.详细请看官网回答:https://cx.rightnow.com/app/answers/detail ...

  9. 00JAVA语法基础_四则运算 01

    自动生成30道四则运算的数学题,当前只是简单符合出题,答题和判断的代码,还没做要求,所以现在只是能随机生成三十道100以内的加减法和九九乘法表的乘除法 package Sizeyunsuan; /** ...

  10. AgileTC linux部署

    简介 AgileTC是一套敏捷的测试用例管理平台,支持测试用例管理.执行计划管理.进度计算.多人实时协同等能力,方便测试人员对用例进行管理和沉淀.产品以脑图方式编辑可快速上手,用例关联需求形成流程闭环 ...