eda交通燈課程設(shè)計(jì)論文_第1頁(yè)
已閱讀1頁(yè),還剩25頁(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>  EDA技術(shù)與應(yīng)用論文</p><p>  論文題目:交通燈設(shè)計(jì) </p><p>  姓 名: 王 五 </p><p>  專(zhuān) 業(yè): 電子信息工程 </p><p>  班 級(jí): XXXXXX</p><p>  學(xué) 號(hào):

2、 XXXX </p><p>  指導(dǎo)老師: </p><p>  摘 要:本文提出了一個(gè)交通燈控制方案, 并介紹了用EDA技術(shù)、VHDL硬件描述語(yǔ)言和可編程器件CPLD實(shí)現(xiàn)該方案的系統(tǒng)設(shè)計(jì)。關(guān)鍵詞:交通燈, ,EDA,VHDL,CPLD</p><p><b>  目錄</b></p><p&

3、gt;  方案分析與對(duì)比································2</p><

4、;p>  1.1方案分析··································&

5、#183;···2</p><p>  1.2方案對(duì)比···························

6、3;··········2</p><p>  整體設(shè)計(jì)論述·····················&#

7、183;············3</p><p>  單元模塊設(shè)計(jì)與仿真··················

8、83;·········6</p><p>  3.1時(shí)鐘分頻模塊·····················

9、3;···········6</p><p>  3.2交通燈控制及計(jì)時(shí)模塊···················&

10、#183;······7</p><p>  3.3掃描顯示譯碼模塊························

11、······9</p><p>  3.4頂層文件的編寫(xiě)·························

12、······10</p><p>  硬件實(shí)驗(yàn)方案及實(shí)驗(yàn)結(jié)果·······················13</p&g

13、t;<p>  4.1硬件實(shí)驗(yàn)方案································

14、3;13</p><p>  4.2實(shí)驗(yàn)結(jié)果·······························

15、······15</p><p>  收獲和體會(huì)·························

16、3;·········15</p><p>  交通燈編碼······················&#

17、183;············16</p><p>  參考文獻(xiàn)···················&

18、#183;·················23</p><p><b>  方案分析與對(duì)比</b></p><p><b>  §1.1方案分析</b></p&

19、gt;<p>  通過(guò)分析可以知道,所要設(shè)計(jì)的交通信號(hào)燈控制電路要能夠適用于由一條主干道和一條支干道的匯合點(diǎn)形成的十字交叉路口。能夠做到主、支干道的紅綠燈閃亮的時(shí)間不完全相同,在綠燈跳變紅燈的過(guò)程中能夠用黃燈進(jìn)行過(guò)渡,使得行駛過(guò)程中的車(chē)輛有足夠的時(shí)間停下來(lái)。還要求在主、支干道各設(shè)立一組計(jì)時(shí)顯示器,能夠顯示相應(yīng)的紅、黃、綠倒計(jì)時(shí)。可以利用VHDL語(yǔ)言合理設(shè)計(jì)系統(tǒng)功能,使紅黃綠燈的轉(zhuǎn)換有一個(gè)準(zhǔn)確的時(shí)間間隔和轉(zhuǎn)換順序。</

20、p><p><b>  §1.2方案對(duì)比</b></p><p>  實(shí)現(xiàn)路口交通燈系統(tǒng)的控制方法很多,可以用標(biāo)準(zhǔn)邏輯器件、可編程序控制器和單片機(jī)等方案來(lái)實(shí)現(xiàn)。</p><p>  若用單片機(jī)方案來(lái)實(shí)現(xiàn)的話,模型可以由電源電路、單片機(jī)主控電路、無(wú)線收發(fā)控制電路和顯示電路四部分組成。在電源電路中,需要用到+5V的直流穩(wěn)壓電源,無(wú)線收發(fā)控制電

21、路和顯示電路應(yīng)由編碼芯片和數(shù)據(jù)發(fā)射模塊兩部分組成,主控電路的主要元件為AT89C51。硬件設(shè)計(jì)完成后還要利用計(jì)算機(jī)軟件經(jīng)行軟件部分的設(shè)計(jì)才能夠?qū)崿F(xiàn)相應(yīng)的功能。</p><p>  雖然利用單片機(jī)系統(tǒng)設(shè)計(jì)的交通燈控制器相對(duì)來(lái)說(shuō)較穩(wěn)定,能夠完成較多功能的實(shí)現(xiàn),但這些控制方法的功能修改及調(diào)試都需要硬件電路的支持,在一定程度上增加了功能修改及系統(tǒng)設(shè)計(jì)與調(diào)試的困難。</p><p>  相反,使用基

