基于.-FPGA的交通燈控制課程設(shè)計(jì)匯本_第1頁
基于.-FPGA的交通燈控制課程設(shè)計(jì)匯本_第2頁
基于.-FPGA的交通燈控制課程設(shè)計(jì)匯本_第3頁
基于.-FPGA的交通燈控制課程設(shè)計(jì)匯本_第4頁
基于.-FPGA的交通燈控制課程設(shè)計(jì)匯本_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

...wd......wd......wd...XXXXXX學(xué)院題目:基于FPGA的交通燈控制課程設(shè)計(jì)學(xué)院:信息工程學(xué)院班級(jí):設(shè)計(jì)人:指導(dǎo)教師:設(shè)計(jì)時(shí)間:2016年6月16日目錄一.摘要............................................1二.概述............................................11.FPGA的應(yīng)用.......................................1三.系統(tǒng)總體設(shè)計(jì)....................................21.設(shè)計(jì)任務(wù).......................................22.系統(tǒng)設(shè)計(jì)流程...................................2四.硬件設(shè)計(jì)........................................41.控制模塊.......................................52.時(shí)鐘分頻模塊...................................53.分位譯碼模塊...................................54.計(jì)數(shù)模塊.......................................6五.實(shí)驗(yàn)程序設(shè)計(jì)....................................6六.程序仿真與分析..................................131.仿真結(jié)果.......................................132.仿真結(jié)果分析...................................14七.心得體會(huì)........................................14八.參考文獻(xiàn)........................................15九.附錄............................................15一.摘要EDA工具對(duì)于電子設(shè)計(jì)人員來說極其重要,它可以在電子設(shè)計(jì)的各個(gè)階段、層次進(jìn)展目前交通燈廣泛應(yīng)用于道路交通建設(shè)中。實(shí)現(xiàn)十字路口紅綠燈的自動(dòng)控制。本文設(shè)計(jì)一個(gè)十字路口交通燈控制電路,要求東西、南北兩條干道的紅、綠、黃交通燈按要求循環(huán)變化,并以倒計(jì)時(shí)方式指示干道通行或制止的維持時(shí)間。為了對(duì)交通燈系統(tǒng)進(jìn)展準(zhǔn)確控制,采用FPGA實(shí)驗(yàn)板,在QuartusⅡ軟件環(huán)境下,分別實(shí)現(xiàn)脈沖發(fā)生模塊、狀態(tài)定時(shí)模塊、交通燈顯示模塊、時(shí)間顯示模塊,進(jìn)展仿真實(shí)驗(yàn)和硬件下載,獲得的測(cè)試結(jié)果滿足設(shè)計(jì)要求。基于FPGA的交通燈設(shè)計(jì)系統(tǒng)具有可靠性強(qiáng)、實(shí)時(shí)快速擦寫、運(yùn)算速度高、故障率低、電路簡(jiǎn)單,且體積小的特點(diǎn)。使用QuartusII軟件作為開發(fā)平臺(tái);采用自頂向下的設(shè)計(jì)思路對(duì)系統(tǒng)進(jìn)展模塊化設(shè)計(jì)和綜合,并通過波形仿真和硬件實(shí)現(xiàn)兩種方式實(shí)現(xiàn)并驗(yàn)證交通燈的功能。二.概述FPGA〔Field-Programmable

Gate

