出租车计价器设计

出租车计价器设计
出租车计价器设计

出租车计价器设计

综合实验

——出租车计价器设计

前言

随着微电子技术的发展,现代电子技术的核心已日趋转向基于计算机的电子设计自动化技术,即EDA(Electronic Design Automation)技术。EDA 技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。EDA技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA 软件来完成对系统硬件功能的实现,这是电子设计技术的一个巨大进步。

本学期,学校开设了EDA和VHDL课程的学习,而学习一门编程语言,最好的方法莫过于在一个完整的系统开发过程中进行。因此,EDA综合实验就是一个最好的学习实践机会。

随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普遍的交通工具。出租车计价器是出租

车营运收费的专用智能化仪表是出租车市场规范化、标准化以及减少司机与乘客之间发生纠纷的重要设备。一种功能完备、简单易用、计量准确的出租车计价器是加强出租车行业管理、提高服务质量的必备品。本实验就是采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路,得到一种出租车计价系统的软件结构,通过在Quartus II软件下进行模拟仿真,并进行相应的硬件下载调试,证明所设计的电路系统完成了出租车计价器的功能,各技术指标符合预定标准,具有一定实用性。

一、实验任务及要求

1.能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按1.6元/公里,车暂停时,停车一分钟之后开始加价,每分钟增加

2.5元。

2. 实现预置功能:能预置起步费、每公里收费、车行加费里程。

3. 实现模拟功能:能模拟汽车启动、停止、暂停等状态。

4. 设计动态扫描电路:将车费及暂停时间显示出来。

5. 用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。

6. 综合仿真验证,并通过有关波形确认电路设计是否正确。

7. 完成电路全部设计后,通过GW48系统实验箱下载验证设计的正确性。

二、实验原理

图1出租车计价器流程图

图2系统结构图

接口部分定义如下:

输入:clk_240,系统时钟,频率为240Hz;

Start,启动信号,当start=1时,汽车启动,开始计价; 当start=0时,清零;

Stop,暂时计时信号,当stop-1时,中途暂停,开始计时;当stop=0时,再次出发;

Fin,汽车车速脉冲信号,是一个与随着车速变化而变化的脉冲信号。

输出:cha2,cha1,cha0,分别为价钱的十位,个位和角位;

Km1,km0,分别为行驶公里数的十位,个位;

Min0,暂时分钟数输出。

接口部分源程序如下:

port ( clk_240 :in std_logic; --频率为240Hz的时钟

start :in std_logic; --计价使能信号

stop:in std_logic; --等待信号

fin:in std_logic; --公里脉冲信号

cha2,cha1,cha0:out std_logic_vector(3 downto 0); --费用数据

km1,km0:out std_logic_vector(3 downto 0); --公里数据

min0: out std_logic_vector(3 downto 0)); --等待时间

计价部分原理如下:

起步价10元,3公里内10元,超出3公里部分,每公里1.6元,车暂停时,2分钟内不加价,超出2分钟部分,每分钟2.5元;

计费部分源程序如下:

feipin:process(clk_240,start)

begin

if clk_240'event and clk_240='1' then

if start='0' then q_15<=0;q_16<=0;f_15<='0';f_16<='0';f_1<='0';f<=' 0';

else

if q_15=15 then q_15<=0;f_15<='1'; --此IF语句得到频率为15Hz的信号

else q_15<=q_15+1;f_15<='0';

end if;

if q_16=14 then q_16<=0;f_16<='1'; --此IF语句得到频率为16Hz的信号

else q_16<=q_16+1;f_16<='0';

end if;

if q_1=239 then q_1<=0;f_1<='1'; --此IF语句得到频率为1Hz的信号

else q_1<=q_1+1;f_1<='0';

end if;

if en1='1' then f<=f_15; --此IF语句得到计费脉冲f

elsif en0='1' then f<=f_16;

else f<='0';

end if;

end if;

end if;

end process;

process(f_1)

begin

if f_1'event and f_1='1' then

if start='0' then

w<=0;en1<='0';en0<='0';m1<=" 000";m0<="0000";k1<="0000";k0<="0000";

elsif stop='1' then

if w=59 then w<=0; --此IF语句完成等待计时

if m0="1001" then m0<="0000"; --此IF语句完成分计数

if m1<="101" then m1<="000";

else m1<=m1+1;

end if;

else m0<=m0+1;

end if;

if m1&m0>"0000001"then en1<='1'; --此IF语句得到en1使能信号

else en1<='0';

end if;

else w<=w+1;en1<='0';

end if;

elsif fin='1' then

if k0="1001" then k0<="0000";

--此IF语句完成公里脉冲计数

if k1="1001" then k1<="0000";

else k1<=k1+1;

end if;

else k0<=k0+1;

end if;

if k1&k0>"00000010" then en0<='1'; --此IF语句得到en0使能信号

else en0<='0';

end if;

else en1<='0';en0<='0';

end if;

cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0;

--费用数据输出

km1<=k1;km0<=k0;min1<='0'&m1;min0<=m0;

--公里数据、分钟数据输出

end if;

end process;

process(f,start)

begin

if start='0' then c3<="0000";c2<="0001";c1<="0000";c0<="0000";

elsif f'event and f='1' then

if c0="1001" then c0<="0000"; --此IF语句完成对费用的计数

if c1="1001" then c1<="0000";

if c2="1001" then c2<="0000";

if c3<="1001" then c3<="0000";

else c3<=c3+1;

end if;

else c2<=c2+1;

end if;

else c1<=c1+1;

end if;

else c0<=c0+1;

end if;

end if;

end process;

end behav;

图3仿真波形图1

图4仿真波形图2

三、系统测试

系统测试过程如下:首先用QuartusⅡ仿真工具对系统进行时序仿真(波形如图3、图4)。功能仿真用于综合前检查设计的逻辑功能是否符合设计要求,仿真过程中可以通过观察检测设计的输入信号、输出信号以及内部信号来分析设计的逻辑功能是否实现。如果仿真全部通过无误的话,就可以进行引脚锁定,然后下载程序到GW48 系统进行硬件仿真。FPGA 的

配置芯片为ACEX1K EP1K30TC114-3,利用在实验箱上连接好的八片LED 数码管中的六片,直接观察结果。测试结果表明,系统设计达到了预期的技术指标要求。

四、实验总结

出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计LED数码管显示车费数目。车暂时1分钟内车费保持不变。若停止则车费清零,等待下一次计费的开始出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。

此外,由于是初学EDA及VHDL,难免一些错误及不足之处,本系统也存在一定的缺陷,如车费只能显示到十位,百位无法显示,暂停也只能显示10分钟以内。因此,改进方向可从扩大输出范围入手。

最后,衷心感谢文毅老师全程指导及提出的宝贵建议,可以说,没有文老师,本实验就不能取得成功。

五、心得体会:

这次课程设计中,我们主要是运用VHDL语言设计了一个出租车计费器,并且用层次化的设计方法

来实现这个电路。在程序编写结束后,我们还对该程序进行了调试, 能按预期的效果进行模拟汽车启动、停止、暂停等功能,基本完成课程设计的要求。

通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并通过使用对它有了更深的体会。对于编程过程中可能遇到的问题有了一定的了解,也明白了其中的一些注意事项,对于下次进行编程设计有很大的帮助和提高。

总之,这次实验不仅仅加强了我们的动手编程能力,也大大加强了团队合作以及设计能力,使我们在理论学习和编程练习方面及实际操作方面都获得了较大的收获。

相关主题
相关文档
最新文档