eda課程設(shè)計(jì)報(bào)告---交通信號(hào)控制器的vhdl設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  EDA課程設(shè)計(jì)報(bào)告</b></p><p>  設(shè)計(jì)題目:交通信號(hào)控制器的VHDL設(shè)計(jì)</p><p>  班 級(jí):09通信工程一班</p><p><b>  學(xué) 號(hào): </b></p><p><b>  姓 名: </b>&

2、lt;/p><p><b>  指導(dǎo)老師: </b></p><p>  日 期:2012.3.9</p><p>  交通信號(hào)控制器的VHDL設(shè)計(jì)</p><p>  1、設(shè)計(jì)任務(wù)及要求:</p><p>  設(shè)計(jì)任務(wù):模擬十字路口交通信號(hào)燈的工作過(guò)程,利用實(shí)驗(yàn)板上的兩組紅、黃、綠LED作為交

3、通信號(hào)燈,設(shè)計(jì)一個(gè)交通信號(hào)燈控制器。要求:</p><p>  交通燈從綠變紅時(shí),有4秒黃燈亮的間隔時(shí)間;</p><p>  交通燈紅變綠是直接進(jìn)行的,沒(méi)有間隔時(shí)間;</p><p>  主干道上的綠燈時(shí)間為40秒,支干道的綠燈時(shí)間為20秒;</p><p>  在任意時(shí)間,顯示每個(gè)狀態(tài)到該狀態(tài)結(jié)束所需的時(shí)間。</p><

4、;p><b>  支干道</b></p><p><b>  主干道</b></p><p>  圖1 路口交通管理示意圖</p><p>  表1 交通信號(hào)燈的4種狀態(tài)</p><p><b>  設(shè)計(jì)要求:</b></p><p>  采用VH

5、DL語(yǔ)言編寫(xiě)程序,并在QUARTUSII工具平臺(tái)中進(jìn)行仿真,下載到EDA實(shí)驗(yàn)箱進(jìn)行驗(yàn)證。</p><p>  編寫(xiě)設(shè)計(jì)報(bào)告,要求包括方案選擇、程序清單、調(diào)試過(guò)程、測(cè)試結(jié)果及心得體會(huì)。</p><p>  設(shè)計(jì)時(shí)間和地點(diǎn):兩個(gè)星期,信息樓4樓EDA實(shí)驗(yàn)室。</p><p><b>  2、參考設(shè)計(jì)方案</b></p><p&g

6、t;<b>  時(shí)間顯示數(shù)據(jù)輸出</b></p><p><b>  紅黃綠燈信號(hào)輸出</b></p><p>  圖2 交通信號(hào)燈控制器的原理框圖</p><p>  3、采用VHDL語(yǔ)言輸入的方式實(shí)現(xiàn)交通信號(hào)燈控制器</p><p><b>  CLK</b></p&

7、gt;<p><b>  時(shí)間顯示數(shù)據(jù)輸出</b></p><p><b>  信號(hào)燈輸出</b></p><p>  圖3 交通信號(hào)燈控制器程序原理框圖</p><p>  該程序由7個(gè)進(jìn)程組成,進(jìn)程P1和P2將CLK信號(hào)分頻后產(chǎn)生1秒信號(hào),進(jìn)程P3、P4、P5構(gòu)成兩個(gè)帶有預(yù)置數(shù)功能的十進(jìn)制計(jì)數(shù)器,其中P4

8、產(chǎn)生允許十位計(jì)數(shù)器計(jì)數(shù)的控制信號(hào)。進(jìn)程P6實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換和產(chǎn)生狀態(tài)轉(zhuǎn)換的控制信號(hào),進(jìn)程P7產(chǎn)生次態(tài)信號(hào)和信號(hào)燈輸出信號(hào),以及每一個(gè)狀態(tài)的時(shí)間值。</p><p>  原功能(40+20)實(shí)現(xiàn)的程序代碼 </p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>

9、;  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY traffic IS </p><p>  PORT (clk:in std_logic;</p><p>  led7s1:out std_logic_vector(6 downto 0)控制第一個(gè)七段數(shù)碼管;</p><p>  le

10、d7s2:out std_logic_vector(6 downto 0);控制第二個(gè)七段數(shù)碼管</p><p>  comb_out:out std_logic_vector(5 downto 0));控制交通燈的兩與滅</p><p><b>  END;</b></p><p>  ARCHITECTURE one OF traffic

