//此专题为我找的一些题目做过的fpga小实训
出租车计费器
设计要求:
1. 能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,
并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(如20元)时,
每公里加收50%的车费,车停止不计费。
2. 实现预置功能:能预置起步费、每公里收费、车行加费里程。
3. 实现模拟功能:能模拟汽车启动、停止、暂停、车速等状态。
4. 设计动态扫描电路:将车费显示出来,有两位小数。
5. 用Verilog语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。
6. 各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。
7. 完成电路全部设计后,通过系统实验箱下载验证设计的正确性。 计费器按里程收费,每100米开始一次计费。
设计代码:
moduleTaxi_prj(clk,rst_n,en,//delay,Mail_out,Cost_out);inputclk,rst_n;inputen;regflag;reg[9:0]delay;output[9:0]Mail_out;output[9:0]Cost_out;reg[9:0]mail_cnt;reg[9:0]cost_cnt;always@(posedgeclkornegedgerst_n)beginif(!rst_n)mail_cnt<=9'd30;elseif(cost_cnt!=9'd10&&en==1&&flag==0)mail_cnt<=mail_cnt+1'b1;//100melseif(flag==1)mail_cnt<=9'd30;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n)cost_cnt<=9'd10;elseif(flag==0&&en)beginif(cost_cnt<=9'd19)//8kmcost_cnt<=cost_cnt+9'd2;//2yuanelseif(cost_cnt>=9'd20)begincost_cnt<=cost_cnt+9'd3;//2yuanendendelseif(flag==1)cost_cnt<=9'd10;//mail_cnt<=9'd30;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n)begindelay<=9'd0;flag<=0;endelseif(en==0)begin//停车开始计数delay<=delay+9'd1;if(delay==9'd49)beginflag<=1;endelseflag<=0;endendassignMail_out=mail_cnt;assignCost_out=cost_cnt;endmodule`timescale1ns/1ns`defineclock_period20moduleTaxi_prj_tb;regclk;regrst_n;regen;//wire[9:0]delay;wire[9:0]Mail_out;wire[9:0]Cost_out;Taxi_prjTaxi_prj(.clk(clk),.rst_n(rst_n),.en(en),//.delay(delay),.Mail_out(Mail_out),.Cost_out(Cost_out));initialclk=1;always#(`clock_period/2)clk=~clk;initialbeginrst_n=1'b0;en=1;#(`clock_period*5);rst_n=1'b1;#(`clock_period*20);en=0;#(`clock_period*60);en=1;#(`clock_period*20);en=0;#(`clock_period*20);en=1;#(`clock_period*50);$stop;endendmodule
备注:以实现基本要求,数码管显示使用顶层模块化设计
--------------------------------------------------------------