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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件学院

课程设计报告

课程

题目出租车计价器

班级集成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_counter

price_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);

endmodule

4.2分频模块

module fp(

clk,clk_fp,rst_n,stop

);//50mhz

input 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) begin

if(!rst_n)

begin

clk_fp<=1'd0;

counter<=26'd0;

end

else if(!stop)

begin

counter<=counter;

end

else

begin

if(counter==26'd49_999_999)

begin

clk_fp<=1'b1;

counter<=1'b0;

end

else

begin

clk_fp<=1'b0;

counter<=counter+1'b1;

end

end

end

endmodule

4.3里程计算模块

clk_fp,rst_n,stop,distance

);

input clk_fp;//1S

input rst_n;

input stop;

output [15:0]distance;

reg [15:0]distance;

always@(posedge clk_fp or negedge rst_n) begin

if(!rst_n)

distance<=8'd0;

else if(!stop)

distance<=distance;

else

distance<=distance+5'd10;

end

endmodule

相关文档
最新文档