Array〕,即現(xiàn)場(chǎng)可編程門陣列,它是在可編程器件的基礎(chǔ)上進(jìn)一步開展的產(chǎn)物。它是作為專用集成電路領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的缺乏,又抑制了原有可編程器件門電路數(shù)有限的缺點(diǎn)。當(dāng)今社會(huì)是數(shù)字化的社會(huì),是數(shù)字集成電路廣泛應(yīng)用的社會(huì)。數(shù)字集成電路本身在不斷進(jìn)展更新?lián)Q代,隨著微電子技術(shù)的開展,設(shè)計(jì)與制造集成電路的任務(wù)已不完全由半導(dǎo)體廠商來獨(dú)立承擔(dān)。隨著電子技術(shù)的開展,特別是大規(guī)模集成電路和計(jì)算機(jī)技術(shù)的研制和開展,讓電子產(chǎn)品設(shè)計(jì)有了更好的應(yīng)用市場(chǎng),實(shí)現(xiàn)方法也有了更多的選擇,而電子電路的設(shè)計(jì)卻變得越來越復(fù)雜,使用“語言〞進(jìn)展電子設(shè)計(jì)已成為一種趨勢(shì)?,F(xiàn)代電子系統(tǒng)設(shè)計(jì)方法是設(shè)計(jì)師自己設(shè)計(jì)芯片來實(shí)現(xiàn)電子系統(tǒng)的功能,將傳統(tǒng)的固件選用及電路板設(shè)計(jì)工作放在芯片設(shè)計(jì)中進(jìn)展。在這些專業(yè)化軟件中,EDA(ElectronicDesignAutomation)具有一定的代表性,EDA技術(shù)是一種基于芯片的現(xiàn)代電子系統(tǒng)設(shè)計(jì)方法。基于EDA技術(shù)的現(xiàn)場(chǎng)可編程門陣列(FPGA),在數(shù)字系統(tǒng)設(shè)計(jì)和控制電路中越來越受到重視。VHDL語言是電子設(shè)計(jì)的主流硬件描述語言,它更適合進(jìn)展行為描述,這種方式使得設(shè)計(jì)者專注于電路功能的設(shè)計(jì),而不必過多地考慮具體的硬件構(gòu)造?;贓DA技術(shù)的現(xiàn)場(chǎng)可編程門陣列(FPGA)電路,提出現(xiàn)場(chǎng)可編程門陣列(FPGA)是近年來迅速開展的大規(guī)模可編程專用集成電路(ASIC),在數(shù)字系統(tǒng)設(shè)計(jì)和控制電路中越來越受到重視。VHDL語言是電子設(shè)計(jì)的主流硬件描述語言,它更適合進(jìn)展行為描述,這種方式使得設(shè)計(jì)者專注于電路功能的設(shè)計(jì),而不必過多地考慮具體的硬件構(gòu)造。目前以硬件描述語言所完成的電路設(shè)計(jì),可以經(jīng)過簡(jiǎn)單的綜合與布局,快速的燒錄至FPGA上進(jìn)展測(cè)試,是現(xiàn)代IC設(shè)計(jì)驗(yàn)證的技術(shù)主流。1.FPGA的應(yīng)用FPGA的應(yīng)用可分為三個(gè)層面:電路設(shè)計(jì),產(chǎn)品設(shè)計(jì),系統(tǒng)設(shè)計(jì)。a.電路設(shè)計(jì)連接邏輯,控制邏輯是FPGA早期發(fā)揮作用比較大的領(lǐng)域也是FPGA應(yīng)用的基石。事實(shí)上在電路設(shè)計(jì)中應(yīng)用FPGA要求開發(fā)者要具備相應(yīng)的硬件知識(shí)〔電路知識(shí)〕和軟件應(yīng)用能力〔開發(fā)工具〕。b.產(chǎn)品設(shè)計(jì)把相對(duì)成熟的技術(shù)應(yīng)用到某些特定領(lǐng)域開發(fā)出滿足行業(yè)需要并能被行業(yè)客戶承受的產(chǎn)品。這方面主要是FPGA技術(shù)和專業(yè)技術(shù)的結(jié)合問題,重點(diǎn)在性能,F(xiàn)PGA技術(shù)在這個(gè)領(lǐng)域是一個(gè)實(shí)現(xiàn)手段,F(xiàn)PGA因?yàn)榫邆浣涌?,控制,功能IP,內(nèi)嵌CPU等特點(diǎn)有條件實(shí)現(xiàn)一個(gè)構(gòu)造簡(jiǎn)單,固化程度高,功能全面的系統(tǒng)產(chǎn)品設(shè)計(jì)。c.系統(tǒng)級(jí)的應(yīng)用系統(tǒng)級(jí)的應(yīng)用是FPGA與傳統(tǒng)的計(jì)算機(jī)技術(shù)結(jié)合,實(shí)現(xiàn)一種FPGA版的計(jì)算機(jī)系統(tǒng)如用XilinxV-4,V-5系列的FPGA,實(shí)現(xiàn)內(nèi)嵌POWERPCCPU,然后再配合各種外圍功能,這個(gè)平臺(tái)上跑LINIX等系統(tǒng)這個(gè)系統(tǒng)也就支持各種標(biāo)準(zhǔn)外設(shè)和功能接口了,這對(duì)于快速構(gòu)成FPGA大型系統(tǒng)來講是很有幫助的。三.系統(tǒng)總體設(shè)計(jì)1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)十字路口交通控制器,方向分為東南西北四個(gè)方向。東西方向的紅綠燈狀態(tài)一樣,南北方向的紅綠燈狀態(tài)一樣。每個(gè)方向上,有四盞燈,分別是左轉(zhuǎn)燈、紅燈、綠燈和黃燈。左拐燈亮表示左轉(zhuǎn)車輛可以通行;紅燈亮表示左轉(zhuǎn)和直行車輛禁行;綠燈亮表示直行車輛和右轉(zhuǎn)的車輛可以通行;黃燈亮表示左轉(zhuǎn)和直行的車輛即將禁行;倒計(jì)時(shí)顯示器用來顯示允許通行或制止通行的時(shí)間倒計(jì)時(shí)。2.系統(tǒng)設(shè)計(jì)流程提出系統(tǒng)設(shè)計(jì)要求提出系統(tǒng)設(shè)計(jì)要求需求分析需求分析模塊化方案設(shè)計(jì)模塊化方案設(shè)計(jì)底層電路設(shè)計(jì)---模塊方案設(shè)計(jì)底層電路設(shè)計(jì)---模塊方案設(shè)計(jì)頂層電路設(shè)計(jì)---原理圖描述+各模塊連接頂層電路設(shè)計(jì)---原理圖描述+各模塊連接功能仿真FPGA整體方案編譯仿真FPGA整體方案設(shè)計(jì)完成硬件連接和運(yùn)行時(shí)序仿真FPGA整體方案設(shè)計(jì)實(shí)現(xiàn)功能仿真FPGA整體方案編譯仿真FPGA整體方案設(shè)計(jì)完成硬件連接和運(yùn)行時(shí)序仿真FPGA整體方案設(shè)計(jì)實(shí)現(xiàn)系統(tǒng)分析通過分析可以知道,所要設(shè)計(jì)的十字路口交通燈控制電路要能夠使南北、東西各四個(gè)燈〔紅、黃、綠、左轉(zhuǎn)〕,四個(gè)燈能夠按順序依次亮滅。而且要求綠燈亮轉(zhuǎn)紅燈亮或者轉(zhuǎn)左轉(zhuǎn)燈亮之前要先轉(zhuǎn)黃燈亮5秒,左轉(zhuǎn)燈亮轉(zhuǎn)紅燈亮之前也要先轉(zhuǎn)黃燈亮5秒,紅燈亮可以直接轉(zhuǎn)綠燈或左轉(zhuǎn)燈亮〔四種燈的循環(huán)順序如圖2-1所示〕。還要求四種燈的點(diǎn)亮?xí)r間能夠以倒計(jì)時(shí)的形式顯示出來??梢杂肰HDL語言合理設(shè)計(jì)系統(tǒng)功能,使紅黃綠左轉(zhuǎn)燈的轉(zhuǎn)換有一個(gè)準(zhǔn)確的時(shí)間間隔和轉(zhuǎn)換順序。經(jīng)分析,系統(tǒng)的總體構(gòu)造可以描述下述的方框圖:Hold倒計(jì)時(shí)數(shù)字及‘閃爍控制信號(hào)’七段數(shù)碼管七段數(shù)碼管驅(qū)動(dòng)電路Reset分頻電路分位譯碼電路紅、黃、綠發(fā)光二極管控制器計(jì)數(shù)器Hold倒計(jì)時(shí)數(shù)字及‘閃爍控制信號(hào)’七段數(shù)碼管七段數(shù)碼管驅(qū)動(dòng)電路Reset分頻電路分位譯碼電路紅、黃、綠發(fā)光二極管控制器計(jì)數(shù)器在FPGA設(shè)計(jì)描述中,采用自頂向下的設(shè)計(jì)思路,該思路,首先要描述頂層的接口,上面的描述已經(jīng)規(guī)定了交通燈控制的輸入輸出信號(hào):輸入信號(hào):復(fù)位開關(guān)信號(hào)reset;外部時(shí)鐘信號(hào)clk。LED七段顯示數(shù)碼管的輸出信號(hào)count1(6

downto

0),count2(6

downto

0),count3(6

downto

0),count4(6

downto

0);在自頂向下的VHDL設(shè)計(jì)描述中,通常把整個(gè)設(shè)計(jì)的系統(tǒng)劃分為幾個(gè)模塊,然后采用構(gòu)造描述方式對(duì)整個(gè)系統(tǒng)進(jìn)展描述。根據(jù)實(shí)驗(yàn)設(shè)計(jì)的構(gòu)造功能,來確定使用哪些模塊以及這些模塊之間的關(guān)系。通過上面的分析,不難得知可以把交通燈控制系統(tǒng)劃分為4個(gè)模塊:時(shí)鐘分頻模塊,計(jì)數(shù)模塊,控制模塊,分位譯碼模塊。時(shí)鐘分頻模塊:把555多諧振蕩器發(fā)出的較高頻率脈沖用分頻電路的到較第頻率的時(shí)鐘信號(hào),本電路通過三次10分平分別得到10Hz、1Hz的時(shí)鐘信號(hào)。