11、IS</p><p>  TYPE dm IS (s0,s1,s2,s3);</p><p>  SIgnal current_state,next_state:dm;</p><p>  SIGNAL FULL : STD_LOGIC;</p><p>  SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0);秒

12、表低位共7位代表十進(jìn)制0到9</p><p>  SIGNAL th:STD_LOGIC_VECTOR(1 DOWNTO 0);秒表高位最高數(shù)是3 故2位即可</p><p>  SIGNAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p>  SIGNAL TIME :STD_LOGIC_VECTOR(6 DOWNTO

13、 0);內(nèi)部計(jì)時(shí)器</p><p><b>  BEGIN</b></p><p>  P_REG: PROCESS(CLK)</p><p>  VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b>  BEGIN</b></p>

14、;<p>  IF CLK'EVENT AND CLK='1' THEN</p><p>  IF CNT8 = "11111111" THEN 利用方波的頻率設(shè)計(jì)秒表的走時(shí)</p><p>  CNT8:="01111111";</p><p>  FULL<='1&#

15、39;;</p><p>  ELSE CNT8 := CNT8+1;</p><p>  FULL <= '0';</p><p>  END IF; END IF;</p><p>  END PROCESS P_REG;</p><p>  PROCESS(full)</p&g

16、t;<p><b>  BEGIN</b></p><p>  IF full'EVENT AND full='1' THEN</p><p>  IF TIME<"1000011" THEN 設(shè)定內(nèi)置秒表最大計(jì)時(shí)這里是40+20+4+4-1=67=1000011</p><p&

17、gt;  TIME<=TIME+1;</p><p>  ELSe TIME <="0000000"; </p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p&

18、gt;<p>  REG:process( full,current_state)</p><p><b>  BEGIN</b></p><p>  IF full='1' AND full'EVENT THEN </p><p>  current_state<=next_state;</p

19、><p><b>  END IF;</b></p><p>  END process;</p><p>  COM:process(current_state, time)</p><p><b>  begin</b></p><p>  case current_stat

20、e is 設(shè)定狀態(tài)轉(zhuǎn)換時(shí)間 共S0,S1,S2,S3,S4 5個(gè)狀態(tài)</p><p>  when s0=>comb_out<="001100";tm<=39-time;</p><p>  if time=39 then next_state<=s1;</p><p>  else next_state<=s

21、0;</p><p><b>  end if;</b></p><p>  when s1=>comb_out<="010100";tm<=43-time;</p><p>  if time=43 then next_state<=s2;</p><p>  else n

22、ext_state<=s1;</p><p><b>  end if;</b></p><p>  when s2=>comb_out<="100010";tm<=63-time;</p><p>  if time=63 then next_state<=s3;</p>&l

23、t;p>  else next_state<=s2;</p><p><b>  end if;</b></p><p>  when s3=>comb_out<="100001";tm<=67-time;</p><p>  if time=67 then next_state<=s0

24、;</p><p>  else next_state<=s3;</p><p><b>  end if;</b></p><p><b>  end case;</b></p><p>  end process;</p><p>  PROCESS(tm)<

25、/p><p><b>  BEGIN </b></p><p>  IF tm>=30 THEN th<="11";tl<=tm-30;</p><p>  ELSIF tm>=20 THEN th<="10";tl<=tm-20;</p><p>

26、  ELSIF tm>=10 THEN th<="01";tl<=tm-10;</p><p>  ELSE th<="00";tl<=tm;</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p

27、>  process(th,tl)由秒表高低位控制七段數(shù)碼管顯示時(shí)間</p><p><b>  begin</b></p><p>  case th is</p><p>  when"00"=>led7s1<="0111111";</p><p>  whe

28、n"01"=>led7s1<="0000110";</p><p>  when"10"=>led7s1<="1011011";</p><p>  when"11"=>led7s1<="1001111";</p><

29、;p>  when others=>null;</p><p><b>  end case;</b></p><p>  case tl is </p><p>  when "0000000"=>led7s2<="0111111";</p><p>  

30、when"0000001"=>led7s2<="0000110";</p><p>  when "0000010"=>led7s2<="1011011";</p><p>  when"0000011"=>led7s2<="1001111&qu

31、ot;;</p><p>  when"0000100"=>led7s2<="1100110";</p><p>  when "0000101"=>led7s2<="1101101";</p><p>  when "0000110"=>

32、;led7s2<="1111101";</p><p>  when"0000111"=>led7s2<="0000111";</p><p>  when "0001000"=>led7s2<="1111111";</p><p>  

