基于fpga设计的出租车计价器内容摘要:

begin if(distance[3:0]==9)//判断 distance的低四位计到了 9没有 begin distance[3:0]=439。 d0。 //计到 9清零 if(distance[7:4]==9) //判断 distance的高四位计到了 9没有 distance[7:4]=439。 d0。 //计到 9清零 else distance[7:4]= distance[7:4]+139。 d1。 // distance的高四位没有计到 9的时候加一 end else distance[3:0]=distance[3:0]+139。 d1。 // distance的低四位没有计到 9的时候加一 end//end start end//end always //*产生 distance_enable信号 *// always@(posedge clk0 or negedge reset) begin if(!reset) begin distance_enable=139。 d0。 //复位 end else if(distance839。 d2)// 大于公里三的时候 begin distance_enable=139。 d1。 //输出 distance_enable信号 end end//end always endmodule//结束计程模块 计程模块的仿真结果: 从波形图可以看出在时钟的控制下,当 reset 为高电平且 start 为高电平的时候 distance 开始计数,当计到大于三的时候输出了 distancedistance_enable为高电平。 计时模块: 计时模块的框图: c l k 0r e s e ts ta r tti m e _ e n a b l es [7 ..0 ]m [7 ..0 ]tm :u 4 此模块用于计算停车等待的时间。 在出租车行进中,如果车辆停止等待,计数器则在 1Hz信号 clk的上升沿进行加计数,每 60次产生进位脉冲使分钟计数器位进行加计数,当累计等待时间超过 2( 不包括 2分钟 ) 分钟时,输出标志 time_enable正脉冲信号。 计时模块的 VerilogHDL源代码: module tm(clk0,reset,start,s,m,time_enable)。 // 端口的定义 input clk0,reset,start。 output [7:0] s。 //输出的秒 output [7:0] m。 //输出的分 output time_enable。 //输出的控制计费的信号 reg [7:0] s。 reg [7:0] m。 wire time_enable。 always@(posedge clk0 or negedge reset)//异步复位 begin if(!reset)//低电平有效 begin //复位 s=839。 d0。 m=839。 d0。 end else if(!start)//start 信号低电平有效 begin if(s[3:0]==9)// 秒的低四位是 9 begin s[3:0]=439。 d0。 //清零 if(s[7:4]==5) // 秒的高四位是 5 begin s[7:4]=439。 d0。 //清零 if(m[3:0]==9) // 分的低四位是 9 begin m[3:0]=439。 d0。 //清零 if(m[7:4]==9) // 分的高四位是 9 m[7:4]=439。 d0。 //清零 else m[7:4]=m[7:4]+139。 d1。 // 分的高四位不是 9加一 end else m[3:0]=m[3:0]+139。 d1。 //分的低四位不是 9加一 end else s[7:4]=s[7:4]+139。 d1。 // 秒的高四位不是 5加一 end else s[3:0]=s[3:0]+139。 d1。 //秒的低四位不是 9加 一 end//end always end assign time_enable=((m[7:0]839。 d2)amp。 amp。 (s[7:0]==839。 d0))?139。 d1:139。 d0。 //产生 time_enable信号。 endmodule//结束计时模块 计时模块的仿真结果: 两分钟之内(包括两分钟)的仿真结果如下所示: 从波形图可以看出在 clk的控制下当 start为低电平 reset为高电平的 时候时间计数, time_enable为低电平。 两分钟之外(不包括两分钟)的仿真结果如下所示: 从波形图可以看出在 clk的控制下当 start为低电平 reset为高电平的时候时间计数,当时间大于二分钟的时候, time_enable为输出高电平。 控制模块: 控制模块的框图: d i s t a n c e _ e n a b l es t a r tt i m e _ e n a b l es e l e c t _ c l kc o n t r o l : u 3 控制模块用于为计费模块提供时钟,当 start高电平的时候选择公里计费,输出的时钟信号为 distance_enable,当 start低电平的时候选择时间计费,输出的时 钟信号为 time_enable。 控制模块的 VerilogHDL源代码: module control(start,distance_enable,time_enable,select_clk)。 input start,distance_enable,time_enable。 output select_clk。 //输出选择的时钟信号 wire select_clk。 //*当 start高电平的时候选择公里计费,输出的时钟信号 为 distance_enable,当 start低电平的时候选择时间计费,输出的时钟信号为 time_enable*// assign select_clk=start?distance_enable:time_enable。 endmodule//结束控制模块 控制模块的仿真结果: ( 1)公里计费的仿真结果如下所示: 从波形图可以看出当 start为高电平的时候输出的信号是 distance_enable。 ( 2)时间计费的仿真结果如下所示: 从波形图可以看出当 start为低电平的 时候输出的信号是 time_enable。 计费模块 : 计费模块的框图: cl k 0r e se tse l e ct _ cl km o n e y [7 ..0 ]m o n e y :u 5 费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。 当出租车停车时,时钟 select_clk用于将费用计数器复位为起步价 ;当车处于行驶状态且满 3公里时, select_clk信号选择 distans_enable,此后路程每满 1公里,费用计数器加 1元;当出租车处于停止等待状态且时钟满 2分钟时,select_clk信号选择 time_enable信号,时间每满 1分钟,费用计数 器加 1元。 计费模块的 VerilogHDL。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。