控制器電路:根據(jù)計(jì)數(shù)器的計(jì)數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計(jì)時(shí)數(shù)值給七段譯碼管的分位譯碼電路。當(dāng)檢測(cè)到手動(dòng)控制信號(hào)〔Con=’1’〕時(shí),執(zhí)行手動(dòng)控制;

計(jì)數(shù)器電路:這里需要的計(jì)數(shù)器的計(jì)數(shù)范圍為0~89。計(jì)到89后,下一個(gè)時(shí)鐘沿升為1時(shí),開場(chǎng)下一輪計(jì)數(shù),此外當(dāng)系統(tǒng)復(fù)位信號(hào)〔Reset=’1’〕使計(jì)數(shù)器異步清‘0’。手動(dòng)信號(hào)〔Con=’1’〕使系統(tǒng)清‘0’。

分位譯碼電路:因?yàn)榭刂破鬏敵龅牡褂?jì)時(shí)數(shù)值可能是1位或者2位十進(jìn)制數(shù),所以在七段數(shù)碼管的譯碼電路前要加上分位電路〔即將其分為2個(gè)1位的十進(jìn)制數(shù),如20分為2和0,7分為0和7〕。七段數(shù)碼管的譯碼電路根據(jù)控制電路的控制信號(hào),驅(qū)動(dòng)交通燈的顯示,通過輸入二進(jìn)制數(shù)值,輸出信號(hào)點(diǎn)亮二極管,我們用的是共陽極數(shù)碼管,因此譯碼電路輸出邏輯數(shù)值‘0’點(diǎn)亮二極管,譯碼電路輸出邏輯數(shù)值‘1’熄滅二極管。四.硬件設(shè)計(jì)1.控制模塊控制模塊的作用是根據(jù)計(jì)數(shù)器的數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計(jì)時(shí)數(shù)值給七段數(shù)碼管的分位譯碼電路。此外,當(dāng)檢測(cè)到特殊情況〔EMI=‘1’〕發(fā)生時(shí),無條件點(diǎn)亮紅燈的二極管〔急救燈按下EMI='1',則東西南北都亮紅燈,在這種狀態(tài)下原來的狀態(tài)必須保持,即東西南北方向定時(shí)時(shí)間保持不變。急救燈未按下或者按下后恢復(fù),則繼續(xù)計(jì)時(shí)〔計(jì)時(shí)通過計(jì)數(shù)器ct〕,同時(shí)恢復(fù)東西南北原來燈的狀態(tài)〕。2.時(shí)鐘分頻模塊分頻器實(shí)現(xiàn)的是將高頻時(shí)鐘信號(hào)轉(zhuǎn)換成低頻時(shí)鐘信號(hào),用于觸發(fā)控制器、計(jì)數(shù)器和掃描顯示電路。將頻率變?yōu)?Hz的脈沖波,從而得到周期為1s的脈沖波。3.分位譯碼模塊〔1〕因?yàn)榭刂戚敵龅牡褂?jì)時(shí)數(shù)值可能是1位或2位十進(jìn)制數(shù),所以七段數(shù)碼管的譯碼電路前要加上分位電路〔即將其分為兩個(gè)1位的十進(jìn)制數(shù),如25分為2和5〕?!?〕分位模塊輸出的計(jì)數(shù)值將十位數(shù)和個(gè)位數(shù)分別存到數(shù)組里,這樣就可以得到兩個(gè)路口倒計(jì)時(shí)時(shí)間顯示的十位和個(gè)位信號(hào)。4.計(jì)數(shù)模塊實(shí)現(xiàn)計(jì)數(shù)為0-80計(jì)數(shù),計(jì)數(shù)到80后,下一個(gè)時(shí)鐘沿回復(fù)到0,開場(chǎng)下一計(jì)數(shù)。此外當(dāng)檢測(cè)到特殊情況〔hold=“1〞〕發(fā)生時(shí),計(jì)數(shù)器暫停計(jì)數(shù),無條件點(diǎn)亮紅色的發(fā)光二極管。而系統(tǒng)復(fù)位信號(hào)Reset則使計(jì)數(shù)器異步清零。五.實(shí)驗(yàn)程序設(shè)計(jì)1.頂層模塊library

