<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > Verilog HDL基礎(chǔ)教程之:實例5 交通燈控制器

          Verilog HDL基礎(chǔ)教程之:實例5 交通燈控制器

          作者: 時間:2013-08-22 來源:網(wǎng)絡(luò) 收藏

          下面是交通燈的 源代碼及說明。

          module traffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT); //端口說明

          output[7:0] ACOUNT,BCOUNT;

          output[3:0] LAMPA,LAMPB;

          input CLK,EN; //內(nèi)部信號說明

          reg[7:0] numa,numb; //ACOUNT和BCOUNT的內(nèi)部信號

          reg tempa,tempb;

          reg[2:0] counta,countb; //方向A和方向B的燈的狀態(tài)

          reg[7:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;

          reg[3:0] LAMPA,LAMPB;

          //設(shè)置各交通燈的持續(xù)時間初始化值,紅燈的值由另一個方向的黃燈和綠燈計算得出。

          always @(EN)

          if(!EN) begin //使能信號EN無效時,對交通燈的計數(shù)值進(jìn)行初始化

          ared =8'd55; //55 s , 30 + 5 + 15 + 5

          ayellow =8'd5; //5 s

          agreen =8'd40; //40 s

          aleft =8'd15; //15 s

          bred =8'd65; //65 s , 40 + 5 + 15 + 5

          byellow =8'd5; //5 s

          bleft =8'd15; //15 s

          bgreen =8'd30; //30 s

          end

          assign ACOUNT=numa; //8位數(shù)碼管輸出

          assign BCOUNT=numb; //8位數(shù)碼管輸出

          //控制A方向4種燈的模塊

          always @(posedge CLK) begin

          if(EN) begin //使能有效時,交通燈開始工作

          if(!tempa) begin

          tempa=1;

          case(counta) //控制燈狀態(tài)的順序

          0: begin //狀態(tài)0

          numa=agreen; //直行綠燈亮

          LAMPA=2; //輸出0010

          counta=1; //進(jìn)入下一個狀態(tài)

          end

          1: begin //狀態(tài)1

          numa=ayellow; //黃燈亮

          LAMPA=4; //輸出0100

          counta=2; //進(jìn)入下一個狀態(tài)

          end

          2: begin //狀態(tài)2

          numa=aleft; //左轉(zhuǎn)綠燈亮

          LAMPA=1; //輸出0001

          counta=3; //進(jìn)入下一個狀態(tài)

          end

          3: begin //狀態(tài)3

          numa=ayellow; //黃燈亮

          LAMPA=4; //輸出0100

          counta=4; //進(jìn)入下一個狀態(tài)

          end

          4: begin //狀態(tài)4

          numa=ared; //紅燈亮

          LAMPA=8; //輸出1000

          counta=0; //進(jìn)入下一個狀態(tài)(狀態(tài)0)

          end

          default: //默認(rèn)狀態(tài)

          LAMPA=8; //紅燈亮,輸出1000

          endcase

          end

          else begin //每一個狀態(tài)的倒計時

          if(numa>1) //判斷倒計時未歸零時分別對高地位進(jìn)行遞減

          if(numa[3:0]==0) begin

          numa[3:0]=4'b1001;

          numa[7:4]=numa[7:4]-1;

          end

          else

          numa[3:0]=numa[3:0]-1;

          if (numa==2)

          tempa=0; //倒計時結(jié)束,返回?zé)魻顟B(tài)變化判斷,將進(jìn)入下一個狀態(tài)

          end

          end

          else begin

          LAMPA=4'b1000; //使能無效時,紅燈亮

          counta=0; //返回方向A的狀態(tài)0(綠燈狀態(tài))

          tempa=0; //進(jìn)入狀態(tài)變化判斷

          end

          end

          //控制B方向4種燈的模塊,模塊的語言描述與方向A的描述基本一致,這里不再重復(fù)注釋

          always @(posedge CLK) begin

          if (EN) begin

          if(!tempb) begin

          tempb=1;

          case (countb)

          0: begin

          numb=bred;

          LAMPB=8;

          countb=1;

          end

          1: begin

          numb=bgreen;

          LAMPB=2;

          countb=2;

          end

          2: begin

          numb=byellow;

          LAMPB=4;

          countb=3;

          end

          3: begin

          numb=bleft;

          LAMPB=1;

          countb=4;

          end

          4: begin

          numb=byellow;

          LAMPB=4;

          countb=0;

          end

          default:

          LAMPB=8;

          endcase

          end

          else begin //倒計時

          if(numb>1)

          if(!numb[3:0]) begin

          numb[3:0]=9;

          numb[7:4]=numb[7:4]-1;

          end

          else

          numb[3:0]=numb[3:0]-1;

          if(numb==2)

          tempb=0;

          end

          end

          else begin

          LAMPB=4'b1000;

          tempb=0;

          countb=0;

          end

          end

          endmodule

          通過上面這個 模塊,基本實現(xiàn)了交通燈控制器的基本功能。讀者可將此設(shè)計應(yīng)用于實際的硬件系統(tǒng)中,通過晶振、FPGA、開關(guān)、LED燈及數(shù)碼管等資源即可完成硬件實現(xiàn)。


          上一頁 1 2 下一頁

          關(guān)鍵詞: Verilog HDL 基礎(chǔ)教程 實例

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();