紅綠燈期末專題
數位邏輯實驗 final project 紅綠燈
1.
電路原理&設計想法
此紅綠燈主要利用的是計數器的原理,當目前的燈為紅燈亮,那麼計數器便會數一定的秒數,而在數這些秒數的時候,只有紅燈會保持亮著的狀態,當計數器數到另一固定的秒數時,便會從紅燈改成綠燈亮,而計數器在數到另一秒數時,這時又從綠燈換成黃燈亮,而當黃燈亮完固定的時間後,便會又回到紅燈繼續亮,然後一直循環下去,而設計計數器就要會畫出state diagram,然後建立state
table。
我們這次的設計想法是當計數器從0數到7時,是只有紅燈的輸出是1,綠燈和黃燈的輸出都保持在0的狀態,又因為我們所用的fpga板是當紅燈的輸出為1時,代表是不亮的,接著當計數器從8數到13時,只讓綠燈保持輸出是1,紅燈和黃燈的輸出為0,這時fpga板上的綠燈是不亮的,接著當計數器從14數到15時,讓黃燈的輸出是1,紅燈和綠燈的輸出是0,fpga版上的黃燈是不亮的,接著counter又會從0開始數,因為我們是設計一個4-bit counter,所以當從0數到15時,便會再次從0開始數,大致上我們設計紅綠燈的構想是只用1個counter,而紅燈是維持在counter的0-7,又根據fpga版上的頻率是經過27級的除頻器,所以大概clock的一個週期大約是2秒,所以紅燈大概會在fpga上不亮的時間大約是2*8=16秒,然後接著是綠燈會維持不亮的時間是2*6=12秒,接著是黃燈會維持不亮的時間是2*2=4秒,所以完整的從紅燈到綠燈再到黃燈大約總共要花費16+12+4=32秒的時間。
2.
設計流程
我們的設計是先從counter的設計開始,下圖一為counter的state
diagram,state table以及k map的減化過程,counter所利用的flip
flop是j k flip flop,接著圖二是畫好後的counter電路圖,圖二右邊的block是要在quartus裡建立的,是要用來設計紅綠燈的電路,先建立成block後,可以減少電路圖的複雜度,而圖二中的reset輸入端,它的作用同時具有一般的reset功能以及countenable的功能,當reset為1時,countenable便為1,這時counter便會開始計數,而當reset輸入端為0時,會先清空所以暫存器裡頭的東西並且counter為停止計數,接著要用counter畫出紅綠燈的電路如圖三,圖三的y1為紅燈,也就是當counter是0到7時,y1的輸出都會是1,y2是綠燈,當counter為8到13時,y2的輸出都會是1,而y3則是黃燈,當counter是14到15時,y3的輸出便會是1,接著先利用k
map來減化方程式,再分別將y1,y2,y3的logic function寫出來,最後再以counter的輸出端A,B,C,D,分別當成y1,y2,y3的輸入端去畫出紅綠燈的電路,A為最高位元,D則為最低位元,最後要利用quartus先設計出9級的除頻器,再建立成block後,連續串聯3個除頻器,總共27級的除頻器,去接到counter的輸入端的clock中,這樣才能在fpga上看得到紅綠燈的變化與clockout的變化,9級除頻器的設計如下圖七。
圖一
圖二
圖三
3.
電路圖及架構
圖四為紅綠燈的電路圖,圖四中的輸出端z1為紅燈,z2為綠燈,z3為黃燈,輸出端clkout為檢測clock是否有輸入進去,輸入端的clcl為clock的輸入訊號,ree為reset,圖四的波形圖為下圖八,圖五為接上27級除頻器的紅綠燈電路圖,圖五中的z1,z2,z3與圖四中的意思是相同的,clkout輸出端也是檢測clock是否有輸入進去用的,輸入端clclin為clock輸入的地方,而紅燈z1的腳位為87,綠燈z2的腳位為85,黃燈z3的腳位為86,clockout為84,ree則為91,clclin為23,圖六為counter的電路圖,輸出端A為最高位元,D則為最低位元,輸入端的clk為clock訊號進來的地方,rrst則為同時具有reset與countenable功能的reset,圖六的波形圖如下圖九。
圖四
圖五
圖六
圖七
4.
模擬結果(waveform)
圖八
圖九
5.
討論&心得
我們這組的紅綠燈在燒到fpga版時,紅燈和綠燈和黃燈分別輸出為1時,是不亮的,紅燈總計大概是不亮了16秒(counter從0到7),而綠燈則是不亮了12秒(counter從8到13),黃燈則是不亮了4秒(counter從14到15),大致上設計電路圖的過程中沒有碰上什麼困難的地方,很成功的完成了紅綠燈的電路圖,而額外接上顯示器加分的部分是沒有想出來,所以最後也就是看led燈數秒數。
留言
張貼留言