当前位置:网站首页>自动收售报机
自动收售报机
2022-06-29 17:12:00 【长水曰天】
设计一个自动售报机,报纸价钱为八角,纸币有1角,2角,5角,一元。该自动售报机不考虑投币为大额面值等特殊情况。
下图为自动售报机的状态转移图:

S0~S7为状态机的8个状态,下角标代表已投币的总和,八个状态分别代表没有投币、已投币1角、已投币2角、已投币3角、已投币4角、已投币5角、已投币6角、已投币7角。
M代表输入,M1表示投入1角硬币,M2表示投入2角硬币,M5表示投入5角硬币,M10表示投入一元。
data_out = 1表示给出报纸,data_out_return1 = 1表示找回1角硬币,data_out_return2 = 1表示找回2角硬币。
代码如下:
module auto_sellor(current_state, data_out, data_out_return1, data_out_return2, clk, rst_n, data_in);
parameter state_width = 3, data_in_width = 3;
output [state_width-1:0]current_state;
output data_out, data_out_return1, data_out_return2;
input [data_in_width-1:0]data_in;
input clk, rst_n;
reg [state_width-1:0]current_state, next_state;
reg data_out, data_out_return1, data_out_return2;
[email protected](current_state or data_in)
case(current_state)
3'b000:case(data_in)//0
3'b000:begin
next_state <= 3'b000;//0+0=0
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b001;//0+1=1
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b010;//0+2=2
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b011:begin
next_state <= 3'b101;//0+5=5
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b100:begin
next_state <= 3'b000;//0+10=10
data_out <= 1'b1;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b1;
end
endcase
3'b001:case(data_in)//1
3'b000:begin
next_state <= 3'b001;//1+0=0
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b010;//1+1=2
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b011;//1+2=3
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b011:begin
next_state <= 3'b110;//1+5=6
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
endcase
3'b010:case(data_in)//2
3'b000:begin
next_state <= 3'b010;//2+0=2
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b011;//2+1=3
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b100;//2+2=4
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b011:begin
next_state <= 3'b111;//2+5=7
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
endcase
3'b011:case(data_in)//3
3'b000:begin
next_state <= 3'b011;//3+0=3
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b100;//3+1=4
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b101;//3+2=5
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b011:begin
next_state <= 3'b000;//3+5=8
data_out <= 1'b1;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
endcase
3'b100:case(data_in)//4
3'b000:begin
next_state <= 3'b000;//4+0=4
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b101;//4+1=5
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b110;//4+2=6
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b011:begin
next_state <= 3'b000;//4+5=9
data_out <= 1'b1;
data_out_return1 <= 1'b1;
data_out_return2 <= 1'b0;
end
endcase
3'b101:case(data_in)//5
3'b000:begin
next_state <= 3'b101;//5+0=5
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b110;//5+1=6
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b111;//5+2=7
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b011:begin
next_state <= 3'b000;//5+5=10
data_out <= 1'b1;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b1;
end
endcase
3'b110:case(data_in)//6
3'b000:begin
next_state <= 3'b110;//6+0=6
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b111;//6+1=7
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b010:begin
next_state <= 3'b000;//6+2=8
data_out <= 1'b01
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
endcase
3'b111:case(data_in)//7
3'b000:begin
next_state <= 3'b111;//7+0=7
data_out <= 1'b0;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
3'b001:begin
next_state <= 3'b000;//7+1=8
data_out <= 1'b1;
data_out_return1 <= 1'b0;
data_out_return2 <= 1'b0;
end
endcase
endcase
[email protected](posedge clk or rst_n)
if(!rst_n)
current_state <= 3'b000;
else
current_state <= next_state;
endmodule
上述代码中大的case语句里current_state分别对应S0到S7,即当前已投币的数目总和;而每个大case中的小case里的data_in则对应M0,M1,M2,M5,M10这几个投入硬币的数目。
边栏推荐
- Function calculation asynchronous task capability introduction - task trigger de duplication
- XAMPP Apache安装时问题总结
- 【R语言数据科学】:文本挖掘(以特朗普推文数据为例)
- About xampp unable to start MySQL database
- NAACL 2022 | 机器翻译SOTA模型的蒸馏
- Review of mathematical knowledge: curve integral of type I
- sectigo ov泛域名证书一年一千五百九十元好用吗
- Why does selenium become the first choice for web automated testing? (source code attached)
- 毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?
- kotlin基础语法
猜你喜欢

机器学习8-人工神经网络

如何利用OpenMesh实现不同格式的3D文件间的转换

Problem solving metauniverse, multi communication scheme in online games

LSB hidden items of stream carrier based on assembly implementation

研究所的这些优势真香!上岸率还极高!

深圳内推 | 深圳计算科学研究院招聘机器学习助理工程师(校招)

Leetcode 984. 不含 AAA 或 BBB 的字符串(网友思路)

【现代信号处理第六次作业】

Why does selenium become the first choice for web automated testing? (source code attached)

适合中小企业的项目管理系统有哪些?
随机推荐
Real test = "half product + Half development"?
New feature of C11 - Auto and decltype type type indicators
2022 software evaluator examination outline
What role does the supply chain management system play in the supply chain scenario?
NVIDIA安装最新显卡驱动
GNN notes: message propagation model
可转债策略之---(摊饼玩法,溢价玩法,强赎玩法,下修玩法,双低玩法)
研究所的这些优势真香!上岸率还极高!
Sectigo ov pan domain name certificate is 1590 yuan a year easy to use
卷妹带你学数据库---5天冲刺Day4
如何利用OpenMesh实现不同格式的3D文件间的转换
使用kalibr標定工具進行單目相機和雙目相機的標定
@Component与@Configuration区别
疫情居家外包项目之协作开发| 社区征文
Help MySQL data analysis with databend
在供应链场景应用中,供应链管理系统扮演什么角色?
Gradle下载慢或无法下载
基于opencv进行双目相机的标定
epoll分析
「科普大佬说」AI与创造力