EDA课程设计报告出租车计费器.docx

上传人:b****7 文档编号:9710704 上传时间:2023-02-06 格式:DOCX 页数:17 大小:141.77KB
下载 相关 举报
EDA课程设计报告出租车计费器.docx_第1页
第1页 / 共17页
EDA课程设计报告出租车计费器.docx_第2页
第2页 / 共17页
EDA课程设计报告出租车计费器.docx_第3页
第3页 / 共17页
EDA课程设计报告出租车计费器.docx_第4页
第4页 / 共17页
EDA课程设计报告出租车计费器.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

EDA课程设计报告出租车计费器.docx

《EDA课程设计报告出租车计费器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告出租车计费器.docx(17页珍藏版)》请在冰豆网上搜索。

EDA课程设计报告出租车计费器.docx

EDA课程设计报告出租车计费器

课程设计报告

课程名称数字系统与逻辑设计

课题名称出租车计费器的设计

专业通信工程

班级通信0902

学号200903020228

姓名肖俊

指导教师乔汇东胡倩

2011年7月9日

湖南工程学院

课程设计任务书

 

课程名称数字系统与逻辑设计

课题出租车计费器的设计

 

专业班级通信0902

学生姓名肖俊

学号200903020228

指导老师乔汇东胡倩

审批乔汇东

 

任务书下达日期2011年7月2日

任务完成日期2011年7月9日

《数字系统与逻辑设计》课程设计任务书

一、设计目的

全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。

二、设计要求

1、设计正确,方案合理。

2、程序精炼,结构清晰。

3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。

4、上机演示。

5、有详细的文档。

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

三、进度安排

第二十周星期一:

课题讲解,查阅资料

星期二:

总体设计,详细设计

星期三:

编程,上机调试、修改程序

星期四:

上机调试、完善程序

星期五:

答辩

星期六-星期天:

撰写课程设计报告

附:

课程设计报告装订顺序:

封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:

一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

正文的内容:

一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。

目录

 

一.出租车计费系统的总体设计1

1.1出租车计费设计1

1.2基本设计思想1

二.出租车计费系统的功能实现1

2.1系统的总体框图1

2.2程序流程图2

2.3系统各功能模块的实现3

三.系统调试与仿真10

四.总结与体会12

五.评分表14

一.出租车计费系统的总体设计

1.1出租车计费设计

该出租车计费器按下开关S1后开始计费和计里程数,起步价是3元,准行1公里,以后1元/公里。

1.2基本设计思想

时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。

直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行走1米,所以每旋转1000圈,认为车子前进1公里。

系统设计是需要检测电机的转动情况,每转1000圈,分频模块输出一个上升沿信号。

车费和里程数在一个8位7段数码管上显示,前4位显示里程,后4位显示费用。

二.出租车计费系统的功能实现

2.1系统的总体框图

该出租车计费系统由四个模块组成,分别是:

分频模块:

将每1000个电机脉冲转化成1个输出脉冲

计费模块:

计算应付车费

计程模块:

计录已行里程

显示模块:

将应付车费和已行里程显示在数码管上

各模块之间的关系为:

2.2程序流程图

1.分频模块glclk.vhd:

2.计费模块cnt_fy.vhd:

 

3.计程模块cnt_gl:

2.3系统各功能模块的实现

1.分频模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityglclkis

port(pulse:

instd_logic;

reset:

instd_logic;

glclk:

outstd_logic);

end;

architecturebehavofglclkis

signaltemp:

std_logic;

signalcount:

integerrange0to500;

begin

process(pulse,reset)

begin

ifreset='1'then

count<=0;

temp<='0';

elsifpulse'eventandpulse='1'then

ifcount>499then

count<=0;

temp<=nottemp;

else

count<=count+1;

endif;

endif;

endprocess;

glclk<=temp;

end;

2.计费模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt_fyis

port(glclk:

instd_logic;

reset:

instd_logic;

pul:

instd_logic;

money0:

outstd_logic_vector(3downto0);

money1:

outstd_logic_vector(3downto0);

money2:

outstd_logic_vector(3downto0);

money3:

outstd_logic_vector(3downto0));

