当前位置:文档之家› 出租车计价器 课程设计报告

出租车计价器 课程设计报告

软件学院课程设计报告课程题目出租车计价器班级集成13-4专业集成电路设计与集成系统学生学号指导教师(填写自己班的指导教师)年月日1.课程设计目的全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。

2.课程设计题目描述和要求2.1.课程设计题目描述①.实现计费功能,计费标准为:按行驶里程计费,起步价为7.0元,并在车行3km 后按2.2元/km 计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。

②.现场模拟功能:以开关或按键模拟公里计数,能模拟汽车起动、停止、暂停等状态。

③.将车费和路程显示出来,各有一位小数。

2.2.总体设计思路框架2.3.课程设计题目要求 ①.设计正确,方案合理。

②.程序精炼,结构清晰。

③.设计报告含程序设计说明,用户使用说明,源程序清单及程序框图。

④.上机演示。

⑤.有详细的文档。

文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。

3.设计思想和设计内容3.1 出租车计费设计该出租车计费器按下开关S1后开始计费和计里程数,起步价是7元,行驶3公里,以后2.2元/公里。

并且设计选择模块,在车费超过20元每公里加收50%车费即3.3元/公里。

3.2 基本设计思想出租车计费器根据设计要求可初步分为3方面——显示、记里程数、记费。

之后再根据三方面分别设计模块。

1.显示模块。

一般计数器显示数字为1-F即16进制,而16进制不方便观看,所以在设计这一模块时我们将16进制改为10进制输出进而设计了译码模块。

2、里程模块。

设计要求对里程计数主要分为两个方面,计数以及公里数比较。

即3公里之内收7元,3公里之后20元(通过计算为9公里)以内每公里2.2元,9公里以外为每公里3.3元。

所以,我们将里程模块分为里程计数模块以为比较模块。

3.计费模块。

计费模块同里程比较模块所以将两个模块合二为一,为价格计算模块。

