欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    vdhl语言出租车计费器课程设计报告(共21页).doc

    • 资源ID:11389003       资源大小:302.50KB        全文页数:21页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    vdhl语言出租车计费器课程设计报告(共21页).doc

    精选优质文档-倾情为你奉上电子技术课程设计出租车计费器的设计 学院:电子信息工程学院班级:姓名:学号:指导教师:日期:2009年12月08日出租车计费器设计一、 设计任务与要求设计并制作一台出租车计费系统,要求如下:1实现计费功能,计费标准为:按行程里程收费,起步价为700元,在车行3公里后再按22元/公里计费,当计费器达到或超过20元时,每公里加收50的车费。2实现模拟功能:能模拟汽车启动、停止、暂停、加速的状态3设计动态扫描电路,将车费和里程显示出来,各有两位小数。二、 总体框图(1) 系统总体结构输入信号模块片选信号产生模块数据转换模块动态描述/译码/数码管显示模块数码管控制电路出租车计费器的组成如上图所示,各部分主要功能包括输入信号模块对车轮传感器传送的脉冲信号进行计数,并以高低脉冲模拟出租汽车启动,停止,暂停,加速按钮,具有输入信号作用;数据转换器模块将计费模块输出的车费和路程转换成4位的十进制数据;译码/动态扫描模块将路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将公里数和计费金额均用4位LED数码管显示 。(2)其流程图如下图所示:开始输入行车里程数xx>0 and x<=3Y=7x>3 and x<9Y=7+2.2x输出车费yY=3.3x+7结束(3)各模块设计功能及设计思路 信号输入模块该模块主要实现计费功能和现场模拟功能。计费标准为:按行驶里程计费,起步价为7.00元,并在车行3 km后按2.20元km计费,当计费器达到或超过20元时,每公里加收50的车费,车停止不计费。并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。 数据转换模块数据转换模块是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。 显示模块显示模块是由七段LED数码管译码和动态扫描显示两部分组成。采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。这段程序所示的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。数码管控制及译码显示模块将十进制的输入信号用七段数码管显示,由七段发光二极管组成数码显示器,利用字段的不同组合。可分别显示09十个数字。 片选信号产生模块片选信号产生模块是对数码管进行片选并让其能够按照要求显示数据的模块三、 选择器件设计开发软件:Quartus II6.0EDA实验箱 :EL教学实验箱四、 功能模块(1) jifei模块 此模块为计费模块(即总体结构中的信号输入模块),实现计费功能,计费标准为:按行驶里程计费,起步价为7.00元,并在车行3公里后按2.20元/km计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.30元/km计费。CLK、START、STOP、PAUSE、JS为输入信号,分别代表汽车的起动、停止、暂停和加速,CLK为扫描时钟,硬件实现时加入时钟信号,另有两个输出,即CHEFEI和LUC,分别代表车费和路程,当车处于行驶状态时,此模块会自动记录下路程与车费状况并作为转换模块的输入。jifei模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jfmk is port(clk,start,stop,pause,js:in std_logic; chefei,luc:out integer range 0 to 8000);end jfmk;architecture one of jfmk isbegin process(clk,start,stop,pause,js) variable a,b:std_logic; variable aa:integer range 0 to 100; variable chf,lc:integer range 0 to 8000; variable num:integer range 0 to 9; begin if(clk'event and clk='1')then if(stop='0') then chf:=0; num:=0; b:='1' aa:=0; lc:=0; elsif(start='0') then b:='0' chf:=700; lc:=0; elsif(start='1' and js='1' and pause='1') then if(b='0')then num:=num+1; end if; if(num=9)then lc:=lc+5; num:=0; aa:=aa+5; end if; elsif(start='1' and js='0' and pause='1')then lc:=lc+1; aa:=aa+1; end if; if(aa>=100)then a:='1' aa:=0; else a:='0' end if; if(lc<300)then null; elsif(chf<2000 and a='1') then chf:=chf+220; elsif(chf>=2000 and a='1')then chf:=chf+330; end if; end if; chefei<=chf; luc<=lc; end process; end one;模块分析:首先打开ieee库,用use语句声明使用std_logic_1164和std_logic_unsigned程序包。clk、start、stop、pause、js为敏感信号,定义a,b为中间变量,变量aa、num、chf为位矢量。当时钟上升沿到来时,如果STOP='0'则chf:=0,num:= 0,b:=1,aa:=0,lc:=0, 如果stop='1'且start='0'则chf:=700,lc:=0,stop='1;如果stop='1'and start='1'and js='1'and pause='1'且 b='0'则num:=num+1;如果stop='1'and start='1'and js='1'and pause='1'且num=9则lc:=lc+1;num:=0,aa:=aa+1。如果stop='1'and start='1'and js='0'and pause='1'则lc:=lc+1;aa:=aa+1;以上各状态分别代表汽车的停止、启动、加速、暂停。如果aa>=100则a:='1',aa:=0,否则a:='0',如果chf<2000且a='1'则chf:=chf+220;如果chf>2000 and a='1'则chf:=chf+330;以上各状态表示汽车在三公里以外车费在二十元以内的状态、车费在二十元以外的状态。结束进程,结束结构体。jifei模块的时序仿真图:时序仿真图分析: 图中的stop为汽车停止输入端,上升沿有效;start为汽车启动输入端,上升沿有效;pause为汽车暂停输入端,上升沿有效;js为汽车加速输入端,上升沿有效。CLK为时钟源信号;chefei为汽车车费输出端,luc为汽车路程输出端。由图可知:当stop,Start,pause,js全为高电平时路程按5的速度增加,车费为700.当路程增加到300时,车费变为920,以后路程每增加100,车费增加220。模块生成图 : (2)x模块此模块为数据转换模块,功能是将计费模块产生的车费与路程的模拟量转换成数字量并输出,它是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。其中DACLK为时钟信号,ASCORE、BSCORE连接计费模块的CHEFEI和LUC,输出为2个4位的十进制数,可以分别表示路程和车费情况。当车运行于不同状况时,此模块会将不同的车费与路程状况转换为数字量并输出。x模块的源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity x is port(daclk:in std_logic; ascore,bscore:in integer range 0 to 8000; age,ashi,abai,aqian,bge,bshi,bbai,bqian:out std_logic_vector(3 downto 0);end x;architecture rt1 of x isbegin process(daclk,ascore) variable comb1:integer range 0 to 8000; variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto 0); begin if (daclk'event and daclk='1')then if(comb1<ascore)then if(comb1a=9 and comb1b=9 and comb1c=9)then comb1a:="0000" comb1b:="0000" comb1c:="0000" comb1d:=comb1d+1; comb1:=comb1+1; elsif(comb1a=9 and comb1b=9)then comb1a:="0000" comb1b:="0000" comb1:=comb1+1; comb1c:=comb1c+1; elsif(comb1a=9)then comb1a:="0000" comb1b:=comb1b+1; comb1:=comb1+1; else comb1a:=comb1a+1; comb1:=comb1+1; end if; else ashi<=comb1b; age<=comb1a; abai<=comb1c; aqian<=comb1d; comb1:=0; comb1a:="0000" comb1b:="0000" comb1c:="0000" comb1d:="0000" end if; end if; end process; process(daclk,bscore) variable comb2:integer range 0 to 8000; variable comb2a,comb2b,comb2c,comb2d:std_logic_vector(3 downto 0); begin if(daclk'event and daclk='1')then if(comb2<bscore)then if(comb2a=9 and comb2b=9 and comb2c=9)then comb2a:="0000" comb2b:="0000" comb2c:="0000" comb2d:=comb2d+1; comb2:=comb2+1; elsif(comb2a=9 and comb2b=9)then comb2a:="0000" comb2b:="0000" comb2:=comb2+1; comb2c:=comb2c+1; elsif(comb2a=9)then comb2a:="0000" comb2b:=comb2b+1; comb2:=comb2+1; else comb2a:=comb2a+1; comb2:=comb2+1; end if; else bshi<=comb2b; bge<=comb2a; bbai<=comb2c; bqian<=comb2d; comb2:=0; comb2a:="0000" comb2b:="0000" comb2c:="0000" comb2d:="0000" end if; end if; end process;end rt1;程序分析:首先打开ieee库,用use语句声明使用std_logic_1164和std_logic_unsigned程序包。定义实体,daclk、ascore、bscore为输入,age、ashi、abai、aqian、bge、bshi、bbai、bqian为输出位矢量。然后定义结构体,daclk、ascore、bscore为敏感信号,定义变量comb1a,comb1b,comb1c,comb1d为位矢量,变量comb1为0到7000范围。当时钟上升沿到来时,各个变量分别实现个、十、百、千的进位。然后实现一个循环。然后再将各个变量付给各个位矢量。模块生成图 :X模块的时序仿真图时序仿真图的分析转换模块的时序仿真图如下图所示:可见能将路程和车费转换为4位的十进制数,便于8位数码管显示。由图可知:当ascore,bscore为13位二进制数,当ascore为0-9时age从0到9变化,当ascore为10时age等于0,ashi等于1。 当bscore为0-9时bge从0到9变化,当bscore为10时bge等于0,bshi等于1。(3)sel模块此模块为片选信号产生模块,功能是选择八段数码管按照设计要求进行正确的显示。其具体的对应关系如下表所示:接口序号数码管SEL2SEL1SEL0状态111第1位亮110第2位亮101第3位亮100第4位亮011第5位亮010第6位亮001第7位亮0XX第8位亮在该模块中CLK为时钟信号,A2.0为片选输出,用于选择数码管,连接译码显示模块的片选端C2.0。se模块的源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel is port(clk:in std_logic; a:out std_logic_vector(2 downto 0);end sel;architecture rt1 of sel isbegin process(clk) variable b:std_logic_vector(2 downto 0); begin if(clk'event and clk='1')then if(b="111")then b:="000" else b:=b+1; end if; end if; a<=b; end process;end rt1; 生成se模块 : sel模块的波形图:由图可以看出,当CLK加入时钟信号时,a从000到111逐个变化,该模块可将模拟信号进行片选并有对应的数码管进行显示。(4)xxx1模块此模块为显示模块中的动态扫描/译码/数码管显示模块,功能是将已转换好的数字量加载到两个4位七段数码管上并加以显示。C2.0为片选端,用来连接片选模块的片选输出端A2.0,A1、A2、A3、A4、B1、B2、B3、B4分别连接数据转换模块的八个转换输出端,因为设计要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的DP端,D3.0连接数码管控制模块的输入端。xxx1模块的源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xxxl isport(c:in std_logic_vector(2 downto 0);dp:out std_logic;a1,a2,a3,a4,b1,b2,b3,b4:in std_logic_vector(3 downto 0);d:out std_logic_vector(3 downto 0);end xxxl;architecture rtl of xxxl isbeginprocess(c,a1,a2,a3,a4,b1,b2,b3,b4)variable comb:std_logic_vector(2 downto 0);begin comb:=c;case comb iswhen"000"=>d<=a1;dp<='0'when"001"=>d<=a2;dp<='0'when"010"=>d<=a3;dp<='1'when"011"=>d<=a4;dp<='0'when"100"=>d<=b1;dp<='0'when"101"=>d<=b2;dp<='0'when"110"=>d<=b3;dp<='1'when"111"=>d<=b4;dp<='0'when others=>null;end case;end process;end rtl;生成模块: xxx1模块的时序仿真图:由上图可知,输入信号C为3位片选信号其变化范围为0到7,输入信号c从0到7逐个变化时,输出d逐个输a1,a2,a3,a4,b1,b2,b3,b4的输入信号。(5)di模块 此模块为数码管控制模块,功能是控制七段数码管对转换后的数字量进行显示,使其完成路程和车费的显示。其中D3.0连接动态扫描/译码/数码管显示模块的D3.0端,Q6.0连接七段数码管,利用其控制特性在数码管上显示出车费和路程。di模块的源程序:library ieee;use ieee.std_logic_1164.all;entity di isport(d:in std_logic _vector(3 downto 0); q:out std_logic_vector(6 downto 0);end di;architecture rtl of di isbegin process(d) begin case d is when"0000"=>q<="" when"0001"=>q<="" when"0010"=>q<="" when"0011"=>q<="" when"0100"=>q<="" when"0101"=>q<="" when"0110"=>q<="" when"0111"=>q<="" when"1000"=>q<="" when others=>q<="" end case; end process;end rtl;生成模块: di模块的时序仿真图:从波形图中可看出,此模块可控制数码管完成对数字量的显示。当输入为0000-1000时数码管分别显示0,1,2,3,4,5,6,7,8。当输入为其他时数码管显示9。(6)div模块 div模块将实验箱上50Mhz脉冲信号分频为500hz。div模块源程序:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY div IS port(clk:IN std_logic; clkout:OUT std_logic );end div;ARCHITECTURE one OF div IS BEGIN process(clk) variable cnt:integer range 0 to ; variable tmp:std_logic;begin if clk'event and clk='1' then if cnt>=99999 thencnt:=0;tmp:=not tmp;else cnt:=cnt+1;end if;end if;clkout<=tmp;end process;end one;div生成模块图:div模块时序仿真波形:div将时钟信号分频,使频率减小。(7) decode3_8模块 sel通过decode3_8模块选择数码管decode3_8模块源程序: LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY decode3_8 IS PORT(SEL:IN std_logic_vector(2 downto 0); Q:OUT std_logic_vector(7 downto 0);END decode3_8;ARCHITECTURE a OF decode3_8 ISBEGIN Q<=""when sel=0 else ""when sel=1 else ""when sel=2 else ""when sel=3 else ""when sel=4 else ""when sel=5 else ""when sel=6 else ""when sel=7 else "" END a;decode3_8生成模块图: decode3_8模块时序仿真波形图:decode3_8模块选择数码管,当sel信号从0-7变化时,依次选择1-8八个数码管。五、 总体设计电路图整体工作情况:(1)模块连接:计费模块的clk、start、stop、pause和js端连接输入,chefei12.0和luc12.0连接转换模块的ascore12.0与bscore12.0;转换模块的daclk端连接输入,age3.0至bqian3.0连接动态扫描/译码/数码管显示模块的a13.0至b43.0;动态扫描/译码/数码管显示模块的C2.0连接片选输出SEL2.0,DP端连接输出DP,D3.0连接数码管控制模块的D3.0;片选信号产生模块的CLK端与输入信号相连,并连接转换模块的DACLK端,A2.0连接片选输出SEL2.0,并与动态扫描/译码/数码管显示模块的C2.0相连;数码管控制模块的D3.0端与动态扫描/译码/数码管显示模块的D3.0端相连,Q6.0端连接八段数码管输出Q6.0。(2)硬件连接:CLK接pin-28 输入为1hz的脉冲;daclk是实验箱上50Mhz固定晶振START、STOP、PAUSE、JS分别连接按键开关,用于控制车的启动、停止、暂停和加速;DP和Q6.0分别连接八段码显示单元的a到dp;W7.0接数据线。 (3)结果分析:该电路的仿真波形图如下:clk为jifei模块时钟信号,daclk为时钟信号,stop为汽车停止输入端;start为汽车启动输入端;pause为汽车暂停输入端;js为汽车加速输入端。DP表示小数点。该电路的总体管脚分配图:clk:pin-28;daclk:pin-153;start:pin-4;stop:pin-5;pause:pin-6; js:pin-7;dp:pin-82;q6.0:pin-105;pin-104;pin-101;pin-100; pin-85;pin-84;pin-83;W7.0:pin-86;pin-87;pin-88;pin-93;pin-94;pin-95;pin-98;pin-99;vga3.0:pin-162;pin-161;pin-164;pin-163;六、 硬件实现通过硬件下载,该电路可以完成硬件实现,芯片管脚定义可以直接用编辑pin文件。完成管脚定义后选择器件,编译后生成sof、pof文件。选择sof文件进行下载。通过对每一模块的仿真和下载,可以实现各个模块的逻辑功能,验证了各个模块的正确性。在出租车计费系统的5个模块中 ,重点在于jifei模块,x(转化)模块,显示模块。jifei模块主要有汽车的启动、停止、暂停、加速按键;转化模块主要是把车费和路程转化为4位十进制;显示模块是将车费和路程显示出来。各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。实验表明:该计费器实现了按预置参数自动计费(最大计费金额为99.99元)、自动计程(最大计程公里数为99.99 km)等功能;能够实现起步价、每公里收费、车型及加费里程的参数预置(如:起步价7.00元;3 km后,2.20元/km;计费超过20.00元,每公里加收50的车费等),且预置参数可调范围广。由于采用CPLD大规模可编程逻辑器件,整机功耗小、抗干扰能力强、系统稳定、工作可靠、升级方便。七、 出租车计费器课程设计的心得体会 专心-专注-专业

    注意事项

    本文(vdhl语言出租车计费器课程设计报告(共21页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开