一、课程设计内容与要求。
1)能够实现计费的功能。
费用的计算是按形式的里程收费的,设出租车的起步价为8.00元,当里程小于3km时,按起价计算费用;当里程大于3km时每公里按1.6元计费。
等待累计时间超过3min,按每分钟1元计费。所以总费用按下式计算:
总费用=起费用+(里程-3km)*里程单价+等候时间*等候单价。.
2)能够实现显示的功能。
a)显示汽车行驶里程:用四位数字显示,显示方式为“xx”,单位为k 。计程范围为0-99k,计程分辨率为1k。
b)显示等候时间:用两位数字显示分钟,现实方式为“xx”。计时范围为0-59,计时分辨率为1。
c)显示总费用:用四位数字显示,显示方式为“xxxx”,单价为元。计价范围为0-9999元。
二、系统方案设计。
根据设计要求,系统的输入信号有:系统时钟信号clk,出租车启动信号start,等待信号stop,公里信号fin。系统的输出信号有:
总费用数cha0-cha3,行驶距离(数)km0-km1和等待时间min0-min1等。
系统组成方框图如下所示,它由分频模块、计量模块、计费模块和控制模块四部分组成。其系统模块图如图1所示。
图1 系统功能原理图。
三、功能模块的原理及算法分析。
有图1系统功能原理图可知:该设计问题自顶向下可分为分频模块、计量模块、计费模块和控制模块四个部分,下面就每个部分的原理及算法进行分析。
3.1 分频模块。
分频模块对频率为240hz的输入脉冲进行分频,得到的频率为16hz,10hz和1hz的三种频率。该模块产生频率信号用于计费,每个1hz脉冲为0.1元计费控制,10hz信号为1元的计费控制,16hz信号为1.
6元计费控制。
3.2 计量控制模块。
计量控制模块是出租车自动计程器系统的主体部分,该模块主要完成等待几时功能、计价功能、计程功能,同时产生3分钟的等待计时使能控制信号en1,行程3公里外的使能控制信号en0。其中计价功能主要完成的任务是:行程3公里内,且等待累计时间3分钟内,起步价为8元;3公里外以每公里1.
6元计费,等待累计时间3分钟外以每分钟1元计费;计时功能主要完成的任务是:计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零;计程功能主要完成的任务是:计算乘客所行使的公里数。
计程器的量程为99公里,满量程自动归零。
3.3 控制模块。
控制模块主要是通过计量模块产生的两个不同的输入使能信号en0,en1,对每个分频模块输出的16hz,10hz的脉冲进行选择输出的过程;本模块实现了双脉冲的二选一;最终目的为了计费模块中对行驶过程中不同的时段进行计价。
3.4 计费模块。
当计费信号start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同的单价时段进行计费。即行程在3km内,而且等待累计时间小于3min则为起步价8元;3km外以每公里1.6元计费,等待累积时间超过3min则按每分钟1元计费。
c0,c1,c2,c3分别表示费用的显示。
四、主要模块的实现。
4.1 分频模块的实现。
由图2分频模块封装图可知:系统是对240hz时钟脉冲信号进行分频,分别得到16hz、10hz、1hz三种频率,本设计中通过三种不同频率脉冲信号实现计程车在行使、等待两种情况下的不同计费。
图2 分频模块封装图。
4.2 计量模块的实现。
由图3可知:本模块实现对于出租车在行使和等待过程中的计程和计时功能。当行使里程大于3km时,本模块中en0信号变为1;当等待时间大于3min时,本模块中en1信号变为1,clk1每来一个上升沿,计量模块实现一次计数,里程数或者等待时间加1。
图3 计量模块封装图。
4.3 控制功能的实现。
由图5可知:本模块主要是通过两个不同的输入使能信号,对两个输入脉冲进行选择输出,使能信号是计量模块的输出,两个输入脉冲是分频模块输出的16hz、10hz的脉冲。
图4 控制模块封装图。
4.4 计费功能的实现。
由图4可知:输入一个脉冲信号,同时当start为高电平时开始计价,c0、c1、c2、c3为**的显示信号。
图5 计时模块封装图。
4.4 总体功能原理图。
总体原理如图6所示。
图6 总体功能原理图。
五、程序调试。
4.1 分频模块波形**图。
图7 分频模块**波形图。
由图7可知:当输入240hz的clk脉冲信号时,clk每出现240个脉冲是q1、q10、q16分别出现个,相当于计费0.01元、1元、1.6元,帮助计费。
4.2 计量模块波形**图。
图8 计量模块波形**图
由图8可知:由于公里输入参数fin一直设为高,所以看k1、k0一开始就开始计数,即为行程公里数;当等待时间信号stop设为高电平是,m1、m0开始计数,即为等待时间。
4.3 计费模块波形**图。
图9 计费模块波形**图。
由图9可知:输入一个脉冲信号,同时当start为高电平是开始计价,c0、c1、c2、c3为**的显示信号,逢9后一位将进1。.
4.4 控制模块波形**图。
图10 控制模块波形**图。
由图10可知:本模块主要是通过两个不同的输入使能信号,对两个输入脉冲进行选择输出,使能信号是计量模块的输出,两个输入脉冲是分频模块输出的16hz、10hz的脉冲。
4.5 总模块的波形**图。
图11 总模块的波形**图。
六、硬件测试。
在quartusⅱ软件进行程序编译后,根据实验室提供的eda实验工具箱,选择目标芯片ep1c3t144c8,并设置对应的引脚值,实现引脚锁定,如图12所示。这里我选用的是模式5,根据模式5的电路图设置数码管8~5显示的是**cha3、cha2、cha1、cha0,数码管显示的是行程公里数km1、km0,数码管显示的是等待时间min1、min0,start、stop、fin信号分别对应于键1、键2、键3,系统时钟clock240对应于clcok0,最后进行编程**到试验箱中。
**到试验箱后,将模式调到5,clock的短路帽插到4hz处。当按下键1,即启动start信号,可以看到数码8~5显示0080,即为起步价8元。按下键3,可以发现数码管开始计数,即显示出租车行程公里数。
当公里数为3km时,数码管8~5开始计数,说明当公里数》3km时开始计费。按下键2,可以发现码管开始计数,即显示出租车等待的时间,当时间大于3时,数码管8~5又开始计数,说明当等待时间》3s时开始计费。综上所知,实验观察结果符合实验要求,硬件调试成功。
图12 设置引脚图。
七、实验中存在的问题及解决方案。
7.1 分频模块只得到了频率q10,而频率q1、q16未得到。
解决方案:仔细检查程序是否写错,发现在对q1和q16分频程序时,q1未加1,而令q1为0时,写到了q16为0,改正后编译并查看时序即得到正确结果。
7.2 计量模块得到时序中只有km1、km0显示,而没有min1、min0显示。
解决方案:由于在min1、min0程序中定义了一定变量w,导致时序错误,去掉w即可得到正确结果。
7.3 数码管数据显示太快。
解决方案:改变clock的频率,将其调低即可。
八、实验心得。
通过此次课程设计,让我重温了eda技术的基本知识、理论,同时全面地分析该课程设计实现的原理,独立地完成在quarterⅱ软件上对hdl语言程序的编程、调试,**到试验箱,得到最终结果。
我所做的计程器是通过4个模块来实现的,再通过顶层设计中的例话语句将它们整合起来。刚开始把每个模块的程序都编写好了,然后整合后,在顶层文件对应的工程上查看时序图,发现并没有得到想要的结果,后来改了很久还是没有成功,有时还出现乱码,几乎都有想放弃了。后来,让自己静下心来,从每个模块的时序进行着手分析,发现模块对应的程序存在很多的错误,通过一步步修改,终于得到将每个模块的时序都弄好了。
然后在顶层文件工程中进行时序**即得到了正确的结果。从这次编程中,我学会了遇到问题时,不要盲目地去修改,而是理清思绪,从每个简单部分入手检查,这样才能快速有效地解决问题。
由于在编程中我很重视时序图是否正确,所以当把得到正确时序图的工程文件**到试验箱时即得到了正确的结果。
这次课程设计顺利地完成不仅锻炼了我动手、编程能力,而且还让我对eda强大的功能产生兴趣,我们不能只局限于实验室给我们提供的课程设计机会,而是利用课余时间深入学习它,提高自己的专业技能。
九、附件。9.1 分频功能实现的源**如下:
library ieee;
use use
use entity fenpin is
port(clk:in std_logic;
q16:out std_logic;
q10:out std_logic;
q1:out std_logic);
end fenpin;
architecture qq of fenpin is
beginprocess(clk)
variable count16:integer range 0 to 14;
variable count10:integer range 0 to 23;
variable count1:integer range 0 to 239;
beginif clk'event and clk='1'
then if count10=23
then count10:=0;q10<='1';
else count10:=count10+1;q10<='0';
end if;
if count16=14
then count16:=0;q16<='1';
else count16:=count16+1;q16<='0';
end if;
if count1=239
then count1:=0;q1<='1';
else count1:=count1+1;q1<='0';
end if;
end if;
end process;
end qq;
9.2 计量功能实现的源**如下:
library ieee;
use use
use entity jiliang is
port(s:in std_logic;
fin,stop:in std_logic;
EDA课程设计
题目一 数字钟设计 学号1 15 一 实验目的。学习并掌握数字钟的原理 设计方法。二 实验内容。计数始终由模60秒计数器 模60分计数器 模24小时计数器 报时模块 分 时设定模块及输出显示模块构成。可以采用同步计数器或异步计数器设计方法。三 实验要求。计时范围为0小时0分0秒至23小时59分59秒...
eda课程设计
哈尔滨工业大学 威海 信电学院电子信息工程。一 软硬件介绍。1软件部分介绍。1.1 quartus ii 是altera公司的综合性pld fpga开发软件,支持原理图 vhdl veriloghdl以及ahdl altera hardware description language 等多种设计输...
eda课程设计
目录。1 引言 2 1.1 课程设计的目的与任务 2 1.2 课程设计的内容 2 1.3课程设计仪器设备 2 1.4 课程设计的题目 2 1.5 方案的选择 2 2设计方案 3 2.1 设计原理 3 2.2各功能模块的原理及其源程序 3 2.2.1控制模块 3 2.2.2分频模块 4 2.2.3计时...