FSM自动售货机 verilog 实现及 code 细节讲解
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.完整代码:
module auto_machine(
input clk,rst_n,
input [1:0] coin,
output reg drink_out, change
);//coin =0 no coin ,coin =1--->0.5 yuan coin =2---> 1 yuan
reg [2:0] state,nx_state; parameter [2:0] IDLE=3'd0,S1=3'd1,S2=3'd2 ,S3=3'd3,S4=3'd4; always @(posedge clk or negedge rst_n)
if(!rst_n)
state<=IDLE;
else
state<=nx_state; always @(*) begin
nx_state=IDLE;
case(state)
IDLE: if(coin==2'd1) nx_state=S1;else if(coin==2'd2)
nx_state=S2; else nx_state=IDLE;
S1: if(coin==2'd1) nx_state=S2;else if(coin==2'd2)
nx_state=S3; else nx_state=S1; S2: if(coin==2'd1) nx_state=S3;else if(coin==2'd2)
nx_state=S4; else nx_state=S2;
S3: nx_state=IDLE;
S4: nx_state=IDLE;
default:nx_state=IDLE;
endcase end always @(posedge clk or negedge rst_n)
if(!rst_n)
{drink_out, change}<='b0;
else
case(nx_state)
S3: {drink_out, change}<=10;
S4: {drink_out, change}<=11;
endcase endmodule
6.测试代码;

`timescale 1ns/1ps module auto_tb();
reg rst_n,clk; reg [1:0]coin;
wire drink_out, change;
initial begin
rst_n=0;
clk=0;
coin=2'd0;
#100
rst_n=1;
#10
coin=2'd1;
#20
coin=2'd0;
#20
coin=2'd1;
#20
coin=2'd1; //have drink_out
#20
coin=2'd1;
#20
coin=2'd2; //have drink_out
#20
coin=2'd2;
#20
coin=2'd2; //have drink_out and change out
#20
coin=2'd2; end always #10 clk=~clk; auto_machine auto2(
clk,rst_n,
coin,
drink_out, change
); endmodule
tb
FSM自动售货机 verilog 实现及 code 细节讲解的更多相关文章
- 有限状态机FSM(自动售报机Verilog实现)
有限状态机FSM(自动售报机Verilog实现) FSM 状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法. 状态机有两大类:Mealy型和Moore型. Moore型状态机的输出只与当前状态有 ...
- 09自动售货机综设实验(含按键消抖,led和状态机)
一设计功能 1.上次状态机的练习 2这次自动售货机综设 (一)对比两次的售货机 上次售货机的关键是画出状态转移图.明确输入分几种,输出是啥,有哪些状态.如下图所示 (二)系统或综合设计的经验: 既然这 ...
- 使用NewLife网络库构建可靠的自动售货机Socket服务端(一)
最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客 ...
- YTU 2598: 编程题B-小平智斗自动售货机
2598: 编程题B-小平智斗自动售货机 时间限制: 1 Sec 内存限制: 128 MB 提交: 268 解决: 69 题目描述 LYH自动售货机在销售商品时,具有自动找钱功能.但是找零的最小单 ...
- 玩转华为物联网IoTDA服务系列三-自动售货机销售分析场景示例
场景简介 通过收集自动售货机系统的销售数据,EI数据分析售货销量状况. 该场景主要描述的是设备可以通过MQTT协议与物联网平台进行交互,应用侧可以到物联网平台订阅设备侧变化的通知,用户可以在控制台或通 ...
- 开发实践丨用小熊派STM32开发板模拟自动售货机
摘要:本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代码,通过云端开发和设备终端开发,实现终端数据在的华为云平台显示. 本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代 ...
- C#骏鹏自动售货机接口
MachineJP类: 第1部分:串口初始化,串口数据读写 using System; using System.Collections.Generic; using System.IO.Ports; ...
- Java开发自动售货机
1:先写一个类,包括商品的基本属性 package com.xt.java.base25; public class Goods { private int ID; private String na ...
- 用户点击确认登录,自动跳转下面地址得到code
PHP获取微信openid 简单教程 WEB 2014年10月29日 10868浏览 6评论 获取code https://open.weixin.qq.com/connect/oauth2/ ...
随机推荐
- Exponentiation java大数
Exponentiation 大数a的n次幂,直到读到EOF(文件结尾)为止,其中忽略小数后面的0 1 import java.util.*; 2 import java.math.*; 3 impo ...
- CentOS-Docker搭建GitLab
官方教程 下载镜像 $ docker pull gitlab/gitlab-ce:latest 创建相关目录 $ mkdir -p /home/gitlab/config /home/gitlab/l ...
- 1shell变量的作用域
Shell 局部变量 Shell 全局变量 shell全局变量的易错点 linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别 Shell 环境 ...
- webView远程代码执行漏洞复现
一.概述 这个漏洞只存在于Android API level 16以及之前的版本,系统没有限制使用webView.addJavascriptInterface方法,导致攻击者可以通过使用java 反射 ...
- hugo + nginx 搭建博客记录
作为一个萌新Gopher,经常逛网站能看到那种极简的博客,引入眼帘的不是花里胡哨的图片和样式,而是黑白搭配,简简单单的文章标题,这种风格很吸引我.正好看到煎鱼佬也在用这种风格的博客,于是卸载了我的wo ...
- Spring学习总结(一)---谈谈对Spring IOC的理解(一:理论知识理解)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 详解Spring中Bean的作用域与生命周期
摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我 ...
- C语言:随机抽奖
#include <stdio.h> #include <stdlib.h> //<stdlib.h>用于调用 rand(), #include <time. ...
- Hive——元数据表含义
Hive--元数据表含义 1.VERSION -- 查询版本信息 Field Type Comment VER_ID bigint(20) ID主键 SCHEMA_VERSION va ...
- Java多线程(上)
Java多线程 程序.进程和线程 一.程序 程序是存储在磁盘上, 包含可执行机器指令和数据的静态实体. 即进程或者任务是处于活动状态的计算机程序. 二.进程 进程是资源(CPU.内存等)分配的基本单位 ...