利用狀態機實現一罐可以2 5元的售貨機

2021-08-22 10:33:57 字數 2593 閱讀 6795

第一步,畫出原理圖

第二步,將畫出的原理圖利用硬體語言實現

module fsm_cola_ctrl(

input wire sclk,

input wire rst_n,

input wire [1:0]pi_money,

output reg po_cola,

output reg po_money

);reg [4:0] state;

parameter idle =5'b00001;

parameter half =5'b00010;

parameter one =5'b00100;

parameter one_half =5'b00001;

parameter two =5'b10000;

always@(posedge sclk or negedge rst_n)

if(!rst_n)

state<=idle;

else case(state)

idle: if(pi_money==2'b01)

state<=half;

else if(pi_money==2'b10)

state<=one;

else state<=idle;

half: if(pi_money==2'b01)

state<=one;

else if(pi_money==2'b10)

state<=one_half;

else state<=idle;

one: if(pi_money==2'b01)

state<=one_half;

else if(pi_money==2'b10)

state<=two;

else state<=idle;

one_half: if(pi_money==2'b01)

state<=two;

else if(pi_money==2'b10)

state<=idle; //不找零 出可樂

else state<=one_half;

two: if(pi_money==2'b01)

state<=idle; //不找零 出可樂

else if(pi_money==2'b10)

state<=idle; //找零 出可樂

else state<=two;

default:state<=idle;

endcase

always@(posedge sclk or negedge rst_n)

if(!rst_n)

po_cola<=1'b0;

else if(state==one_half&&pi_money==2'b10)

po_cola<=1'b1;

else if(state==two&&pi_money==2'b01)

po_cola<=1'b1;

else if(state==two&&pi_money==2'b10)

po_cola<=1'b1;

else

po_cola<=1'b0; /*當時我將找零跟出可樂寫到同乙個模組當中,導致編譯通過測試顯示高阻 態*/

always@(posedge sclk or negedge rst_n)

if(!rst_n)

po_money<=1'b0;

else if(state==two&&pi_money==2'b10)

po_money<=1'b1;

else po_money<=1'b0;

endmodule

第三步,寫測試模組

`timescale 1ns/1ns

module tb_fsm_cola();

reg sclk;

reg rst_n;

reg [1:0]pi_money;

wire po_cola;

wire po_money;

initial

begin

sclk=0;

rst_n=0;

pi_money=0;

#20rst_n=1;

endalways # 10 sclk=~sclk;

always # 50 pi_money=%3;

fsm_cola_ctrl fsm_cola_ctrl_inst(

.sclk (sclk ),

.rst_n (rst_n ),

.pi_money (pi_money ),

.po_cola (po_cola ),

. po_money ( po_money )

);endmodule

第四步,將**影象p出來

kanzi狀態機實現

1.在library中選中state managers建立create state manager。2.在library中選中property types建立create property type,name state category custom datatype interger。3.修改s...

qt狀態機的實現

建立狀態,設定狀態中的屬性,設定初始狀態,設定狀態裝換條件 動畫,啟動狀態機 int nmargin 9 int ninitwidth m pselmoldform width int ninitheight m pselmoldform height int nconfepyformw m pco...

實現有狀態物件或狀態機

想實現乙個狀態機或可以在許多不同狀態下執行的物件,但又不想在 中新增很多條件。一般通過新增不同狀態符號來執行不同狀態下的 如下 class connection def init self self.state closed def read self if self.state open rais...