1、计算乘客所行驶的公里数。计程器的量程为99公里,满量程自动归零。2.2.3译码显示模块该模块经过4位BCD码译码器、计程数据(2位BCD码)动态选择输出。其中计费数据送入显示译码模块进行译码,十元、元为单位对应的数码管上显示,最大显示为99元;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。3、主要功能的实现3.1分频模块的实现由图3-1分频模块封装图可知:系统是对240HZ时钟脉冲信号进行分频,得到一种频率。输入为clk,输出为q1. 图3-1分频模块封装图3.2计量模块的实现由图3-2可知:本模块实现对于出租车在行驶过程中计算里程;当行驶里程大于3
2、KM时,本模块中en0信号变为1; clk1每来一个上升沿,计量模块实现一次计数,里程数加1。图3-2计量模块封装图3.3计费功能的实现由图3-3可知:输入一个脉冲信号,同时当start为时开始计价;c0、c1、c2、c3为价格的显示信号。 图3-3计费模块封装图3.4控制功能的实现由图3-4可知:本模块主要是通过输入的使能信号,对两个输入脉冲进行选择输出,使能信号是计量模块中的输出。 图3-4控制模块封装图3.5译码和动态扫描功能实现由图3-5可知:该模块通过case语句把不同情况的输出用七段显示数码管的输出方式 图3-5译码模块封装图3.6总体功能原理图4、程序调试4.1分频模块波形仿真图
3、图4-1分频模块仿真波形图由图4-1可知:当输入240HZ的clk脉冲信号时,clk每出现240个脉冲时q1出现 1个,相当于计费1元,帮助计费。4.2计量模块波形仿真图图4-2计量模块波形仿真图由图4-2可知:由于讲输入参数fin一直设为高,将stop一直设为低。所以k1、k0记录路程的输出量有值。4.3计费模块波形仿真图图4-3计费模块波形仿真图由图4-3可知:输入一个脉冲信号,同时当start为高时开始计价;c0、c1、c2、c3为价格的显示信号,逢9后一位将进1。4.4控制模块波形仿真图图4-4控制模块波形仿真图由图4-4可知:本模块主要是通过两个不同的输入使能信号,对两个输入脉冲进行
4、选择输出,使能信号是计量模块中的输出,两个输入脉冲是分频模块输出的16HZ、10HZ的脉冲。4.5译码显示模块波形仿真图图4-5译码模块波形仿真图由图4-5可知:首先以一个case语句进行通道的选择,以8为二进制表示。当某一位为1时,表示选择该通道接着。接着又以一个case语句对所选的通道进行动态扫描,由于时间极小,因此在我们用肉眼感觉是同时显示出来的。4.6总模块的波形仿真图图4-6总模块的波形仿真图5、总结本设计采用VHDL语言完成了具有计费、显示等功能的出租车计费系统,该设计的可靠性高,成本低,通用性强即在不改变电路结构的前提下可根据各地区的需求在VHDL程序中设置各种参数,适应各地区出
5、租车计费的需求,还可以根据各地区需求增加系统功能。此出租车计费器的设计采用了硬件描述语言的自顶向下的设计方法,将整个系统分为几个相对独立的模块分别设计、仿真、最后连成整个系统集中仿真,很大程度上提高了设计的效率。最后在试验箱上进行检测,实验现象是:计费器的初始值是8。然后按开始键,里程数以一定频率增加,3以后计费器的跳动频率和里程数的跳动频率保持一致。通过此次课程设计,让我进一步了解了EDA,培养了我发现问题与解决问题的能力。查找了大量资料后选择了一个模板,按照自己所需要的改写已有程序,这过程碰到了相当的困难。经过同学的帮助和查找差不多的例子后,终于实现了设计。6、程序代码顶层文件librar
6、y IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity chuzuche isport ( clk240,start,fin :in std_logic; sg1,
7、sg2,sg3,sg4,sg5,sg6:out std_logic_vector(6 downto 0);end chuzuche;architecture Behavioral of chuzuche iscomponent fp -实现对分频模块的例化 port(clk: in std_logic; q1: out std_logic); end component; component jl -实现对计量模块的例化 port( s,fin,clk1: en0:inout std_logic; k1,k0: inout std_logic_vector(3 downto 0);compon
8、ent kz -实现对控制模块的例化 port( clkin,e0,clk_in1: clk3:out std_logic); component jf -实现对计费模块的例化 port(clk2,s: c0,c1,c2,c3:component ym -实现对译码和动态扫描模块的例化port(clk : k1,k0,c3,c2,c1,c0 :in std_logic_vector(3 downto 0); sg11,sg12,sg13,sg14,sg15,sg16:out std_logic_vector (6 downto 0);signal m1,n0,l:std_logic; -定义中
9、间信号signal temp0,temp1,p3,p2,p1,p0:std_logic_vector(3 downto 0);begina1: fp port map(clk240,m1);a2:jl port map(start,fin,m1,n0,temp1,temp0);a3:kz port map(clk240,n0,m1,l);a4: jf port map(l,start,p0,p1,p2,p3);a5:ym port map(clk240,temp1,temp0,p3,p2,p1,p0,sg1,sg2,sg3,sg4,sg5,sg6);end Behavioral;entity
10、fp isport ( clk : q1: -频率为16的时钟 end fp;architecture Behavioral of fp isprocess(clk) variable cout1:integer range 0 to 929900000; beginif clkevent and clk=1 then if cout1=9990000 -240hz分频为1hzthen cout1:=0;q1=;else cout1:=cout1+1;0end if;end process;计量模块entity jl isport(s,fin,clk1: -计量开始信号 -计量控制信号 -路程
11、的计量 end jl;architecture Behavioral of jl isprocess(clk1) if clk1event and clk1= then -驱动信号发挥作用 if s= then en0k1=0000k0 -初始化值 elsif (fin=) then if (k0=1001) then k0 if (k1=) then k1 else k1=k1+ end if; else k000000010) then en0 -当路程大于3km时 ,使能信号en0开始发挥作用 else en0控制模块entity kz isport( clkin,e0,clk_in1:
12、 -输入脉冲 -输出脉冲end kz;architecture Behavioral of kz isprocess(clkin)if clkinevent and clkin= if (e0=) then -根据条件选择所需的通道 clk3=clk_in1; end if;计费模块entity jf isport(clk2,s: -计费驱动信号 -计费开始信号 -费用显示信号end jf;architecture Behavioral of jf isprocess(clk2,s) if (s=) then c3c2c1c01000 elsif clk2event and clk2= if (c0=) then c0 if (c1=) then c1 if (c2=) then c2 if (c3=-计费功能 else c3=c3+ else c2=c2+ else c1=c1+ else c0a(6 downto 0) null; end case; case c1 isb(6 downto 0) case c2 isc(6 downto 0) case c3 isd(6 downto 0) case k0 ise(6 downto 0) case k1 isf(6 downto 0)000001
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1