22、于FPGA的設(shè)計(jì)方法具有周期短,設(shè)計(jì)靈活,易于修改等明顯的的優(yōu)點(diǎn)。而且,隨著FPGA器件、設(shè)計(jì)語(yǔ)言和電子設(shè)計(jì)自動(dòng)化工具的發(fā)展和改進(jìn),越來(lái)越多的電子系統(tǒng)采用FPGA來(lái)設(shè)計(jì)。未來(lái),使用FPGA器件設(shè)計(jì)的產(chǎn)品將出現(xiàn)在各個(gè)領(lǐng)域里。因此,此次的交通信號(hào)燈控制器的設(shè)計(jì)將采用基于FPGA的設(shè)計(jì)方案來(lái)實(shí)現(xiàn)所要求的功能。</p><p><b>  整體設(shè)計(jì)論述</b></p><p>

23、;  根據(jù)設(shè)計(jì)要求和系統(tǒng)所具有的功能,并參考相關(guān)的文獻(xiàn)資料,經(jīng)行方案設(shè)計(jì),可以畫(huà)出如下圖所示的交通信號(hào)燈控制器的系統(tǒng)框圖。 </p><p>  1kHZ </p><p>  1kHZ 1HZ </p><p>  支干道車(chē)輛檢測(cè)

24、 </p><p>  1kHZ 數(shù)碼管及LED信號(hào) </p><p>  系統(tǒng)的狀態(tài)圖如下所示</p><p><b>  CAR='0'</b></p><p>  CAR='1' c=&qu

25、ot;1001111" </p><p><b>  CAR='0'</b></p><p>  c="1001111" CAR='1' </p><p>  c="0101100" c="

26、;1001010"</p><p>  c="0110001"</p><p>  S0:支干道沒(méi)有車(chē)輛行駛,支干道綠燈,支干道紅燈</p><p>  S1:支干道有車(chē)輛行駛,支干道綠燈,支干道紅燈</p><p>  S2:主干道黃燈,支干道綠燈</p><p>  S3:主干道紅燈,

27、支干道綠燈</p><p>  S4:主干道紅燈,支干道黃燈</p><p>  根據(jù)以上設(shè)計(jì)思路,可以得到如下的頂層文件原理圖</p><p><b>  頂層文件的實(shí)體圖:</b></p><p><b>  單元模塊設(shè)計(jì)與仿真</b></p><p>  §3

28、.1時(shí)鐘分頻模塊</p><p>  系統(tǒng)的動(dòng)態(tài)掃描需要1HZ的脈沖,而系統(tǒng)時(shí)鐘計(jì)時(shí)模塊需要1HZ的脈沖。分頻模塊主要為系統(tǒng)提供所需的時(shí)鐘計(jì)時(shí)脈沖。該模塊將1kHZ的脈沖信號(hào)進(jìn)行分頻,產(chǎn)生1S的方波,作為系統(tǒng)時(shí)鐘計(jì)時(shí)信號(hào)。其實(shí)體模塊如下:</p><p>  將END TIME改為5S</p><p>  CLK采用系統(tǒng)的1KHZ的時(shí)鐘脈沖</p>&

29、lt;p><b>  仿真波形如下: </b></p><p>  可以看到能夠得到1s的時(shí)鐘脈沖</p><p>  §3.2交通燈控制及計(jì)時(shí)模塊</p><p>  控制模塊根據(jù)外部輸入信號(hào)和計(jì)時(shí)模塊產(chǎn)生的輸出信號(hào),產(chǎn)生系統(tǒng)的狀態(tài)機(jī),控制其他部分協(xié)調(diào)工作。計(jì)時(shí)模塊用來(lái)設(shè)定主干道和支干道計(jì)時(shí)器的初值,并為掃描顯示譯碼模塊提供倒

30、計(jì)時(shí)時(shí)間。</p><p>  控制及計(jì)時(shí)模塊采用狀態(tài)機(jī)進(jìn)行設(shè)計(jì),可以定義出5種狀態(tài),分別為S0:主干道綠燈,支干道紅燈且沒(méi)有車(chē)輛行駛;S1:主干道綠燈,支干道紅燈或支干道有車(chē)輛駛?cè)?;S2:主干道黃燈,支干道紅燈;S3:主干道紅燈,支干道綠燈;S4:主干道紅燈,支干道黃燈。利用CASE語(yǔ)句定義狀態(tài)的轉(zhuǎn)換方式及時(shí)間的變換方式,達(dá)到主干道綠燈亮45秒,支干道綠燈亮25秒,黃燈亮5秒的設(shè)計(jì)要求。</p>

31、<p><b>  其實(shí)體模塊如下:</b></p><p>  CAR為支干道車(chē)輛檢測(cè)開(kāi)關(guān)</p><p>  在支干道有車(chē)的情況下,模塊可以進(jìn)行減計(jì)時(shí)</p><p>  CLK1S為1S的時(shí)鐘脈沖</p><p>  TIME1H、TIME1L、TIME2H、TIME2L分別為主干道時(shí)鐘高位、主干道時(shí)鐘低

