出租车计价器设计方案和功能介绍verilog、fpga(编辑修改稿)内容摘要:

amp。 run==1) begin if(count1=4) begin count1=0。 count=count+1。 end //为了方便模拟, else count1=count1+1。 end distance=count。 endendmodule3 时钟模块//时钟模块//为系统提供时间module clock(clk, //1Hz时钟 hour_out, //时,显示时间 min_out, //分,显示时间 sec_out, //秒, 显示时间 )。 input clk。 output [7:0] hour_out,min_out,sec_out。 reg [7:0] hour_out,min_out,sec_out。 initialbegin hour_out=12。 min_out=0。 sec_out=0。 endalways @(posedge clk)begin if(sec_out59) begin sec_out=sec_out+739。 b1。 end if(sec_out==59) begin sec_out=0。 if(min_out59) min_out=min_out+739。 b1。 end if(min_out==59) begin min_out=0。 if(hour_out23) hour_out=hour_out+739。 b1。 end if(hour_out==23) begin hour_out=0。 end endendmodule4 等待时间计数模块//等待时间模块module wait_time (clk, //1Hz start, //计费启动开关 run, //出租车运行状态开关 led_stop, wait_time //等待时间 )。 input clk,run。 input [3:0] start。 output [15:0] wait_time。 output led_stop。 reg [15:0] wait_time,count。 reg led_stop。 always@(posedge clk) begin if(start==0) wait_time=0。 //清零 if(start==1amp。 amp。 run==0) //计价开关为1,且车状态位0,开始计时 begin led_stop=1。 if(count10) count=count+1639。 b1。 //为了便于模拟,每10s,当做一分钟 else begin count=0。 wait_time=wait_time+1。 end end else begin led_stop=0。 end endendmodule5 计价模块// 计价模块//根据里程、时钟、等待时间计算出总价//里程:判断远程和近程//时钟:判断白天和晚上//价格单位:元//里程单位:千米//等待时间单位:分钟//时间和里程为整数//价格为小数module charge(clk, //50MHz start, //计费启动开关 run, //出租车运行状态开关 distance, //里程 hour, //时钟,时 min, //时钟,分 sec, //时钟,秒 wait_time, //等待时间 day_time, //白天开始时间 night_time, //晚上开始时间 short_distance, //起步价可行最大里程数 long_distance, //最大近程里程数 price_day_short, //白天近程单价 price_day_long, //白天远程单价 price_night_short, //晚上近程单价 price_night_long, //晚上远程单价 one_price_day, //白天起步价 one_price_night, //晚上起步价 price_wait_time, //等待时间每分钟价格 charge, //总费用 total_charge, total_distance )。 input clk,run。 input [3:0] start。 input [7:0] hour,min,sec,day_time,night_time。 input [7:0] short_distance,long_distance。 input [7:0] price_day_short,price_day_long,price_night_short,price_night_long,price_wait_time。 input [11:0] one_price_day,one_price_night。 input [15:0] distance,wait_time。 output [15:0] charge。 output [15:0] total_charge,total_distance。 reg [15:0] one_price,charge。 reg [15:0] distance1,distance2。 reg [15:0] total_charge,total_distance。 reg [15:0] t1。 //白天近程里程数 reg [15:0] t2。 //白天远程里程数 reg [15:0] t3。 //晚上近程里程数 reg [15:0] t4。 //晚上远程里程数 reg flag,flag1。 always@(posedge clk) begin if(start==0) //清零 begin flag=0。 flag1=1。 t1=0。 t2=0。 t3=0。 t4=0。 one_price=0。 end if(start==1amp。 amp。 flag==0) begin flag=1。 if(hour=day_timeamp。 amp。 hour=night_time) one_price=one_price_day。 //白天,起步价 else one_price=one_price_night。 //夜晚,起步价 end distance1=distance。 //检测该时钟与该时钟之前时钟的变量值,是否相等。 有变化则执行下面语句。 distance2=distance1。 if(distanc。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。