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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 小梅哥和你一起深入學習FPGA之點亮LED燈(上)

          小梅哥和你一起深入學習FPGA之點亮LED燈(上)

          作者: 時間:2015-03-11 來源:網絡 收藏

            在之前更新的目錄里面,并沒有安排這個實驗,第一個實驗應該是獨立按鍵的檢測與消抖??墒牵斝∶犯鐏碜霭存I消抖的實驗時,才發(fā)現(xiàn)沒有做基本的輸出設備,因此按鍵檢測的結果無法直觀的展示出來。也算是為后續(xù)實驗做鋪墊吧,第一個實驗就安排成了點亮燈。

          本文引用地址:http://www.ex-cimer.com/article/270853.htm

            一、 實驗目的

            實現(xiàn)4個燈的亮滅控制

            二、 實驗原理

            燈的典型電路如下2-1所示,我們控制led燈的亮滅,實質就是去控制的IO輸給LED負極一個低電平或者高電平。從圖中可知,我們給對應的led負極上一個低電平,就會有對應的電流通過 電阻,流過led燈,于是LED燈就會被點亮;當給led負極一個高電平時,led兩端電壓相等,因此沒有電流流過,led則呈熄滅狀態(tài)。

            

           

            圖2-1 led燈典型電路

            三、 硬件設計

            本實驗的硬件電路即如圖2-1所示,讀者一看即懂,因此本節(jié)內容略。

            四、 架構設計

            雖然本實驗只是一個簡單的點亮led燈實驗,整個實驗代碼不過四五行,但是為了遵循小梅哥一直喜歡的那種模塊化的設計理念,因此本設計還是將led的驅動做成子模塊的形式。

            本實驗由兩個模塊組成,分別為led驅動模塊和頂層例化模塊,可能看過其它開發(fā)板資料的同學會覺得這樣反而增加了系統(tǒng)的復雜程度,但是,小梅哥如此設計必定有我的道理,圖4-1為本實驗的模塊組織結構

            

           

            圖4-1 led實驗模塊組織結構圖

            由圖可知本實驗僅有n個輸出端口,對應了n個led燈(為了代碼的可移植性,這里并沒有將led的個數(shù)限定死,而是采用了參數(shù)化的設計,因此,在實際使用過程中,就可根據(jù)實際不同的需要,自由的調整led的個數(shù))。在modelsim仿真過程中,所有信號必須要有復位初始值,因此復位信號(Rst_n)必不可少??赡茏x者這里會發(fā)現(xiàn),與我昨天所寫的端口命名規(guī)范有出入。如果按照我所出的規(guī)范中來命名的話,則應該將復位信號命名為Global_Rst,對于這個問題,暫時小梅哥不做深入解說,其實嚴格意義上來說,這里的這個Rst_n應該只能算是一個內部信號,該信號在實際工程應用中往往由鎖相環(huán)產生。這里因為為了配合仿真,因此該信號就暫時被引出來,做了全局復位信號。詳細的關于全局復位與內部復位信號的處理,小梅哥在后面涉及到鎖相環(huán)的使用的實驗中會詳細解說。

           

            表4-1 led實驗端口說明

            五、 代碼組織方式

            本實驗中,每個模塊也就四五行的代碼,因此談不上代碼組織方式,因此本節(jié)從略。

            六、 關鍵代碼解讀

            以下是代碼片段:

            module LED_Driver #(parameter Width = 1)/*定義位寬參數(shù)*/

            (Rst_n,Sig,Led);/*定義模塊端口*/

            input Rst_n;

            input [Width-1:0] Sig;

            output [Width-1:0] Led;

            assign Led = (Rst_n)?Sig:{Width{1'b1}};/*復位輸出全1,否則按照Sig的值輸出*/

            endmodule

            以上為LED驅動模塊的代碼,第1行定義了一個參數(shù)“Width”,即位寬,因此在例化(調用)此模塊時,根據(jù)實際需要給Width賦予不同的值,則可實現(xiàn)不同的LED位寬的設置。第4至7行為輸入輸出端口定義,具體信號含義見表4-1。第9行為LED輸出賦值語句,有關該代碼的含義,請讀者自行閱讀夏宇聞老師的《Verilog數(shù)字系統(tǒng)設計教程》一書。小梅哥精力和時間實在太有限,沒辦法一一幫大家補充Verilog的知識,望見諒??傊撜Z句實現(xiàn)了當復位信號為低電平時(系統(tǒng)處于復位狀態(tài)),所有LED全部熄滅;當復位信號為高電平(系統(tǒng)正常工作)時,led輸出對應的Sig信號各位的狀態(tài)。

            以下是代碼片段:

            module LED_TOP(Rst_n,Led);

            input Rst_n;

            output [3:0] Led;

            LED_Driver

            #( /*參數(shù)例化*/

            .Width (4)

            )

            LED_Driver_inst(/*端口例化*/

            .Rst_n(Rst_n),

            .Sig(4'b1001),/*OFF ON ON OFF*/

            .Led(Led)

            );

            endmodule

            以上為LED實驗的頂層模塊,其中將位寬參數(shù)例化為了4,即4個LED。因為沒有其他模塊提供Sig信號,因此直接將該信號賦值為4’b1001。則如果下載到實驗板上,會看到4個led燈分別處于“滅 亮 亮 滅”的狀態(tài)。

          fpga相關文章:fpga是什么


          led燈相關文章:led燈原理


          鎖相環(huán)相關文章:鎖相環(huán)原理


          關鍵詞: FPGA LED

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();