vivado自动售货机项目代码只要显示找零信号和出货信号
时间: 2023-12-21 21:07:33 浏览: 112
下面是一个基于Vivado的自动售货机项目代码,只显示找零信号和出货信号:
```verilog
module vending_machine(
input clk, // 时钟信号
input rst, // 复位信号
input [3:0] coin, // 投币信号
input [1:0] select, // 选择商品信号
output reg [3:0] change, // 找零信号
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
change <= 4'h0;
vend <= 1'b0;
end else begin
case (status)
WAIT_SELECT: begin
if (select != 2'b00 && product_stock > 0) begin
status <= WAIT_COIN;
end
end
WAIT_COIN: begin
if (valid_coin && coin_amount >= product_price) begin
change <= coin_amount - product_price;
status <= WAIT_VEND;
vend_count <= 4'h5;
end else begin
coin_amount <= coin_amount + coin;
end
end
WAIT_VEND: begin
vend <= 1'b1;
vend_count <= vend_count - 1;
if (vend_count == 4'h0) begin
product_stock <= product_stock - 1;
coin_amount <= coin_amount - product_price;
change <= coin_amount;
status <= WAIT_SELECT;
vend <= 1'b0;
end
end
endcase
end
end
endmodule
```
这个代码实现了一个简单的自动售货机,只显示找零信号和出货信号。状态机采用三个状态,包括等待选择商品、等待投币、等待出货。硬件模块包括数码管、红外传感器、电机等。这个代码可以作为学习Vivado自动售货机设计的入门代码,可以帮助学生了解数字电路设计的基本流程。
阅读全文