ieee;

use

ieee.std_logic_1164.all;

use

ieee.std_logic_unsigned.all;

entity

dingceng

is

port(clkd,resetd,cond,con1d:in

std_logic;

count1:out

std_logic_vector(6

downto

0);—七段數(shù)碼管顯示

count2:out

std_logic_vector(6

downto

0);—七段數(shù)碼管顯示

count3:out

std_logic_vector(6

downto

0);—七段數(shù)碼管顯示

count4:out

std_logic_vector(6

downto

0);—七段數(shù)碼管顯示

reda,yellowa,greena,lifta:outstd_logic;—a發(fā)光二極管輸出

redb,yellowb,greenb,liftb:outstd_logic);—b發(fā)光二極管輸出

end

entity

dingceng;

architecture

one

of

dingceng

is

2.實(shí)體定義componentclk_10—脈沖輸入port(clk:in

std_logic;)--時(shí)鐘頻率為250KHz.

clk_div10

:

out

std_logic);--十分頻后脈沖輸出

end

component;

component

counter3.計(jì)數(shù)模塊port

(clk0:in

std_logic;)--脈沖信號(hào)輸入

con:in

std_logic;--手動(dòng)控制信號(hào)

reset:in

std_logic;--復(fù)位信號(hào)

countnum:bufferinteger