32、位、支干道時(shí)鐘高位、支干道時(shí)鐘低位</p><p>  LED為L(zhǎng)ED燈發(fā)光情況,分別為主干道綠燈、主干道黃燈、主干道紅燈、支干道綠燈、主干道黃燈、主干道紅燈</p><p>  Count的總的系統(tǒng)時(shí)間,用來(lái)改變系統(tǒng)的狀態(tài)</p><p><b>  仿真波形如下:</b></p><p><b>  通過(guò)仿

33、真可以看到:</b></p><p>  當(dāng)主干道綠燈,支干道紅燈時(shí),主干道倒計(jì)時(shí)高位置數(shù)0100,低位置數(shù)0101;支干道高位置數(shù)0101,低位置數(shù)0000;</p><p>  當(dāng)主干道黃燈,支干道紅燈時(shí),主干道黃燈倒計(jì)時(shí)置數(shù)0101;支干道繼續(xù)剛才的減計(jì)數(shù);</p><p>  當(dāng)主干道紅燈,支干道綠燈時(shí),主干道倒計(jì)時(shí)高位置數(shù)0011,低位置數(shù)00

34、00;支干道高位置數(shù)0010,低位置數(shù)0101;</p><p>  當(dāng)主干道紅燈,支干道黃燈時(shí),支干道黃燈倒計(jì)時(shí)置數(shù)0101;主干道繼續(xù)剛才的減計(jì)數(shù)。</p><p>  在S4狀態(tài)結(jié)束后,自動(dòng)跳回到S0狀態(tài),繼續(xù)判斷支干道是否有車(chē)行駛,若有車(chē)行駛,則跳轉(zhuǎn)到S1狀態(tài),給高、低位置數(shù),繼續(xù)進(jìn)行減計(jì)時(shí)。</p><p>  系統(tǒng)根據(jù)COUNT的變化自動(dòng)在各狀態(tài)下跳變,

35、當(dāng)count為45時(shí),跳變到S2狀態(tài);當(dāng)count為50時(shí),跳變到S3狀態(tài);當(dāng)count為75時(shí),跳變到S4狀態(tài);當(dāng)count為80時(shí),若支干道沒(méi)有車(chē)跳變到S0狀態(tài),有車(chē)則跳變到S1狀態(tài)。</p><p>  §3.3掃描顯示譯碼模塊</p><p>  掃描顯示譯碼模塊可以根據(jù)控制信號(hào),驅(qū)動(dòng)交通信號(hào)燈以及倒計(jì)時(shí)數(shù)碼管的顯示,其中數(shù)碼管的顯示采用動(dòng)態(tài)掃描顯示。其實(shí)體模塊如下:&l

36、t;/p><p>  CLK為1KHZ的系統(tǒng)時(shí)鐘脈沖</p><p>  CLK1S為1S時(shí)鐘脈沖</p><p>  CAR為支干道車(chē)輛檢測(cè)開(kāi)關(guān)</p><p>  SEL為數(shù)碼管位碼掃描</p><p><b>  SEG為數(shù)碼管段碼</b></p><p>  TIME1

37、H、TIME1L、TIME2H、TIME2L為數(shù)碼管計(jì)時(shí)的時(shí)間,由控制及計(jì)時(shí)模塊為其賦值</p><p><b>  仿真波形如下:</b></p><p><b>  通過(guò)仿真可以看到:</b></p><p>  給CLK一個(gè)時(shí)鐘脈沖,數(shù)碼管的位碼隨CLK時(shí)鐘的變化而進(jìn)行掃描,由于CLK的頻率較高,人的眼睛會(huì)有短暫的視

38、覺(jué)停留,所以會(huì)看到4個(gè)數(shù)碼管都在顯示時(shí)間。</p><p>  §3.4頂層文件的編寫(xiě)</p><p>  將以上各個(gè)單元模塊仿真成功后,再進(jìn)行頂層文件的編寫(xiě)。將各個(gè)單元模塊的變量賦值給頂層文件,從而將各個(gè)單元模塊連接起來(lái),統(tǒng)一調(diào)配。得到頂層文件的實(shí)體模塊:</p><p>  CLK為1KHZ系統(tǒng)時(shí)鐘脈沖</p><p>  CA

39、R為支干道車(chē)輛行駛情況,高電平為有車(chē)行駛,低電平為無(wú)車(chē)行駛</p><p>  LED為交通燈發(fā)光情況</p><p>  SEL為數(shù)碼管位碼掃描</p><p><b>  SEG為數(shù)碼管段碼</b></p><p><b>  仿真波形如下:</b></p><p>  

40、仿真后可以得到最終的結(jié)果:</p><p>  開(kāi)始時(shí),支干道沒(méi)有車(chē)輛行駛。主干道處于常通行狀態(tài),支干道處于禁止?fàn)顟B(tài);當(dāng)支干道有車(chē)來(lái)時(shí),主干道亮綠燈,經(jīng)行45秒倒計(jì)時(shí),支干道亮紅燈,經(jīng)行50秒倒計(jì)時(shí);</p><p>  主干道45秒倒計(jì)時(shí)結(jié)束后跳變到黃燈,進(jìn)行5秒倒計(jì)時(shí),支干道繼續(xù)亮紅燈,進(jìn)行倒計(jì)時(shí);</p><p>  主干道5秒倒計(jì)時(shí)結(jié)束后跳變到紅燈,經(jīng)行30

