vivado自动售货机的项目程序和仿真程序一起的代码
时间: 2024-04-21 14:28:12 浏览: 108
由于自动售货机的程序比较复杂,无法一一列出所有的代码。但是,我可以给你提供一个自动售货机项目的代码框架,帮助你理解整个程序的结构和实现方法。
以下是代码框架:
```verilog
module vending_machine(
input clk, // 时钟信号
input rst_n, // 复位信号
input coin_1, // 投入一元硬币信号
input coin_5, // 投入五角硬币信号
input vend, // 购买信号
output reg disp_1, // 显示屏输出一元信号
output reg disp_5, // 显示屏输出五角信号
output reg change_1, // 找零口输出一元信号
output reg change_5, // 找零口输出五角信号
output reg [7:0] vend_num // 购买的商品数量
);
// 定义状态类型
typedef enum logic [2:0] {
WAIT,
COIN_1,
COIN_5,
VEND,
DISP_CHANGE
} state_t;
// 定义状态机变量和状态变量
state_t state, next_state;
// 定义计数器和商品数量变量
reg [7:0] count, vend_count;
// 定义状态转移条件
localparam logic [3:0]
WAIT_TO_COIN_1 = 4'b0001,
COIN_1_TO_COIN_5 = 4'b0010,
COIN_5_TO_VEND = 4'b0100,
VEND_TO_DISP_CHANGE = 4'b1000;
// 定义状态转移函数
function void state_transition;
input logic [3:0] condition;
begin
case (condition)
WAIT_TO_COIN_1: next_state = COIN_1;
COIN_1_TO_COIN_5: next_state = COIN_5;
COIN_5_TO_VEND: next_state = VEND;
VEND_TO_DISP_CHANGE: next_state = DISP_CHANGE;
default: next_state = state;
endcase
end
endfunction
// 定义状态机
always_ff @(posedge clk, negedge rst_n)
begin
if (~rst_n) begin
state <= WAIT;
count <= 0;
vend_count <= 0;
end else begin
state <= next_state;
count <= count + 1;
if (vend) vend_count <= vend_count + 1;
end
end
// 定义状态转移逻辑
always_comb
begin
case (state)
WAIT:
if (coin_1) state_transition(WAIT_TO_COIN_1);
else if (coin_5) state_transition(COIN_5_TO_VEND);
COIN_1:
if (count >= 10) state_transition(COIN_1_TO_COIN_5);
COIN_5:
if (count >= 2) state_transition(VEND_TO_DISP_CHANGE);
VEND:
if (vend_count >= 1) state_transition(VEND_TO_DISP_CHANGE);
DISP_CHANGE:
if (count >= 2) state_transition(WAIT_TO_COIN_1);
endcase
end
// 定义输出逻辑
always_comb
begin
case (state)
WAIT:
begin
disp_1 = 0;
disp_5 = 0;
change_1 = 0;
change_5 = 0;
vend_num = 0;
end
COIN_1:
begin
disp_1 = 1;
disp_5 = 0;
change_1 = 0;
change_5 = 0;
vend_num = 0;
end
COIN_5:
begin
disp_1 = 0;
disp_5 = 1;
change_1 = 0;
change_5 = 0;
vend_num = 0;
end
VEND:
begin
disp_1 = 0;
disp_5 = 0;
change_1 = 1;
change_5 = 1;
vend_num = 1;
end
DISP_CHANGE:
begin
disp_1 = 0;
disp_5 = 0;
change_1 = 1;
change_5 = 1;
vend_num = 0;
end
endcase
end
endmodule
```
以上是一个简单的自动售货机的代码框架,其中包括状态机、硬件输入和输出等模块。具体实现细节需要根据实际情况进行调整。希望对您有所帮助!
阅读全文