33、when "0001001"=>led7s2<="1101111";</p><p>  when others=>null;</p><p><b>  end case;</b></p><p>  end process;</p><p><b>

34、  end;</b></p><p>  老師布置功能(56+36)代碼</p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  E

35、NTITY traffic IS </p><p>  PORT (clk:in std_logic;</p><p>  led7s1:out std_logic_vector(6 downto 0);</p><p>  led7s2:out std_logic_vector(6 downto 0);</p><p>  comb_out

36、:out std_logic_vector(5 downto 0));</p><p><b>  END;</b></p><p>  ARCHITECTURE one OF traffic IS</p><p>  TYPE dm IS (s0,s1,s2,s3);</p><p>  SIgnal current_

37、state,next_state:dm;</p><p>  SIGNAL FULL : STD_LOGIC;</p><p>  SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p>  SIGNAL th:STD_LOGIC_VECTOR(2 DOWNTO 0);</p><p>  SIG

38、NAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p>  SIGNAL TIME :STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p><b>  BEGIN</b></p><p>  P_REG: PROCESS(CLK)</p><p>  VA

39、RIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b>  BEGIN</b></p><p>  IF CLK'EVENT AND CLK='1' THEN</p><p>  IF CNT8 = "11111111" THEN</p>

40、<p>  CNT8:="01111111";</p><p>  FULL<='1';</p><p>  ELSE CNT8 := CNT8+1;</p><p>  FULL <= '0';</p><p>  END IF; END IF;</

41、p><p>  END PROCESS P_REG;</p><p>  PROCESS(full)</p><p><b>  BEGIN</b></p><p>  IF full'EVENT AND full='1' THEN</p><p>  IF TIME<&

42、quot;1100011" THEN </p><p>  TIME<=TIME+1;</p><p>  ELSe TIME <="0000000"; </p><p><b>  END IF;</b></p><p><b>  END IF;</b>

43、</p><p>  END PROCESS;</p><p>  REG:process( full,current_state)</p><p><b>  BEGIN</b></p><p>  IF full='1' AND full'EVENT THEN </p><

44、p>  current_state<=next_state;</p><p><b>  END IF;</b></p><p>  END process;</p><p>  COM:process(current_state, time)</p><p><b>  begin</b&g

45、t;</p><p>  case current_state is</p><p>  when s0=>comb_out<="001100";tm<=55-time;</p><p>  if time=55 then next_state<=s1;</p><p>  else next_

46、state<=s0;</p><p><b>  end if;</b></p><p>  when s1=>comb_out<="010100";tm<=59-time;</p><p>  if time=59 then next_state<=s2;</p><p&

47、gt;  else next_state<=s1;</p><p><b>  end if;</b></p><p>  when s2=>comb_out<="100010";tm<=95-time;</p><p>  if time=95 then next_state<=s3;<

48、;/p><p>  else next_state<=s2;</p><p><b>  end if;</b></p><p>  when s3=>comb_out<="100001";tm<=99-time;</p><p>  if time=99 then next_s

49、tate<=s0;</p><p>  else next_state<=s3;</p><p><b>  end if;</b></p><p><b>  end case;</b></p><p>  end process;</p><p>  PROC

50、ESS(tm)</p><p><b>  BEGIN </b></p><p>  IF tm>=50 THEN th<="101";tl<=tm-50;</p><p>  ELSIF tm>=40 THEN th<="100";tl<=tm-40;</p&g

51、t;<p>  ELSIF tm>=30 THEN th<="011";tl<=tm-30;</p><p>  ELSIF tm>=20 THEN th<="010";tl<=tm-20;</p><p>  ELSIF tm>=10 THEN th<="001";t

52、l<=tm-10;</p><p>  ELSE th<="000";tl<=tm;</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  process(th,tl)</p><p><

53、b>  begin</b></p><p>  case th is</p><p>  when"000"=>led7s1<="0111111";</p><p>  when"001"=>led7s1<="0000110";</p>

54、;<p>  when"010"=>led7s1<="1011011";</p><p>  when"011"=>led7s1<="1001111";</p><p>  when"100"=>led7s1<="1100110&q

55、uot;;</p><p>  when"101"=>led7s1<="1101101";</p><p>  when others=>null;</p><p><b>  end case;</b></p><p>  case tl is </p&g

56、t;<p>  when "0000000"=>led7s2<="0111111";</p><p>  when"0000001"=>led7s2<="0000110";</p><p>  when "0000010"=>led7s2<=