end;

architecturebehavofcnt_fyis

signalmoney_cnt0:

std_logic_vector(3downto0);

signalmoney_cnt1:

std_logic_vector(3downto0);

signalmoney_cnt2:

std_logic_vector(3downto0);

signalmoney_cnt3:

std_logic_vector(3downto0);

--signalflag:

integerrange0to4;

begin

process(glclk)

--variableflag:

integerrange0to4;

begin

ifreset='1'then

money_cnt0<="0011";

money_cnt1<="0000";

money_cnt2<="0000";

money_cnt3<="0000";

elsifglclk'eventandglclk='0'then

ifmoney_cnt3=9andmoney_cnt2=9andmoney_cnt1=9andmoney_cnt0=9then

money_cnt0<="0000";

money_cnt1<="0000";

money_cnt2<="0000";

money_cnt3<="0000";

elsifmoney_cnt3/=9andmoney_cnt2=9andmoney_cnt1=9andmoney_cnt0=9then

money_cnt0<="0000";

money_cnt1<="0000";

money_cnt2<="0000";

money_cnt3<=money_cnt3+"0001";

elsifmoney_cnt2/=9andmoney_cnt1=9andmoney_cnt0=9then

money_cnt0<="0000";

money_cnt1<="0000";

money_cnt2<=money_cnt2+"0001";

money_cnt3<=money_cnt3;

elsifmoney_cnt1/=9andmoney_cnt0=9then

money_cnt0<="0000";

money_cnt1<=money_cnt1+"0001";

money_cnt2<=money_cnt2;

money_cnt3<=money_cnt3;

elsifmoney_cnt0/=9then

money_cnt0<=money_cnt0+"0001";

money_cnt1<=money_cnt1;

money_cnt2<=money_cnt2;

money_cnt3<=money_cnt3;

endif;

endif;

endprocess;

money0<=money_cnt0;--+"0011";

money2<=money_cnt2;

money1<=money_cnt1;

money3<=money_cnt3;

end;

3.计程模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt_glis

port(glclk:

instd_logic;

reset:

instd_logic;

km_cnt0:

outstd_logic_vector(3downto0);

km_cnt1:

outstd_logic_vector(3downto0);

km_cnt2:

outstd_logic_vector(3downto0);

km_cnt3:

outstd_logic_vector(3downto0));

end;

architecturebehavofcnt_glis

signalcnt0:

std_logic_vector(3downto0);

signalcnt1:

std_logic_vector(3downto0);

signalcnt2:

std_logic_vector(3downto0);

signalcnt3:

std_logic_vector(3downto0);

begin

process(reset,glclk)

begin

ifreset='1'then

cnt0<="0000";

cnt1<="0000";

cnt2<="0000";

cnt3<="0000";

elsifglclk'eventandglclk='0'then

ifcnt3=9andcnt2=9andcnt1=9andcnt0=9then

cnt0<="0000";

cnt1<="0000";

cnt2<="0000";

cnt3<="0000";

elsifcnt3/=9andcnt2=9andcnt1=9andcnt0=9then

cnt0<="0000";

cnt1<="0000";

cnt2<="0000";

cnt3<=cnt3+"0001";

elsifcnt2/=9andcnt1=9andcnt0=9then

cnt0<="0000";

cnt1<="0000";

cnt2<=cnt2+"0001";

cnt3<=cnt3;

elsifcnt1/=9andcnt0=9then

cnt0<="0000";

cnt1<=cnt1+"0001";

cnt2<=cnt2;

cnt3<=cnt3;

elsifcnt0/=9then

cnt0<=cnt0+"0001";

cnt1<=cnt1;

cnt2<=cnt2;

cnt3<=cnt3;

endif;

endif;

endprocess;

km_cnt0<=cnt0;

km_cnt1<=cnt1;

km_cnt2<=cnt2;

km_cnt3<=cnt3;

end;

4.显示模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydisplayis

port(CLK:

INSTD_LOGIC;

b0,b1,b2,b3,a0,a1,a2,a3:

INSTD_LOGIC_VECTOR(3DOWNTO0);

dx:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

wx:

outstd_logic_vector(7downto0));