41、秒倒計(jì)時(shí),支干道跳變到綠燈,進(jìn)行25秒倒計(jì)時(shí);</p><p>  支干道25秒倒計(jì)時(shí)結(jié)束后跳變到黃燈,進(jìn)行5秒倒計(jì)時(shí),主干道繼續(xù)亮紅燈,進(jìn)行倒計(jì)時(shí);</p><p>  支干道5秒倒計(jì)時(shí)結(jié)束后,判斷支干道是否有車(chē),若有車(chē)跳變到S1狀態(tài),沒(méi)有車(chē)跳變到S0狀態(tài)</p><p>  硬件實(shí)驗(yàn)方案及實(shí)驗(yàn)結(jié)果</p><p>  將程序進(jìn)行編譯后,就

42、可以把管腳綁定后把程序下載到實(shí)驗(yàn)板上進(jìn)行調(diào)試了。</p><p>  §4.1硬件實(shí)驗(yàn)方案</p><p><b>  管腳綁定如下所示</b></p><p><b>  注:</b></p><p>  CLK綁定時(shí)鐘1KHZ</p><p><b>

43、  CAR綁定DK4</b></p><p>  LED[0]綁定LED6;--支干道紅燈</p><p>  LED[1]綁定LED7;--支干道黃燈</p><p>  LED[2]綁定LED8;--支干道綠燈</p><p>  LED[3]綁定LED1;--主干道紅燈</p><p>  LED[4

44、]綁定LED2;--主干道黃燈</p><p>  LED[5]綁定LED3;--主干道綠燈</p><p>  SEL[0]綁定LI0;</p><p>  SEL[1]綁定LI1;</p><p>  SEL[2]綁定LI2。</p><p>  SEG[0]綁定G8;</p><p>  

45、SEG[1]綁定F8;</p><p>  SEG[2]綁定E8;</p><p>  SEG[3]綁定D8;</p><p>  SEG[4]綁定C8;</p><p>  SEG[5]綁定B8;</p><p>  SEG[6]綁定A8;</p><p>  將管腳按上圖綁定后就可以下載到實(shí)

46、驗(yàn)板上進(jìn)行調(diào)試了</p><p><b>  §4.2實(shí)驗(yàn)結(jié)果</b></p><p>  將程序下載到實(shí)驗(yàn)板后,CAR置于低電平后,可以看到LED燈的顯示情況為主干道亮綠燈,支干道亮紅燈,主干道數(shù)碼管顯示45秒,支干道數(shù)碼管顯示50秒。但支干道有車(chē)時(shí),把CAR置于高電平,可以看到主、支干道的數(shù)碼管開(kāi)始倒計(jì)時(shí);主干道倒計(jì)時(shí)結(jié)束后再進(jìn)行5秒倒計(jì)時(shí),并且交通燈變

47、為黃燈;當(dāng)主干道倒計(jì)時(shí)結(jié)束后,主干道數(shù)碼管顯示30,支干道數(shù)碼管顯示25,主干道變?yōu)榧t燈,支干道變?yōu)榫G燈,繼續(xù)進(jìn)行倒計(jì)時(shí);支干道倒計(jì)時(shí)結(jié)束后再經(jīng)行5秒倒計(jì)時(shí),交通燈變?yōu)辄S燈;支干道倒計(jì)時(shí)結(jié)束后再回到初始狀態(tài)。</p><p>  從實(shí)驗(yàn)板上可以看出硬件測(cè)試下的效果達(dá)到了設(shè)計(jì)的要求,能夠?qū)崿F(xiàn)交通信號(hào)燈控制器的基本功能。但是,由于實(shí)驗(yàn)板的系統(tǒng)時(shí)鐘不穩(wěn)定,導(dǎo)致數(shù)碼管的掃描有時(shí)會(huì)出現(xiàn)閃動(dòng)的現(xiàn)象,在更換了實(shí)驗(yàn)板后可以看出,

48、數(shù)碼管的掃描基本穩(wěn)定,在視覺(jué)上不會(huì)出現(xiàn)閃動(dòng)的情況?;蛘呖梢詫⑾到y(tǒng)的時(shí)鐘頻率改為2KHZ,更改分頻模塊后再進(jìn)行編譯下載,這樣可以加快數(shù)碼管掃描的速度,從而達(dá)到消除視覺(jué)上閃動(dòng)的現(xiàn)象。</p><p><b>  收獲和體會(huì)</b></p><p>  EDA課程設(shè)計(jì)很快就結(jié)束了,雖然在之前的學(xué)習(xí)過(guò)程中還存在著沒(méi)有弄懂的問(wèn)題,但是通過(guò)這次設(shè)計(jì),進(jìn)一步加深了對(duì)EDA的了解,讓