range

0to89);--0-89計(jì)數(shù)輸出。

end

component;

a4.控制模塊component

controller

port

(

clk1

:

in

std_logic;〕--脈沖信號(hào)輸入

con1

:

in

std_logic;--手動(dòng)控制信號(hào)

con2:

in

std_logic;--狀態(tài)控制信號(hào)countnum

:

in

integer

range

0

to

89–0-89計(jì)數(shù)輸入;

numa,numb

:

out

integer

range

0

to

25;--東西、南北兩個(gè)方向的倒計(jì)時(shí)數(shù)值輸出

ra,ga,ya,la:

out

std_logic〕;--ra,ga,ya,la發(fā)光二極管輸出

rb,gb,yb,lb:

out

std_logic);--rb,gb,yb,lb發(fā)光二極管輸出

end

component;

a5.分位模塊component

fenwei

port

(

numin:in

integer

range

0

to

25;--倒計(jì)時(shí)數(shù)值輸入

numa,numb:out

integer

range

0

to

9

);--將數(shù)值分為2個(gè)1位的十進(jìn)制輸出

end

component;

component

yima

port(clk2:in

std_logic;

bb:

in

integer

range

0

to

9;

ya:out

std_logic;--BCD碼輸出

yb:out

std_logic;--BCD碼輸出

yc:out

std_logic;--BCD碼輸出

yd:out

std_logic;--BCD碼輸出

ye:out

std_logic;--BCD碼輸出

yf:out

std_logic;--BCD碼輸出

yg:out

std_logic);--BCD碼輸出

