名称:出租车计费器设计Verilog代码Quartus? 正点原子新起点开发板
软件:Quartus
语言:Verilog
代码功能:
出租车计费器
1、起步费为10元,3公里
2、车行驶 3公里后按每公里 2元计费
3、若总公里数超过20公里,需加收10元空载返程费
4、停车每5分钟3元计费
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在正点原子新起点开发板验证,正点原子新起点开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
部分代码展示:
module?taxi_state( input?clk,//标准时钟,50MHz input?reset,//复位信号 input?stop,//中途暂停 input?start,//启动信号,行程开始,高有效? input?one_kilometre,//1公里产生一次脉冲 output?[7:0]?minute,//等待时间 output?[7:0]?mileage_out,//里程 output?reg?[15:0]?totel_money_out//合计费用 ); parameter?s_idle=3'd0; parameter?s_starting_price=3'd1; parameter?s_mileage_price=3'd2; parameter?s_highmileage_price=3'd3; parameter?s_stop_1=3'd4; parameter?s_stop_2=3'd5; parameter?s_stop_3=3'd6; reg?[2:0]?state=3'd0; reg?[15:0]?totel_money=16'd0; reg?[7:0]?mileage=8'd0;//里程 assign?mileage_out=mileage; always@(posedge?clk?or?posedge?reset) if(reset==1) mileage<=8'd0; else if(state==s_starting_price?||?state==s_mileage_price?||?state==s_highmileage_price) if(one_kilometre==1) mileage<=mileage+8'd1;//一公里里程加1 else mileage<=mileage; reg?minute_en=0; reg?[31:0]?count_min=32'd0; always@(posedge?clk?or?posedge?reset) if(reset==1)begin count_min<=0; minute_en<=0; end else if(state==s_stop_1?||?state==s_stop_2?||?state==s_stop_3) if(count_min>=32'd3000000000)begin//1分钟=50000000*60 count_min<=0; minute_en<=1; end else?begin count_min<=count_min+1; minute_en<=0; end reg?[7:0]?wait_minute=8'd0;//等待分钟数 assign?minute=wait_minute; reg?five_minutes_en=0;//5分钟计时信号 always@(posedge?clk?or?posedge?reset) if(reset==1) wait_minute<=8'd0; else if(minute_en) wait_minute<=wait_minute+8'd1;//等待分钟数 else wait_minute<=wait_minute;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1057
阅读全文
423