49、我對(duì)它有了更加濃厚的興趣。</p><p>  在拿到題目后,首先進(jìn)行了單元模塊的設(shè)計(jì),將每一個(gè)單元模塊設(shè)計(jì)完成后再經(jīng)行仿真,仿真成功后就可以進(jìn)行頂層文件的編寫(xiě)了,在頂層文件的編寫(xiě)過(guò)程中遇到了一些問(wèn)題,特別是各模塊之間的連接,以及信號(hào)的定義,總是有錯(cuò)誤。有的時(shí)候信號(hào)的定義容易出現(xiàn)混淆,在反復(fù)的修改過(guò)后,頂層文件終于能夠編譯成功了。</p><p>  在波形仿真的過(guò)程中,同樣遇到了困難,有

50、的時(shí)候,由于END TIME的時(shí)間修改的太大,會(huì)出現(xiàn)仿真時(shí)間過(guò)長(zhǎng)的問(wèn)題,這個(gè)時(shí)候應(yīng)該要把END TIME的時(shí)間相應(yīng)的改小,或是修改系統(tǒng)時(shí)鐘的頻率。</p><p>  在設(shè)計(jì)的過(guò)程中還應(yīng)該多聯(lián)系下實(shí)際情況,要了解實(shí)際情況下交通信號(hào)燈的工作情況,才能更好的完成此次的課程設(shè)計(jì)。在今后的工作和學(xué)習(xí)中,我們不能僅僅把目光停留在課本上,要多理論聯(lián)系實(shí)際。有的時(shí)候,理論上是正確的東西放到現(xiàn)實(shí)中去,可能由于種種因素的制約,并不

51、能達(dá)到實(shí)際的效果,還需要我們進(jìn)行相應(yīng)的修改才能完成要求。這次的課程設(shè)計(jì)使我鞏固了以前學(xué)習(xí)到的知識(shí),還使我掌握了以前沒(méi)有掌握的知識(shí),同時(shí)鍛煉了自己的能力。</p><p><b>  交通燈總代碼:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p&g

52、t;<p>  use work.all;</p><p>  entity head is</p><p>  port(color_A:buffer std_logic_vector(2 downto 0);</p><p>  color_B:buffer std_logic_vector(2 downto 0);</p><

53、p>  Aode_out_high,Acode_out_low:out std_logic_vector(6 downto 0);</p><p>  Bcode_out_high,Bcode_out_low:out std_logic_vector(6 downto 0);</p><p>  res,clk,key:in std_logic);</p><p&

54、gt;<b>  end head;</b></p><p>  architecture main_str of head is</p><p>  signal put_a,put_b,flag_a,flag_b,load_a,load_b:std_logic;</p><p>  signal data_a,data_b,value_co

55、u_a,value_cou_b:std_logic_vector(7 downto 0);</p><p>  signal Acode_in_high,Acode_in_low,Bcode_in_high,Bcode_in_low:std_logic_vector(3 downto 0);</p><p>  signal data_bcd_a,data_bcd_b:std_logic_

56、vector(7 downto 0);</p><p>  component put_numb is --定義置數(shù)器</p><p>  port(res_s,put_a,put_b,clk_s:in std_logic;</p><p>  out_sto_a:buffer std_logic_vector(7 downto 0);</p>

57、<p>  out_sto_b:buffer std_logic_vector(7 downto 0));</p><p>  end component;</p><p>  component counter is --定義計(jì)數(shù)器</p><p>  port(res_c,clk_h,com_load,hold:in std_logic;

58、</p><p>  in_data:in std_logic_vector(7 downto 0);</p><p>  vec_out:buffer std_logic_vector(7 downto 0);</p><p>  flag:out std_logic);</p><p>  end component;</p>

59、<p>  component mux_bcd is --定義BCD碼轉(zhuǎn)換器</p><p>  port(data_1:in std_logic_vector(7 downto 0);</p><p>  res_m,hold_s,clk_m:in std_logic;</p><p>  data_bcd:out std_logic_

60、vector(7 downto 0));</p><p>  end component;</p><p>  component main_col is --定義主控制器</p><p>  port(hold_1,clk_r,flag_froma,flag_fromb,res_r:in std_logic;</p><p> 

61、 color_vec_A:buffer std_logic_vector(2 downto 0);</p><p>  color_vec_B:buffer std_logic_vector(2 downto 0);</p><p>  puta,putb,loada,loadb:buffer std_logic);</p><p>  end component;

62、</p><p>  component code_sev is --定義七段字型譯碼器</p><p>  port(code_in:in std_logic_vector(3 downto 0);</p><p>  code_out:out std_logic_vector(6 downto 0));</p><p>  end

