eda課程設(shè)計--- 出租車計費器_第1頁
已閱讀1頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  EDA技術(shù)課程設(shè)計報告</p><p>  一、設(shè)計題目及要求:</p><p><b>  出租車計費器</b></p><p> ?。?)具有行車里程計費、等待時間計費、起價三部分,最大顯示金額99.99元</p><p> ?。?)起價:三公里內(nèi)8元,等待時間超過10分鐘1元/10分鐘,行車里

2、程單價1元,價格數(shù)值可修改。</p><p><b>  二、設(shè)計思路:</b></p><p>  首先用分頻模塊產(chǎn)生三個分頻,一個用來計算等到時間超過10分鐘時的價格,一個用來計算行車里程超過三公里時的價格,還有一個用于計算等待時間以及行車里程。用計量模塊計算等待時間,若超過十分鐘,則使en1為1,否則為0,若行車里程超過3公里,則使en0為1,否則為0。用控制模

3、塊根據(jù)en1和en0的值選擇計費時鐘。用計費模塊進行計費。最后用顯示模塊進行8個數(shù)碼管的依次顯示。</p><p>  三、各個模塊的具體實現(xiàn):</p><p><b>  分頻模塊思路:</b></p><p>  輸入400HZ的時鐘,產(chǎn)生一個20分頻的時鐘(即20HZ)用來計算等待時間超過10分鐘時的0.1元/min;再產(chǎn)生一個2分頻的時

4、鐘(即200HZ)用來計算行車里程超過三公里時的1元/公里。最后產(chǎn)生一個1HZ的時鐘,用做幾個子模塊的時鐘。</p><p>  1、分頻模塊的源程序:</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_ari

5、th.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity fp is --分頻模塊</p><p><b>  port(</b></p><p>  clk_400:in std_logic;

6、 --輸入400HZ的時鐘</p><p>  q2:out std_logic; --二分頻時鐘,用來計算里程超過3公里的價錢</p><p>  q20:out std_logic; --二十分頻時鐘,用來計算等待時間超過10分鐘的價錢</p><p>  q1:out std_logi

7、c); --幾個子模塊的時鐘</p><p><b>  end fp;</b></p><p>  architecture behav of fp is</p><p><b>  begin</b></p><p>  process(clk_400)</

8、p><p>  variable count2:integer range 0 to 199;</p><p>  variable count20:integer range 0 to 19;</p><p>  variable count1 :integer range 0 to 399;</p><p><b>  begin&

9、lt;/b></p><p>  if clk_400'event and clk_400='1' then --上升沿檢測</p><p>  if count2=199 --產(chǎn)生2分頻的時鐘</p><p>  then count2:=0

10、;q2<='1';</p><p>  else count2:=count2+1;q2<='0';</p><p><b>  end if;</b></p><p>  if count20=19 --產(chǎn)生20分頻的時鐘</p&

11、gt;<p>  then count20:=0;q20<='1';</p><p>  else count20:=count20+1;q20<='0';</p><p><b>  end if;</b></p><p>  if count1=399

12、 --產(chǎn)生子模塊的時鐘</p><p>  then count1:=0;q1<='1';</p><p>  else count1:=count1+1;q1<='0';</p><p><b>  end if;</b></p><p><

13、;b>  end if;</b></p><p>  end process;</p><p>  end behav;</p><p>  分頻模塊波形仿真圖:</p><p>  clk_400是產(chǎn)生400HZ的脈沖,q1產(chǎn)生的是1HZ的脈沖,當?shù)却龝r用來累計等待時間,當行駛時用來累計行駛的路程;q2是一個兩分頻的脈沖,

14、產(chǎn)生200HZ的脈沖,相當于是1元,用來計算超出3公里時的價錢,每公里1一元;q20是一個20分頻的脈沖,產(chǎn)生的是20HZ的脈沖,相當于是0.1元,用來計算等待時間超過十分鐘時的價錢,每分鐘是0.1元。</p><p><b>  分頻模塊封裝形式:</b></p><p><b>  控制模塊思路:</b></p><p&g

15、t;  如果en1為1,則表示等待時間超過10分鐘,選擇20分頻的時鐘,clk_20;如果en0等于1,表示行車里程超過3公里,選擇2分頻的時鐘,clk_2。</p><p>  2、控制模塊的源程序:</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>

16、;  use ieee.std_logic_unsigned.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  entity kongzhi1 is</p><p><b>  port(</b></p><p>  en0,en1:in std_logic;

17、 </p><p>  clk_in20:in std_logic;</p><p>  clk_in2:in std_logic;</p><p>  clk_out:out std_logic</p><p><b>  );</b></p><p>  e

18、nd kongzhi1;</p><p>  architecture behave of kongzhi1 is</p><p><b>  begin</b></p><p>  process(en0,en1)</p><p><b>  begin</b></p><p&

19、gt;  if en0='1' then --行車里程超過3公里,選擇2分頻時鐘</p><p>  clk_out<=clk_in2;</p><p>  elsif en1='1' then --等待時間超過10分鐘,選擇20分頻時鐘</

