coin=coin+1; // coin是投入总额 end 1: begin
coinl=2; coinh=coinh; coin=coin+1; end 2: begin
coinl=3; coinh=coinh; coin=coin+1; end 3: begin
coinl=4; coinh=coinh; coin=coin+1; end 4: begin
coinl=5; coinh=coinh; coin=coin+1; end 5: begin
coin=6;
coinh=coinh; coin=coin+1; end 6: begin
coinl=7; coinh=coinh; coin=coin+1; end 7: begin
coinl=8; coinh=coinh; coin=coin+1; end
8: begin
coinl=9; coinh=coinh; coin=coin+1; end 9: begin
coinl=0;
coinh=coinh+1; coin=coin+1; end endcase end
else if(coin_5) //投入5元 begin
case(coinl) //coinl是投入总额的个位数字 0: begin
coinl=6;
coinh=coinh; // coinh是投入总额的十位数字 coin=coin+5; // coin是投入总额 end 1: begin
coinl=6; coinh=coinh; coin=coin+5; end 2: begin
coinl=7; coinh=coinh; coin=coin+5; end 3: begin
coinl=8; coinh=coinh; coin=coin+5; end 4: begin
coinl=9;
coinh=coinh; coin=coin+5; end 5: begin
coinl=0;
coinh=coinh+1; coin=coin+5; end 6: begin
coinl=1;
coinh=coinh+1; coin=coin+5; end 7: begin
coinl=2;
coinh=coinh+1; coin=coin+5; end 8: begin
coinl=3;
coinh=coinh+1; coin=coin+5; end 9: begin
coinl=4;
coinh=coinh+1; coin=coin+5; end endcase end
else if(coin_10) //投入10元 begin
coinl=coinl; // coinl是投入总额的个位数字 coinh=coinh+1; // coinh是投入总额的十位数字 coin=coin+5'b01010; // coin是投入总额 end
else if(coin_20) //投入10元 begin
coinl=coinl; // coinl是投入总额的个位数字
coinh=coinh+4'b0010;;// coinh是投入总额的十位数字 coin=coin+5'b10100; // coin是投入总额 end end endmodule
经过编译后建立波形文件,波形仿真图如图所示:
在此波形仿真图中,将coin_1,coin_5,coin_10依次置了一个时钟周期的高电平作为输入,输出显示总额低位为6,高位为1,所投钱币总额为16,说明达到此钱币处理模块的预期功能。
2.3 余额计算模块
余额计算模块主要完成出票找零操作。通过所投钱币总额coin和应付总额cost计算找赎余额,然后用发光二极管点亮表示出票和找零。钱数不够票价的,退出所投钱币数。
余额计算模块如图所示:
1)输入
①rd:模块复位信号,将所有输出信号清零。 ②clk:模块的时钟信号。
③finish:用户使用的确定按键。此信号置为高电平后,开始判断是否出票,计算找赎余额。
④pri_in[3:0]:输入乘客所选的线路和票价,用来判断出票时具体出哪张票。
⑤cost_in[3:0],coin_in[4:0]:输入应付总额和所投钱币总额,用来判断是否出票,是否找赎,计算找赎余额。
2)输出
①act[3:0]:表示出票。车票共有4种,用4个发光二极管的点亮来表示具体出哪张票,若都不亮则表示不出票。
②act_1:表示找赎。若信号为‘1’,用1个发光二极管