end

component;

signal

a,b,c,d:std_logic;

signal

ww:integer

range

0

to

89;

signal

yy1,yy2:integer

range

0

to

25;

signal

tt1,tt2,tt3,tt4:integer

range

0

to

9;

begin

u0:

clk_10

port

map(clk=>clkd,clk_div10=>a);

u1:

clk_10

port

map(clk=>clkd,clk_div10=>b);

u2:

clk_10

port

map(clk=>b,clk_div10=>c);

u3:counter

port

map(clk0=>c,con=>cond,reset=>resetd,countnum=>ww);

u4:controller

port

map

(clk1=>c,con1=>cond,con2=>con1d,countnum=>ww,numa=>yy1,numb=>yy2,ra=>reda,ga=>greena,ya=>yellowa,ga1=>greena1,rb=>redb,gb=>greenb,yb=>yellowb,gb1=>greenb1);

u5:fenwei

port

map(numin=>yy1,numa=>tt1,numb=>tt2);

u6:fenwei

port

map

(numin=>yy2,numa=>tt3,numb=>tt4);

u7:yima

port

map(clk2=>b,bb=>tt1,ya=>count1(0),yb=>count1(1),yc=>count1(2),yd=>count1(3),ye=>count1(4),yf=>count1(5),yg=>count1(6));

u8:yima

),yf=>count2(5),yg=>count2(6));

u9:yima

3(4),yf=>count3(5),yg=>count3(6));

u10:yima

4(4),yf=>count4(5),yg=>count4(6));

end

architecture

one;b1.實(shí)體定義library

ieee;

use

ieee.std_logic_1164.all;

use

ieee.std_logic_arith.all;

use

ieee.std_logic_unsigned.all;

entity

clk_10

is--脈沖輸入

port(

clk

:

in

std_logic;--時(shí)鐘頻率為250KHz

clk_div10

:

out

std_logic);--十分頻后脈沖輸出

end

clk_10;--脈沖輸出

architecture

one

of

clk_10

is

signal

clk_temp

:

std_logic;

begin

process(clk)

variable

counter

:

std_logic_vector(2

downto

0);

constant

md

:

std_logic_vector(2

downto

0)

:=

"101";

begin

if(clk'event

and

clk='1')

then

if(counter

=

md)then

counter

:=

