vivado自动售货机最简单的项目代码
时间: 2023-09-22 12:08:16 浏览: 66
下面是一个基于Vivado的自动售货机最简单的项目代码:
```verilog
module vending_machine(
input clk, // 时钟信号
input rst, // 复位信号
input [3:0] coin, // 投币信号
input [1:0] select, // 选择商品信号
output reg [3:0] price, // 商品价格
output reg [3:0] balance, // 余额
output reg [1:0] status, // 状态
output reg vend // 出货信号
);
// 状态定义
parameter WAIT_SELECT = 2'b00;
parameter WAIT_COIN = 2'b01;
parameter WAIT_VEND = 2'b10;
// 商品价格
reg [3:0] product_price = 4'h1;
// 商品库存量
reg [3:0] product_stock = 4'h5;
// 硬币检测信号
wire valid_coin = (coin == 4'b0100);
// 投币金额
reg [3:0] coin_amount = 4'h0;
// 出货计数器
reg [3:0] vend_count = 4'h0;
// 状态机
always @(posedge clk or posedge rst) begin
if (rst) begin
price <= 4'h0;
balance <= 4'h0;
status <= WAIT_SELECT;
vend <= 1'b0;
end else begin
case (status)
WAIT_SELECT: begin
price <= product_price;
balance <= coin_amount;
if (select != 2'b00 && product_stock > 0) begin
status <= WAIT_COIN;
end
end
WAIT_COIN: begin
price <= 4'h0;
balance <= coin_amount + coin;
coin_amount <= coin_amount + coin;
if (valid_coin && coin_amount >= product_price) begin
status <= WAIT_VEND;
vend_count <= 4'h5;
end
end
WAIT_VEND: begin
price <= 4'h0;
balance <= coin_amount - product_price;
vend <= 1'b1;
vend_count <= vend_count - 1;
if (vend_count == 4'h0) begin
product_stock <= product_stock - 1;
coin_amount <= 4'h0;
status <= WAIT_SELECT;
vend <= 1'b0;
end
end
endcase
end
end
endmodule
```
这个代码实现了一个简单的自动售货机,具有显示商品价格和余额信息、选择商品、投币、退币、出货等功能。状态机采用三个状态,包括等待选择商品、等待投币、等待出货。硬件模块包括数码管、红外传感器、电机等。这个代码可以作为学习Vivado自动售货机设计的入门代码,可以帮助学生了解数字电路设计的基本流程。