4.Verilog代码4.1顶层模块module taxi(clk,stop,rst_n,time1,time2,time3,time4,seg1,seg2,seg3,seg4);input clk;input stop;input rst_n;output [6:0]time1;output [6:0]time2;output [6:0]time3;output [6:0]time4;output [6:0]seg1;output [6:0]seg2;output [6:0]seg3;output [6:0]seg4;wire clk_fp;wire [15:0] distance;wire [15:0] price;wire [15:0]distan_bcd;wire [15:0]price_bcd;fp my_fp(clk,clk_fp,rst_n,stop);distance_counter dis_counter(clk_fp,rst_n,stop,distance);price_counterprice_coun(clk_fp,rst_n,stop,price,distance);yimaqi distance_BCD(distance,distan_bcd,clk_fp);yimaqi price_BCD(price,price_bcd,clk_fp);dispaly_my aa(clk_fp,distan_bcd,seg1,seg2,seg3,seg4);dispaly_my bb(clk_fp,price_bcd,time1,time2,time3,time4);endmodule4.2分频模块module fp(clk,clk_fp,rst_n,stop);//50mhzinput clk;input rst_n;input stop;output clk_fp;reg [25:0] counter;reg clk_fp;always@(posedge clk or negedge rst_n or negedge stop) beginif(!rst_n)beginclk_fp<=1'd0;counter<=26'd0;endelse if(!stop)begincounter<=counter;endelsebeginif(counter==26'd49_999_999)beginclk_fp<=1'b1;counter<=1'b0;endelsebeginclk_fp<=1'b0;counter<=counter+1'b1;endendendendmodule4.3里程计算模块clk_fp,rst_n,stop,distance);input clk_fp;//1Sinput rst_n;input stop;output [15:0]distance;reg [15:0]distance;always@(posedge clk_fp or negedge rst_n) beginif(!rst_n)distance<=8'd0;else if(!stop)distance<=distance;elsedistance<=distance+5'd10;endendmodule4.4价格计算模块module price_counter(clk_fp,rst_n,stop,price,distance);input clk_fp;//1Sinput rst_n;input stop;input [15:0]distance;output [15:0]price;reg [15:0]price;always@(posedge clk_fp or negedge rst_n or negedge stop) beginif(!rst_n)price<=8'd0;else if(!stop)price<=price;elseif(distance<=30)price<=16'd70;else if(distance<=90&&30<distance)price<=price+16'd22;elseprice<=price+16'd33;endendmodule4.5译码模块module yimaqi(num_hex,BCD,clk_fp);input [15:0]num_hex;input clk_fp;output [15:0]BCD;reg [15:0]BCD;reg [3:0] yima [3:0];always@(posedge clk_fp)beginyima[0]<=(num_hex)%10;yima[1]<=( num_hex/10)%10;yima[2]<=(num_hex/100)%10;yima[3]<=(num_hex/1000)%10;BCD<={yima[3],yima[2],yima[1],yima[0]}; endendmodule4.6显示器模块clk_fp,BCD,seg1,seg2,seg3,seg4);input clk_fp;input [15:0] BCD;output [6:0]seg1;output [6:0]seg2;output [6:0]seg3;output [6:0]seg4;reg [7:0] seg1;reg [7:0] seg2;reg [7:0] seg3;reg [7:0] seg4;reg [3:0]shumaguan_aa[3:0];always shumaguan_aa[0]<=BCD[3:0]; always shumaguan_aa[1]<=BCD[7:4]; always shumaguan_aa[2]<=BCD[11:8]; always shumaguan_aa[3]<=BCD[15:12];parameter seg_num0=7'hC0,seg_num1=7'hF9,seg_num2=7'hA4,seg_num3=7'hB0,seg_num4=7'h99,seg_num5=7'h92,seg_num6=7'h82,seg_num7=7'hF8,seg_num8=7'h80,seg_num9=7'h90;always@(posedge clk_fp)begincase(shumaguan_aa[0])4'd0:seg1<=seg_num0;4'd1:seg1<=seg_num1;4'd2:seg1<=seg_num2;4'd3:seg1<=seg_num3;4'd4:seg1<=seg_num4;4'd5:seg1<=seg_num5;4'd6:seg1<=seg_num6;4'd7:seg1<=seg_num7;4'd8:seg1<=seg_num8;4'd9:seg1<=seg_num9;default:seg1<=seg_num0 ;endcasecase(shumaguan_aa[1])4'd0:seg2<=(seg_num0&7'b0111_1111);4'd1:seg2<=(seg_num1&7'b0111_1111);4'd2:seg2<=(seg_num2&7'b0111_1111);4'd3:seg2<=(seg_num3&7'b0111_1111);4'd4:seg2<=(seg_num4&7'b0111_1111);4'd5:seg2<=(seg_num5&7'b0111_1111);4'd6:seg2<=(seg_num6&7'b0111_1111);4'd7:seg2<=(seg_num7&7'b0111_1111);4'd8:seg2<=(seg_num8&7'b0111_1111);4'd9:seg2<=(seg_num9&7'b0111_1111);default:seg2<=(seg_num0&7'b0111_1111 ); endcasecase(shumaguan_aa[2])4'd0:seg3<=seg_num0;4'd1:seg3<=seg_num1;4'd2:seg3<=seg_num2;4'd3:seg3<=seg_num3;4'd4:seg3<=seg_num4;4'd5:seg3<=seg_num5;4'd6:seg3<=seg_num6;4'd7:seg3<=seg_num7;4'd8:seg3<=seg_num8;4'd9:seg3<=seg_num9;default:seg3<=seg_num1 ;endcasecase(shumaguan_aa[3])4'd0:seg4<=seg_num0;4'd1:seg4<=seg_num1;4'd2:seg4<=seg_num2;4'd3:seg4<=seg_num3;4'd4:seg4<=seg_num4;4'd5:seg4<=seg_num5;4'd6:seg4<=seg_num6;4'd7:seg4<=seg_num7;4'd8:seg4<=seg_num8;4'd9:seg4<=seg_num9;default:seg4<=seg_num0 ;endcaseendendmodule5.经验总结在这次设计过程中,我们遇到了很多问题,例如,在预置好起步价时,当里程超过基本里程时,价钱开始增加,在复位时出现了一些问题,还有在里程比较器和时间比较器中,最初比较器只用了一个只能比较一位二进制数,然而当里程大于10km或时间大于10分钟时比较器出现了问题,还有就是将超过的时间和里程转化为价钱时,仿真时出现了错误,而在所有问题中最主要问题是整个电路的连接问题。

相关主题