【正文】
chief_lltemp=chief_lltemp1。(chief_lltemp=9)) begin if((chief_lhtemp==0)amp。(chief_lhtemp=1)) begin chief_lhtemp=chief_lhtemp1。g_l==1)//主干道左轉(zhuǎn)燈 begin counter_play1h=chief_lhtemp。 chief_ghtemp=chief_gh。amp。(chief_gltemp==5)) begin flash=1。 end if((chief_gltemp=1)amp。 if((chief_gltemp==0)amp。 end end if(select==0amp。 end else if((sub_rhtemp==0)amp。 sub_rltemp=9。//支干道顯示紅燈計數(shù) counter_play2l=sub_rltemp。amp。 end else if((chief_rltemp=1)amp。 if((chief_rltemp==0)amp。 sub_rltemp=sub_rl。 chief_lltemp=chief_ll。 sub_gltemp=sub_gl。always(posedge EN)begin start=~start。reg[3:0]chief_rhtemp,chief_rltemp,sub_rhtemp,sub_rltemp。reg select。output[3:0]counter_play1h,counter_play1l。input EN。 Rsub_ll=sub_ll139。b0000。b1001。amp。 end else begin Rsub_gh=sub_gh。(sub_gl==0)) begin Rsub_gh=439。 Rsub_gl=439。 endendalways(sub_gh or sub_gl)//用于求得真正主干道紅燈時間begin if((sub_gh0)amp。b0000。amp。b1。b1。 Rchief_gl=439。 end else if((chief_gh==0)amp。(chief_gl==0)) begin Rchief_gh=chief_gh139。 end else if(out==1)//顯示支干道設(shè)置的時間 begin counter_play3={sub_gh,sub_gl}。 end else sub_ll=sub_ll+1。 end else sub_gl=sub_gl+1。 end else chief_ll=chief_ll+1。 end else chief_gl=chief_gl+1。reg[3:0]Rsub_gh,Rsub_gl,Rsub_lh,Rsub_ll。reg[7:0] counter_play3,counter_play4。//用來控制counter_play3,counter_play4顯示主干道還是支干道設(shè)置的時間output[3:0]Rchief_gh,Rchief_gl,Rchief_lh,Rchief_ll。input sub_g_button。 SEG7_LUT_8 u10(oSEG0,oSEG1,oSEG2,oSEG3,oSEG4,oSEG5,oSEG6,oSEG7, iDIG,1,clk1,1)。plus2 u6(chief_rh,chief_rl,sub_gh,sub_gl,sub_lh,sub_ll)。assign iDIG[31:28]=counter_play4[7:4]。assign iDIG[15:12]=counter_play2h。wire[31:0]iDIG。wire[3:0]sub_rl,sub_rh,chief_rh,chief_rl。wire[3:0] counter_play2h,counter_play2l。input chief_g_button,chief_l_button,sub_g_button,sub_l_button。整體狀態(tài)轉(zhuǎn)換如下: 時間重新設(shè)置時間設(shè)置信號有效時,chief_g_button、chief_l_button、sub_g_button、sub_l_button有脈沖時,在原來時間的基礎(chǔ)上進行加1,時間設(shè)置結(jié)束,計數(shù)器重新開始計數(shù),系統(tǒng)進入正常運行。而chief_green信號在主干道綠燈倒計時時為1,最后五秒為方波,即閃亮顯示。時間設(shè)置以主干道綠燈時間設(shè)置為例,時間設(shè)置使能信號EN無脈沖,chief_g_button每個上升沿,主干道綠燈時間加1,此時因為enable(設(shè)置時間顯示使能信號)為低電平,counter_play4分別顯示主干道綠燈時間和左轉(zhuǎn)時間,counter_play3隨著chief_g_button上升沿顯示加1,直到上升沿結(jié)束,為18。觀察圖31,當(dāng)且僅當(dāng),button出現(xiàn)高電平的時候,置數(shù)位才開始置數(shù),每個信號,每產(chǎn)生一個高電平,置數(shù)位的數(shù)值就會加1,所以chief_g_button 連續(xù)產(chǎn)生7個高電平,chief_gl才可以置6(N1)。 頂層模塊頂層模塊其作用:將置數(shù)模塊,顯示模塊,定時控制模塊所生成模塊圖連接起來,添上輸出輸入端口,重新編譯仿真。四個輸入信號:select,flash,clk,g_l六個輸出信號:chief_green,chief_left,chief_red。g_lamp。~g_lamp。(~(flashamp。(~(flashamp。閃爍的效果用flshamp。由輸入信號select、g_l、flash,分別取000,001,010,011,100,101,110,111所得到的chief_green,chief_left,chief_red,sub_left,sub_green,sub_red的不同值,來控制主干道,支干道紅綠左轉(zhuǎn)燈的亮滅。對于主干道的左轉(zhuǎn)燈,支干道的綠燈、左轉(zhuǎn)燈亦是同理。但要弄清楚阻塞賦值和非阻塞賦值的區(qū)別。首先引入一組參數(shù),chief_gh,chief_gl,chief_lh,chief_ll,sub_gh,sub_gl,sub_lh,sub_ll,先賦上主干道,支干道上綠燈,左轉(zhuǎn)燈運行的時間初始值(下劃線后面的字母分別取green,left,high,low首字母),一旦需要重置,就用一個enable信號控制外部按鍵,控制定時器的啟動chief_g_button,chief_l_button,sub_g_button,sub_l_button 通過 k6,k5,k4,k3鍵對參數(shù)進行賦值。而設(shè)置的時間同時顯示需要八個數(shù)碼管,硬件不滿足。另外,若主干道綠燈、左轉(zhuǎn)燈時間都設(shè)置為10秒,則設(shè)置時間顯示是需要顯示10秒,而本設(shè)計采用9~0倒計時動態(tài)顯示顯示,需要將設(shè)置的時間減1后再顯示,若減1后用公式:支干道紅燈時間=主干道綠燈時間+主干道左轉(zhuǎn)時間,則支干道紅燈時間為18,故需要在做加法時多加1,為19,顯示19~0倒計時。 計數(shù)設(shè)置 設(shè)計要求能夠?qū)t、綠、左轉(zhuǎn)燈顯示時間進行設(shè)置,因此不能使用固定數(shù)值的計數(shù)器模塊,需要采用中間變量進行減計數(shù),保留初始設(shè)置。① 本設(shè)計將十字路口分為主干道和支干道,每個干道擁有直行綠燈、左轉(zhuǎn)綠燈及紅燈,與現(xiàn)實中的實際情形一致。即車道要由主干道轉(zhuǎn)換為支干道時,主干道在通行時間只剩下5秒鐘時,綠燈閃爍顯示,支干道仍為紅燈,以便主干道上已過停車線的車繼續(xù)通行,未過停車線的車停止通行。要求紅、綠燈按一定的規(guī)律亮和滅,并在亮燈期間進行倒計時,并將運行時間用數(shù)碼管顯示出來。14附錄 程序源代碼31一夢十年一回首,一絲垂綸一葦輕。111一林紅葉一霜染,一場秋雨一地寒。一竿悵惘一蓑遠,一船離愁一帆行。8 模塊程序及仿真波形第一章 設(shè)計內(nèi)容及要求① 設(shè)計一個十字路口交通信號燈的控制電路。每次變換運行車道前綠燈閃爍,持續(xù)時間為5秒。② 設(shè)計參考交通燈十字交叉路口圖如下:③ 本課題要求對紅、綠燈的運行時間要能比較方便的進行重新設(shè)置。⑤ 創(chuàng)新之處:本設(shè)計最大的創(chuàng)新是在各個干道添加了左轉(zhuǎn)向燈,并可以對各個燈的閃亮?xí)r間在任意時刻經(jīng)行增加調(diào)整,更加貼近現(xiàn)實中的情形。本設(shè)計在設(shè)置及加法計算時均采用個位、十位分開存儲的辦法,進行編程。 設(shè)計所需時間顯示過多 交通燈需要動態(tài)顯示主干道倒計時、支干道倒計時,共用四個數(shù)碼管。第二章 系統(tǒng)框圖及具體模塊說明S0狀態(tài):主干道綠燈、支干道紅燈S1狀態(tài):主干道左轉(zhuǎn)、支干道紅燈S2狀態(tài):支干道綠燈、主干道紅燈S3狀態(tài):支干道左轉(zhuǎn)、主干道紅燈 具體模塊說明 置數(shù)模塊由