end;

architecturebehavofdisplayis

SIGNALCNT8:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

P1:

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

CNT8<=CNT8+1;

ENDIF;

ENDPROCESS;

P2:

PROCESS(CNT8)

BEGIN

CASECNT8IS

WHEN"000"=>wx<="10000000";A<=b3;

WHEN"001"=>wx<="01000000";A<=b2;

WHEN"010"=>wx<="00100000";A<=b1;

WHEN"011"=>wx<="00010000";A<=b0;

WHEN"100"=>wx<="00001000";A<=a3;

WHEN"101"=>wx<="00000100";A<=a2;

WHEN"110"=>wx<="00000010";A<=a1;

WHEN"111"=>wx<="00000001";A<=a0;

ENDCASE;

ENDPROCESS;

P3:

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>dx<="0111111";

WHEN"0001"=>dx<="0000110";

WHEN"0010"=>dx<="1011011";

WHEN"0011"=>dx<="1001111";

WHEN"0100"=>dx<="1100110";

WHEN"0101"=>dx<="1101101";

WHEN"0110"=>dx<="1111101";

WHEN"0111"=>dx<="0000111";

WHEN"1000"=>dx<="1111111";

WHEN"1001"=>dx<="1101111";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

end;

三.系统调试与仿真

1.顶层元件仿真图:

从图中可看出,给一个复位信号后,费用的最低位为“0011”,即3,里程数的最低位为“0000”,即0,每当temp信号出现一个下降沿,费用和里程数的最低位各加1,符合课题要求。

图5

 

2.分频模块仿真图:

从仿真图可以看出,电机信号pulse每产生1000个周期,输出信号发生一个周期的变化

图6

 

3.计程模块仿真图:

从仿真图可看出,glclk每出现一个上升沿,里程数加1

图7

 

4.计费模块仿真图:

从仿真图可看出,费用初始值为3,glclk每出现一个上升沿,费用数加1

图8

 

5.显示模块仿真图:

从仿真图可以看出,每当系统时钟信号CLK出现一个上升沿,位选数据wx右移一次,段选信号dx在wx为“00000001”时输出8的数码管显示编码

图9

四.总结与体会

通过这次紧张而又充实的EDA课程设计,我感受到了VHDL语言和普通软件语言之间的区别,也能够更加熟练地运用VHDL语言进行逻辑电路的设计了,受益匪浅。

在刚拿到课题的时候,我对课题的第一个想法就是“容易”,因为出租车计费器从逻辑结构的角度来看十分简单,于是我信心满满地动手写起了程序。

可当我在写第一个分频模块的过程中就发现自己完全错了,程序写完后进行仿真,就是达不到预期的结果,要么输出信号有毛刺,要么就是有延迟,回过头来检查程序,却看不出有什么错误。

经过反复的修改和思考,才终于逐渐了解到,在VHDL语言中,数据的行为方式分为SIGNAL和VARIABLE两种,他们的行为方式和软件语言有很大不同,由于对这些区别理解不深,所以在编程的过程中,很容易陷入编软件语言的思维定势,从而产生这些错误。

在没有进行课程设计之前,我们的上机实践从来没有编写过规模如此的数字电路系统,最多就写写什么半加器,全加器,移位寄存器之类的小型实体。

而这次课程设计要想实现课题要求的功能,必须将若干小型实体组合成一个相对大型的实体。

不仅如此,在写完程序后,还要把程序下载到芯片内,连接相应的电子器件,观察真正的效果。

所以,通过这次紧张的课程设计,我体会了从开始利用VHDL语言编程到把设想放到真正在电子器件上实现的全部过程,提高了自己从事工程项目设计的能力。

另外,在课程设计的过程,我碰到了很多棘手的难题,虽然也进行了苦思冥想,却还是得不到解决方法,有时也有想放弃的念头,不过终于还是坚持了下来,完成了任务,我意识到今后不管是在工作还是学习中,做工程项目都需要有忍耐力和坚持。

五.评分表

计算机与通信学院课程设计评分表

课题名称:

出租车计费器的设计

项目

评价

设计方案的合理性与创造性

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩

教师签名:

日期:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1