三种类型自助售货机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

相关文章

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

在Spring中配置Quartz的三种方式

《在Spring中配置Quartz的三种方式》SpringQuartz是一个任务调度框架,它允许我们定期执行特定的任务,在Spring中,我们可以通过多种方式来配置Quartz,包括使用​​@Sche... 目录介绍使用 ​​@Scheduled​​ 注解XML 配置Java 配置1. 创建Quartz配置

C# dynamic类型使用详解

《C#dynamic类型使用详解》C#中的dynamic类型允许在运行时确定对象的类型和成员,跳过编译时类型检查,适用于处理未知类型的对象或与动态语言互操作,dynamic支持动态成员解析、添加和删... 目录简介dynamic 的定义dynamic 的使用动态类型赋值访问成员动态方法调用dynamic 的

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]