【正文】
還好,因?yàn)殚_發(fā)板的知識(shí)很好掌握,所以在將引腳分配正確后,我的程序就一次性通過了。 由于沒有多少用 Verilog 語言寫程序的經(jīng)驗(yàn),所以在編程的初期,很多方面都沒有考慮到,比如說分模塊、盡量少用輸入輸出等問題,所以在我第一遍把程序?qū)懲?,?Maxplus 編譯時(shí),就出現(xiàn)了很多的錯(cuò)誤,有些是語法的錯(cuò)誤,有些是邏輯的錯(cuò)誤 。這學(xué)期,我們又多了進(jìn)一步了解數(shù)電這門課程實(shí)際操作的機(jī)會(huì),那就是《電子技術(shù)基礎(chǔ)實(shí)驗(yàn)》這門課程。 numb[7:4]=numb[7:4]1。 end end else if(numb==6||numb==4||numb==2) begin lampb[2]=1。 end else if(numb==1) begin lampb[1]=0。 numb[3:0]=9。 numm[3:0]=9。 end end else if(numm==6||numm==4||numm==2) begin lampm[2]=1。 end else if(numm==1) begin tempm=0。 numm[7:4]=numm[7:4]1。amp。amp。amp。amp。amp。amp。 tempb=0。 lampb[2]=1。 end end else if(numb==6||numb==4||numb==2) begin numb=numb1。 tempb=0。 numb=bgreen。 numb[7:4]=mgreen[7:4]+mleft[7:4]+1。amp。 case(countb)//控制亮燈的 順 序 0:begin countb=1。 end end 0:begin//主干道 紅 燈倒 計(jì)時(shí) if(numm[3:0]==0) begin numm[7:4]=numm[7:4]1。 end else begin numm[3:0]=numm[3:0]1。 numm=numm1。 numm[7:4]=bgreen[7:4]+bleft[7:4]。amp。amp。 end 1:begin countm=2。bleft[7:4]=9) begin bleft[7:4]=bleft[7:4]。amp。amp。 end else if(mleft[3:0]9amp。 mgreen[3:0]=mgreen[3:0]+1。 assign blampb=(bsty?bgreen:bleft)。 reg[7:0]mgreen,mleft,bgreen,bleft。 如何進(jìn)行數(shù)碼管的分配? 共有 8個(gè)數(shù)碼管,但是根據(jù)題目要求必須用到 12 個(gè)數(shù)碼管。 交通燈狀態(tài)圖 四、 交 通燈控制電路 設(shè)計(jì)的難點(diǎn) 與解決方法 如何將 主干道和支干道的直行和左拐 的初始時(shí)間的設(shè)置和減計(jì)數(shù)分開? 用使能信號(hào),當(dāng)使能信號(hào) en==0 時(shí),就進(jìn)行初始時(shí)間的設(shè)置;當(dāng) en==1 時(shí),就進(jìn)行減計(jì)數(shù)。對(duì)器件進(jìn)行在系統(tǒng)編程和實(shí)驗(yàn)驗(yàn)證。要求紅、綠燈按一定的規(guī)律亮和滅,并在亮燈期間進(jìn)行倒計(jì)時(shí),并將運(yùn)行時(shí)間用數(shù)碼管顯示出來。同理 ,當(dāng)車道由支干道轉(zhuǎn)換 主干道 傳感器 支干道 S S 主干道 支干道 R Y G R Y G 交通燈控制器 CP S 主干道信號(hào)燈 為主干道時(shí),支干道綠燈閃爍顯示 5 秒鐘,主干道仍為紅燈。 S1 狀態(tài): 主干道 左拐 燈亮,支干道紅燈亮, 此時(shí)若支干道有車等待通過,而且主干道 左拐 燈已亮足規(guī)定的時(shí)間間隔 Ts;在主干道左拐燈亮了 (Ts5)s 后,則開始閃亮,直至左拐燈亮了 Ts; 控制器發(fā)出狀態(tài)轉(zhuǎn)換信號(hào) Tempm==0和 Tempb==0,輸出從狀態(tài) S1 轉(zhuǎn)換到 S2。Tempb==0 Tempb==0 S0 Tempm==0 Tempm==0amp。 /*lampm 和 lampb 分別表示主干道和 支 干道的亮燈, mlampm 和 blampb 分別表示主干道和 支 干道的時(shí)間顯示 input clk,en,ms,ml,bs,bl,msty,bsty。 reg[2:0] lampm,lampb。 end else if(mgreen[3:0]9amp。amp。amp。bgreen[7:4]=9) begin bgreen[7:4]=bgreen[7:4]。 bleft[7:4]=bleft[7:4]+1。 end end end always (posedge clk)//該進(jìn) 程控制主干道的四 種 燈 begin if(en)//使能信 號(hào)為 1 時(shí) begin if(!tempm)//對(duì) 主干道 計(jì)時(shí)總時(shí)間進(jìn) 行 賦值 begin tempm=1。 end else if((bgreen[3:0]==7amp。 end else if((bgreen[3:0]==8amp。bleft[3:0]==9) begin numm[3:0]=8。 end else begin numm[3:0]=numm[3:0]1。 end end 2:begin //主干道左 轉(zhuǎn) 燈倒 計(jì)時(shí) if(numm6) begin if(numm[3:0]==0) begin numm[7:4]=numm[7:4]1。 numm=numm1。 end else begin numm[3:0]=numm[3:0]1。mleft[3:0]==9)||(mgreen[3:0]==9amp。mleft[3:0]==9)||(mgreen[3:0]==9amp。 end else begin numb[3:0]=mgreen[3:0]+mleft[3:0]。 numb[7:4]=numb[7:4]1。 lampb[1]=1。 tempb=0。 end else if(numb==5||numb==3) begin lampb[2]=0。 countb=0。mgreen[7:4]=9) begin mgreen[7:4]=mgreen[7:4]。mleft[7:4]9) begin mleft[3:0]=0。mleft[7:4]==9) begin mleft=0。bgreen[7:4]=9) begin bgreen[7:4]=bgreen[7:4]。bleft[7:4]9) begin bleft[3:0]=0。bleft[7:4]==9) begin bleft=0。 numm=numm1。lampm[2]=1。 tempm=0。 lampm[0]=1。lampb[1]=1。 lampb[2]=1。 tempb=0。 lampb[0]=1。在第一周結(jié)束時(shí),我對(duì)語言的學(xué)習(xí)已經(jīng)基本上可以應(yīng)付簡單的程序了,所以在第二周時(shí),我開始了編寫程序。然而,我的程序完全沒有問題,但是我仿真時(shí)波形就是不對(duì),每次都在應(yīng)該顯示“ 9”的時(shí)候顯示“ B”。另一方面,此次試驗(yàn)也極大地鍛煉了我發(fā)現(xiàn)問題、思考問題、分析問題以及解決問題的能力,逐步地加強(qiáng)了我科學(xué)認(rèn)真的習(xí)慣,為我今后的學(xué)習(xí)和生活打下良好的基礎(chǔ)。 接下來,我就開始了優(yōu)化程序