利用状态机实现一罐可以2.5元的售货机
生活随笔
收集整理的這篇文章主要介紹了
利用状态机实现一罐可以2.5元的售货机
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第一步,畫出原理圖
?
第二步,將畫出的原理圖利用硬件語言實(shí)現(xiàn)
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;elsepo_cola<=1'b0; /*當(dāng)時(shí)我將找零跟出可樂寫到同一個(gè)模塊當(dāng)中,導(dǎo)致編譯通過測(cè)試顯示高阻 態(tài)*/ 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?
第三步,寫測(cè)試模塊
`timescale 1ns/1ns module tb_fsm_cola();reg sclk;reg rst_n;reg [1:0]pi_money;wire po_cola;wire po_money;initialbeginsclk=0;rst_n=0;pi_money=0;#20rst_n=1;endalways # 10 sclk=~sclk; always # 50 pi_money={$random}%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出來
?
?
總結(jié)
以上是生活随笔為你收集整理的利用状态机实现一罐可以2.5元的售货机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AU实现剪辑音乐的时长自由
- 下一篇: 什么是DNS?DNS端口号是多少?什么是