三种类型自助售货机Verilog描述

2023-11-09 19:50

本文主要是介绍三种类型自助售货机Verilog描述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三种类型自助售货机Verilog描述
最近遇到该类题目一共三种形式,在解决过程中发现暂且在理想状态下设计,如果在实际情况下还需要再深入思考。
1.两种面值5分、10分;货物价格10分;考虑有找零。
此种情形在此使用2个状态,两段式描述(也可考虑3个状态)
module zzshj1(
input clk,
input rst,
input A, //投入5分
input B, //投入10分
output reg out,
output reg change
);

parameter s0=1'b0,s1=1'b1;
reg current_state,next_state;  //中间变量声明always@(posedge clk or negedge rst)   //状态转换beginif(!rst)current_state<=s0;      elsecurrent_state<=next_state;		endalways@(current_state or A or B)   //输出逻辑和次态逻辑描述beginout=1'b0;change=1'b0;case(current_state)s0: beginif(A==1&&B==0)next_state=s1;else if(A==0&&B==1)beginnext_state=s0;out=1'b1;endelsenext_state=s0;ends1: beginif(A==1&&B==0)beginnext_state=s0;out=1'b1;endelse if(A==0&&B==1)beginnext_state=s0;out=1'b1;change=1'b1;						endelsenext_state=s0;				end					default:next_state=s0;endcaseend	

endmodule
在这里插入图片描述2.两种面值5分、10分;货物价格15分;考虑有找零。
module zzshj2(
input clk,
input rst,
input A, //投入5分
input B, //投入10分
output reg out,
output reg change
);

parameter s0=2'b00,s1=2'b01,s2=2'b10;
reg [1:0] current_state,next_state;  //中间变量声明always@(posedge clk or negedge rst)   //状态转换beginif(!rst)current_state<=s0;      elsecurrent_state<=next_state;		endalways@(current_state or A or B)   //输出逻辑和次态逻辑描述beginout=1'b0;change=1'b0;case(current_state)s0: beginif(A==1&&B==0)//5next_state=s1;else if(A==0&&B==1)//10next_state=s2;elsenext_state=s0;ends1: beginif(A==1&&B==0)//5next_state=s2;else if(A==0&&B==1)//10beginnext_state=s0;out=1'b1;						endelsenext_state=s1;				end	s2: beginif(A==1&&B==0)//5beginnext_state=s0;out=1'b1;endelse if(A==0&&B==1)//10beginnext_state=s0;out=1'b1;change=1'b1;endelsenext_state=s2;				end					default:next_state=s0;endcaseend	

endmodule
在这里插入图片描述
综合后状态机视图
在这里插入图片描述
在这里插入图片描述
仿真结果图
3.三种面值1分、2分、5分;货物价格5分;考虑找零一分。
对于此种情形在设计过程中暂时未考虑:投入2分再投5分、投入已3分再投5分诸如此类,因为要求找零一分。如果只考虑找零,不考虑找零多少,只是产生找零信号,那么可以考虑以上情况。
module zzshj3(
input clk,
input rst,
input A, //投入1fen
input B, //2fen
input C, //5fen
output reg out, //出饮料
output reg change //找零一分
);

parameter s0=5'b0_0001,s1=5'b0_0010,s2=5'b0_0100,s3=5'b0_1000,s4=5'b1_0000;
reg [4:0] state;  //中间变量声明always@(posedge clk or negedge rst)   beginif(!rst)beginout<=1'b0;change<=1'b0;state<=s0;endelse beginout<=1'b0;change<=1'b0;case(state)s0: beginif(A==1&&B==0&&C==0)   //1state<=s1;else if(A==0&&B==1&&C==0)//2state<=s2;else if(A==0&&B==0&&C==1)//5beginstate<=s0;out<=1'b1;endelse if(A==0&&B==0&&C==0) state<=s0;ends1: beginif(A==1&&B==0&&C==0)//1state<=s2;else if(A==0&&B==1&&C==0)//2state<=s3;						else if(A==0&&B==0&&C==0)state<=s1;				end	s2: beginif(A==1&&B==0&&C==0)//1state<=s3;else if(A==0&&B==1&&C==0)//2state<=s4;else if(A==0&&B==0&&C==0)state<=s2;				end	s3: beginif(A==1&&B==0&&C==0)//1state<=s4;else if(A==0&&B==1&&C==0)//2beginstate<=s0;out<=1'b1;endelse if(A==0&&B==0&&C==0)state<=s3;				end	s4: beginif(A==1&&B==0&&C==0)//1beginstate<=s0;out<=1'b1;endelse if(A==0&&B==1&&C==0)//2beginstate<=s0;out<=1'b1;change<=1'b1;endelse if(A==0&&B==0&&C==0)state<=s4;				end					default:state<=s0;endcaseendend	

endmodule
在这里插入图片描述
综合后状态机视图
在这里插入图片描述
仿真结果图(红线分割区间分别为连续输入5分、连续输入2分、连续输入1分)
总结:对于以上分析设计存在瑕疵,欢迎有兴趣的与我交流改正。

这篇关于三种类型自助售货机Verilog描述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378179

相关文章

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3