欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    数字电路(出租车计费器)【苍松书苑】.doc

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

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

    数字电路(出租车计费器)【苍松书苑】.doc

    一、 课题要求(1) 技术要求1.掌握较复杂逻辑的设计、调试。2. 进一步掌握用VHDL语言设计数字逻辑电路。3.掌握用quartusII6.0软件进行编程设计。(2) 功能要求1.能实现计费功能,计费标准为:按行驶里程收费,起步费为7.00元,并在车行3公里后再按2.2元/公里,当计费器达到或超过一定收费(如20元)。每公里加收50%的车费,车停止不计费2 .实现预置功能、每公里收费、车行驶加费里程。3.实现模拟功能:能模拟汽车启动、停止、暂停、车速等状态。4. 设计动态扫描电路将车费显示出来。有两位小数。5. 用VHDL语言设计符合上述功能要求的出租车计费器。并用层次化设计方法设计该电路。6 .各计数器的技术状态用功能的方法验证,并用有关波形确认电路设计是否正确7. 完成电路全部设计后,通过系统试验箱下载验证设计课题的正确性。二 本人工作:本人主要负责软件和硬件电路方面的设计,并进行引脚设定,以及与软硬件之间的调试运行,及时修改程序,帮助查找和分析问题,确保能够成功完成出租车计费器的设计。三 设计方案:3.1 主要中心组成显示模块FPGA按键模块 3.2 FPGA芯片内部主要程序:3.3 工作原理:基于CPLDFPGA的出租车计费器的组成如图1所示。各部分主要功能如下:(1)A计数器对车轮传感器送来的脉冲信号进行计数(每转一圈送一个脉冲)。不同车型的车轮直径可能不一样,通过“设置1”对车型做出选择,以实现对不同车轮直径的车进行调整。(2)B计数器对百米脉冲进行累加,并输出实际公里数的BCD码给译码动态扫描模块。每计满500送出一个脉冲给C计数器。“设置2”实现起步公里数预制。(3)C计数器实现步长可变(即单价可调)的累加计数,每500米计费一次。“设置3”用来完成超价加费、起步价预制等。(4)译码动态扫描将路程与费用的数值译码后用动态扫描的方式驱动数码管。(5)数码管显示将公里数和计费金额均用四位LED数码管显示(2位整数,2位小数)。3.4功能模块设计出租车计费器由车型调整模块、计程模块、计费模块、译码动态及扫描等模块组成,整个系统采用模块化设计,首先用VHDL编写功能模块,然后用顶层原理图将各功能模块连接起来。四 单元模块设计:首先出租车计费器的设计需要分频,所以需要设计了两个频率:4.1 oneMHZ:由于给定的50MHZ太大,这个程序完成5000分频,实现第一次分频,确保实现动态计数,并且保证频率在驱动范围之内。library ieee;use ieee.std_logic_1164.all;entity oneMHZ is port( daclk:in std_logic; clkout:out std_logic); end oneMHZ;architecture one of oneMHZ issignal data:integer range 0 to 5000;signal Q:std_logic;beginprocess(daclk) begin if daclkevent and daclk=1 then if(data=5000) then data<=0; Q<=not Q; else data<=data+1; end if; end if;clkout<=Q;end process;end one;4.2 twoMHZ:这个程序完成2500分频,实现第二次分频,确保最后数码管显示频率在合适范围library ieee;use ieee.std_logic_1164.all;entity twoMHZ is port( daclk:in std_logic; clkout:out std_logic); end twoMHZ;architecture one of twoMHZ issignal data:integer range 0 to 2500;signal Q:std_logic;beginprocess(daclk) begin if daclkevent and daclk=1 then if(data=2500) then data<=0; Q<=not Q; else data<=data+1; end if; end if;clkout<=Q;end process;end one; 4.3 Charge:实现计费功能,按行驶里程收费,起步费为7.00元,并在车行3公里后再按2.2元/公里,当计费器达到或超过一定收费(如20元)。每公里加收50%的车费,车停止不计费,实现预置功能、每公里收费、车行驶加费里程,实现模拟功能,能模拟汽车启动、停止、暂停、车速等状态,将车费显示出来。有两位小数。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity charge is port( cp,ks,tz,zt: in std_logic; dis,mon : out integer range 0 to 9999);end charge;architecture ch of charge isbegin process(cp,ks,tz,zt) variable dis1,mon1:integer range 0 to 9999; begin if(cpevent and cp=1) then if(tz=0)then dis1:=0;mon1:=0; elsif(ks=0) then dis1:=0;mon1:=700; elsif(ks=1and tz=1and zt=1) then dis1:=dis1+10; elsif(ks=1and tz=1and zt=0) then dis1:=dis1;mon1:=mon1; end if; if(dis1<300) then null; elsif(dis1<600 and dis1>300) then mon1:=mon1+22; elsif(dis1>=600) then mon1:=mon1+33; end if; mon<=mon1;dis<=dis1; end if; end process;end ch; 4.4 Transform 实现将电路计数分高低位显示,将二进制转化为数码管可识别的十进制library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity transform isport( daclk : std_logic; dis,mon :integer range 0 to 9999; dg,ds,db,dq,mg,ms,mb,mq: out std_logic_vector(3 downto 0);end transform;architecture tran of transform isbegin process(daclk,dis)variable d :integer range 0 to 9999;variable d1,d2,d3,d4 :std_logic_vector(3 downto 0);begin if(daclkevent and daclk=1) then if(d<dis) then if(d1=9 and d2=9 and d3=9) then d1:="0000"d2:="0000"d3:="0000" d4:=d4+1;d:=d+1; elsif(d1=9 and d2=9) then d1:="0000"d2:="0000"d3:=d3+1;d:=d+1; elsif(d1=9) then d1:="0000"d2:=d2+1;d:=d+1; else d1:=d1+1;d:=d+1; end if; else d:=0;d1:="0000"d2:="0000"d3:="0000"d4:="0000" end if;end if;dg<=d1;ds<=d2;db<=d3;dq<=d4;end process;process(daclk,mon)variable m :integer range 0 to 9999;variable m1,m2,m3,m4 :std_logic_vector(3 downto 0);begin if(daclkevent and daclk=1) then if(m<mon) then if(m1=9 and m2=9 and m3=9) then m1:="0000"m2:="0000"m3:="0000"m4:=m4+1;m:=m+1; elsif(m1=9 and m2=9) then m1:="0000"m2:="0000"m3:=m3+1;m:=m+1; elsif(m1=9) then m1:="0000"m2:=m2+1;m:=m+1; else m1:=m1+1;m:=m+1; end if; else m:=0;m1:="0000"m2:="0000"m3:="0000"m4:="0000" end if;end if;mg<=m1;ms<=m2;mb<=m3;mq<=m4;end process;end tran;4.5 Sel 通过选择器将路程和车费每位分别输出,送到数码管library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel isport( c:in std_logic_vector(2 downto 0); dg,ds,db,dq,mg,ms,mb,mq:in std_logic_vector(3 downto 0); da:out std_logic_vector(3 downto 0) ); end sel;architecture se of sel isbegin process(c,dg,ds,db,dq,mg,ms,mb,mq) variable co :std_logic_vector(2 downto 0); begin co:=c; case co is when "000"=>da<=dg; when "001"=>da<=ds;when "010"=>da<=db; when "011"=>da<=dq;when "100"=>da<=mg; when "101"=>da<=ms;when "110"=>da<=mb; when "111"=>da<=mq;when others=>null;end case;end process;end se;4.6 W 用第一次分频过的脉冲实现八进制计数,为下面实现动态扫描做准备library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity w isport( clk:in std_logic; a:out std_logic_vector(2 downto 0);end w;architecture ch1 of w isbegin process(clk) variable b:std_logic_vector(2 downto 0); begin if(clkevent and clk=1) then if(b="111") then b:="000" else b:=b+1; end if; end if; a<=b; end process;end ch1;4.7 38译码器:通过八进制计数实现动态扫描library ieee;use ieee.std_logic_1164.all;entity mux38a isport(d:in std_logic_vector(2 downto 0);q:out std_logic_vector(7 downto 0);end mux38a;architecture one of mux38a isbeginprocess(d)begincase d iswhen "000"=>q<="11101111"when "001"=>q<="11011111"when "010"=>q<="10111111"when "011"=>q<="01111111"when "100"=>q<="11111110"when "101"=>q<="11111101"when "110"=>q<="11111011"when "111"=>q<="11110111"when others=>null;end case;end process;end one;4.8 数码管显示:显示模块由8个七段LED数码管组成。各个模块用四个数码管,三个表示整数部分,一个表示小数部分。由于小数点的位置是固定的,因此可以将小数点接到一个固定的高电平上一直显示。library ieee;use ieee.std-_logic_1164.all;entity led isport( a : in std_logic_vector(3 downto 0);L: out std_logic_vector(6 sownto 0) );end led;architecture one of led is beginprocess(a)begincase a iswhen "0000"=>L<="0111111"when "0001"=>L<="0000110"when "0010"=>L<="1011011"when "0011"=>L<="1001111"when "0100"=>L<="1100110"when "0101"=>L<="1101101" when "0110"=>L<="1111101" when "0111"=>L<="0000111"when "1000"=>L<="1111111"when "1001"=>L<="1101111"when other =>null;end case;end process; end one;五 顶层模块设计:将各个程序块联合起来,实现层次化设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity taxi isport(cp,start,stop,pause:in std_logic; ss1:out std_logic_vector(7 downto 0); ss2:out std_logic_vector(6 downto 0);end entity taxi;architecture ym of taxi iscomponent oneMHZport(daclk:in std_logic; clkout:out std_logic);end component;component twoMHZport(daclk:in std_logic;clkout:out std_logic);end component;component chargeport( cp,ks,tz,zt : in std_logic; dis,mon : out integer range 0 to 9999);end component;component transformport(daclk : std_logic; dis,mon :integer range 0 to 9999; dg,ds,db,dq,mg,ms,mb,mq: out std_logic_vector(3 downto 0);end component;component wport(clk:in std_logic; a:out std_logic_vector(2 downto 0);end component;component selport(c:in std_logic_vector(2 downto 0); dg,ds,db,dq,mg,ms,mb,mq:in std_logic_vector(3 downto 0); da:out std_logic_vector(3 downto 0);end component;component mux38aport(d:in std_logic_vector(2 downto 0); q:out std_logic_vector(7 downto 0);end component;component ledport( a : in std_logic_vector(3 downto 0);L: out std_logic_vector(6 downto 0);end component;signal aa0,aa1:std_logic;signal a0,b0:integer range 0 to 9999;signal b2,a1,b1,c1,d1,e1,f1,g1,h1:std_logic_vector(3 downto 0);signal y:std_logic_vector(2 downto 0);beginu0:oneMHZ port map(daclk=>cp,clkout=>aa0);u1:twoMHZ port map(daclk=>aa0,clkout=>aa1);u2:charge port map(cp=>aa1,ks=>start,tz=>stop,zt=>pause,dis=>a0,mon=>b0);u3:transform port map(daclk=>aa0,dis=>a0,mon=>b0,dg=>a1,ds=>b1,db=>c1,dq=>d1,mg=>e1,ms=>f1,mb=>g1,mq=>h1);u4:w port map(clk=>aa0,a=>y);u5:sel port map(c=>y,dg=>a1,ds=>b1,db=>c1,dq=>d1,mg=>e1,ms=>f1,mb=>g1,mq=>h1,da=>b2);u6:mux38a port map (d=>y,q=>ss1);u7:led port map(a=>b2,L=>ss2);end ym;六 调试结果:1、下载步骤:(1) 安装驱动插入USB下载线后,自动跳出窗口,手动设置 D:alteraquartus6.0driverusb_blaster(2)IDE环境设置Assigementsdeviceep2cst144c8 device&ping optionsconfigurationsuse configuration deviseEPCS1-编译(3)programmer Toolshardware setupusbblasterModeSJTAG 选文件 xx.sof(4)下载成功后,先拔电源VCC再拔USB下载线。注意事项:保证下载板载断电情况下进行ASP或JTAG借口的插拔。引脚安装图:出租车计费器成功运行,软硬件之间衔接全无问题,我们成功调试出预想结果,并且增加一些附加功能,比如考虑出租车夜晚和白天计费不一样,设计了加速计费功能,除了软件方面,在硬件上设计了显示灯,便于观察哪个功能起作用。虽然再调试过程出现了一些问题,但经过讨论以及观察摆出故障,测试完软硬件的独立运行,我们的软硬件之间的衔接运行相当顺利。七 实验中出现问题在编写程序时出现了一些问题,例如编译错误,仿真结果不正确,但经过细心检查和查找资料,及时改正,尤其在实际顶层文件时出现一系列问题,但很大部分是由于更部分引脚接错造成问题。这大多由于粗心和不熟练造成的。在此过程中浪费了一些时间。并且在下载过程中,尽管操作不熟练,但还是顺利完成。再软硬件连接过程中,出现了一系列问题,刚开始出现乱码,经检查是数码管和FPGA引脚连错了,接着出现显示没有置数功能,经核查后发现为软硬件不协调,除此之外还有由于频率太快,造成显示太快,无法看清示数显示,经过一系列修改后终于达到预期要求,并增加附加功能。八、设计小结出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。出租车计费系统的设计中体现了覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。九 收获与体会:两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。 通过本次数字电路课程设计,我不但熟练的掌握了有关EDA,VHDL的设计方法以及上机的实际操作,而且还获知了有关出租车计费器基于FPGA的设计方法以及实际操作,并且成功的在多方面资料的帮助下设计出了出租车计费器。看到出租车计费器成功的运行,我由衷的高兴,在此次的方案设计过程中,一次次的困难并没有吓倒我们,反而激起我们解决它们的决心,一次次的挫折使我们对出租车计费器的了解更加深刻。在此感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。参考文献:【1】 数字电路课程设计指导书 江苏技术师范学院【2】 EDA技术及应用实验讲义 江苏技术师范学院【3】 邓元庆 数字设计基础与应用 清华大学出版社【4】 李云 VHDL电路设计实用教程 机械工业出版社14内容c

    注意事项

    本文(数字电路(出租车计费器)【苍松书苑】.doc)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开