EDA课程设计报告-出租车计费器_第1页
EDA课程设计报告-出租车计费器_第2页
EDA课程设计报告-出租车计费器_第3页
EDA课程设计报告-出租车计费器_第4页
EDA课程设计报告-出租车计费器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE14课程设计报告课程名称数字系统与逻辑设计课题名称出租车计费器的设计专业通信工程班级通信0902学号200903020228姓名肖俊指导教师乔汇东胡倩2011年湖南工程学院课程设计任务书课程名称数字系统与逻辑设计课题出租车计费器的设计专业班级通信0902学生姓名肖俊学号200903020228指导老师乔汇东胡倩审批乔汇东任务书下达日期2011年7月2日任务完成日期2011年7月9日《数字系统与逻辑设计》课程设计任务书一、设计目的全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。二、设计要求1、设计正确,方案合理。2、程序精炼,结构清晰。3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。4、上机演示。5、有详细的文档。文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。三、进度安排第二十周星期一:课题讲解,查阅资料星期二:总体设计,详细设计星期三:编程,上机调试、修改程序星期四:上机调试、完善程序星期五:答辩星期六-星期天:撰写课程设计报告附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。目录一.出租车计费系统的总体设计 11.1出租车计费设计 11.2基本设计思想 1二.出租车计费系统的功能实现 12.1系统的总体框图 12.2程序流程图 22.3系统各功能模块的实现 3三.系统调试与仿真 10四.总结与体会 12五.评分表 14

一.出租车计费系统的总体设计1.1出租车计费设计该出租车计费器按下开关S1后开始计费和计里程数,起步价是3元,准行1公里,以后1元/公里。1.2基本设计思想时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行走1米,所以每旋转1000圈,认为车子前进1公里。系统设计是需要检测电机的转动情况,每转1000圈,分频模块输出一个上升沿信号。二.出租车计费系统的功能实现2.1系统的总体框图该出租车计费系统由四个模块组成,分别是:分频模块:将每1000个电机脉冲转化成1个输出脉冲计费模块:计算应付车费计程模块:计录已行里程显示模块:将应付车费和已行里程显示在数码管上顶层元顶层元件分频模块计费模块计程模块显示模块图1.系统总体框图2.2程序流程图reset=’1’reset=’1’count<=0;temp<='0';pulse'eventandpulse='1'count<499count<=count+1;count<=0;temp<=nottemp;glclk<=temp;YYYNN图2reset或pulse信号发生变化2.计费模块cnt_fy.vhd:money_cnt0<="0011";money_cnt0<="0011";money_cnt1<="0000";money_cnt2<="0000";money_cnt3<="0000";reset=’1’glclk'eventandglclk='1'money_cn3~money_cn1代表的4位十进制数加1glclk信号发生变化图33.计程模块cnt_gl:cnt0<="00cnt0<="0000";cnt1<="0000";cnt2<="0000";cnt3<="0000";reset=’1’glclk'eventandglclk='1'cnt3~cnt0代表的4位十进制数加1glclk信号发生变化图42.3系统各功能模块的实现1.分频模块:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityglclkisport(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; beginprocess(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个周期,输出信号发生一个周期的变化图63.计程模块仿真图:从仿真图可看出,glclk每出现一个上升沿,里程数加1图74.计费模块仿真图:从仿真图可看出,费用初始值为3,glclk每出现一个上升沿,费用数加1图85.显示模块仿真图:从仿真图可以看出,每当系统时钟信号CLK出现一个上升沿,位选数据wx右移一次,段选信号dx在wx为“00000001”时输出8的数码管显示编码图9四.总结与体会通过这次紧张而又充实的EDA课程设计,我感受到了VHDL语言和普通软件语言之间的区别,也能够更加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论