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

    VHDL——出租车计价器.doc

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

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

    VHDL——出租车计价器.doc

    【精品文档】如有侵权,请联系网站删除,仅供学习与交流VHDL出租车计价器.精品文档.该系统利用VHDL语言、PLD设计出租车计费系统,以MAX+PLUS软件作为开发平台,设计了出租车计费器系统程序并进行了程序仿真。使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目。关键词: 出租车计费器;计数器;VHDL语言;MAX+PLUS;一、实验任务及要求1. 能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(如20元)时,每公里加收50%的车费,车停止不计费。2. 实现预置功能:能预置起步费、每公里收费、车行加费里程。3. 实现模拟功能:能模拟汽车启动、停止、暂停、车速等状态。4. 设计动态扫描电路:将车费显示出来,有两位小数。5. 用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。6. 各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。7. 完成电路全部设计后,通过系统实验箱下载验证设计的正确性。二、实验原理系统顶层框图:车速控制模块计费动态显示里程动态显示 车速选择 起/停开关 基本速率 Reset 扫描时钟 显示输出 显示输出计费器按里程收费,每100米开始一次计费。各模块功能如下:(1) 车速控制模块当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。(2) 里程动态显示模块其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。(3) 计费动态显示模块其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当收费超过20时数值加1.5元。三、出租车计费系统的实现3.1系统的总体模块图:3.2系统各功能模块的实现:(1)模块MS的实现模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速和匀速,JS加速按键。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MS IS PORT(CK0:IN STD_LOGIC; CK1:IN STD_LOGIC; JS:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC);END MS;ARCHITECTURE ONE OF MS ISBEGIN PROCESS(JS, CK0,CK1) BEGIN IF JS='0' THEN CLK_OUT<=CK0; ELSE CLK_OUT<=CK1; END IF; END PROCESS;END ONE;(2)模块SOUT的实现该模块实现车行状态输出功能,其中clk为时钟信号,enable 为启动使能信号,sto暂停信号, clr为清零信号,st为状态信号。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SOUT IS PORT(CLK:IN STD_LOGIC; ENABLE:IN STD_LOGIC; STO :IN STD_LOGIC; CLR:IN STD_LOGIC; ST:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END SOUT;ARCHITECTURE ONE OF SOUT ISBEGIN PROCESS(CLK,ENABLE ,STO,CLR) VARIABLE CQI:STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE STATE:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN IF CLR='0' THEN CQI:=(OTHERS=>'0'); ELSIF CLK'EVENT AND CLK='1' THEN IF STO='1' THEN STATE:="00"CQI:=CQI; ELSIF ENABLE ='1' THEN CQI:=CQI+1; IF CQI<=30 THEN STATE:="01" ELSIF CQI>30 AND CQI<=80 THEN STATE:="10" ELSE STATE:="11" END IF; END IF; END IF;ST<=STATE;END PROCESS;END ONE;(3)模块PULSE的实现该模块实现将时钟信号5分频功能。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PULSE IS PORT(CLK0:IN STD_LOGIC; FOUT:OUT STD_LOGIC);END PULSE;ARCHITECTURE ONE OF PULSE ISBEGIN PROCESS(CLK0) VARIABLE CNT:STD_LOGIC_VECTOR(2 DOWNTO 0); VARIABLE FULL :STD_LOGIC; BEGIN IF CLK0'EVENT AND CLK0='1' THEN IF CNT="100" THEN CNT:="000" ; FULL:='1' ELSE CNT:=CNT+1; FULL:='0' END IF; END IF;FOUT<=FULL;END PROCESS;END ONE;(4)模块COUNTER的实现实现汽车模拟计费功能。clr1为清零信号,si为状态信号,c1,c2,c3分别为费用的三为显示。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER IS PORT(CLK_DIV:IN STD_LOGIC; CLR1:IN STD_LOGIC; SI:IN STD_LOGIC_VECTOR(1 DOWNTO 0); C1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COUNTER;ARCHITECTURE ONE OF COUNTER ISBEGIN PROCESS(CLK_DIV,CLR1,SI) VARIABLE Q1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE Q2: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE Q3: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR1='0' THEN Q1:="0000"Q2:="0000"Q3:="0000" ELSIF CLK_DIV'EVENT AND CLK_DIV='1' THEN CASE SI IS WHEN "00" =>Q1:=Q1;Q2:=Q2;Q3:=Q3; WHEN "01"=> Q1:="0000"Q2:="0000"Q3:="0001" WHEN "10"=> IF Q2<"1001" THEN Q2:=Q2+1; ELSE Q2:="0000" IF Q3<"1001" THEN Q3:=Q3+1; END IF; END IF; Q1:="0000" WHEN "11"=> IF Q1<"0101" THEN Q1:=Q1+5; ELSE Q1:="0000" END IF; IF Q1="0101" THEN IF Q2<"1001" THEN Q2:=Q2+1; ELSE Q2:="0000" IF Q3<"1001" THEN Q3:=Q3+1; END IF; END IF; ELSE IF Q2<"1001" THEN Q2:=Q2+2; ELSE Q2:="0001" IF Q3<"1001" THEN Q3:=Q3+1; END IF; END IF; END IF; WHEN OTHERS=>NULL; END CASE;END IF;C1<=Q1;C2<=Q2;C3<=Q3;END PROCESS;END ONE;(5)模块SCAN_LED的实现该模块实现显示车费功能。BT为选位信号,SG译码信号。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED IS PORT(DI1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK2:IN STD_LOGIC; SG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); BT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END SCAN_LED;ARCHITECTURE ONE OF SCAN_LED IS SIGNAL CNT4 :STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP1:PROCESS(CLK2)VARIABLE SQ :STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN IF CLK2'EVENT AND CLK2='1' THEN IF SQ="10" THEN SQ:="00" ELSE SQ:=SQ+1; END IF; END IF; CNT4<=SQ;END PROCESS P1;P2: PROCESS (CNT4) BEGIN CASE CNT4 IS WHEN "00" =>BT<="001"A<=DI1; WHEN "01"=>BT<="010"A<=DI2; WHEN "10"=>BT<="100"A<=DI3; WHEN "11"=>BT<="100"A<="1111" WHEN OTHERS =>NULL; END CASE;END PROCESS P2; P3:PROCESS(A) BEGIN CASE A IS WHEN "0000"=>SG<="0111111" WHEN "0001"=>SG<="0000110" WHEN "0010"=>SG<="1011011" WHEN "0011"=>SG<="1001111" WHEN "0100"=>SG<="1100110" WHEN "0101"=>SG<="1101101" WHEN "0110"=>SG<="1111101" WHEN "0111"=>SG<="0000111" WHEN "1000"=>SG<="1111111" WHEN "1001"=>SG<="1101111" WHEN OTHERS=>NULL; END CASE;END PROCESS P3;END ONE ;(6)模块TAXI的实现该模块为最终的顶层模块。LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TAXI IS PORT(T_CLK0:IN STD_LOGIC; T_CLK1:IN STD_LOGIC; T_CLK2:IN STD_LOGIC; T_JS :IN STD_LOGIC; T_ENABLE:IN STD_LOGIC; T_CLR:IN STD_LOGIC; T_STO:IN STD_LOGIC; T_BT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); T_SG: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END TAXI;ARCHITECTURE STRUC OF TAXI ISCOMPONENT MSPORT(CK0:IN STD_LOGIC; CK1:IN STD_LOGIC; JS:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC);END COMPONENT;COMPONENT SOUTPORT(CLK:IN STD_LOGIC; ENABLE:IN STD_LOGIC; STO :IN STD_LOGIC; CLR:IN STD_LOGIC; ST:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END COMPONENT;COMPONENT PULSEPORT(CLK0:IN STD_LOGIC; FOUT:OUT STD_LOGIC);END COMPONENT;COMPONENT COUNTERPORT(CLK_DIV:IN STD_LOGIC; CLR1:IN STD_LOGIC; SI:IN STD_LOGIC_VECTOR(1 DOWNTO 0); C1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;COMPONENT SCAN_LED PORT(DI1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK2:IN STD_LOGIC; SG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); BT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END COMPONENT;SIGNAL L_CLK: STD_LOGIC;SIGNAL L_FOUT:STD_LOGIC;SIGNAL L_ST:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL L_C1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL L_C2:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL L_C3:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN U0:MS PORT MAP(CK0=>T_CLK0,CK1=>T_CLK1,JS=>T_JS,CLK_OUT=>L_CLK); U1:SOUT PORT MAP(CLK=>L_CLK,ENABLE=>T_ENABLE,CLR=>T_CLR,STO=>T_STO,ST=>L_ST); U2:PULSE PORT MAP(CLK0=>L_CLK,FOUT=>L_FOUT); U3:COUNTER PORT MAP(CLR1=>T_CLR,SI=>L_ST,CLK_DIV=>L_FOUT,C3=>L_C3,C2=>L_C2,C1=>L_C1); U4:SCAN_LED PORT MAP(CLK2=>T_CLK2,DI3=>L_C3,DI2=>L_C2,DI1=>L_C1,BT=>T_BT,SG=>T_SG);END STRUC;四、系统仿真(1)模块MS的结果验证(2)模块SOUT的结果验证(3)模块PULSE的结果验证(4)模块COUNTER的结果验证(5)模块SCAN_LED的结果验证(6)模块TAXI的结果验证五、结论出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。出租车计费系统的设计中体现了覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。心得体会:这次课程设计中,我们主要是运用VHDL语言设计了一个出租车计费器,并且用层次化的设计方法来实现这个电路。在程序编写结束后,我们还对该程序进行了调试, 能按预期的效果进行模拟汽车启动、停止、暂停等功能,基本完成课程设计的要求。通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并通过使用对它有了更深的体会。对于编程过程中可能遇到的问题有了一定的了解,也明白了其中的一些注意事项,对于下次进行编程设计有很大的帮助和提高。总之,这次实验不仅仅加强了我的动手编程能力,也大大加强了团队合作以及设计能力,使我在理论学习和编程练习方面都获得了较大的收获

    注意事项

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

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




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

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

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

    收起
    展开