【正文】
139。 THEN IF CLK=39。139。 AND CLK39。EVENT THEN IF Q1=9 AND Q0=9 THEN Q1:=0000。Q0:=0000。 ELSIF Q0=9 THEN Q1:=Q1+1。Q0:=0000。 ELSE Q1:=Q1。Q0:=Q0+1。 END IF。 IF(Q10 OR Q03) THEN DDJFBZ=39。139。 END IF。 END IF。 END IF。 DDSJ(7 DOWNTO 4)=Q1。DDSJ(3 DOWNTO 0)=Q0。END PROCESS。END ONE。:從波形圖可以看出在clk的控制下當(dāng)SS為高電平DDBZ為高電平的時候時間計數(shù)但是費(fèi)用沒有計數(shù),DDJFBZ為低電平。::費(fèi)用計數(shù)器模塊用于出租車啟動后,根據(jù)行駛路程和等待時間計算費(fèi)用。當(dāng)出租車啟動時,SS為高電平,用于將費(fèi)用計數(shù)器復(fù)位為起步價10元;當(dāng)車處于行駛狀態(tài)且滿3公里時,select_clk信號選擇distans_enable,此后路程每滿1公里,費(fèi)用計數(shù)器加1元;當(dāng)出租車處于停止等待狀態(tài)且時鐘滿2分鐘時,select_clk信號選擇time_enable信號,時間每滿1分鐘,費(fèi)用計數(shù)器加1元。:library IEEE。use 。use 。定義函數(shù)名PACKAGE PACKEXP1 IS FUNCTION bcd_add8(AIN,BIN : in std_logic_vector) RETURN std_logic_vector。END。描述函數(shù)體PACKAGE BODY PACKEXP1 IS FUNCTION bcd_add8(AIN,BIN : std_logic_vector) RETURN std_logic_vector IS type type_bcdx4 is array(3 downto 0) of std_logic_vector(4 downto 0)。 VARIABLE SA,SB : type_bcdx4。 VARIABLE CI : std_logic_vector(4 downto 0)。 VARIABLE SOUT : std_logic_vector(11 downto 0)。 BEGIN CI:=(others=39。039。)。 SOUT:=(others=39。039。)。 for i in 0 to 1 loop 01的循環(huán) SA(i) := (39。039。 amp。 AIN(i*4+3 downto i*4))+(39。039。 amp。 BIN(i*4+3 downto i*4))+(0000 amp。 CI(i))。 if ((SA(i)(4)=39。139。) or (SA(i)(3 downto 0)9)) then SB(i) := SA(i) + 00110。 else SB(i) := SA(i)。 end if。 CI(i+1) := SB(i)(4)。 SOUT(i*4+4 downto i*4):=SB(i)。 end loop。 RETURN SOUT。END FUNCTION bcd_add8。END。library IEEE。use 。use 。USE 。ENTITY JF is PORT( SS:IN STD_LOGIC。 開始/停止信號,低電平停止,高電平開始 DN:IN STD_LOGIC。 白天黑夜控制,高電平夜間,低電平白天 LC:IN std_logic_vector(7 downto 0)。 路程 DDSJ:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 等待時間 LCJFBZ:IN STD_LOGIC。 路程計費(fèi)標(biāo)志 DDJFBZ:IN STD_LOGIC。 等待計費(fèi)標(biāo)志,高電平時等待開始計費(fèi),低電平不計費(fèi) FY:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 總費(fèi)用END ENTITY JF。architecture ONE of JF is BEGIN 討論白天/黑夜?路程計費(fèi)?等待計費(fèi)? PROCESS(SS,DN,LC,DDSJ,DDJFBZ,LCJFBZ) VARIABLE FY1 :STD_LOGIC_VECTOR(11 DOWNTO 0)。 BEGIN IF SS=39。039。 THEN FY1:=000000000000。 ELSIF DN=39。039。 THEN 白天時 IF LCJFBZ=39。039。 THEN 起始價 FY1(11 DOWNTO 4):=(OTHERS=39。039。)。 9 FY1(3 DOWNTO 0):=1001。 ELSE 加收路程費(fèi) FY1:=bcd_add8(LC,LC)。 FY1:=bcd_add8(FY1,LC)。 多一個脈沖加收3,則變成LC*3 END IF。 ELSIF LCJFBZ=39。039。 THEN 起始價 FY1(11 DOWNTO 5):=(OTHERS=39。039。)。 FY1(4 DOWNTO 0):=10010。 12 ELSE FY1:=bcd_add8(LC,LC)。 FY1:=bcd_add8(FY1,LC)。 FY1:=bcd_add8(FY1,LC)。 每一個脈沖加收4,則變成LC*4 END IF。 IF DN=39。039。 THEN 白天時 IF DDJFBZ=39。039。 THEN 未到等待收費(fèi)時間 FY1:=FY1。 不加收 ELSE 加收路程費(fèi) FY1:=bcd_add8(FY1,DDSJ)。 FY1:=bcd_add8(FY1,DDSJ)。 一超過等待收費(fèi)時間,就立即加收等待時的每個脈沖加2 END IF。 ELSIF DDJFBZ=39。039。 THEN 未到等待收費(fèi)時間 FY1:=FY1。 不加收 ELSE 加收路程費(fèi) FY1:=bcd_add8(FY1,DDSJ)。 一超過等待收費(fèi)時間,就立即加收等待時的每個脈沖加1 END IF。 FY=FY1(7 DOWNTO 0)。 END PROCESS。END ONE。:白天模式黑夜模式從波形圖可以看出DN為高電平選擇白天模式進(jìn)行計費(fèi),DN為低電平選擇黑夜模式進(jìn)行計費(fèi)。:::library ieee。use 。use 。use 。entity YMQ isport(din:in std_logic_vector(7 downto 0)。 dout1:out std_logic_vector(6 downto 0)。 dout0:out std_logic_vector(6 downto 0))。end entity YMQ。architecture one of YMQ isbeginprocess(din)begin case din(7 downto 4) is when 0000 =dout1=1111110。 when 0001 =dout1=0110000。 when 0010 =dout1=1101101。 when 0011 =dout1=1111001。 when 0100 =dout1=0110011。 when 0101 =dout1=1011011。 when 0110 =dout1=1011111。 when 0111 =dout1=1110000。 when 1000 =dout1=1111111。 when 1001 =dout1=1111011。 when others =dout1=0000000。end case。 case din(3 downto 0) is when 0000 =dout0=1111110。 when 0001 =dout0=0110000。 when 0010 =dout0=1101101。 when 0011 =dout0=1111001。 w