课 程 设 计
课程名称 课题名称
专 业 班 级 学 号 姓 名 指导老师
嵌入式系统课程设计
基于CPLD的出租车计费器
电子信息工程
1201 19 许振跃 林愿 2015年9月16日
目 录
1、 课程设计任务要求 .................................................................................................. 1
1.1 EDA发展前景 ............................................................................................................ 1 1.2 任务要求 ................................................................................................................... 1 2、设计步骤 ................................................................................................................... 1
2.1 信号输入 ................................................................................................................... 1 2.2 数据转换 ............................................................................................................... 1 2.3 数据显示 ................................................................................................................... 1 3、出租车计费系统的实现 ............................................................................................ 2
3.1 顶层电路设计 ........................................................................................................... 2 3.2 子模块设计 ............................................................................................................... 2 4、系统仿真 ................................................................................................................... 5
4.1 开始信号的仿真结果 ............................................................................................... 5 4.2 加速信号仿真结果 ................................................................................................... 6 4.3 显示的仿真结果 ..................................................................... 错误!未定义书签。 4.4 decoder的仿真结果 .............................................................. 错误!未定义书签。 5、 下载调试及实验结果 .............................................................................................. 7 6、设计心得 ................................................................................................................... 7 参考文献 ......................................................................................................................... 8
1、 课程设计任务要求
1.1 EDA发展前景
EDA技术(即Electronic Design Automation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Ddscription Langurage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
1.2 任务要求
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数
字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。并最终完成电路的编程调试。具体要求如下:
(1) 实现计费功能,计费标准为:按行驶里程计费,起步价为5.00元,并在车
行3Km后按1.40元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
(2) 现场模拟功能:能模拟汽车起动、停止、暂停以及加速等状态。 (3) 按计动态扫描电路,将车费和路程显示出来,各有两位小数。
2、设计步骤
2.1 信号输入
该模块主要实现计费功能和现场模拟功能。计费标准为:按行驶里程计费,起步价为5.00元,并在车行3 km后按1.4元/km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。
2.2 数据转换
数据转换模块是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。
2.3 数据显示
显示模块是由七段LED数码管译码和动态扫描显示两部分组成。采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。这段程序所示
1
的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。数码管控制及译码显示模块将十进制的输入信号用七段数码管显示,由七段发光二极管组成数码显示器,利用字段的不同组合。可分别显示0~9十个数字。
3、出租车计费系统的实现
3.1 顶层电路设计
图1 系统总体框图
3.2 子模块设计
3.2.1 taxi的实现
模块taxi见下图。输入端口speedup,start,pause,stop分别为出租车计费器的加速、起动、暂停、停止按键。实现计费功能,计费标准为:按行驶里程计费,起步价为5.0元,并在车行3Km后按1.40元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
图2 taix模块
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
2
entity decoder is
port(clk20mhz: in std_logic; money_in:in integer range 0 to 8000; distance_in:in integer range 0 to 8000; scan:out std_logic_vector(7 downto 0); seq7:out std_logic_vector(6 downto 0); dp:out std_logic); end;
architecture one of decoder is signal clk1khz:std_logic;
signal data:std_logic_vector(3 downto 0);
signal m_one,m_ten,m_hun,m_tho:std_logic_vector(3 downto 0); signal d_one,d_ten,d_hun,d_tho:std_logic_vector(3 downto 0); variable num:integer range 0 to 9; variable dis:integer range 0 to 100; variable d:std_logic; begin
if stop = '1' then money_reg:= 0; distance_reg:= 0; dis:= 0; num:= 0;
3.2.2 decoder的实现
模块decoder见下图。该模块把车费和路程转化为数码管可以显示的信号。
图3 模块x
elsif start = '0' and speedup = \"10\" and pause = '0' and stop = '0' then if num = 9 then num:= 0; distance_reg:= distance_reg + 5; dis:= dis + 5; else num:= num + 1;
3
end if; elsif start = '0' and speedup = \"11\" and pause = '0' and stop = '0' then distance_reg:= distance_reg + 1; dis:= dis + 1; end if; if dis >= 100 then d:= '1'; dis:= 0; else d:= '0'; end if; if distance_reg >= 300 then if money_reg < 2000 and d = '1' then money_reg:= money_reg + 140; elsif money_reg >= 2000 and d = '1' then money_reg:= money_reg + 210; end if; end if; end if; money <= money_reg; distance <= distance_reg; end process; end;
3.2.3 display的实现
模块display见下图。经过该八选一模块把车费和路程显示出来。每来一个选通地址,模块就把选到的那一位十进制输入值向后输出,同时在路程的百位和费用的十位显示小数点。实现译码功能。译码管片的选通信号,对输入脉冲进行计数。
图4 模块display
4
process(clk1khz,m_one,m_ten,m_hun,m_tho,d_one,d_ten,d_hun,d_tho) variable cnt:std_logic_vector(2 downto 0); begin
if clk1khz'event and clk1khz = '1' then cnt:= cnt + 1; end if; case cnt is
when\"000\" => data <= m_one; dp <= '0'; scan <= \"00000001\"; when\"001\" => data <= m_ten; dp <= '0'; scan <= \"00000010\"; when\"010\" => data <= m_hun; dp <= '1'; scan <= \"00000100\"; when\"011\" => data <= m_tho; dp <= '0'; scan <= \"00001000\"; when\"100\" => data <= d_one; dp <= '0'; scan <= \"00010000\"; when\"101\" => data <= d_ten; dp <= '0'; scan <= \"00100000\"; when\"110\" => data <= d_hun; dp <= '1'; scan <= \"01000000\"; when\"111\" => data <= d_tho; dp <= '0'; scan <= \"10000000\"; end case; end process;
process(data) begin
case data is
when \"0000\" => seq7 <= \"1111110\"; when \"0001\" => seq7 <= \"0110000\"; when \"0010\" => seq7 <= \"1101101\"; when \"0011\" => seq7 <= \"1111001\"; when \"0100\" => seq7 <= \"0110011\"; when \"0101\" => seq7 <= \"1011011\"; when \"0110\" => seq7 <= \"1011111\"; when \"0111\" => seq7 <= \"1110000\"; when \"1000\" => seq7 <= \"1111111\"; when \"1001\" => seq7 <= \"1111011\"; when others => seq7 <= \"0000000\"; end case; end process; end;
4、系统仿真
4.1 开始信号的仿真结果
输入端口speedup,start,pause,stop分别为出租车计费器的加速、起动、暂停、停止按键。
输入:clk, start, stop, pause, speedup;
输出:money, distance;
5
图5 开始仿真结果
4.2 加速信号仿真结果
对控制模块taxi进行仿真,观察波形可知,当启动键(start)为一个脉冲时,表示汽车已启动,车费money显示起步价为5.00元,同时路程distance随着计费脉冲开始计数,当停止键(stop)为1时,表示汽车熄火,车费money和路程distance均为0;当暂停键(pause)为1时,车费和路程停止计数;当档位键分别取0、1、2时路程的计数逐步加快,表示车速逐步加快。
输入:clk, start, stop, pause, speedup;
输出:money, distance;
图6 系统仿真结果
6
5、下载调试及实验结果
程序下载完后,按下启动键,车费显示起步价为5元。
图9 加速仿真结果
当路程超过3公里后每公里多加1.4元,显示为6.4元。
图10 加速仿真结果
6、设计心得
我们这次课程设计的题目是出租车计费器,拿到题目我就有点小激动,因为终于可以利用自己的所学做点与实际生活相关的东西了。
7
首先,我复习的一下VHDL程序设计的基本语法,然后开始熟悉Quartus Ⅱ的相关操作。包括模块化的编译器。编译器包括的功能模块有分析/综合器,适配器、装配器、时序分析器、设计辅助模块、EDA网表文件生成器、编辑数据接口等。可以通过选择Start Compilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。还可以通过选择Compiler Tool,在Compiler Tool窗口中运行该模块来启动编译器模块。
然后,我开始去图书馆找相关的图书,因为当我看了课程设计任务书之后,对于整个程序还是没有把握。所以我希望能够找到相关的程序进行验证,然后修改以符合自己的课程设计的要求。
功夫不负有心人,我在图书馆借的几本书中就有和我们课题类似的程序模块。所以,我就将书中的程序在Quartus II中运行了一遍。可是,过程并没有我们想象的那么顺利。我们发现加速功能无法实现,一旦开启加速,数码管就会出现乱码。经过对源代码的一番修改,我们的乱码现象有了一些好转。但是,也并没有完全达到要求。经过在实验箱中的调试,我们终于找到了解决方案,即改变输入的时钟频率。寻找到最合适的频率,就可以让系统达到显示要求。
通过这次课程设计,我分析问题,解决问题的能力有了一定的提高。同时,对之前所学的知识也进行了巩固。更重要的是,我发现之前学的很多基础知识是有用的。一旦开始进行工程实践,这些知识将会发挥巨大的作用。所以,我决定在今后的学习过程中重视基础知识的学习,在增强理论基础的同时,再动手进行工程实践。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次设计的每个细节和每个数据,都离不开老师您的细心指导。谢谢您!!
参考文献
1. 陈大钦主编,电子技术基础实验,高等教育出版社。 2. 彭介华主编,电子技术课程设计指导,高等教育出版社。 3. 张 原编著,可编程逻辑器件设计及应用,机械工业出版社。 4.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。 5. QUARTUSII入门
6.刘洪喜,陆颖编著. VHDL电路设计实用教程 清华大学出版社 。
8
电气信息学院课程设计评分标准
环节 1、设计方案合理性与创造性 项目 评价 优 良 中 及格 不及格 2、编程完成情况 实践环节3、电路模块仿真调试结果* (70%) 4、硬件测试过程及结果* 5、解决问题能力及答辩情况 6、纪律和出勤情况 1、设计报告内容完整、规范 设计报告3、仿真调试结果正确、波形清晰 (30%) 4、硬件测试过程规范、结果正确 课程设计成绩评定为: 2、设计步骤规范、正确 □优 □良 □中 □及格 □不及格 综合评价 指导老师签名:________________ 日 期:________________
9
因篇幅问题不能全部显示,请点此查看更多更全内容