20、p><p>  clk_out<=clk_in20;</p><p><b>  end if;</b></p><p>  end process;</p><p>  end behave;</p><p>  控制模塊的波形仿真圖:</p><p>  en1=1,

21、選擇clk_20,表示0.1元/min;en0=1,選擇clk_2,表示1元/公里。</p><p>  控制模塊的封裝形式:</p><p>  3、計量模塊源程序:</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  us

22、e ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity count is</p><p><b>  port(</b></p><p>  start:in std_logic;

23、 --start為1表示有出租車接到顧客 </p><p>  stop:in std_logic; --stop為1表示開始等待</p><p>  q1:in std_logic; --時鐘</p><p>  en1,en0:buffer std_logic; --選擇信號</p&g

24、t;<p>  k1,k0:buffer std_logic_vector(3 downto 0); --里程數(shù)k0是個位,k1是十位</p><p>  m0,m1:buffer std_logic_vector(3 downto 0) --等待時間,m0是個位,m1是十位</p><p><b>  );</b><

25、/p><p>  end count;</p><p>  architecture behav of count is</p><p>  signal wt:integer range 0 to 59; --等待時間計時,單位是秒</p><p><b>  begin</b><

26、/p><p>  process(q1)</p><p><b>  begin</b></p><p>  if q1'event and q1='1' then</p><p>  if start='0'then --沒有顧客時清零

27、</p><p>  wt<=0;en1<='0';en0<='0';m1<="0000";m0<="0000";</p><p>  k1<="0000";</p><p>  k0<="0000";</p

28、><p>  elsif stop='1' then --開始等待</p><p>  if wt=59 then wt<=0; --計時滿1秒</p><p>  if m0="1001" then m0<="0000";

29、 --最大顯示59min</p><p>  if m1="0101" then m1<="0000";</p><p>  else m1<=m1+1;</p><p><b>  end if;</b></p><p>  else m0<=m0+1;<

30、/p><p><b>  end if;</b></p><p>  if m1&m0>"00001001"then en1<='1'; --等待時間超過10min,en1為1,否則為0</p><p>  else en1<='0';</p><

31、p><b>  end if;</b></p><p>  else wt<=wt+1;en1<='0';</p><p><b>  end if;</b></p><p>  else if k0="1001"then k0<="0000"

32、; --開始計算里程數(shù),最大為99</p><p>  if k1="1001" then k1<="0000";</p><p>  else k1<=k1+1;</p><p><b>  end if;</b></p><p>  else k

33、0<=k0+1;</p><p><b>  end if;</b></p><p>  if k1&k0>"00000010"then en0<='1'; --如果里程數(shù)大于3公里,則en0為1,否則為0</p><p>  else en1<='0';en

34、0<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>

35、;  end behav;</p><p>  計量模塊波形仿真圖:</p><p>  Start為1,stop為1,表示開始等待,m1,m0,wt開始計時,wt滿60s向m0進1。</p><p>  仍然是在計時,當計時滿10min時en1為1</p><p>  當stop為0時,表示在行駛,k1,k0開始據(jù)算里程數(shù),當計滿3公里時,

36、en0為1。</p><p><b>  計量模塊封裝形式:</b></p><p>  4、計費模塊源程序:</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_u

37、nsigned.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  entity money is</p><p><b>  port(</b></p><p>  clkout:in std_logic; --選擇好的時鐘&

38、lt;/p><p>  start:in std_logic;</p><p>  c0:buffer std_logic_vector(3 downto 0); --價格的十位</p><p>  c1:buffer std_logic_vector(3 downto 0); --價格的個位</p><p>  c2:buffe

39、r std_logic_vector(3 downto 0); --價格的小數(shù)點后第一位</p><p>  c3:buffer std_logic_vector(3 downto 0) --價格的小數(shù)點后第二位</p><p><b>  );</b></p><p>  end money;</p><

40、p>  architecture behav of money is</p><p><b>  begin</b></p><p>  process(start,clkout)</p><p><b>  begin </b></p><p>  if start='0't

41、hen --沒有顧客時清零</p><p>  c0<="0000";</p><p>  c1<="0000";</p><p>  c2<="1000";</p><p>  c3<="0000";</p

42、><p>  elsif clkout'event and clkout='1'then --每來一個計費脈沖就進行一次計費</p><p>  if c3="1001"then</p><p>  c3<="0000";</p><p>  if c2="

43、;1001"then</p><p>  c2<="0000";</p><p>  if c1="1001"then</p><p>  c1<="0000";</p><p>  if c0="1001"then</p>&

44、lt;p>  c0<="0000";</p><p>  else c0<=c0+'1';</p><p><b>  end if;</b></p><p>  else c1<=c1+'1';</p><p><b>  end i

45、f;</b></p><p>  else c2<=c2+'1';</p><p><b>  end if;</b></p><p>  else c3<=c3+'1';</p><p><b>  end if;</b></p>