(others

=>'0');

clk_temp

<=

not

clk_temp;

end

if;

counter

:=

counter

+

1

;

end

if;

end

process;

port

map(clk2=>b,bb=>tt4,ya=>count4(0),yb=>count4(1),yc=>count4(2),yd=>count4(3),ye=>countport

map(clk2=>b,bb=>tt3,ya=>count3(0),yb=>count3(1),yc=>count3(2),yd=>count3(3),ye=>countport

map

(clk2=>b,bb=>tt2,ya=>count2(0),yb=>count2(1),yc=>count2(2),yd=>count2(3),ye=>count2(4)clk_div10

<=

clk_temp;

end

one;b2.計(jì)數(shù)模塊

library

ieee;

use

ieee.std_logic_1164.all;

entity

counter

is

port

(

clk0:in

std_logic;)--脈沖信號(hào)輸入

con:in

std_logic;--手動(dòng)控制信號(hào)

reset:in

std_logic;--復(fù)位信號(hào)

countnum:buffer

integer

range

0

to

89);--復(fù)位信號(hào)

end

counter;

architecture

one

of

counter

is

begin

process

(reset,clk0)

begin

if

reset='1'

then

countnum

<=

0;

elsif

rising_edge(

clk0

)

then

if

con='1'

then

countnum

<=

0;

else

if

countnum=89

then

countnum

<=

0;

else

countnum

<=

countnum

+

1;

end

if;

end

if;

end

if;

end

process;

end

one;b3.控制模塊library

ieee;

use

ieee.std_logic_1164.all;

use

ieee.std_logic_unsigned.all;

entity

controller

is

port

(

clk1

:

in

std_logic;〕--脈沖信號(hào)輸入

con1

:

in

std_logic;--手動(dòng)控制信號(hào)

con2:

in

std_logic;--狀態(tài)控制信號(hào)countnum

:

in

integer

range

0

to

89–0-89計(jì)數(shù)輸入;

numa,numb

:

out

integer

range

0

to

25;--東西、南北兩個(gè)方向的倒計(jì)時(shí)數(shù)值輸出

ra,ga,ya,la:

out

std_logic〕;--ra,ga,ya,la發(fā)光二極管輸出

rb,gb,yb,lb:

out

std_logic);--rb,gb,yb,lb發(fā)光二極管輸出

end

component;

end

controller;

architecture

one

of

controller

is

signal

m

:

integer

range

0

to

7;

begin

process

(

clk1,con1,con2,countnum

)

variable

aa:std_logic_vector(7

downto

0);

begin

if

(clk1'event

and

clk1

=

'1'

)then

if

con1

='0'

then

if

countnum

>=

65then

numb<=90-countnum;

numa

<=90-countnum;

if

countnum

>=

70

then

aa

:=

"00011000";

else

aa

:=

"00101000";

numa<=

70-countnum;

end

if;

elsif

countnum

>=

45

then

numb

<=

65-countnum;

numa

<=65-countnum;

if

countnum

>=

50

then

aa

:=

"10000100";

else

aa

:=

"10000010";

numb<=

50-countnum;

end

if;

elseif

countnum

>=

20

then

numa

<=

45-countnum;

numb

<=45-countnum;

if

countnum

>=

25

then

aa

:=

"01001000";

else

aa

:=

"00101000";

numa

<=

25-countnum;

end

if;

elsif

countnum

>=

0

then

numa

<=

20-countnum;

numb

<=

20-countnum;

if

countnum

>=

5

then

aa

:=

"10000100";

else

aa

:=

"10000010";

numb

<=

5-countnum;

end

if;

end

if;

else

if

con1=

'1'

the

numa

<=

0;

numb

<=

0;

if

con2

=

'1'

then

if

m

=

7

then

m

<=

0;

else

m

<=

m

+

1;

end

if;

end

if;

if

m

=

0

then

aa

:=

"01001000";

elsif

m=

1

then

aa

:=

"00101000";

elsif

m=2

then

aa

:="10000100";

elsif

m=3

then

aa

:=

"10000010";

elsif

m=4

then

aa

:=

"00011000";

elsif

m=5

then

aa

:=

"00101000";

elsif

m=6

then

aa

:=

"10000001";

elsif

m=7

then

aa

:=

"10000010";

end

if;end

if;end

if;end

if;ra

<=

aa(7);ga<=

aa(6);ya<=

aa(5);

ga1<=aa(4);

rb<=aa(3);gb<=aa(2);yb<=aa(1);

gb1<=aa(0);

endprocess;endone;

b4.分位模塊libraryieee;

use

ieee.std_logic_1164.all;

entity

fenwei

is

port

(

numin:in

integer

range

0

to

25;--倒計(jì)時(shí)數(shù)值輸入

numa,numb:out

integer

range

0

to

9

);--將數(shù)值分為2個(gè)1位的十進(jìn)制輸出end

fenwei;--倒計(jì)時(shí)輸出

architecture

one

of

fenwei

is

begin

process(

numin

)

variable

numa1,numb1:

integer

range

0

to

9;

begin

if

numin

>=

20

then

numa1

:=2;

numb1

:=

numin

-

20;

elsif

numin

>=

10

then

numa1

:=

1;

numb1

:=

numin

-

10;

else

numa1

:=

0

;

numb1

:=

numin

;

end

if

;

numa

<=

numa1;

numb

<=

numb1;

end

process

;

end

one

;

bb[3..0]--BCD碼輸入clk2—脈沖輸入

ya,yb,yc,yd,ye,yf,yg—七段數(shù)碼管顯示輸出5.譯碼模塊library

ieee;

use

ieee.std_logic_1164.all;

entity

display

is

port(

clk2:in

std_logic;

bb:

in

std_logic_vector(3

downto

0);--BCD碼輸入ya:out

std_logic;--七段數(shù)碼管顯示輸出

yb:out

std_logic;--七段數(shù)碼管顯示輸出yc:out

std_logic;--七段數(shù)碼管顯示輸出yd:out

std_logic;--七段數(shù)碼管顯示輸出

ye:out

std_logic;--七段數(shù)碼管顯示輸出

yf:out

std_logic;--七段數(shù)碼管顯示輸出yg:out

std_logic);--七段數(shù)碼管顯示輸出end

display;

architecture

one

of

display

issignal

temp:

std_logic_vector(6

downto

0);

--BCD碼輸入begin

process(bb)

begin

case

bb

is

when

"0000"

=>

temp

<=

"1000000";

when

"0001"

=>

temp

<=

"1111001";

when

"0010"

=>

temp

<=

"0100100";

when

"0011"

=>

temp

<=

"0110000";

when

"0100"

=>

temp

<=

"0011001";

when

"0101"

=>

temp

<=

"0010010";

when

"0110"

=>

temp

<=

"0000010";

when

"0111"

=>

temp

<=

"1011000";

when

"1000"

=>

temp

<=

"0000000";

when

"1001"

=>

temp

<=

"0010000";when

others

=>

temp

<=

"1111111";

end

case;

end

process;ya<=temp(0);

yb<=temp(1);

yc<=temp(2);

yd<=temp(3);

ye<=temp(4);

yf<=temp(5);

yg<=temp(6);

end

one;六.程序仿真與分析1仿真結(jié)果利用QUARTUSⅡ軟件對(duì)本程序進(jìn)展編譯,生成了可以進(jìn)展仿真定時(shí)分析以及下載到可編程器件的相關(guān)文件。仿真結(jié)果如下列圖:2仿真結(jié)果分析通過設(shè)定clk值以及start和EMI的初值,就可以得到仿真波形圖。EMI高電平信號(hào)輸入時(shí),所有交通燈都變成紅

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論