63、component;</p><p><b>  begin</b></p><p>  u1:put_numb port map(res,put_a,put_b,clk,data_a,data_b);</p><p>  u2:counter port map(res,clk,load_a,key,data_a,value_cou_a,fla

64、g_a);</p><p>  u3:counter port map(res,clk,load_b,key,data_b,value_cou_b,flag_b);</p><p>  u4:mux_bcd port map(value_cou_a,res,key,clk,data_bcd_a);</p><p>  u5:mux_bcd port map(valu

65、e_cou_b,res,key,clk,data_bcd_b);</p><p>  u6:main_col port map(key,clk,flag_a,flag_b,res,color_A,color_B,put_a,put_b,load_a,load_b);</p><p>  u7:code_sev port map(Acode_in_high,Acode_out_high);&

66、lt;/p><p>  u8:code_sev port map(Acode_in_low,Acode_out_low);</p><p>  u9:code_sev port map(Bcode_in_high,Bcode_out_high);</p><p>  u10:code_sev port map(Bcode_in_low,Bcode_out_low);&l

67、t;/p><p>  Acode_in_high<=data_bcd_a(7 downto 4);</p><p>  Acode_in_low<=data_bcd_a(3 downto 0);</p><p>  Bcode_in_high<=data_bcd_b(7 downto 4);</p><p>  Bcode_in

68、_high<=data_bcd_b(3 downto 0);</p><p>  end main_str;</p><p>  library ieee; --置數(shù)器</p><p>  use ieee.std_logic_1164.all;</p><p>  entity put_numb is</p>&

69、lt;p>  port(res_s,put_a,put_b,clk_s:in std_logic;</p><p>  out_sto_a:buffer std_logic_vector(7 downto 0);</p><p>  out_sto_b:buffer std_logic_vector(7 downto 0));</p><p>  end pu

70、t_numb;</p><p>  architecture rtl_sto of put_numb is</p><p><b>  begin</b></p><p>  process(res_s,put_a,clk_s)</p><p>  variable in_var:std_logic_vector(7 d

71、ownto 0);</p><p><b>  begin </b></p><p>  in_var:=out_sto_a;</p><p>  if(res_s='0')then</p><p>  out_sto_a<="00110110";</p>&l

