【正文】
.0]D D SJ [7. .0]LC J F BZD D J F BZF Y [7. .0]JFins t3 費(fèi)用計(jì)數(shù)器模塊用于出租車(chē)啟動(dòng)后,根據(jù)行駛路程和等待時(shí)間計(jì)算費(fèi)用。DDSJ(3 DOWNTO 0)=Q0。 END IF。Q0:=Q0+1。Q0:=0000。 THEN IF CLK=39。DDJFBZ=39。 BEGIN IF SS=39。 DDJFBZ:OUT STD_LOGIC。 USE 。 計(jì)程模塊仿真結(jié)果: 從波形圖可以看出在時(shí)鐘的控制下當(dāng) SS 為低電平的時(shí)候 LC 為零,當(dāng) SS 為高電平且 WR 為高電平的時(shí)候 LC 開(kāi)始計(jì)數(shù),當(dāng)計(jì)到大于三的時(shí)候輸出了 LCJFBZ為高電平。139。039。 SS 開(kāi)始 /復(fù)位信號(hào) , LC:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 (2) 計(jì)程標(biāo)志程序 library ieee。Q0=Q0+1。Q0=0000。 ELSIF CLKS39。 IF SW=00 OR SW=01 THEN Q1=0000。 architecture one of JC is SIGNAL Q1,Q0:std_logic_vector(3 downto 0)。 use 。 計(jì)程模塊: 計(jì)程模塊的框圖: c lk sSSWRLC [7. .0]JCins t2SSLC [7. .0]LC J F BZLC J F BZins t4 此模塊的功能是計(jì)算出租車(chē)行駛的路程。 FOUT=FULL。 FULL:=39。 THEN IF CNT=100 THEN CNT:=000 。 VARIABLE FULL :STD_LOGIC。 ENTITY PULSE IS PORT(CLK0:IN STD_LOGIC。 計(jì)數(shù)分頻器使用五個(gè)這樣基本的分頻器( 35分頻)組合而成,控制模塊分頻器使用三個(gè)這樣基本的分頻器( 35分頻)組合而成。 (8)譯碼模塊:實(shí)現(xiàn)將車(chē)費(fèi)計(jì)數(shù)模塊、等待狀態(tài)模塊和里程計(jì)數(shù)模塊輸出的 BCD 碼轉(zhuǎn)換成七段碼輸出。 (6)車(chē)費(fèi)計(jì)數(shù)模塊:按行駛里程收費(fèi),分為白天和黑夜。 (3)標(biāo)志模塊:將按鈕產(chǎn)生的脈沖轉(zhuǎn)化為一種標(biāo)志信號(hào)。出租車(chē)到達(dá)目的地停止后,停止計(jì)費(fèi)器,顯示總費(fèi)用。 控制芯片:采用的有 CPLD 或者 FPGA 等。 主要有三個(gè)開(kāi)關(guān)以及三個(gè)限流電阻 ,電源構(gòu)成。 ( 3)實(shí)現(xiàn)模擬功能:白天、黑夜;等待、行駛狀態(tài)。 附加功能: ( 1)增加了晚上計(jì)費(fèi)功能和等待功能。 ( 2)實(shí)現(xiàn)模擬功能:能模擬汽車(chē)啟動(dòng)、停止。 2. 出租車(chē)計(jì)費(fèi)系統(tǒng)的實(shí)驗(yàn)任務(wù)及要求 技術(shù)要求 ( 1)掌握較復(fù)雜邏輯的設(shè)計(jì)、調(diào)試。利用它進(jìn)行產(chǎn)品開(kāi)發(fā),不僅成本低、周期短、可靠性高,而且具有完全的知識(shí)產(chǎn)權(quán)。 基于 FPGA 的出租車(chē)計(jì)價(jià)器設(shè)計(jì) 摘 要 介紹了出租車(chē)計(jì)費(fèi)器系統(tǒng)的組成及工作原理,簡(jiǎn)述了在 EDA 平臺(tái)上用 FPGA器件構(gòu)成該數(shù)字系統(tǒng)的設(shè)計(jì)思想和實(shí)現(xiàn)過(guò)程。本文介紹了一個(gè)以 Altera公司可編程邏輯芯片 cyclone2 系列 的 EP2C5T144C8 的 FPGA芯片 為控制核心、附加一定外圍電路組成的出租車(chē)計(jì)費(fèi)器系統(tǒng)。 ( 2)進(jìn)一步掌握用 VHDL 語(yǔ)言設(shè)計(jì)數(shù)字邏輯電路。 ( 3)設(shè)計(jì)動(dòng)態(tài)掃描電路:將車(chē)費(fèi)、里程、等待時(shí)間動(dòng)態(tài)的顯示出來(lái)。晚上起步價(jià)為 元,并在車(chē)行3公里后再按 4元 /公里計(jì)算車(chē)費(fèi)。 ( 4)設(shè)計(jì)超過(guò)三公里提醒功能。 ( 3)動(dòng)態(tài)顯示模塊 : 此模塊由六個(gè)數(shù)碼 管和三個(gè)二極管所構(gòu)成, 17 個(gè) 200Ω 電阻起到限制電流的作用,使得流到數(shù)碼管的電流適當(dāng),防止數(shù)碼管中的電流過(guò)大,而使得數(shù)碼管損壞。 動(dòng)態(tài)顯示電路:采用的是數(shù)碼管來(lái)實(shí)現(xiàn)功能的輸出。 根據(jù)出租車(chē)計(jì)費(fèi)器的工作過(guò)程,本系統(tǒng)采用分層次、分模塊的方式設(shè)計(jì),其FPGA內(nèi)部具體框圖如下所示。 (4)計(jì)程模塊:在等待信號(hào)未作用時(shí),來(lái)一個(gè)時(shí)鐘脈沖信號(hào),里程值加 1。白天收費(fèi)標(biāo)準(zhǔn):起步費(fèi)為 元,超過(guò) 3 公里按 4 元 /公里,車(chē)暫停超過(guò)三分鐘按 2 元 /分鐘計(jì)算。 單元模塊設(shè)計(jì),仿真結(jié)果及分析 本系統(tǒng)采用層次化、模塊化的設(shè)計(jì)方法,設(shè)計(jì)順序?yàn)樽韵孪蛏?。 分頻 模塊 的 VHDL 程序 LIBRARY IEEE。 FOUT:OUT STD_LOGIC)。 BEGIN IF CLK039。 FULL:=39。039。 END PROCESS。在出租車(chē)啟動(dòng)并行駛的過(guò)程中 (開(kāi)始 /結(jié)束 信號(hào) SS為 1,行駛 /等待 信號(hào) WR為 1),當(dāng)時(shí)鐘 clks是 上升 沿的時(shí)候,系統(tǒng) 即對(duì)路程計(jì)數(shù)器 JC的里程計(jì)數(shù)器進(jìn)行加計(jì)數(shù),當(dāng)路程超過(guò)三公里時(shí),系統(tǒng)將輸出標(biāo)志正脈沖 LCJFBZ。 entity JC is port(clks,SS,WR:in std_logic。 begin process(clks,SS,WR,LC) VARIABLE SW:STD_LOGIC_VECTOR(1 DOWNTO 0)。Q0=0000。EVENT AND CLKS=39。 ELSIF Q0=9 THEN Q1=Q1+1。 END IF。 use 。 LCJFBZ:OUT std_logic)。 OR (LC(7 DOWNTO 4)=0000 AND LC(3 DOWNTO 0)4) THEN LCJFBZ=39。 END IF。 計(jì)時(shí) 模塊: 計(jì)時(shí) 模塊的框圖 : C LKSSD D BZD D J F BZD D SJ [7. .0]D D Z Tins t1 此模塊用于計(jì)算停車(chē)等待的時(shí)間。 USE 。 DDSJ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。039。039。139。 ELSIF Q0=9 THEN Q1:=Q1+1。 END IF。 END IF。 END PROCESS。當(dāng)出租車(chē) 啟動(dòng) 時(shí), SS為高電平, 用于將費(fèi)用計(jì)數(shù)器復(fù)位為起步價(jià) 10元;當(dāng)車(chē)處于行駛狀態(tài)且滿(mǎn) 3公里時(shí), select_clk信號(hào)選擇 distans_enable,此后路程每滿(mǎn) 1公里,費(fèi)用計(jì)數(shù)器加 1元;當(dāng)出租車(chē)處于停止等待狀態(tài)且時(shí)鐘滿(mǎn) 2分鐘時(shí), select_clk信號(hào)選擇 time_enable信號(hào),時(shí)間每滿(mǎn) 1分鐘,費(fèi)用計(jì)數(shù)器加 1元。 定義函數(shù)名 PACKAGE PACKEXP1 IS FUNCTION bcd_add8(AIN,BIN : in std_logic_vector) RETURN std_logic_vector。 VARIABLE CI : std_logic_vector(4 downto 0)。)。 for i in 0 to 1 loop 01的循環(huán) SA(i) := (39。039。 if ((SA(i)(4)=39。 end if。 RETURN SOUT。 use 。 開(kāi)始 /停止信號(hào) ,低電平停止,高電平開(kāi)始 DN:IN STD_LOGIC。 路程計(jì)費(fèi)標(biāo)志 DDJFBZ:IN STD_LOGIC。 BEGIN IF SS=39。039。039。 FY1:=bcd_add8(FY1,LC)。 THEN 起始價(jià) FY1(11 DOWNTO 5):=(OTHERS=39。 12 ELSE FY1:=bcd_add8(LC,LC)。 IF DN=39。 THEN 未到等待收費(fèi)時(shí)間 FY1:=FY1。 ELSIF DDJFBZ=39。 一超過(guò)等待收費(fèi)時(shí)間,就立即加收等待時(shí)的每個(gè)脈沖加 1 END IF。 : 白天模式 黑夜模式 從波形圖可以看出 DN為高電平選擇白天模式進(jìn)行計(jì)費(fèi), DN為低電平選擇黑夜模式進(jìn)行計(jì)費(fèi)。 use 。 end entity YMQ。 when 0011 =dout1=1111001。 when 0111 =dout1=1110000。 end case。 when 0011 =dout0=1111001。 when 0111 =dout0=1110000。 end case。 VHDL程序: (1)sel1模塊 library ieee。 s1:out std_logic_vector(1 downto 0))。event and clk1=39。 end if。 end sel_arc。 s2:out std_logic_vector(2 downto 0))。 when 10=s2=011。 end bbb_arc。 ,仿真結(jié)果及分析 各模塊設(shè)計(jì)仿真實(shí)現(xiàn)后,可分別創(chuàng) 建成元件符號(hào)。 use 。 shuc1,shuc0:out std_logic_vector(6 downto 0)。 BZ:OUT STD_LOGIC)。 end ponent。 DDSJ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 end ponent。 end ponent。 DDSJ:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 end ponent。 end ponent。 end ponent。 ponent sel2 port(sel2:in std_logic_vector(1 downto 0)。 signal x,y,z,W:std_logic_vector(7 downto 0)。 u2:bz port map(aj=ss,bz=b)。 u6:pulse port map(clk0=i,fout=j)。 u10:ddzt p