版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> EDA技術(shù)與應(yīng)用論文</p><p> 論文題目:交通燈設(shè)計 </p><p> 姓 名: 王 五 </p><p> 專 業(yè): 電子信息工程 </p><p> 班 級: XXXXXX</p><p> 學(xué) 號:
2、 XXXX </p><p> 指導(dǎo)老師: </p><p> 摘 要:本文提出了一個交通燈控制方案, 并介紹了用EDA技術(shù)、VHDL硬件描述語言和可編程器件CPLD實現(xiàn)該方案的系統(tǒng)設(shè)計。關(guān)鍵詞:交通燈, ,EDA,VHDL,CPLD</p><p><b> 目錄</b></p><p&
3、gt; 方案分析與對比································2</p><
4、;p> 1.1方案分析··································&
5、#183;···2</p><p> 1.2方案對比···························
6、3;··········2</p><p> 整體設(shè)計論述·····················
7、183;············3</p><p> 單元模塊設(shè)計與仿真··················
8、83;·········6</p><p> 3.1時鐘分頻模塊·····················
9、3;···········6</p><p> 3.2交通燈控制及計時模塊···················&
10、#183;······7</p><p> 3.3掃描顯示譯碼模塊························
11、······9</p><p> 3.4頂層文件的編寫·························
12、······10</p><p> 硬件實驗方案及實驗結(jié)果·······················13</p&g
13、t;<p> 4.1硬件實驗方案································
14、3;13</p><p> 4.2實驗結(jié)果·······························
15、······15</p><p> 收獲和體會·························
16、3;·········15</p><p> 交通燈編碼······················
17、183;············16</p><p> 參考文獻···················&
18、#183;·················23</p><p><b> 方案分析與對比</b></p><p><b> §1.1方案分析</b></p&
19、gt;<p> 通過分析可以知道,所要設(shè)計的交通信號燈控制電路要能夠適用于由一條主干道和一條支干道的匯合點形成的十字交叉路口。能夠做到主、支干道的紅綠燈閃亮的時間不完全相同,在綠燈跳變紅燈的過程中能夠用黃燈進行過渡,使得行駛過程中的車輛有足夠的時間停下來。還要求在主、支干道各設(shè)立一組計時顯示器,能夠顯示相應(yīng)的紅、黃、綠倒計時??梢岳肰HDL語言合理設(shè)計系統(tǒng)功能,使紅黃綠燈的轉(zhuǎn)換有一個準確的時間間隔和轉(zhuǎn)換順序。</
20、p><p><b> §1.2方案對比</b></p><p> 實現(xiàn)路口交通燈系統(tǒng)的控制方法很多,可以用標準邏輯器件、可編程序控制器和單片機等方案來實現(xiàn)。</p><p> 若用單片機方案來實現(xiàn)的話,模型可以由電源電路、單片機主控電路、無線收發(fā)控制電路和顯示電路四部分組成。在電源電路中,需要用到+5V的直流穩(wěn)壓電源,無線收發(fā)控制電
21、路和顯示電路應(yīng)由編碼芯片和數(shù)據(jù)發(fā)射模塊兩部分組成,主控電路的主要元件為AT89C51。硬件設(shè)計完成后還要利用計算機軟件經(jīng)行軟件部分的設(shè)計才能夠?qū)崿F(xiàn)相應(yīng)的功能。</p><p> 雖然利用單片機系統(tǒng)設(shè)計的交通燈控制器相對來說較穩(wěn)定,能夠完成較多功能的實現(xiàn),但這些控制方法的功能修改及調(diào)試都需要硬件電路的支持,在一定程度上增加了功能修改及系統(tǒng)設(shè)計與調(diào)試的困難。</p><p> 相反,使用基
22、于FPGA的設(shè)計方法具有周期短,設(shè)計靈活,易于修改等明顯的的優(yōu)點。而且,隨著FPGA器件、設(shè)計語言和電子設(shè)計自動化工具的發(fā)展和改進,越來越多的電子系統(tǒng)采用FPGA來設(shè)計。未來,使用FPGA器件設(shè)計的產(chǎn)品將出現(xiàn)在各個領(lǐng)域里。因此,此次的交通信號燈控制器的設(shè)計將采用基于FPGA的設(shè)計方案來實現(xiàn)所要求的功能。</p><p><b> 整體設(shè)計論述</b></p><p>
23、; 根據(jù)設(shè)計要求和系統(tǒng)所具有的功能,并參考相關(guān)的文獻資料,經(jīng)行方案設(shè)計,可以畫出如下圖所示的交通信號燈控制器的系統(tǒng)框圖。 </p><p> 1kHZ </p><p> 1kHZ 1HZ </p><p> 支干道車輛檢測
24、 </p><p> 1kHZ 數(shù)碼管及LED信號 </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:支干道沒有車輛行駛,支干道綠燈,支干道紅燈</p><p> S1:支干道有車輛行駛,支干道綠燈,支干道紅燈</p><p> S2:主干道黃燈,支干道綠燈</p><p> S3:主干道紅燈,
27、支干道綠燈</p><p> S4:主干道紅燈,支干道黃燈</p><p> 根據(jù)以上設(shè)計思路,可以得到如下的頂層文件原理圖</p><p><b> 頂層文件的實體圖:</b></p><p><b> 單元模塊設(shè)計與仿真</b></p><p> §3
28、.1時鐘分頻模塊</p><p> 系統(tǒng)的動態(tài)掃描需要1HZ的脈沖,而系統(tǒng)時鐘計時模塊需要1HZ的脈沖。分頻模塊主要為系統(tǒng)提供所需的時鐘計時脈沖。該模塊將1kHZ的脈沖信號進行分頻,產(chǎn)生1S的方波,作為系統(tǒng)時鐘計時信號。其實體模塊如下:</p><p> 將END TIME改為5S</p><p> CLK采用系統(tǒng)的1KHZ的時鐘脈沖</p>&
29、lt;p><b> 仿真波形如下: </b></p><p> 可以看到能夠得到1s的時鐘脈沖</p><p> §3.2交通燈控制及計時模塊</p><p> 控制模塊根據(jù)外部輸入信號和計時模塊產(chǎn)生的輸出信號,產(chǎn)生系統(tǒng)的狀態(tài)機,控制其他部分協(xié)調(diào)工作。計時模塊用來設(shè)定主干道和支干道計時器的初值,并為掃描顯示譯碼模塊提供倒
30、計時時間。</p><p> 控制及計時模塊采用狀態(tài)機進行設(shè)計,可以定義出5種狀態(tài),分別為S0:主干道綠燈,支干道紅燈且沒有車輛行駛;S1:主干道綠燈,支干道紅燈或支干道有車輛駛?cè)耄籗2:主干道黃燈,支干道紅燈;S3:主干道紅燈,支干道綠燈;S4:主干道紅燈,支干道黃燈。利用CASE語句定義狀態(tài)的轉(zhuǎn)換方式及時間的變換方式,達到主干道綠燈亮45秒,支干道綠燈亮25秒,黃燈亮5秒的設(shè)計要求。</p>
31、<p><b> 其實體模塊如下:</b></p><p> CAR為支干道車輛檢測開關(guān)</p><p> 在支干道有車的情況下,模塊可以進行減計時</p><p> CLK1S為1S的時鐘脈沖</p><p> TIME1H、TIME1L、TIME2H、TIME2L分別為主干道時鐘高位、主干道時鐘低
32、位、支干道時鐘高位、支干道時鐘低位</p><p> LED為LED燈發(fā)光情況,分別為主干道綠燈、主干道黃燈、主干道紅燈、支干道綠燈、主干道黃燈、主干道紅燈</p><p> Count的總的系統(tǒng)時間,用來改變系統(tǒng)的狀態(tài)</p><p><b> 仿真波形如下:</b></p><p><b> 通過仿
33、真可以看到:</b></p><p> 當主干道綠燈,支干道紅燈時,主干道倒計時高位置數(shù)0100,低位置數(shù)0101;支干道高位置數(shù)0101,低位置數(shù)0000;</p><p> 當主干道黃燈,支干道紅燈時,主干道黃燈倒計時置數(shù)0101;支干道繼續(xù)剛才的減計數(shù);</p><p> 當主干道紅燈,支干道綠燈時,主干道倒計時高位置數(shù)0011,低位置數(shù)00
34、00;支干道高位置數(shù)0010,低位置數(shù)0101;</p><p> 當主干道紅燈,支干道黃燈時,支干道黃燈倒計時置數(shù)0101;主干道繼續(xù)剛才的減計數(shù)。</p><p> 在S4狀態(tài)結(jié)束后,自動跳回到S0狀態(tài),繼續(xù)判斷支干道是否有車行駛,若有車行駛,則跳轉(zhuǎn)到S1狀態(tài),給高、低位置數(shù),繼續(xù)進行減計時。</p><p> 系統(tǒng)根據(jù)COUNT的變化自動在各狀態(tài)下跳變,
35、當count為45時,跳變到S2狀態(tài);當count為50時,跳變到S3狀態(tài);當count為75時,跳變到S4狀態(tài);當count為80時,若支干道沒有車跳變到S0狀態(tài),有車則跳變到S1狀態(tài)。</p><p> §3.3掃描顯示譯碼模塊</p><p> 掃描顯示譯碼模塊可以根據(jù)控制信號,驅(qū)動交通信號燈以及倒計時數(shù)碼管的顯示,其中數(shù)碼管的顯示采用動態(tài)掃描顯示。其實體模塊如下:&l
36、t;/p><p> CLK為1KHZ的系統(tǒng)時鐘脈沖</p><p> CLK1S為1S時鐘脈沖</p><p> CAR為支干道車輛檢測開關(guān)</p><p> SEL為數(shù)碼管位碼掃描</p><p><b> SEG為數(shù)碼管段碼</b></p><p> TIME1
37、H、TIME1L、TIME2H、TIME2L為數(shù)碼管計時的時間,由控制及計時模塊為其賦值</p><p><b> 仿真波形如下:</b></p><p><b> 通過仿真可以看到:</b></p><p> 給CLK一個時鐘脈沖,數(shù)碼管的位碼隨CLK時鐘的變化而進行掃描,由于CLK的頻率較高,人的眼睛會有短暫的視
38、覺停留,所以會看到4個數(shù)碼管都在顯示時間。</p><p> §3.4頂層文件的編寫</p><p> 將以上各個單元模塊仿真成功后,再進行頂層文件的編寫。將各個單元模塊的變量賦值給頂層文件,從而將各個單元模塊連接起來,統(tǒng)一調(diào)配。得到頂層文件的實體模塊:</p><p> CLK為1KHZ系統(tǒng)時鐘脈沖</p><p> CA
39、R為支干道車輛行駛情況,高電平為有車行駛,低電平為無車行駛</p><p> LED為交通燈發(fā)光情況</p><p> SEL為數(shù)碼管位碼掃描</p><p><b> SEG為數(shù)碼管段碼</b></p><p><b> 仿真波形如下:</b></p><p>
40、仿真后可以得到最終的結(jié)果:</p><p> 開始時,支干道沒有車輛行駛。主干道處于常通行狀態(tài),支干道處于禁止狀態(tài);當支干道有車來時,主干道亮綠燈,經(jīng)行45秒倒計時,支干道亮紅燈,經(jīng)行50秒倒計時;</p><p> 主干道45秒倒計時結(jié)束后跳變到黃燈,進行5秒倒計時,支干道繼續(xù)亮紅燈,進行倒計時;</p><p> 主干道5秒倒計時結(jié)束后跳變到紅燈,經(jīng)行30
41、秒倒計時,支干道跳變到綠燈,進行25秒倒計時;</p><p> 支干道25秒倒計時結(jié)束后跳變到黃燈,進行5秒倒計時,主干道繼續(xù)亮紅燈,進行倒計時;</p><p> 支干道5秒倒計時結(jié)束后,判斷支干道是否有車,若有車跳變到S1狀態(tài),沒有車跳變到S0狀態(tài)</p><p> 硬件實驗方案及實驗結(jié)果</p><p> 將程序進行編譯后,就
42、可以把管腳綁定后把程序下載到實驗板上進行調(diào)試了。</p><p> §4.1硬件實驗方案</p><p><b> 管腳綁定如下所示</b></p><p><b> 注:</b></p><p> CLK綁定時鐘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> 將管腳按上圖綁定后就可以下載到實
46、驗板上進行調(diào)試了</p><p><b> §4.2實驗結(jié)果</b></p><p> 將程序下載到實驗板后,CAR置于低電平后,可以看到LED燈的顯示情況為主干道亮綠燈,支干道亮紅燈,主干道數(shù)碼管顯示45秒,支干道數(shù)碼管顯示50秒。但支干道有車時,把CAR置于高電平,可以看到主、支干道的數(shù)碼管開始倒計時;主干道倒計時結(jié)束后再進行5秒倒計時,并且交通燈變
47、為黃燈;當主干道倒計時結(jié)束后,主干道數(shù)碼管顯示30,支干道數(shù)碼管顯示25,主干道變?yōu)榧t燈,支干道變?yōu)榫G燈,繼續(xù)進行倒計時;支干道倒計時結(jié)束后再經(jīng)行5秒倒計時,交通燈變?yōu)辄S燈;支干道倒計時結(jié)束后再回到初始狀態(tài)。</p><p> 從實驗板上可以看出硬件測試下的效果達到了設(shè)計的要求,能夠?qū)崿F(xiàn)交通信號燈控制器的基本功能。但是,由于實驗板的系統(tǒng)時鐘不穩(wěn)定,導(dǎo)致數(shù)碼管的掃描有時會出現(xiàn)閃動的現(xiàn)象,在更換了實驗板后可以看出,
48、數(shù)碼管的掃描基本穩(wěn)定,在視覺上不會出現(xiàn)閃動的情況?;蛘呖梢詫⑾到y(tǒng)的時鐘頻率改為2KHZ,更改分頻模塊后再進行編譯下載,這樣可以加快數(shù)碼管掃描的速度,從而達到消除視覺上閃動的現(xiàn)象。</p><p><b> 收獲和體會</b></p><p> EDA課程設(shè)計很快就結(jié)束了,雖然在之前的學(xué)習(xí)過程中還存在著沒有弄懂的問題,但是通過這次設(shè)計,進一步加深了對EDA的了解,讓
49、我對它有了更加濃厚的興趣。</p><p> 在拿到題目后,首先進行了單元模塊的設(shè)計,將每一個單元模塊設(shè)計完成后再經(jīng)行仿真,仿真成功后就可以進行頂層文件的編寫了,在頂層文件的編寫過程中遇到了一些問題,特別是各模塊之間的連接,以及信號的定義,總是有錯誤。有的時候信號的定義容易出現(xiàn)混淆,在反復(fù)的修改過后,頂層文件終于能夠編譯成功了。</p><p> 在波形仿真的過程中,同樣遇到了困難,有
50、的時候,由于END TIME的時間修改的太大,會出現(xiàn)仿真時間過長的問題,這個時候應(yīng)該要把END TIME的時間相應(yīng)的改小,或是修改系統(tǒng)時鐘的頻率。</p><p> 在設(shè)計的過程中還應(yīng)該多聯(lián)系下實際情況,要了解實際情況下交通信號燈的工作情況,才能更好的完成此次的課程設(shè)計。在今后的工作和學(xué)習(xí)中,我們不能僅僅把目光停留在課本上,要多理論聯(lián)系實際。有的時候,理論上是正確的東西放到現(xiàn)實中去,可能由于種種因素的制約,并不
51、能達到實際的效果,還需要我們進行相應(yīng)的修改才能完成要求。這次的課程設(shè)計使我鞏固了以前學(xué)習(xí)到的知識,還使我掌握了以前沒有掌握的知識,同時鍛煉了自己的能力。</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 --定義計數(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組計時時間狀態(tài)機</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ù)位時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; --計數(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> --計時時間到信號的獲取,在0秒輸出寬1秒的負脈沖</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ù)器重新加載端口計時初始值</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命令讓計數(shù)器加載端口計時初值</p><p> count:=conv_integer(in_data);</p><p><b> else</b>
88、</p><p> count:=count-1; --減1計數(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位寬的矢量信號</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ù)碼管,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) --對數(shù)據(jù)進行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位寬的矢量信號</p&g
100、t;<p> end process;</p><p> process(hold_s,clk_m) --對保持信號進行處理</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); --兩組登顏色信號矢量并為一組(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; --來自A組
106、計數(shù)器0秒信號送A組置數(shù)器</p><p> putb<=flag_fromb; --來自B組計數(shù)器0秒信號送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; --來自計數(shù)器的0秒信號延遲半個節(jié)拍后再送回計數(shù)
108、器</p><p> loadb<=flag_fromb;--加載已在半個節(jié)前置數(shù)器放置在其端口上的初始數(shù)據(jù)</p><p> --確保數(shù)據(jù)準確無誤</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ù)位時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) --對特殊狀態(tài)時紅燈全亮的處理</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> 參考文獻:</b></p><p> 潘松著 EDA技術(shù)實用教程(第二版) 北京科學(xué)出版社.2005</p><p> 康華光主編 電子技術(shù)實驗基礎(chǔ) 模擬部分 北京高教出版社.2006</p><p> 閆石主編 數(shù)
125、字電子技術(shù)基礎(chǔ) 北京高教出版社.2003</p><p> 馮濤,王程.可編程邏輯器件開發(fā)技術(shù)—MAX plus II入門與提高[M].北京:人民郵電出版社,2OO2]</p><p> 房德君.智能交通燈控制裝置[J].山東工程學(xué)院學(xué)報,1998,12(4):27~30]</p><p> 李國麗. 用PLD芯片和AHDL語言進行交通燈控制器設(shè)計[J].合肥
126、工業(yè)大學(xué)學(xué)報(自然科學(xué)版),2002,25(4):545~548</p><p> 張文潔,葉紫.交通燈控制器設(shè)計:FPGA/CPLD實現(xiàn)小型數(shù)字系統(tǒng)的應(yīng)用分析[J]。電子技術(shù)應(yīng)用,2001,27,27(11):52~54</p><p> 余華,岳秋琴 電子設(shè)計自動化技術(shù)的發(fā)展及在現(xiàn)代數(shù)字電子系統(tǒng)設(shè)計中的應(yīng)用;現(xiàn)代電子技術(shù);2001年05期</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda交通燈課程設(shè)計論文
- eda交通燈課程設(shè)計
- eda交通燈課程設(shè)計
- eda交通燈課程設(shè)計報告(eda)
- eda課程設(shè)計--交通燈控制
- eda交通燈課程設(shè)計---交通燈控制系統(tǒng)
- eda交通燈課程設(shè)計---交通燈控制系統(tǒng)的設(shè)計
- eda交通燈課程設(shè)計--cpld實現(xiàn)交通燈控制系統(tǒng)
- 基于sopc交通燈的eda課程設(shè)計
- eda課程設(shè)計--交通燈控制器
- eda課程設(shè)計(交通燈控制器)
- eda課程設(shè)計---交通燈控制器
- eda課程設(shè)計交通燈帶左拐
- eda技術(shù)及應(yīng)用課程設(shè)計---交通燈
- eda課程設(shè)計交通燈控制器
- eda課程設(shè)計交通燈控制器
- 交通燈課程設(shè)計論文
- eda課程設(shè)計--交通燈控制器設(shè)計
- eda課程設(shè)計--交通燈控制系統(tǒng)設(shè)計
- eda課程設(shè)計報告-- 交通燈控制器
評論
0/150
提交評論