72、t;p>  elsif(clk_s'event and clk_s='0')then</p><p>  if(put_a='0')then</p><p>  case in_var is</p><p>  when"00110110"=>out_sto_a<="001100

73、01"; --55秒后裝入50秒</p><p>  when"00110001"=>out_sto_a<="00000100"; --50秒后裝入05秒</p><p>  when"00000100"=>out_sto_a<="00110110"; --0

74、5秒后再次裝入55秒</p><p>  when others =>out_sto_a<="XXXXXXXX";</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p><b>  

75、end if;</b></p><p>  end process;</p><p>  process(res_s,put_b,clk_s) --B組計(jì)時(shí)時(shí)間狀態(tài)機(jī)</p><p>  variable in_var:std_logic_vector(7 downto 0);</p><p><b>  

76、begin</b></p><p>  in_var:=out_sto_b;</p><p>  if(res_s='0')then</p><p>  out_sto_b<="00110001"; --復(fù)位時(shí)A組輸出31H(49D),即50秒</p><p>  elsi

77、f(clk_s'event and clk_s='0')then</p><p>  if(put_b='0')then</p><p>  case in_var is</p><p>  when"00110001"=>out_sto_b<="00110001";

78、--50秒后裝入05秒</p><p>  when"00110001"=>out_sto_b<="00110110"; --05秒后裝入55秒</p><p>  when"00110110"=>out_sto_b<="00110001"; --55秒后再次裝入50秒<

79、;/p><p>  when others =>out_sto_b<="XXXXXXXX";</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p><b>  end if;</b&

80、gt;</p><p>  end process;</p><p>  end rtl_sto;</p><p>  library ieee; --計(jì)數(shù)器</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_ari

81、th.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity counter is</p><p>  port(res_c,clk_h,com_load,hold:in std_logic;</p><p>  in_data:in std_logic_vector(

82、7 downto 0);</p><p>  vec_out:buffer std_logic_vector(7 downto 0);</p><p>  flag:out std_logic);</p><p>  end counter;</p><p>  architecture rtl of counter is</p>

83、<p>  signal clk_c:std_logic;</p><p><b>  begin</b></p><p>  clk_c<=hold and clk_h;</p><p>  process(clk_c)</p><p><b>  begin</b></

84、p><p>  if(clk_c'event and clk_c='1')then</p><p>  flag<=(not vec_out(0))or vec_out(1) or vec_out(2) or vec_out(3) or vec_out(4)</p><p>  or vec_out(5) or vec_out(6) or

85、vec_out(7);</p><p>  --計(jì)時(shí)時(shí)間到信號(hào)的獲取,在0秒輸出寬1秒的負(fù)脈沖</p><p><b>  end if;</b></p><p>  end process;</p><p>  process(res_c,clk_c)</p><p>  variable c

86、ount:integer range 0 to 255;</p><p>  begin --復(fù)位時(shí)計(jì)數(shù)器重新加載端口計(jì)時(shí)初始值</p><p>  if(res_c='0')then</p><p>  count:=conv_integer(in_data);</p><p>  elsi

87、f(clk_c'event and clk_c='1')then</p><p>  if(com_load='0')then --load命令讓計(jì)數(shù)器加載端口計(jì)時(shí)初值</p><p>  count:=conv_integer(in_data);</p><p><b>  else</b>

88、</p><p>  count:=count-1; --減1計(jì)數(shù)</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  vec_out<=conv_std_logic_vector(count,8);

89、 --將整型值轉(zhuǎn)換為8位寬的矢量信號(hào)</p><p>  end process;</p><p><b>  end rtl;</b></p><p>  library ieee; --BCD碼轉(zhuǎn)換器</p><p>  use ieee.std_logic_1164.all;</p><

90、p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity mux_bcd is</p><p>  port(data_1:in std_logic_vector(7 downto 0);</p><p> 

91、 res_m,hold_s,clk_m:in std_logic;</p><p>  data_bcd:out std_logic_vector(7 downto 0));</p><p>  end mux_bcd;</p><p>  architecture mu of mux_bcd is</p><p>  signal data

92、_in:std_logic_vector(7 downto 0);</p><p>  signal data_2:std_logic_vector(7 downto 0);</p><p>  signal sel:std_logic;</p><p><b>  begin</b></p><p>  data_2&

93、lt;="11111111" ; --此碼用作關(guān)斷數(shù)碼管</p><p>  process(sel,res_m,data_1,data_2)</p><p><b>  begin</b></p><p>  if(res_m='0')then</p><p>  da

94、ta_in<="10011001"; --復(fù)位時(shí)將能顯示的最大值給數(shù)碼管,99s</p><p>  elsif(sel='1')then</p><p>  data_in<=data_1;</p><p><b>  else</b></p><p&

95、gt;  data_in<=data_2;</p><p><b>  end if;</b></p><p>  end process;</p><p>  process(data_in) --對(duì)數(shù)據(jù)進(jìn)行BCD調(diào)整</p><p>  variable temp:integer range 0 to

96、 255;</p><p><b>  begin</b></p><p>  temp:=conv_integer(data_in); </p><p>  case temp is</p><p>  when 0 to 9 =>temp:=temp;</p><p>  when 1

97、0 to 19=>temp:=temp+6;</p><p>  when 20 to 29=>temp:=temp+12;</p><p>  when 30 to 39=>temp:=temp+18;</p><p>  when 40 to 49=>temp:=temp+24;</p><p>  when 50

98、 to 59=>temp:=temp+30;</p><p>  when 60 to 69=>temp:=temp+36;</p><p>  when 70 to 79=>temp:=temp+42;</p><p>  when 80 to 89=>temp:=temp+48;</p><p>  when 90

99、 to 99=>temp:=temp+54;</p><p>  when others =>temp:=255;</p><p><b>  end case;</b></p><p>  data_bcd<=conv_std_logic_vector(temp,8); --將整型值轉(zhuǎn)換為8位寬的矢量信號(hào)</p&g

100、t;<p>  end process;</p><p>  process(hold_s,clk_m) --對(duì)保持信號(hào)進(jìn)行處理</p><p>  variable temp:std_logic;</p><p><b>  begin</b></p><p>  if(hold_s='0&#

101、39;)then</p><p>  temp:=clk_m;</p><p><b>  else</b></p><p>  temp:='1';</p><p><b>  end if;</b></p><p>  sel<=temp;</

102、p><p>  end process;</p><p><b>  end mu;</b></p><p>  library ieee; --主控制器</p><p>  use ieee.std_logic_1164.all;</p><p>  entity main_col is&l

103、t;/p><p>  port(hold_1,clk_r,flag_froma,flag_fromb,res_r:in std_logic;</p><p>  color_vec_A:buffer std_logic_vector(2 downto 0);</p><p>  color_vec_B:buffer std_logic_vector(2 downto 0

104、);</p><p>  puta,putb,loada,loadb:buffer std_logic);</p><p>  end main_col;</p><p>  architecture rtl of main_col is</p><p>  signal color_vec:std_logic_vector(5 downto

105、 0); --兩組登顏色信號(hào)矢量并為一組(6位)</p><p>  signal color_vec_out:std_logic_vector(5 downto 0); --高3位為A組,低3位為B組</p><p><b>  begin</b></p><p>  puta<=flag_froma; --來(lái)自A組

106、計(jì)數(shù)器0秒信號(hào)送A組置數(shù)器</p><p>  putb<=flag_fromb; --來(lái)自B組計(jì)數(shù)器0秒信號(hào)送B組置數(shù)器</p><p>  color_vec_A<=color_vec_out(5 downto 3);</p><p>  color_vec_B<=color_vec_out(2 downto 0);<

107、/p><p>  process(clk_r)</p><p><b>  begin</b></p><p>  if(clk_r'event and clk_r='0')then</p><p>  loada<=flag_froma; --來(lái)自計(jì)數(shù)器的0秒信號(hào)延遲半個(gè)節(jié)拍后再送回計(jì)數(shù)

108、器</p><p>  loadb<=flag_fromb;--加載已在半個(gè)節(jié)前置數(shù)器放置在其端口上的初始數(shù)據(jù)</p><p>  --確保數(shù)據(jù)準(zhǔn)確無(wú)誤</p><p><b>  end if;</b></p><p>  end process;</p><p>  process(cl

109、k_r,res_r,loada,loadb)</p><p>  variable temp:std_logic;</p><p>  variable temp_vec:std_logic_vector(5 downto 0);</p><p><b>  begin</b></p><p>  temp_vec:=c

110、olor_vec;</p><p>  if(res_r='0')then</p><p>  color_vec<="100001";</p><p>  elsif(clk_r'event and clk_r='1')then --復(fù)位時(shí)A組亮紅燈,B組亮綠燈</p>

111、<p>  if((loada and loadb)='0')then</p><p>  case temp_vec is</p><p>  when "100001"=>color_vec<="100010"; --A紅B綠后下一狀態(tài)為A紅B黃</p><p>  when &q

112、uot;100010"=>color_vec<="001100"; --A紅B黃后下一狀態(tài)為A綠B紅</p><p>  when "001100"=>color_vec<="010100"; --A綠B紅后下一狀態(tài)為A黃B紅</p><p>  when "010100&quo

113、t;=>color_vec<="100001"; --A黃B紅后下一狀態(tài)為A紅B黃</p><p>  when others => color_vec<="XXXXXX";</p><p><b>  end case;</b></p><p><b>  end

114、if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  process(hold_1,clk_r) --對(duì)特殊狀態(tài)時(shí)紅燈全亮的處理</p><p>  variable temp:std_logic_vector(5

115、 downto 0);</p><p><b>  begin</b></p><p>  if(hold_1='1')then</p><p>  temp:=color_vec;</p><p><b>  else</b></p><p>  temp:

116、="100100";</p><p><b>  end if;</b></p><p>  color_vec_out<=temp;</p><p>  end process;</p><p><b>  end rtl;</b></p><p>

117、;  library ieee; --七段字型譯碼器</p><p>  use ieee.std_logic_1164.all;</p><p>  entity code_sev is</p><p>  port(code_in:in std_logic_vector(3 downto 0);</p><p> 

118、 code_out:out std_logic_vector(6 downto 0));</p><p>  end code_sev;</p><p>  architecture rtl of code_sev is</p><p><b>  begin</b></p><p>  process(code_in)

119、</p><p><b>  begin</b></p><p>  case code_in is</p><p>  when "0000"=>code_out<="1111110";</p><p>  when "0001"=>code

120、_out<="0110000";</p><p>  when "0011"=>code_out<="1101101";</p><p>  when "0100"=>code_out<="1111001";</p><p>  when

121、 "0101"=>code_out<="0110011";</p><p>  when "0101"=>code_out<="1011011";</p><p>  when "0110"=>code_out<="0011111";&

122、lt;/p><p>  when "0111"=>code_out<="1110000";</p><p>  when "1000"=>code_out<="1111111";</p><p>  when "1001"=>code_out

123、<="1110011";</p><p>  when others=>code_out<="0000000"; --若不是以上10種情況則將數(shù)碼管關(guān)斷</p><p><b>  end case;</b></p><p>  end process;</p><

124、;p><b>  end rtl;</b></p><p><b>  參考文獻(xiàn):</b></p><p>  潘松著 EDA技術(shù)實(shí)用教程(第二版) 北京科學(xué)出版社.2005</p><p>  康華光主編 電子技術(shù)實(shí)驗(yàn)基礎(chǔ) 模擬部分 北京高教出版社.2006</p><p>  閆石主編 數(shù)

125、字電子技術(shù)基礎(chǔ) 北京高教出版社.2003</p><p>  馮濤,王程.可編程邏輯器件開(kāi)發(fā)技術(shù)—MAX plus II入門(mén)與提高[M].北京:人民郵電出版社,2OO2]</p><p>  房德君.智能交通燈控制裝置[J].山東工程學(xué)院學(xué)報(bào),1998,12(4):27~30]</p><p>  李國(guó)麗. 用PLD芯片和AHDL語(yǔ)言進(jìn)行交通燈控制器設(shè)計(jì)[J].合肥

126、工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2002,25(4):545~548</p><p>  張文潔,葉紫.交通燈控制器設(shè)計(jì):FPGA/CPLD實(shí)現(xiàn)小型數(shù)字系統(tǒng)的應(yīng)用分析[J]。電子技術(shù)應(yīng)用,2001,27,27(11):52~54</p><p>  余華,岳秋琴 電子設(shè)計(jì)自動(dòng)化技術(shù)的發(fā)展及在現(xiàn)代數(shù)字電子系統(tǒng)設(shè)計(jì)中的應(yīng)用;現(xiàn)代電子技術(shù);2001年05期</p><p> 

溫馨提示

  • 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)論