版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 一.總體設(shè)計(jì)思路1</p><p><b> 1. 設(shè)計(jì)目的1</b></p><p> 2.系統(tǒng)原理框圖1</p><p> 二.功能模塊設(shè)計(jì)2</p><p><b> 1. 計(jì)費(fèi)模
2、塊2</b></p><p> 2. 數(shù)據(jù)轉(zhuǎn)換模塊2</p><p> 3. 片選信號(hào)產(chǎn)生模塊3</p><p><b> 4. 顯示模塊3</b></p><p> 5. 數(shù)碼管控制模塊4</p><p><b> 6. 分頻模塊4</b>
3、</p><p> 7. 數(shù)碼管選擇模塊4</p><p> 三.各個(gè)模塊設(shè)計(jì)及仿真5</p><p><b> 1.計(jì)費(fèi)模塊5</b></p><p> 2.?dāng)?shù)據(jù)轉(zhuǎn)換模塊8</p><p> 3.片選信號(hào)產(chǎn)生模塊11</p><p><b>
4、 4.顯示模塊12</b></p><p> 5.?dāng)?shù)碼管控制模塊14</p><p><b> 6.分頻模塊15</b></p><p> 7. 數(shù)碼管選擇模塊17</p><p> 四.總體設(shè)計(jì)電路圖18</p><p> 五. 硬件實(shí)現(xiàn)19</p>
5、;<p><b> 六.心得體會(huì)21</b></p><p><b> 七.程序清單22</b></p><p><b> 八.參考文獻(xiàn)32</b></p><p><b> 一.總體設(shè)計(jì)思路</b></p><p><b
6、> 1. 設(shè)計(jì)目的</b></p><p> 隨著EDA技術(shù)的高速發(fā)展,電子系統(tǒng)的設(shè)計(jì)技術(shù)發(fā)生了深刻的變化,大規(guī)??删幊踢壿嬈骷﨏OLD/FPGA的出現(xiàn),給設(shè)計(jì)人員帶來了諸多方便,利用它進(jìn)行產(chǎn)品開發(fā),不僅成本低,周期、可靠性高,而且具有完全的知識(shí)產(chǎn)權(quán)。隨著社會(huì)的不斷進(jìn)步,人們生活水平的不斷提高,出租車逐漸成為人們?nèi)粘I畈豢扇鄙俚慕煌üぞ?。而?jì)價(jià)器作為出租車的一個(gè)重要組成部分,關(guān)系著出租車司
7、機(jī)和乘客雙方利益,起著重要的作用,因而出租車司機(jī)和乘客雙方利益,起著重要的作用,因而出租車計(jì)價(jià)器的發(fā)展非常迅猛。</p><p><b> 2.系統(tǒng)原理框圖</b></p><p> 基于CPLD的出租車計(jì)費(fèi)器的組成如圖1所示。各部分主要功能包括:信號(hào)輸入模塊對(duì)車輪傳感器的脈沖信號(hào)進(jìn)行計(jì)數(shù),并以高低電平模擬出租車啟動(dòng)、停止、暫停、加速按鈕,具有輸入信號(hào)作用;數(shù)據(jù)轉(zhuǎn)
8、換模塊將計(jì)費(fèi)模塊輸出的車費(fèi)和路程換成4位的十進(jìn)制數(shù)據(jù);譯碼/動(dòng)態(tài)掃描模塊將路程與費(fèi)用的數(shù)值譯碼后用動(dòng)態(tài)掃描的方式驅(qū)動(dòng)數(shù)碼管;數(shù)碼管顯示模塊將公里和計(jì)費(fèi)金額用4位LED數(shù)碼管顯示。</p><p> 圖1.1 系統(tǒng)總體框圖</p><p><b> 二.功能模塊設(shè)計(jì)</b></p><p><b> 1. 計(jì)費(fèi)模塊</b&
9、gt;</p><p> 此模塊為計(jì)費(fèi)模塊(即總體結(jié)構(gòu)中的信號(hào)輸入模塊),實(shí)現(xiàn)計(jì)費(fèi)功能,計(jì)費(fèi)標(biāo)準(zhǔn)為:按行駛里程計(jì)費(fèi),起步價(jià)為7.00元,并在車行3公里后按2.20元/km計(jì)費(fèi),當(dāng)計(jì)數(shù)器達(dá)到或超過20元時(shí),每公里加收50%的車費(fèi),即按3.30元/km計(jì)費(fèi)。CLK、START、STOP、PAUSE、JS為輸入信號(hào),分別代表汽車的起動(dòng)、停止、暫停和加速,CLK為掃描時(shí)鐘,硬件實(shí)現(xiàn)時(shí)加入時(shí)鐘信號(hào),另有兩個(gè)輸出,即CHE
10、FEI和LUC,分別代表車費(fèi)和路程,當(dāng)車處于行駛狀態(tài)時(shí),此模塊會(huì)自動(dòng)記錄下路程與車費(fèi)狀況并作為轉(zhuǎn)換模塊的輸入。其模塊生成圖如下:</p><p><b> 圖2.1 計(jì)費(fèi)模塊</b></p><p><b> 2. 數(shù)據(jù)轉(zhuǎn)換模塊</b></p><p> 此模塊功能是將計(jì)費(fèi)模塊產(chǎn)生的車費(fèi)與路程的模擬量轉(zhuǎn)換成數(shù)字量并輸
11、出,它是一個(gè)模為10的加法計(jì)數(shù)器,可將計(jì)費(fèi)模塊輸出的車費(fèi)和路程轉(zhuǎn)換成4位的十進(jìn)制數(shù)。其中DACLK為時(shí)鐘信號(hào),ASCORE、BSCORE連接計(jì)費(fèi)模塊的CHEFEI和LUC,輸出為2個(gè)4位的十進(jìn)制數(shù),可以分別表示路程和車費(fèi)情況。當(dāng)車運(yùn)行于不同狀況時(shí),此模塊會(huì)將不同的車費(fèi)與路程狀況轉(zhuǎn)換為數(shù)字量并輸出。其模塊生成圖如下:</p><p> 圖2.2 數(shù)據(jù)轉(zhuǎn)換模塊</p><p> 3. 片選
12、信號(hào)產(chǎn)生模塊</p><p> 此模塊功能是選擇八段數(shù)碼管按照設(shè)計(jì)要求進(jìn)行正確的顯示。</p><p><b> 其模塊生成圖如下:</b></p><p> 圖2.3 片選信號(hào)產(chǎn)生模塊</p><p><b> 4. 顯示模塊</b></p><p> 此模塊為顯
13、示模塊中的動(dòng)態(tài)掃描/譯碼/數(shù)碼管顯示模塊,功能是將已轉(zhuǎn)換好的數(shù)字量加載到兩個(gè)4位七段數(shù)碼管上并加以顯示。C[2..0]為片選端,用來連接片選模塊的片選輸出端A[2..0],A1、A2、A3、A4、B1、B2、B3、B4分別連接數(shù)據(jù)轉(zhuǎn)換模塊的八個(gè)轉(zhuǎn)換輸出端,因?yàn)樵O(shè)計(jì)要求路程和車費(fèi)都要用2位小數(shù)點(diǎn)來表示,所以須設(shè)置一個(gè)控制小數(shù)點(diǎn)的變量,即程序中的DP端,D[3..0]連接數(shù)碼管控制模塊的輸入端。</p><p>&l
14、t;b> 其模塊生成圖如下:</b></p><p><b> 圖2.4 顯示模塊</b></p><p> 5. 數(shù)碼管控制模塊 </p><p> 此模塊功能是控制七段數(shù)碼管對(duì)轉(zhuǎn)換后的數(shù)字量進(jìn)行顯示,使其完成路程和車費(fèi)的顯示。其中D[3..0]連接動(dòng)態(tài)掃描/譯碼/數(shù)碼管顯示模塊的D[3..0]端,Q[6..0]連接
15、七段數(shù)碼管,利用其控制特性在數(shù)碼管上顯示出車費(fèi)和路程。</p><p><b> 其模塊生成圖如下:</b></p><p> 圖2.5數(shù)碼管控制模塊</p><p><b> 6. 分頻模塊</b></p><p> div模塊將實(shí)驗(yàn)箱上50Mhz脈沖信號(hào)分頻為500hz。</p&g
16、t;<p><b> div生成模塊圖:</b></p><p><b> 圖2.6 分頻模塊</b></p><p> 7. 數(shù)碼管選擇模塊</p><p> sel通過decode3_8模塊選擇數(shù)碼管</p><p> decode3_8生成模塊圖:</p>
17、<p> 圖2.7 數(shù)碼管選擇模塊</p><p> 三.各個(gè)模塊設(shè)計(jì)及仿真</p><p><b> 1.計(jì)費(fèi)模塊</b></p><p><b> 計(jì)費(fèi)模塊源程序:</b></p><p> library ieee;</p><p> use
18、ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity jfmk is</p><p> port(clk,start,stop,pause,js:in std_logic;</p><p> chefei,luc:out i
19、nteger range 0 to 8000);</p><p><b> end jfmk;</b></p><p> architecture one of jfmk is</p><p><b> begin</b></p><p> process(clk,start,stop,pa
20、use,js)</p><p> variable a,b:std_logic;</p><p> variable aa:integer range 0 to 100;</p><p> variable chf,lc:integer range 0 to 8000;</p><p> variable num:integer ra
21、nge 0 to 9;</p><p><b> begin</b></p><p> if(clk'event and clk='1')then</p><p> if(stop='0') then</p><p><b> chf:=0;</b>&
22、lt;/p><p><b> num:=0;</b></p><p><b> b:='1';</b></p><p><b> aa:=0;</b></p><p><b> lc:=0;</b></p><p&g
23、t; elsif(start='0') then</p><p><b> b:='0';</b></p><p><b> chf:=700;</b></p><p><b> lc:=0;</b></p><p> elsif(st
24、art='1' and js='1' and pause='1') then</p><p> if(b='0')then</p><p> num:=num+1;</p><p><b> end if;</b></p><p> if(num=9
25、)then</p><p><b> lc:=lc+5;</b></p><p><b> num:=0;</b></p><p><b> aa:=aa+5;</b></p><p><b> end if;</b></p><
26、;p> elsif(start='1' and js='0' and pause='1')then</p><p><b> lc:=lc+1;</b></p><p><b> aa:=aa+1;</b></p><p><b> end if;&l
27、t;/b></p><p> if(aa>=100)then</p><p><b> a:='1';</b></p><p><b> aa:=0;</b></p><p><b> else</b></p><p>
28、;<b> a:='0';</b></p><p><b> end if;</b></p><p> if(lc<300)then</p><p><b> null;</b></p><p> elsif(chf<2000 and a=
29、'1') then</p><p> chf:=chf+220;</p><p> elsif(chf>=2000 and a='1')then</p><p> chf:=chf+330;</p><p><b> end if;</b></p><p&
30、gt;<b> end if;</b></p><p> chefei<=chf;</p><p><b> luc<=lc;</b></p><p> end process;</p><p><b> end one;</b></p>&
31、lt;p> jifei模塊的時(shí)序仿真圖:</p><p> 圖3.1 計(jì)費(fèi)模塊時(shí)序仿真圖</p><p> 圖3.2 計(jì)費(fèi)模塊時(shí)序仿真圖</p><p><b> 時(shí)序仿真圖分析: </b></p><p> 圖中的stop為汽車停止輸入端,上升沿有效;start為汽車啟動(dòng)輸入端,上升沿有效;pause為
32、汽車暫停輸入端,上升沿有效;js為汽車加速輸入端,上升沿有效。CLK為時(shí)鐘源信號(hào);chefei為汽車車費(fèi)輸出端,luc為汽車路程輸出端。</p><p> 由圖3.1可知:當(dāng)stop,Start,pause,js全為高電平時(shí)路程按5的速度增加,起車車價(jià)為700.由圖3.2可知,當(dāng)路程增加到300時(shí),車費(fèi)變?yōu)?20,以后路程每增加100,車費(fèi)增加220</p><p><b>
33、 2.?dāng)?shù)據(jù)轉(zhuǎn)換模塊</b></p><p><b> x模塊的源程序:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p>
34、;<p> entity x is</p><p> port(daclk:in std_logic;</p><p> ascore,bscore:in integer range 0 to 8000;</p><p> age,ashi,abai,aqian,bge,bshi,bbai,bqian:out std_logic_vector(
35、3 downto 0));</p><p><b> end x;</b></p><p> architecture rt1 of x is</p><p><b> begin</b></p><p> process(daclk,ascore)</p><p>
36、 variable comb1:integer range 0 to 8000;</p><p> variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto 0);</p><p><b> begin</b></p><p> if (daclk'event
37、and daclk='1')then</p><p> if(comb1<ascore)then</p><p> if(comb1a=9 and comb1b=9 and comb1c=9)then</p><p> comb1a:="0000";</p><p> comb1b:=&quo
38、t;0000";</p><p> comb1c:="0000";</p><p> comb1d:=comb1d+1;</p><p> comb1:=comb1+1;</p><p> elsif(comb1a=9 and comb1b=9)then</p><p> com
39、b1a:="0000";</p><p> comb1b:="0000";</p><p> comb1:=comb1+1;</p><p> comb1c:=comb1c+1;</p><p> elsif(comb1a=9)then</p><p> comb1a:
40、="0000";</p><p> comb1b:=comb1b+1;</p><p> comb1:=comb1+1;</p><p><b> else</b></p><p> comb1a:=comb1a+1;</p><p> comb1:=comb1+1;
41、</p><p><b> end if;</b></p><p><b> else</b></p><p> ashi<=comb1b;</p><p> age<=comb1a;</p><p> abai<=comb1c;</p>
42、;<p> aqian<=comb1d;</p><p><b> comb1:=0;</b></p><p> comb1a:="0000";</p><p> comb1b:="0000";</p><p> comb1c:="0000&
43、quot;;</p><p> comb1d:="0000";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(da
44、clk,bscore)</p><p> variable comb2:integer range 0 to 8000;</p><p> variable comb2a,comb2b,comb2c,comb2d:std_logic_vector(3 downto 0);</p><p><b> begin</b></p>
45、<p> if(daclk'event and daclk='1')then</p><p> if(comb2<bscore)then</p><p> if(comb2a=9 and comb2b=9 and comb2c=9)then</p><p> comb2a:="0000";<
46、/p><p> comb2b:="0000";</p><p> comb2c:="0000";</p><p> comb2d:=comb2d+1;</p><p> comb2:=comb2+1;</p><p> elsif(comb2a=9 and comb2b=9
47、)then</p><p> comb2a:="0000";</p><p> comb2b:="0000";</p><p> comb2:=comb2+1;</p><p> comb2c:=comb2c+1;</p><p> elsif(comb2a=9)the
48、n</p><p> comb2a:="0000";</p><p> comb2b:=comb2b+1;</p><p> comb2:=comb2+1;</p><p><b> else</b></p><p> comb2a:=comb2a+1;</p&
49、gt;<p> comb2:=comb2+1;</p><p><b> end if;</b></p><p><b> else</b></p><p> bshi<=comb2b;</p><p> bge<=comb2a;</p><p
50、> bbai<=comb2c;</p><p> bqian<=comb2d;</p><p><b> comb2:=0;</b></p><p> comb2a:="0000";</p><p> comb2b:="0000";</p>
51、<p> comb2c:="0000";</p><p> comb2d:="0000";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;&l
52、t;/p><p><b> end rt1;</b></p><p> 圖3.3 數(shù)據(jù)轉(zhuǎn)換模塊時(shí)序仿真圖</p><p> 圖3.4 數(shù)據(jù)轉(zhuǎn)換模塊時(shí)序仿真圖</p><p> 圖3.5 數(shù)據(jù)轉(zhuǎn)換模塊時(shí)序仿真圖</p><p> 3.片選信號(hào)產(chǎn)生模塊</p><p>
53、 se模塊的源程序如下:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity sel is</p><p> port(cl
54、k:in std_logic;</p><p> a:out std_logic_vector(2 downto 0));</p><p><b> end sel;</b></p><p> architecture rt1 of sel is</p><p><b> begin</b>
55、</p><p> process(clk)</p><p> variable b:std_logic_vector(2 downto 0);</p><p><b> begin</b></p><p> if(clk'event and clk='1')then</p>
56、<p> if(b="111")then</p><p><b> b:="000";</b></p><p><b> else</b></p><p><b> b:=b+1;</b></p><p><b&
57、gt; end if;</b></p><p><b> end if;</b></p><p><b> a<=b;</b></p><p> end process;</p><p><b> end rt1; </b></p>&
58、lt;p> 圖3.6片選信號(hào)產(chǎn)生模塊時(shí)序仿真圖</p><p> 由圖可以看出,當(dāng)CLK加入時(shí)鐘信號(hào)時(shí),a從000到111逐個(gè)變化,該模塊可將模擬信號(hào)進(jìn)行片選并有對(duì)應(yīng)的數(shù)碼管進(jìn)行顯示。</p><p><b> 4.顯示模塊</b></p><p> xxx1模塊的源程序:</p><p> librar
59、y ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity xxxl is</p><p> port(c:in std_logic_vector(2 downto 0);</p&g
60、t;<p> dp:out std_logic;</p><p> a1,a2,a3,a4,b1,b2,b3,b4:in std_logic_vector(3 downto 0);</p><p> d:out std_logic_vector(3 downto 0));</p><p><b> end xxxl;</b>
61、;</p><p> architecture rtl of xxxl is</p><p><b> begin</b></p><p> process(c,a1,a2,a3,a4,b1,b2,b3,b4)</p><p> variable comb:std_logic_vector(2 downto 0)
62、;</p><p><b> begin </b></p><p><b> comb:=c;</b></p><p> case comb is</p><p> when"000"=>d<=a1;</p><p><b>
63、 dp<='0';</b></p><p> when"001"=>d<=a2;</p><p><b> dp<='0';</b></p><p> when"010"=>d<=a3;</p><
64、p><b> dp<='1';</b></p><p> when"011"=>d<=a4;</p><p><b> dp<='0';</b></p><p> when"100"=>d<=b1;&l
65、t;/p><p><b> dp<='0';</b></p><p> when"101"=>d<=b2;</p><p><b> dp<='0';</b></p><p> when"110"=&
66、gt;d<=b3;</p><p><b> dp<='1';</b></p><p> when"111"=>d<=b4;</p><p><b> dp<='0';</b></p><p> when ot
67、hers=>null;</p><p><b> end case;</b></p><p> end process;</p><p><b> end rtl;</b></p><p> 圖3.7 顯示模塊時(shí)序仿真圖</p><p> 由上圖可知,輸入信號(hào)
68、C為3位片選信號(hào)其變化范圍為0到7,輸入信號(hào)c從0到7逐個(gè)變化時(shí),輸出d逐個(gè)輸a1,a2,a3,a4,b1,b2,b3,b4的輸入信號(hào)。</p><p><b> 5.?dāng)?shù)碼管控制模塊</b></p><p><b> di模塊的源程序:</b></p><p> library ieee;</p>&l
69、t;p> use ieee.std_logic_1164.all;</p><p> entity di is</p><p> port(d:in std_logic _vector(3 downto 0);</p><p> q:out std_logic_vector(6 downto 0));</p><p><b
70、> end di;</b></p><p> architecture rtl of di is</p><p><b> begin</b></p><p> process(d)</p><p><b> begin</b></p><p>&
71、lt;b> case d is</b></p><p> when"0000"=>q<="0111111";</p><p> when"0001"=>q<="0000110";</p><p> when"0010"
72、=>q<="1011011";</p><p> when"0011"=>q<="1001111";</p><p> when"0100"=>q<="1100110";</p><p> when"0101&quo
73、t;=>q<="1101101";</p><p> when"0110"=>q<="1111101";</p><p> when"0111"=>q<="0100111";</p><p> when"1000&q
74、uot;=>q<="1111111";</p><p> when others=>q<="1101111";</p><p><b> end case;</b></p><p> end process;</p><p><b> en
75、d rtl;</b></p><p> 圖3.8 數(shù)碼管控制模塊時(shí)序仿真圖</p><p> 圖3.9 數(shù)碼管控制模塊時(shí)序仿真圖</p><p> 從波形圖中可看出,此模塊可控制數(shù)碼管完成對(duì)數(shù)字量的顯示。當(dāng)輸入為0000-1000時(shí)數(shù)碼管分別顯示0,1,2,3,4,5,6,7,8。當(dāng)輸入為其他時(shí)數(shù)碼管顯示9。</p><p>
76、;<b> 6.分頻模塊</b></p><p><b> div模塊源程序:</b></p><p> LIBRARY ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all
77、;</p><p> ENTITY div IS</p><p> port(clk:IN std_logic;</p><p> clkout:OUT std_logic</p><p><b> );</b></p><p><b> end div;</b>&
78、lt;/p><p> ARCHITECTURE one OF div IS</p><p><b> BEGIN</b></p><p> process(clk)</p><p> variable cnt:integer range 0 to 100000;</p><p> varia
79、ble tmp:std_logic;</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><p> if cnt>=99999 then</p><p><b> cnt:=0;</b&g
80、t;</p><p> tmp:=not tmp;</p><p><b> else</b></p><p> cnt:=cnt+1;</p><p><b> end if;</b></p><p><b> end if;</b><
81、/p><p> clkout<=tmp;</p><p> end process;</p><p><b> end one;</b></p><p> 圖3.10 分頻模塊時(shí)序仿真圖</p><p> 7. 數(shù)碼管選擇模塊</p><p><b>
82、 其源程序:</b></p><p> LIBRARY ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> ENTITY decode3_8 IS</p><p&g
83、t; PORT(SEL:IN std_logic_vector(2 downto 0);</p><p> Q:OUT std_logic_vector(7 downto 0));</p><p> END decode3_8;</p><p> ARCHITECTURE a OF decode3_8 IS</p><p><b
84、> BEGIN</b></p><p> Q<="11111110"when sel=0 else</p><p> "11111101"when sel=1 else</p><p> "11111011"when sel=2 else</p><p&g
85、t; "11110111"when sel=3 else</p><p> "11101111"when sel=4 else</p><p> "11011111"when sel=5 else</p><p> "10111111"when sel=6 else</p&
86、gt;<p> "01111111"when sel=7 else</p><p> "11111111";</p><p><b> END a;</b></p><p> 圖3.11數(shù)碼管選擇模塊時(shí)序仿真圖</p><p><b> 四.總體設(shè)
87、計(jì)電路圖</b></p><p><b> 圖4.1 總原理圖</b></p><p><b> 五. 硬件實(shí)現(xiàn)</b></p><p> 通過硬件下載,該電路可以完成硬件實(shí)現(xiàn),芯片管腳定義可以直接用編輯.pin文件。完成管腳定義后選擇器件,編譯后生成.sof、.pof文件。選擇sof文件進(jìn)行下載。<
88、;/p><p> 通過對(duì)每一模塊的仿真和下載,可以實(shí)現(xiàn)各個(gè)模塊的邏輯功能,驗(yàn)證了各個(gè)模塊的正確性。在出租車計(jì)費(fèi)系統(tǒng)的5個(gè)模塊中 ,重點(diǎn)在于jifei模塊,x(轉(zhuǎn)化)模塊,顯示模塊。jifei模塊主要有汽車的啟動(dòng)、停止、暫停、加速按鍵;轉(zhuǎn)化模塊主要是把車費(fèi)和路程轉(zhuǎn)化為4位十進(jìn)制;顯示模塊是將車費(fèi)和路程顯示出來。各模塊完成后,在將它們組合成完整的出租車系統(tǒng),在設(shè)計(jì)過程中還需要改進(jìn)的是控制系統(tǒng)的糾錯(cuò)功能。</p&g
89、t;<p> 出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)已全部完成,能按預(yù)期的效果進(jìn)行模擬汽車啟動(dòng)、停止、暫停等功能,并設(shè)計(jì)動(dòng)態(tài)掃描電路顯示車費(fèi)數(shù)目,由動(dòng)態(tài)掃描電路來完成。車暫時(shí)停止不計(jì)費(fèi),車費(fèi)保持不變。若停止則車費(fèi)清零,等待下一次計(jì)費(fèi)的開始。出租車計(jì)費(fèi)系統(tǒng)的設(shè)計(jì)中體現(xiàn)了VHDL覆蓋面廣,描述能力強(qiáng),是一個(gè)多層次的硬件描述語言及PLD器件速度快,使用方便,便于修改等特點(diǎn),本設(shè)計(jì)在實(shí)用方面具有一定的價(jià)值。</p><p&g
90、t;<b> 實(shí)驗(yàn)表明:</b></p><p> 該計(jì)費(fèi)器實(shí)現(xiàn)了按預(yù)置參數(shù)自動(dòng)計(jì)費(fèi)(最大計(jì)費(fèi)金額為99.99元)、自動(dòng)計(jì)程(最大計(jì)程公里數(shù)為99.99 km)等功能;能夠?qū)崿F(xiàn)起步價(jià)、每公里收費(fèi)、車型及加費(fèi)里程的參數(shù)預(yù)置(如:起步價(jià)7.00元;3 km后,2.20元/km;計(jì)費(fèi)超過20.00元,每公里加收50%的車費(fèi)等),且預(yù)置參數(shù)可調(diào)范圍廣。由于采用CPLD大規(guī)??删幊踢壿嬈骷?,整機(jī)功
91、耗小、抗干擾能力強(qiáng)、系統(tǒng)穩(wěn)定、工作可靠、升級(jí)方便。</p><p> 其調(diào)試結(jié)果如下圖所示:</p><p><b> 圖5.1調(diào)試結(jié)果</b></p><p> 由圖5.1可知,起步價(jià)為7元。</p><p><b> 圖5.2 調(diào)試結(jié)果</b></p><p>
92、 由圖5.2可知,當(dāng)每增加半公里時(shí),價(jià)格增加1.2元</p><p><b> 六.心得體會(huì)</b></p><p> 短短兩周的EDA課程設(shè)計(jì)已經(jīng)接近尾聲了,我們從挑選課設(shè)題目,查閱資料,到研究出總體設(shè)計(jì),詳細(xì)設(shè)計(jì),然后分工合作,再到最后的編程上機(jī)調(diào)試,修改程序,完善程序,收獲頗多。出租車計(jì)費(fèi)器系統(tǒng)的設(shè)計(jì)已全部完成,能按預(yù)期的效果進(jìn)行模擬汽車啟動(dòng),停止、暫停等功
93、能,并設(shè)計(jì)動(dòng)態(tài)掃描電路顯示車費(fèi)數(shù)目。車暫停時(shí)停止計(jì)費(fèi)。若停止清零,等待下一次計(jì)費(fèi)的開始。出租車計(jì)費(fèi)系統(tǒng)設(shè)計(jì)中體現(xiàn)了VHDL覆蓋面廣,描述能力強(qiáng),是一個(gè)多層次的硬件描述語言及PLD器件速度快,使用方便,便于修改等特點(diǎn)。本設(shè)計(jì)在使用方面居庸一點(diǎn)的價(jià)值。由于時(shí)間有限和經(jīng)驗(yàn)是平的欠缺,不足之處還望老師予以指正。</p><p> 在這輛周里我們?cè)俅问煜ず驮鰪?qiáng)了對(duì)VHDL語言的基本知識(shí),熟悉利用VHDL語言對(duì)常用的組合邏
94、輯電路和時(shí)序邏輯電路編程,把編程和實(shí)際結(jié)合起來。VHDL硬件描述語言打破了硬件和軟件設(shè)計(jì)人員之間互不干涉的界限,可以使用語言的形式來進(jìn)行數(shù)字系統(tǒng)的硬件結(jié)構(gòu)、行為的描述,直接設(shè)計(jì)數(shù)字電路硬件系統(tǒng)。通過編程、下載后,該芯片已經(jīng)具備了原來需要使用復(fù)雜的數(shù)字電路實(shí)現(xiàn)的功能;更加了解和加深了對(duì)編制和調(diào)試程序的技巧,進(jìn)一步提高了上機(jī)動(dòng)手能力,培養(yǎng)了使用設(shè)計(jì)綜合電路的能力,養(yǎng)成了提供文檔資料的習(xí)慣和規(guī)范編程的思想。</p><p&
95、gt; 本次的課程設(shè)計(jì)將各個(gè)單一的模塊實(shí)現(xiàn)其功能后,學(xué)會(huì)通過原理圖或頂層文件把各模塊連接,從而實(shí)現(xiàn)對(duì)出租車自動(dòng)計(jì)費(fèi)。課設(shè)注重的不僅是把理論知識(shí)鞏固,而且應(yīng)把理論和實(shí)際相結(jié)合,把知識(shí)應(yīng)用到生活中。在課設(shè)過程中,遇到了不少問題,數(shù)碼管無法正常顯示,計(jì)費(fèi)不按要求等。通過的對(duì)源代碼的修改,發(fā)現(xiàn)了一些易忽略的細(xì)節(jié)。課設(shè)考驗(yàn)的是思維邏輯能力,對(duì)知識(shí)的靈活應(yīng)用,當(dāng)然,合作精神是不可或缺的。課設(shè)時(shí)間不長,要在短時(shí)間內(nèi)完成絕不是個(gè)人力量能達(dá)到的,要學(xué)會(huì)
96、集眾人之精華,還要善于利用已有的工具為自己服務(wù),開拓思維。課設(shè)讓我們認(rèn)識(shí)到所學(xué)本科知識(shí)的真正實(shí)用性,只是這門課開始研究的第一步。</p><p> 在設(shè)計(jì)程序時(shí),不能妄想一次就將整個(gè)程序設(shè)計(jì)好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個(gè)程序的完美與否不僅僅是實(shí)現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計(jì)課程過程中遇到問題是很正常的,但應(yīng)該將每次遇到
97、的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。課程設(shè)計(jì)結(jié)束了,但是從中學(xué)到的知識(shí)會(huì)讓我受益終身。發(fā)現(xiàn)、提出、分析、解決問題和實(shí)踐能力的提高都會(huì)受益于我在以后的學(xué)習(xí)、工作和生活中。在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。最后,我們衷心的感謝課設(shè)期間一直指導(dǎo)和陪伴著我們的老師。</p><p><b> 七.程序清單</b></p&
98、gt;<p><b> 計(jì)費(fèi)模塊源程序:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity jfmk
99、 is</p><p> port(clk,start,stop,pause,js:in std_logic;</p><p> chefei,luc:out integer range 0 to 8000);</p><p><b> end jfmk;</b></p><p> architecture on
100、e of jfmk is</p><p><b> begin</b></p><p> process(clk,start,stop,pause,js)</p><p> variable a,b:std_logic;</p><p> variable aa:integer range 0 to 100;&l
101、t;/p><p> variable chf,lc:integer range 0 to 8000;</p><p> variable num:integer range 0 to 9;</p><p><b> begin</b></p><p> if(clk'event and clk='1&
102、#39;)then</p><p> if(stop='0') then</p><p><b> chf:=0;</b></p><p><b> num:=0;</b></p><p><b> b:='1';</b></p&g
103、t;<p><b> aa:=0;</b></p><p><b> lc:=0;</b></p><p> elsif(start='0') then</p><p><b> b:='0';</b></p><p>&l
104、t;b> chf:=700;</b></p><p><b> lc:=0;</b></p><p> elsif(start='1' and js='1' and pause='1') then</p><p> if(b='0')then</p&
105、gt;<p> num:=num+1;</p><p><b> end if;</b></p><p> if(num=9)then</p><p><b> lc:=lc+5;</b></p><p><b> num:=0;</b></p&g
106、t;<p><b> aa:=aa+5;</b></p><p><b> end if;</b></p><p> elsif(start='1' and js='0' and pause='1')then</p><p><b> lc:=
107、lc+1;</b></p><p><b> aa:=aa+1;</b></p><p><b> end if;</b></p><p> if(aa>=100)then</p><p><b> a:='1';</b></p&
108、gt;<p><b> aa:=0;</b></p><p><b> else</b></p><p><b> a:='0';</b></p><p><b> end if;</b></p><p> if(l
109、c<300)then</p><p><b> null;</b></p><p> elsif(chf<2000 and a='1') then</p><p> chf:=chf+220;</p><p> elsif(chf>=2000 and a='1')
110、then</p><p> chf:=chf+330;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> chefei<=chf;</p><p><b> luc<=lc;&
111、lt;/b></p><p> end process;</p><p><b> end one;</b></p><p> 數(shù)據(jù)轉(zhuǎn)換模塊的源程序:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</
112、p><p> use ieee.std_logic_unsigned.all;</p><p> entity x is</p><p> port(daclk:in std_logic;</p><p> ascore,bscore:in integer range 0 to 8000;</p><p> ag
113、e,ashi,abai,aqian,bge,bshi,bbai,bqian:out std_logic_vector(3 downto 0));</p><p><b> end x;</b></p><p> architecture rt1 of x is</p><p><b> begin</b></p
114、><p> process(daclk,ascore)</p><p> variable comb1:integer range 0 to 8000;</p><p> variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto 0);</p><p><b>
115、 begin</b></p><p> if (daclk'event and daclk='1')then</p><p> if(comb1<ascore)then</p><p> if(comb1a=9 and comb1b=9 and comb1c=9)then</p><p> c
116、omb1a:="0000";</p><p> comb1b:="0000";</p><p> comb1c:="0000";</p><p> comb1d:=comb1d+1;</p><p> comb1:=comb1+1;</p><p>
117、 elsif(comb1a=9 and comb1b=9)then</p><p> comb1a:="0000";</p><p> comb1b:="0000";</p><p> comb1:=comb1+1;</p><p> comb1c:=comb1c+1;</p>&
118、lt;p> elsif(comb1a=9)then</p><p> comb1a:="0000";</p><p> comb1b:=comb1b+1;</p><p> comb1:=comb1+1;</p><p><b> else</b></p><p&g
119、t; comb1a:=comb1a+1;</p><p> comb1:=comb1+1;</p><p><b> end if;</b></p><p><b> else</b></p><p> ashi<=comb1b;</p><p> age&
120、lt;=comb1a;</p><p> abai<=comb1c;</p><p> aqian<=comb1d;</p><p><b> comb1:=0;</b></p><p> comb1a:="0000";</p><p> comb1b:=
121、"0000";</p><p> comb1c:="0000";</p><p> comb1d:="0000";</p><p><b> end if;</b></p><p><b> end if;</b></p>
122、;<p> end process;</p><p> process(daclk,bscore)</p><p> variable comb2:integer range 0 to 8000;</p><p> variable comb2a,comb2b,comb2c,comb2d:std_logic_vector(3 downto 0)
123、;</p><p><b> begin</b></p><p> if(daclk'event and daclk='1')then</p><p> if(comb2<bscore)then</p><p> if(comb2a=9 and comb2b=9 and comb2c
124、=9)then</p><p> comb2a:="0000";</p><p> comb2b:="0000";</p><p> comb2c:="0000";</p><p> comb2d:=comb2d+1;</p><p> comb2:
125、=comb2+1;</p><p> elsif(comb2a=9 and comb2b=9)then</p><p> comb2a:="0000";</p><p> comb2b:="0000";</p><p> comb2:=comb2+1;</p><p>
126、 comb2c:=comb2c+1;</p><p> elsif(comb2a=9)then</p><p> comb2a:="0000";</p><p> comb2b:=comb2b+1;</p><p> comb2:=comb2+1;</p><p><b> el
127、se</b></p><p> comb2a:=comb2a+1;</p><p> comb2:=comb2+1;</p><p><b> end if;</b></p><p><b> else</b></p><p> bshi<=com
128、b2b;</p><p> bge<=comb2a;</p><p> bbai<=comb2c;</p><p> bqian<=comb2d;</p><p><b> comb2:=0;</b></p><p> comb2a:="0000";
129、</p><p> comb2b:="0000";</p><p> comb2c:="0000";</p><p> comb2d:="0000";</p><p><b> end if;</b></p><p><b&
130、gt; end if;</b></p><p> end process;</p><p><b> end rt1;</b></p><p> 片選信號(hào)產(chǎn)生模塊的源程序如下:</p><p> library ieee;</p><p> use ieee.std_log
131、ic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity sel is</p><p> port(clk:in std_logic;</p><p> a:out std_logic_vector(2 downto 0));</p>&
132、lt;p><b> end sel;</b></p><p> architecture rt1 of sel is</p><p><b> begin</b></p><p> process(clk)</p><p> variable b:std_logic_vector(2
133、 downto 0);</p><p><b> begin</b></p><p> if(clk'event and clk='1')then</p><p> if(b="111")then</p><p><b> b:="000"
134、;</b></p><p><b> else</b></p><p><b> b:=b+1;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><
135、p><b> a<=b;</b></p><p> end process;</p><p><b> end rt1; </b></p><p><b> 顯示模塊的源程序:</b></p><p> library ieee;</p>&
136、lt;p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity xxxl is</p><p> port(c:in std_logic_vector(2 downto 0);</p><p> dp:ou
137、t std_logic;</p><p> a1,a2,a3,a4,b1,b2,b3,b4:in std_logic_vector(3 downto 0);</p><p> d:out std_logic_vector(3 downto 0));</p><p><b> end xxxl;</b></p><p&g
138、t; architecture rtl of xxxl is</p><p><b> begin</b></p><p> process(c,a1,a2,a3,a4,b1,b2,b3,b4)</p><p> variable comb:std_logic_vector(2 downto 0);</p><p&g
139、t;<b> begin </b></p><p><b> comb:=c;</b></p><p> case comb is</p><p> when"000"=>d<=a1;</p><p><b> dp<='0'
140、;</b></p><p> when"001"=>d<=a2;</p><p><b> dp<='0';</b></p><p> when"010"=>d<=a3;</p><p><b> dp&l
141、t;='1';</b></p><p> when"011"=>d<=a4;</p><p><b> dp<='0';</b></p><p> when"100"=>d<=b1;</p><p>&
142、lt;b> dp<='0';</b></p><p> when"101"=>d<=b2;</p><p><b> dp<='0';</b></p><p> when"110"=>d<=b3;</p&g
143、t;<p><b> dp<='1';</b></p><p> when"111"=>d<=b4;</p><p><b> dp<='0';</b></p><p> when others=>null;</p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)出租車計(jì)費(fèi)器
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器
- 出租車計(jì)費(fèi)器課程設(shè)計(jì)報(bào)告
- 出租車自動(dòng)計(jì)費(fèi)器課程設(shè)計(jì)
- eda課程設(shè)計(jì)--- 出租車計(jì)費(fèi)器
- 出租車計(jì)費(fèi)器課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)---出租車計(jì)費(fèi)器設(shè)計(jì)
- eda 課程設(shè)計(jì)--出租車計(jì)費(fèi)器設(shè)計(jì)
- 課程設(shè)計(jì)-出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)
- 出租車計(jì)費(fèi)器數(shù)字電子課程設(shè)計(jì)
- eda課程設(shè)計(jì)——出租車計(jì)費(fèi)器設(shè)計(jì)
- 出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)課程設(shè)計(jì)
- 出租車自動(dòng)計(jì)費(fèi)器設(shè)計(jì)課程設(shè)計(jì)
- eda課程設(shè)計(jì)--出租車自動(dòng)計(jì)費(fèi)器
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器的設(shè)計(jì)
- eda課程設(shè)計(jì)--出租車計(jì)費(fèi)器的設(shè)計(jì)
- 電子課程設(shè)計(jì)--基于verilog的出租車計(jì)費(fèi)器
- 電子課程設(shè)計(jì)--基于verilog的出租車計(jì)費(fèi)器
- eda課程設(shè)計(jì)---出租車計(jì)費(fèi)器系統(tǒng)
- 數(shù)電課程設(shè)計(jì)-出租車自動(dòng)計(jì)費(fèi)器
評(píng)論
0/150
提交評(píng)論