|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- module machine(clk,money_in1,money_in2,money_out,item_out,state);
- input clk;
- input money_in1; //投入10
- input money_in2; //投入50
- output logic [7:0] money_out; //退款或找零的钱数
- output logic item_out;
- output logic [2:0] state; //状态机的状态
- logic timeing; //计时状态
- logic [31:0] time_cnt_s;
- logic [8:0] time_cnt_l;
- logic [7:0] money_sum;
- logic [7:0] money_sum1;
- logic [7:0] money_sum2;
- parameter S_init=4'b00,S_enough=4'b01,S_change=4'b10,S_out=4'b11;
- parameter item=7'd50;
- initial
- begin
- state=S_init;
- money_sum1=0;
- money_sum2=0;
- end
- always@(posedge clk) //分频模块,波形测试时需减小分频,方便看波形
- begin
- IF(state==S_init)
- begin
- time_cnt_s=0;
- time_cnt_l=0;
- end
- if(timeing)
- time_cnt_s=time_cnt_s+1;
- if(time_cnt_s==32'd5_000_000)
- time_cnt_l=time_cnt_l+1;
- end
- always@(posedge money_in1) //投币模块,上升沿为投币
- begin
- if(timeing)
- money_sum1=money_sum1+10;
- end
- always@(posedge money_in2) //投币模块,上升沿为投币
- begin
- if(timeing)
- money_sum2=money_sum2+50;
- end
- always@(posedge clk)
- begin
- case(state)
- S_init:
- begin
- timeing=0;
- money_sum=0;
- money_out=0;
- item_out=7'b00;
- end
- end
- S_enough:
- begin
- money_sum=money_sum1+money_sum2;
- if(money_sum>=item)
- begin
- money_sum=money_sum-item; //求出找钱数
- state=S_change;
- end
- end
- S_change:
- begin
- if(money_sum>0)
- begin
- money_out=money_sum;
- state=S_out;
- end
- else
- state=S_out;
- end
- S_out:
- begin
- item_out=item;
- state=S_init;
- end
- endcase
- endmodule
- module machine_test;
- reg clk;
- reg money_in1;
- reg money_in2;
- wire item_out;
- wire [7:0] money_out;
- wire [2:0] state;
- machine i1 (
- .clk(clk),
- .item_out(item_out),
- .money_in1(money_in1),
- .money_in2(money_in2),
- .money_out(money_out),
- .state(state)
- );
- initial begin
- $dumpfile("machine.vcd");
- $dumpvars(0,machine_test);
- clk=0;
- money_in1=0;
- money_in2=0;
- #100 money_in1=10;
- #100 money_in1=10;
- #100 money_in2=50;
- #100
- $finish;
- end
- always #5 clk=~clk;
- endmodule
- 7 Z8 ]1 o; C9 a( K. E# c
$ P4 @- I1 z% y: D |
|