verilog:模拟简易自动售货机代码(quartus13.1)

自动售货机

功能:自动售货机共有三个商品,通过选择某一个商品去付款,然后自动售货机弹出相应商品。

具体代码如下

module m1(clr,a,b,out,z);
input a,clr;//clr是选择按钮,a表示付款状态
input [2:0] b;//b是储存选择的商品号:共有三个商品:001,010,100
output reg [2:0] out;//out是中间状态,用来连接三个商品和发放商品的
output reg [1:0] z; //z是发放商品用的,对应out的三个状态
always@(clr)//clr发生变化,说明有人在选择商品
begin 
case(b)     
3'b001:out<=3'b111;
3'b010:out<=3'b011;
3'b100:out<=3'b110;
endcase
end
always@(a)   //付款成功,即a=1
begin
case(out)
3'b111:z<=2'b01;
3'b011:z<=2'b10;
3'b101:z<=2'b11;
endcase
end
endmodule

test beach代码如下

`timescale 1ns/1ps
module m1_tb();
reg a,clr;
reg [2:0] b;
wire [2:0] out;
wire [1:0] z; 
m1 m2(.a(a),.clr(clr),.b(b),.out(out),.z(z));
initial
begin
clr=0;
#10 clr=1;
#10 clr=0;
end
initial
begin
a=0;
#25 a=1;
#35 $stop;
end
initial
begin
b=3'b000;
#20 b=3'b010;
end
endmodule

仿真波形图

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,以下是一个简易自动售货机Verilog 代码: ```verilog module vending_machine( input clk, // 时钟 input rst, // 复位信号 input coin, // 投入硬币信号 input select, // 选择商品信号 output reg [3:0] item, // 商品编号 output reg vend // 出货信号 ); // 定义商品列表 parameter ITEM_A = 4'b0001; parameter ITEM_B = 4'b0010; parameter ITEM_C = 4'b0011; // 定义商品价格 parameter PRICE_A = 25; parameter PRICE_B = 35; parameter PRICE_C = 45; // 状态定义 parameter IDLE = 2'd0; parameter WAIT_COIN = 2'd1; parameter WAIT_SELECT = 2'd2; parameter DISPENSE = 2'd3; // 状态寄存器 reg [1:0] state; // 投币累计器 reg [5:0] coin_count; // 初始化状态 initial begin state = IDLE; coin_count = 0; vend = 0; end // 状态转移 always @(posedge clk) begin if (rst) begin state <= IDLE; coin_count <= 0; vend <= 0; end else begin case (state) IDLE: begin if (coin) begin coin_count <= 0; state <= WAIT_COIN; end end WAIT_COIN: begin coin_count <= coin_count + 1; if (coin_count >= 4'd4) begin state <= WAIT_SELECT; end end WAIT_SELECT: begin if (select) begin case (item) ITEM_A: begin if (coin_count >= PRICE_A) begin vend <= 1; coin_count <= coin_count - PRICE_A; state <= DISPENSE; end end ITEM_B: begin if (coin_count >= PRICE_B) begin vend <= 1; coin_count <= coin_count - PRICE_B; state <= DISPENSE; end end ITEM_C: begin if (coin_count >= PRICE_C) begin vend <= 1; coin_count <= coin_count - PRICE_C; state <= DISPENSE; end end endcase end end DISPENSE: begin vend <= 0; coin_count <= 0; state <= IDLE; end endcase end end // 商品选择逻辑 always @(select) begin case (select) 2'd0: item <= ITEM_A; 2'd1: item <= ITEM_B; 2'd2: item <= ITEM_C; endcase end endmodule ``` 该自动售货机有三个商品,分别对应 ITEM_A、ITEM_B 和 ITEM_C,价格分别为 PRICE_A、PRICE_B 和 PRICE_C。投入硬币后需要等待一定时间,然后选择商品后出货,并找零。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我有一贱

兄弟,咱们一起加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值