1、VHDL简易出租车计价器-顶层文件 top.vhd-LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE. STD_LOGIC_UNSIGNED. ALL;USE IEEE. STD_LOGIC_ARITH. ALL;entity top is port (-输入300Hz时钟clk :in std_logic;-按键输入开始信号s :in std_logic;-按键输入等待信号w :in std_logic;-按键输入加速信号sp :in std_logic;-数码管位选sel :out std_logic_vector(5 downto 0)
2、;-七段数码管显示show :out std_logic_vector(7 downto 0);-点阵列显示col:out std_logic_vector (7 downto 0);-lie shuchu -点阵行显示 row:out std_logic_vector (7 downto 0)-hang shuchu);end top ;architecture structural of top is -按键模块,加入防抖component anjian port ( clk :in std_logic; s :in std_logic; w :in std_logic; sp:in st
3、d_logic; -输出加入防抖后的等待信号 stop :out std_logic; -输出加入防抖后的开始信号 start :out std_logic; -输出加入防抖后的调速信号,共3档:00,01,10 speeding:out std_logic_vector(1 downto 0) ); end component;-计时,计里程,计费模块component taxi port( - clk :in std_logic; - start :in std_logic; - night :in std_logic; stop :in std_logic; - mile :in std
4、_logic; -总价格 char0 :out std_logic_vector(3 downto 0); char1 :out std_logic_vector(3 downto 0); char2 :out std_logic_vector(3 downto 0); -总等待时间 min0 :out std_logic_vector(3 downto 0); min1 :out std_logic_vector(3 downto 0); -单程总里程 km0 :out std_logic_vector(3 downto 0); km1 :out std_logic_vector(3 dow
5、nto 0) ); end component; -数码管显示模块 component display port( - reset :in std_logic; - clk :in std_logic; - char0 :in std_logic_vector(3 downto 0); char1 :in std_logic_vector(3 downto 0); char2 :in std_logic_vector(3 downto 0); - min0 :in std_logic_vector(3 downto 0); min1 :in std_logic_vector(3 downto
6、0); - km0 :in std_logic_vector(3 downto 0); km1 :in std_logic_vector(3 downto 0); - sel :out std_logic_vector(5 downto 0); - show :out std_logic_vector(7 downto 0) ); end component; -调速模块component speed port ( clk :in std_logic; speeding :in std_logic_vector(1 downto 0);-输出公里脉冲信号 mile :out std_logic
7、 ); end component; -点阵显示模块component dianzhen port (clk:in std_logic; Start,sp:in std_logic; col:out std_logic_vector (7 downto 0);-lie shuchu row:out std_logic_vector (7 downto 0)-hang shuchu ); end component; - signal char0 :std_logic_vector(3 downto 0); signal char1 :std_logic_vector(3 downto 0);
8、signal char2 :std_logic_vector(3 downto 0); -signal char3 :std_logic_vector(3 downto 0); signal min0 :std_logic_vector(3 downto 0); signal min1 :std_logic_vector(3 downto 0); signal km0 :std_logic_vector(3 downto 0); signal km1 :std_logic_vector(3 downto 0); signal mile :std_logic; signal stop:std_l
9、ogic; signal start:std_logic; signal speeding :std_logic_vector(1 downto 0); begin ss_control:anjian port map( clk=clk, s=s, w=w, start=start, stop=stop, sp=sp, speeding=speeding); taxi_control: taxi port map( - clk =clk, - start =start, - stop =stop, - mile =mile, -night=night, char0 =char0, char1
10、=char1, char2 =char2, -char3 =char3, - min0 =min0, min1 =min1, - km0 =km0, km1 =km1 ); display_control:display port map( - reset =start, - clk =clk, - char0 =char0, char1 =char1, char2 =char2, - min0 =min0, min1 =min1, - km0 =km0, km1 =km1, - sel =sel, - show =show ); speed_control:speed port map( c
11、lk=clk, mile=mile, speeding=speeding);dianzhen_control:dianzhenport map ( clk=clk, start=start, col=col, row=row, Sp=sp ); end structural;-按键模块 anjian.vhd-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity anjian is port ( clk :in std_logic; s :in std_logic; w,sp :in std
12、_logic; stop :out std_logic; start :out std_logic; speeding:out std_logic_vector(1 downto 0) ); end anjian; architecture one of anjian is signal stop1 :std_logic; signal start1 :std_logic;SIGNAL count,scount,count1,scount1,count2,scount2: INTEGER RANGE 0 TO 1999; SIGNAL tkey,tkey1,tkey2 : STD_LOGIC;
13、 SIGNAL JO,jo1,jo2:INTEGER; BEGIN-加入防抖程序,利用按键控制输出开始信号-p1:PROCESS(clk)BEGINIF (clkevent AND clk=1) THEN -计数器 IF s=1 THEN IF count=1999 THEN count=count; ELSE count=count+1; END IF; IF count=1998 THEN tkey=1; ELSE tkey=0; END IF; ELSE count=0; END IF;END IF;END PROCESS p1;p2:PROCESS(tkey,scount)BEGINI
14、F (tkeyevent AND tkey=1) THEN scount=scount+1; ELSE scount=scount;END IF;JO=scount rem 2; END PROCESS p2;p3:PROCESS(JO)BEGINIF JO=0 THEN -判断按键的次数,奇数为1,偶数位0start1=0;ELSEstart1=1;END IF;END PROCESS p3;start=start1;-加入防抖程序,利用按键控制输出等待信号-p4:PROCESS(clk)BEGINIF (clkevent AND clk=1) THEN IF w=1 THEN IF cou
15、nt1=19 THEN count1=count1; ELSE count1=count1+1; END IF; IF count1=18 THEN tkey1=1; ELSE tkey1=0; END IF; ELSE count1=0; END IF;END IF;END PROCESS p4;p5:PROCESS(tkey1,scount1)BEGINIF (tkey1event AND tkey1=1) THEN scount1=scount1+1; ELSE scount1=scount1;END IF;JO1=scount1 rem 2;END PROCESS p5;p6:PROC
16、ESS(JO1)BEGINIF JO1=0 THEN -判断按键的次数,奇数为1,偶数位0stop1=0;ELSEstop1=1;END IF;END PROCESS p6;stop=stop1;-加入防抖程序,利用按键控制输出调速信号-PROCESS(clk)BEGINIF (clkevent AND clk=1) THEN IF sp=1 THEN IF count2=19 THEN count2=count2; ELSE count2=count2+1; END IF; IF count2=18 THEN tkey2=1; ELSE tkey2=0; END IF; ELSE count
17、2=0; END IF;END IF;END PROCESS;PROCESS(tkey2,scount2)BEGINIF (tkey2event AND tkey2=1) THEN if scount2=2 then scount2=0; else scount2=scount2+1; end if; ELSE scount2=scount2;end if;if scount2=0 then -根据按键的次数判断调速的不同档,一次为00,两次为01,三次 speeding=00; -为10speeding=00;elsif scount2=1 thenspeeding=01;elsif sco
18、unt2=2 thenspeeding=10;end if;END PROCESS;END one;-调速模块 speed.vhd-LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE. STD_LOGIC_UNSIGNED. ALL;USE IEEE. STD_LOGIC_ARITH. ALL;entity speed isport ( clk :in std_logic; mile :out std_logic; -输出公里脉冲信号 speeding :in std_logic_vector(1 downto 0); -调速信号,分为三档 e
19、nd speed; architecture one of speed is signal mile1 :std_logic; signal q_temp :integer range 0 to 999999999; signal q_temp1 :integer range 0 to 999999999; begin mile=mile1; process(clk,speeding) begin if speeding=00 then -根据调速信号的不同档,进行不同的分频 q_temp1=99999999; elsif speeding=01 then q_temp1=49999999;
20、elsif speeding=10 then q_temp1=q_temp1 then q_temp=0; mile1=1; else q_temp=q_temp+1; mile1=0; end if ; end if ; end process; end one;-计时计里程计费模块 taxi.vhd-LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE. STD_LOGIC_UNSIGNED. ALL;USE IEEE. STD_LOGIC_ARITH. ALL;ENTiTY taxi ISPORT( -输入时钟 clk :IN STD_LO
21、GIC; -计价器启动 Start :IN STD_LOGIC; -等待信号 Stop :IN STD_LOGIC; -公里脉冲信号 mile :in std_logic; - SIGNAL f_wait1 :out STD_LOGIC ;-SIGNAL f1 :out STD_LOGIC ; -计费输出 Char0 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; Char1 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; Char2 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; -等待时间输出 min0 :OUT ST
22、D_LOGIC_VECTOR(3 DOWNTO 0) ; Min1 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; -行驶公里输出 km0 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; Km1 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END taxi;ARCHITECTURE behave of taxi IS-分频得1HZ时钟SIGNAL clk1hz :STD_LOGIC;-分频器SIGNAL q :INTEGER RANGE 0 to 49999999;SIGNAL sec :iNTEGER RANGE 0
23、 to 2;signal a :iNTEGER RANGE 0 to 4;-计费寄存器SIGNAL c3,c2,c1,c0 :STD_LOGIC_VECTOR(3 DOWNTO 0);-公里寄存器SIGNAL k0 :STD_LOGIC_VECTOR(3 DOWNTO 0) ;SIGNAL k1 :STD_LOGIC_VECTOR(3 DOWNTO 0) ;-等待时间寄存器SIGNAL m1 :STD_LOGIC_VECTOR(3 DOWNTO 0) ;SIGNAL m0 :STD_LOGIC_VECTOR(3 DOWNTO 0) ;-路程大于3公里,使能有效SIGNAL en0 :STD_LOGIC ;SIGNAL en1 :STD_LOGIC ;-等待时间,1脉冲/3秒SIGNAL f_wait :STD_LOGIC ;-公里脉冲signal f_mile_r :std_logic;-计费时钟SIGNAL f : STD_LOGIC ;-单价SIGNAL c :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN -输出显示 min0 = m0; Min1 =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1