vivado 的“自动售货机”的简单项目程序
时间: 2023-10-09 20:12:58 浏览: 92
以下是 Vivado 中实现一个简单的自动售货机项目的示例程序:
```verilog
module vending_machine(
input clk,
input reset,
input coin,
input btn_cola,
input btn_pepsi,
input btn_sprite,
output reg [7:0] led,
output reg [7:0] seven_seg
);
// 定义状态机的状态
parameter IDLE = 2'b00;
parameter COLA = 2'b01;
parameter PEPSI = 2'b10;
parameter SPRITE = 2'b11;
// 定义商品价格
parameter COLA_PRICE = 8;
parameter PEPSI_PRICE = 12;
parameter SPRITE_PRICE = 10;
// 定义状态机的变量
reg [1:0] state;
reg [7:0] price;
reg [7:0] coins;
// 状态机的逻辑
always @(posedge clk)
begin
if (reset) begin
state <= IDLE;
price <= 0;
coins <= 0;
end
else begin
case (state)
IDLE: begin
if (btn_cola) begin
state <= COLA;
price <= COLA_PRICE;
end
else if (btn_pepsi) begin
state <= PEPSI;
price <= PEPSI_PRICE;
end
else if (btn_sprite) begin
state <= SPRITE;
price <= SPRITE_PRICE;
end
end
COLA, PEPSI, SPRITE: begin
if (coin) begin
coins <= coins + 1;
end
if (coins >= price) begin
led <= 8'b11111111;
seven_seg <= 8'b00000001;
coins <= coins - price;
state <= IDLE;
price <= 0;
end
end
endcase
end
end
endmodule
```
该程序描述了一个简单的自动售货机,其拥有三个按钮用于选择商品,一个硬币输入端口,一个 LED 显示器和一个七段数码管用于显示信息。
状态机共有四个状态,其中 IDLE 为初始状态,当按钮按下时进入相应的状态(COLA,PEPSI 或 SPRITE),此时可以通过硬币输入端口投入硬币,当投入的硬币总额达到商品价格时,LED 显示器亮起并且七段数码管显示数字“1”,同时状态机回到 IDLE 状态等待下一次购买。