2021湖南科技大学计算机学院数字系统设计与VHDL出租车计价器设计报告和源代码_第1页
2021湖南科技大学计算机学院数字系统设计与VHDL出租车计价器设计报告和源代码_第2页
2021湖南科技大学计算机学院数字系统设计与VHDL出租车计价器设计报告和源代码_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录一、设计题目说明 1二、设计方案 11、设计思路 12、外部接口 13、总体框图 1三、系统实现 21、设计原理 22、模块设计 2四、仿真 4五、测试 5六、总结 51、实验中遇到的问题 52、心得收获 63、不足 6附录:VHDL代码 7PAGEPAGE10一、设计题目说明题目九:出租车计价器设计(平台实现)★★完成简易出租车计价器设计,选做停车等待计价功能。基本功能:8/3/公里;500.1(40KM/h)0.1选做功能:增加一个停车等待/恢复行程按钮,用2个数码管显示等待时间,精确到0.1分钟。等候费1元/0.1二、设计方案1、设计思路8.00332/2min,1元/LED单价为元。计价范围为0—99.90.1“XX.Xkm1km“X.X0—9.90.12、外部接口时钟信号输入:clk_100100HZ;计价器开关:start乘客上下车开关:in_car中途停车等待开关:stop数字显示向量:ledag数码管选择向量:Bt3、总体框图三、系统实现1、设计原理100HZclk_100,系统启动和重start,计价开始以及乘客上下车信号in_car,stop。系c0~c2,行驶距离k0~k2,m0~m11/6Hz1/9Hz2/9Hzstartin_carstop;控制过程为:startstart8.0startin_carstop0;如需stop0,来读取最终的行驶路程数、等待时间和最后的总费用,直接将start0,8.0译码、分频、计量四个部分组成。2、模块设计显示模块显示模块负责将6000000HZstartstart译码模块行译码,送至对应的数码管上显示,并且显示小数点。分频模块100HZ6s1/600clk_599stopclk_5990.12,en10.1且车费增加0.1元;100HZ9s1/900clk_899stopclk_8990.1km;3km3kmen02/km0.05km,0.1100HZ4.5s1/450clk_4493kmclk_449升沿代表出租车行驶路程增加0.05km,此时按照2元/km计费,里程每增加0.05km0.1计量模块100Hz消抖部分20ms化。重置清零部分维护系统,显示正常示数。当start8.0等待时间,行驶里程以及其它信号;当in_car0,暂停计时和记里程,费用也不再增加。计时部分stopclk_100沿,计时器就自增1,并且自动完成进位,当等待时间大于2min19.9min,满量程后自动归零。计程部分stopclk_1001,3kmen0199.9km,满量程后自动归零。计费部分clk_100start=1in_car=1en0en1=1始终处于计费状态,c0、c1、c2三个四位向量信号从低位到高位表示费用,其c00.1en3km则为起步价8.021(en0=0,en1=1)。四、仿真仿真波形图2.84.5求所得费用为:8.0+(4.5km-3.0km)*2.0/公里+(2.8min-2.0min)*1.0元=8.0+3.0+0.8=11.8五、测试板载实验图4.44.2算所得费用为:8.0+(4.2km-3km)*2.0/km+(4.4min-2min)*1.0/min=8.0+2.4+2.4=12.8六、总结VHDLFPGA1、实验中遇到的问题驱动安装问题序强制签名,再重新安装驱动程序,终于解决了该问题。硬件选择和引脚选择问题Quartus在请教同学后才知道在哪个窗口选择引脚。数码管输出数字时序脉冲的确认和选择的时间则需等待很久(40km/h100m/9s3需花费270s),等待结果十分耗时。因此在最后板载实验时,我将时钟频率输1000HZ10的观察。多驱动问题2、心得收获VHDL我成功完成了板载实验。VHDLQuartusVHDLQuartusVHDL电路图并实现功能。3、不足决,如:计费,还需要进一步讨论。VHDL在实际中出现操作偏差,会导致计费不准确。附录:VHDL代码LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;entitytaxiis port(clk_100:instd_logic; clk_6000000:instd_logic; start:instd_logic;--认为start0,系统停止工作;价格开始归为起步价8.00,startin_car:instd_logic;--认为in_car1等待时间和最后的总费用stop:instd_logic;--行驶中,中途等待信号stop高电平:停车等待,并去除in_car输入脉冲,进行等待计费;低电平:正在行驶。--添加数码管引脚选择和数码管选择ledag:OUTSTD_LOGIC_VECTOR(7downto0);--8segments从右到左从低到高高电平有效Bt:OUTSTD_LOGIC_VECTOR(7downto--8digitaltubes从右到左从低到高低电平有效);endtaxi;architecturetaxioftaxiissignalq_599:integerrange0to599; signalq_899:integerrange0to899;signalq_449:integerrange0toSignalcnt8:integerrange0to7;signalnum:std_logic_vector(3downto0); signalc0,c1,c2:std_logic_vector(3downto0);--车费,初始值8元,计价范围为0—99.9元,c0~c2从低位到高位signalclk_599:std_logic; --600分频,6s为0.1分钟,花费0.1signalclk_899:std_logic; --900分频,9s走了0.1千米signalclk_449:std_logic; --4504.50.050.1元signalen1,en0:std_logic;--计费单价使能信号,当行驶里程大于3km时,本模块中en0使能信号变为1,当等待时间大于2min时,本模块中en1使能信号变为1signalk2,k1,k0:std_logic_vector(3downto0);--行驶公里计数,计程器的量程为99.9km,满量程后自动归零。k0低位,k2高位,用BCD码,k0,k1,k2分别用三个BCD码确定0~9signalm1,m0:std_logic_vector(3downto0);BCDBCD0~90~9分钟(0~959299),满量程后自动归零。signalledag_temp:STD_LOGIC_VECTOR(6downto0);--7segments除了小数点,从右到左,从低到高,高电平有效signalflag:std_logic; beginprocess(clk_6000000)--分为八个时段,每个时段选择一个一个数码管,更新其示数Beginif(clk_6000000'eventandclk_6000000='1')thenifcnt8=7thencnt8<=0;elsecnt8<=cnt8+1;endif;endif;Endprocess;process(cnt8,start)--显示模块,不同时段对应不同的数码管Beginif(start='1')thencasecnt8ISwhen0=>Bt<="11111110";num<=c0;flag<='0';--数码管SEL0示数代表c0when1=>Bt<="11111101";num<=c1;flag<='1';when2=>Bt<="11111011";num<=c2;flag<='0';when3=>Bt<="11110111";num<=k0;flag<='0';when4=>Bt<="11101111";num<=k1;flag<='1';when5=>Bt<="11011111";num<=k2;flag<='0';when6=>Bt<="10111111";num<=m0;flag<='0';when7=>Bt<="01111111";num<=m1;flag<='1';Endcase;elseBt<="11111111";-startendif;endprocess;process(num,start)--译码显示模块beginif(start='1')thencasenumiswhen"0000"=>ledag_temp<="0111111";ledag<=flag&ledag_temp;--数显,加入小数点when"0001"=>ledag_temp<="0000110";ledag<=flag&ledag_temp;when"0010"=>ledag_temp<="1011011";ledag<=flag&ledag_temp;when"0011"=>ledag_temp<="1001111";ledag<=flag&ledag_temp;when"0100"=>ledag_temp<="1100110";ledag<=flag&ledag_temp;when"0101"=>ledag_temp<="1101101";ledag<=flag&ledag_temp;when"0110"=>ledag_temp<="1111101";ledag<=flag&ledag_temp;when"0111"=>ledag_temp<="0000111";ledag<=flag&ledag_temp;when"1000"=>ledag_temp<="1111111";ledag<=flag&ledag_temp;when"1001"=>ledag_temp<="1101111";ledag<=flag&ledag_temp;whenothers=>null;endcase;endif;endprocess;process(clk_100) --分频模块beginif(clk_100'eventandclk_100='1')then --100HZif(q_599=599)then--每6s一个高电平,时间增加0.1min--并且如果en1=1,同时价格也要增加0.1q_599<=0;clk_599<='1';elseq_599<=q_599+1;clk_599<='0';endif;if(q_899=899)then --每9q_899<=0;clk_899<='1';elseclk_899<='0';endif;加0.1

if(q_449=449)then--每4.5秒一个高电平,若en0=1,同时价格也要增q_449<=0;clk_449<='1';elseclk_449<='0';endif;endif;endprocess;process(clk_100,clk_449,clk_599,clk_899) beginif(clk_100'eventandclk_100='1')then --100HZ上升if(start='0')then --初始化en1<='0'; --停留时间不超过两分钟不计入价格en0<='0';m1<="0000";m0<="0000";k2<="0000";k1<="0000";k0<="0000";c2<="0000";c1<="1000"; 8c0<="0000";elsif(in_car='0')then--重置,此时价钱不增加,认为in_car10en0<='0';en1<='0';elsif(start='1'andin_car='1')thenif(k2&k1&k0>"000000110000")thenen0<='1'; 3km则en0elseen0<='0';endif;ifm1&m0>"00100000"thenen1<='1'; 2min,则en11elseen1<='0';endif;if(clk_599='1')thenifstop='1'then --停车等待if(m0="1001")then m0<="0000";if(m1="1001")thenm1<="0000";elsem1<=m1+1;endif;elsem0<=m0+1;endif;if(en1='1')thenif(c0="1001")then c0<="0000";if(c1="1001")thenc1<="

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论