57、"1011011";</p><p>  when"0000011"=>led7s2<="1001111";</p><p>  when"0000100"=>led7s2<="1100110";</p><p>  when "00

58、00101"=>led7s2<="1101101";</p><p>  when "0000110"=>led7s2<="1111101";</p><p>  when"0000111"=>led7s2<="0000111";</p&g

59、t;<p>  when "0001000"=>led7s2<="1111111";</p><p>  when "0001001"=>led7s2<="1101111";</p><p>  when others=>null;</p><p&

60、gt;<b>  end case;</b></p><p>  end process;</p><p><b>  end;</b></p><p><b>  仿真波形圖: </b></p><p><b>  引腳設(shè)置</b></p>

61、<p>  程序?qū)嵤┻^(guò)程及原理解析</p><p>  本程序首先通過(guò)秒脈沖發(fā)生電路將從信號(hào)發(fā)生器產(chǎn)生的CLK脈沖轉(zhuǎn)換為full信號(hào),且full信號(hào)每秒鐘產(chǎn)生一個(gè)脈沖信號(hào),再通過(guò)內(nèi)部計(jì)時(shí)電路產(chǎn)生tm,tl,th三個(gè)信號(hào),其中tm位內(nèi)部計(jì)時(shí)器,tl,th分別為輸出到外部倒計(jì)時(shí)表的低高位,然后就是紅綠燈狀態(tài)轉(zhuǎn)換模塊,在程序的最開(kāi)始設(shè)置一個(gè)二進(jìn)制位矢響亮comb-out來(lái)控制紅綠燈的狀態(tài),再通過(guò)要求的參數(shù)設(shè)

62、計(jì)來(lái)設(shè)置各燈的亮與滅,這樣紅綠燈的基本功能就實(shí)現(xiàn)了,最后再在程序后面添加一個(gè)時(shí)間顯示電路,來(lái)控制倒計(jì)時(shí)秒表,通過(guò)tl和th的參量即可設(shè)置好七段數(shù)碼管顯示電路</p><p><b> ?。?lt;/b></p><p><b>  心得感想:</b></p><p>  這次EDA的程序設(shè)計(jì)由于放在學(xué)期的第二周,是一進(jìn)學(xué)校就要著

63、手準(zhǔn)備得,但由于剛進(jìn)學(xué)校各種事務(wù)導(dǎo)致對(duì)這次的課程設(shè)計(jì)的疏忽,是很不應(yīng)該的,一開(kāi)始聽(tīng)安排只要寫(xiě)一段程序,便以為很簡(jiǎn)單,沒(méi)有引起重視,看了題目之后便覺(jué)得有點(diǎn)慌神,因?yàn)樯蠈W(xué)期的EDA課程并沒(méi)有要求編寫(xiě)理解這么面向應(yīng)用的程序,最多七段數(shù)碼管和計(jì)時(shí)器。便在網(wǎng)上找出了一段程序也沒(méi)有過(guò)于鉆研程序,在驗(yàn)收的時(shí)候還算順利,老師只要求改幾個(gè)參數(shù),于是便看了一遍程序,感覺(jué)也不是很難,但在今天寫(xiě)課程設(shè)計(jì)報(bào)告的時(shí)候變仔細(xì)的看了幾遍程序,發(fā)現(xiàn)程序的結(jié)構(gòu)其實(shí)很簡(jiǎn)單,

64、不是所謂的什么面向?qū)ο蟮某绦蚓帉?xiě)只是將我們平時(shí)練習(xí)和實(shí)驗(yàn)的的程序模塊的一個(gè)小小結(jié)合便可以設(shè)計(jì)出一個(gè)不同功能不同內(nèi)容的電路的VHDL程序 ,在程序下載運(yùn)行方面也與平時(shí)做的實(shí)驗(yàn)大同小異,所以總結(jié)了一下自己,發(fā)現(xiàn)自己雖然在理論上沒(méi)有太大問(wèn)題,但當(dāng)實(shí)踐的時(shí)候便遇到了問(wèn)題,自己在看到一個(gè)課題是先是去找程序,再去理解程序。這樣的思路并不正確,應(yīng)該要自己先思考方法,在自己對(duì)照現(xiàn)有的資料自己去完成設(shè)計(jì),所以自己的實(shí)踐能力還是遠(yuǎn)遠(yuǎn)的不足,不管是在EDA課

溫馨提示

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

評(píng)論

0/150

提交評(píng)論