46、<p><b>  end if;</b></p><p>  end process;</p><p>  end behav;</p><p>  計費模塊波形仿真圖:</p><p>  start為1,開始計費,格式是:c0c1.c2c3,起步價是8元。</p><p>&

47、lt;b>  計費模塊封裝形式:</b></p><p>  5、顯示部分源程序:</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><

48、p>  use ieee.std_logic_arith.all;</p><p>  entity display1 is</p><p><b>  port(</b></p><p>  reset:in std_logic; --復位信號</p><p>  q1 :in std

49、_logic; --時鐘信號</p><p>  m0 :in std_logic_vector(3 downto 0); -等待時間</p><p>  m1 :in std_logic_vector(3 downto 0);</p><p>  k0 :in std_logic_vector(3 downto 0);

50、 --行駛公里</p><p>  k1 :in std_logic_vector(3 downto 0); </p><p>  c0 :in std_logic_vector(3 downto 0); --計費值 </p><p>  c1 :in std_logic_vector(3 downto 0); </p>&l

51、t;p>  c2 :in std_logic_vector(3 downto 0);</p><p>  c3 :in std_logic_vector(3 downto 0);</p><p>  sel :out std_logic_vector(7 downto 0); --位選信號 </p><p>  show :out std_logi

52、c_vector(7 downto 0)); --數(shù)碼管顯示輸出</p><p>  end display1;</p><p>  architecture behav of display1 is</p><p>  type state_type is(led1,led2,led3,led4,led5,led6,led7,led8);</p>

53、<p><b>  --狀態(tài)機定義</b></p><p>  signal pre_state,next_state:state_type; --信號定義</p><p>  signal q :std_logic_vector(31 downto 0);</p><p>  signal q_reg :std_

54、logic_vector(3 downto 0);</p><p>  signal sel_reg:std_logic_vector(7 downto 0);</p><p>  signal show_reg:std_logic_vector(6 downto 0);</p><p><b>  begin</b></p>&

55、lt;p>  q<=m1&m0&k1&k0&c3&c2&c1&c0;</p><p>  present_state_register: --狀態(tài)寄存器</p><p>  process(q1)</p><p><b>  begin</b></p>&l

56、t;p>  if reset=’0’ then</p><p>  pre_state<=led1;</p><p><b>  elsif</b></p><p>  q1'event and q1='1' then pre_state<=next_state;</p><p>

57、;<b>  end if;</b></p><p>  end process;</p><p>  process(reset,q1) --狀態(tài)機</p><p><b>  begin</b></p><p>  if reset=’0’ then</p>

58、<p>  next_state<=led1;</p><p><b>  elsif </b></p><p>  q1'event and q1='1'then</p><p>  case (next_state) is</p><p>  when led1=>q_r

59、eg<=q(3 downto 0) ;sel_reg<="11111110";next_state<=led2; --第一個數(shù)碼管亮</p><p>  when led2=>q_reg<=q(7 downto 4);sel_reg<="11111101";next_state<=led3; --第二個數(shù)碼管亮<

60、/p><p>  when led3=>q_reg<=q(11 downto 8);sel_reg<="11111011";next_state<=led4; --第三個數(shù)碼管亮</p><p>  when led4=>q_reg<=q(15 downto 12);sel_reg<="11110111"

61、;next_state<=led5; --第四個數(shù)碼管亮</p><p>  when led5=>q_reg<=q(19 downto 16); sel_reg<="11101111";next_state<=led6; --第五個數(shù)碼管亮 </p><p>  when led6=>q_reg&l

62、t;=q(23 downto 20); sel_reg<="11011111";next_state<=led7; --第六個數(shù)碼管亮</p><p>  when led7=>q_reg<=q(27 downto 24); sel_reg<="10111111";next_state<=led8; --

63、第七個數(shù)碼管亮</p><p>  when led8=>q_reg<=q(31 downto 28); sel_reg<="01111111";next_state<=led1; --第八個數(shù)碼管亮</p><p>  when others=>q_reg<="11111111";sel_reg&

64、lt;="11111111";next_state<=led1;</p><p><b>  --所有數(shù)碼管全滅</b></p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  e

65、nd process;</p><p>  with q_reg select --開始譯碼顯示</p><p>  show_reg<="1000000"when"0000",</p><p>  "1111001"when"0001",</p>

66、<p>  "0100100"when"0010",</p><p>  "0110000"when"0011",</p><p>  "0011001"when"0100",</p><p>  "0010010"w

67、hen"0101", </p><p>  "0000010"when"0110",</p><p>  "1011000"when"0111",</p><p>  "0000000"when"1000", </p>

68、;<p>  "0010000"when"1001",</p><p>  "11111111"when others;</p><p>  sel<=sel_reg;</p><p>  show<='0'&show_reg when sel_reg=&q

69、uot;11111011"else '1'&show_reg; --計費時使用小數(shù)點,顯示c3c2.c1c0</p><p>  end behav;</p><p>  顯示部分仿真波形圖:</p><p>  reset 為1,sel輸出選擇的數(shù)碼管,“0”表示選中,show輸出顯示的信息。順序為c0c1.c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論