霧盈FPGA筆記之一呼吸燈簡單實驗(共12頁)_第1頁
霧盈FPGA筆記之一呼吸燈簡單實驗(共12頁)_第2頁
霧盈FPGA筆記之一呼吸燈簡單實驗(共12頁)_第3頁
霧盈FPGA筆記之一呼吸燈簡單實驗(共12頁)_第4頁
霧盈FPGA筆記之一呼吸燈簡單實驗(共12頁)_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上基于FPGA的呼吸燈簡單實驗程序(Verilog)2016-07-27 霧盈1.呼吸燈呼吸燈最早是由蘋果公司發明并應用于筆記本睡眠提示上,一經展出,立刻吸引眾多科技廠商爭相效仿。將其廣泛用于各種電子產品中,尤其是智能手機。呼吸燈其實是微電腦控制下,由暗漸亮,然后再由亮漸暗,模仿人呼吸方式的LED燈2.呼吸燈原理LED的亮度與流過的電流成正比。在一定的頻率之下,如果占空比是0,則LED不亮;如果占空比是100%,則LED最亮;如果占空比剛好是50%,則LED亮度適中。如果我們讓占空比從0100%變化,再從100%0不斷變化,就可以實現LED一呼一吸的效果。其波形占空比示

2、意圖如下所示:呼吸燈占空比示意圖3.呼吸燈程序設計思路(1)首先確定PWM的頻率為1Khz(2)由頻率算出周期 T = 1/f = 1ms(3)根據每次呼1s,吸1s,算出計數值 1s/1ms=1000(4)然后將1ms分成1000份,每一份是1us(5)寫三個 1us、1ms、1s的3個計數器count1、 count2、 Count3,最后count2和count3進行比較 4.程序框圖 5.狀態機設計可以將呼吸燈運行過程歸為兩個狀態:S0:由滅漸亮;S1:由亮漸滅。這里就會有兩個問題需要我們解決,1 狀態的翻轉2 在一個狀態里如何使pwm波的占空比實現逐增或逐減。先說第一個問題,兩個狀態

3、的翻轉由下面的時序圖可以看出來,兩個狀態的翻轉只是由時間決定的,S0狀態和S1狀態分別持續1s, 可以將它看成周期為2s的時鐘信號,每當flag_1s信號到來一次,狀態就翻轉一次。 然后再來說第二個問題,在一個狀態下如何實現PWM波占空比逐增逐減的過程。以S0狀態下,LED由滅漸亮,PWM波占空比由百分之百逐漸減小至零為例:我們發現讓count2與count3比較,其結果clk_out會出現這種占空比逐漸減小的結果。此段代碼如下: 于是,由反邏輯可以輕易知道在S1狀態下,如何使其輸出的clk_out占空比由小到大的方法,這樣就可以實現LED 的由亮漸滅。記: 整個呼吸燈程序設計主要內容大致如此

4、,末尾附上源代碼及其仿真波形,以下為程序設計中我所遇到的問題,給可能出現同樣問題的童鞋提供一些參考。Q 1:flag_1us尖峰脈沖信號,仿真出現如下波形:注:在用modelsim仿真波形時,我為了加快仿真速度和方便查看波形,我將所有的count的計數最大值都改為了9。當count1 計數10拍后,count2 波形從9 跳為0 ,但是仔細一看就會發現,count2 波形的9 跳為 0 時,count1 只計數了一拍,中間少了9拍。錯誤的代碼如下:修改后的代碼:加入那部分代碼的意思是當(count2 = 9 & count1 = 9)時,count2 才計入下一拍。正確的波形如下:同理

5、,在count3 歸零時也應如此。Q 2:flag_1ms 和flag_1s 兩個尖峰脈沖信號,高電平保持時間不是一個時鐘周期。如下圖所示:這里介紹一個老師講的技巧,讓flag_1ms 的波形與flag_1us 的波形相與,就可以得到flag_1ms 的波形為一個時鐘周期的尖峰脈沖。代碼如下:關于呼吸燈的問題,我遇到的就是這些了,還有其他問題歡迎童鞋們補充交流。附:仿真波形圖全局圖附:源代碼module breathe_led( input clk, input rst_n, output reg 3:0 led); parameter COUNT_MAX = 10'd999; / p

6、arameter COUNT_LIT = 6'd45;/ parameter COUNT_LIT = 6'd9;/ parameter COUNT_MAX = 10'd9;/ reg 5:0 count1; reg 9:0 count2; reg 9:0 count3; wire flag_1ms; wire flag_1s; wire flag_1us; reg state; reg clk_out; /count1 always (posedge clk or negedge rst_n)begin if(!rst_n) begin count1 <= 1&#

7、39;b0; end else begin if(count1 < COUNT_LIT) begin count1 <= count1 + 1'b1; end else begin count1 <= 6'd0; end endend assign flag_1us = (count1 = COUNT_LIT)? 1'b1 : 1'b0; /count2 always (posedge clk or negedge rst_n)begin if(!rst_n) begin count2 <= 10'd0; end else beg

8、in /* if(flag_1us) begin if(count2 = COUNT_MAX) begin count2 <= 10'd0; end else begin count2 <= count2 + 1'b1; end end else begin count2 <= 10'd0; end */ if(flag_1us & count2 < COUNT_MAX) begin count2 <= count2 + 1'b1; end else if(count2 = COUNT_MAX & count1 =

9、COUNT_LIT) begin count2 <= 1'b0; end endend assign flag_1ms = (count2 = COUNT_MAX)? (1'b1 & flag_1us):1'b0; / count3 always (posedge clk or negedge rst_n)begin if(!rst_n) begin count3 <= 10'd0; end else begin /* if(flag_1ms) begin if(count3 = COUNT_MAX) begin count3 <= 1

10、0'd0; end else begin count3 <= count3 + 1'b1; end end else begin count3 <= 10'd0; end */ if(flag_1ms & count3 < COUNT_MAX) begin count3 <= count3 + 1'b1; end else if(count3 = COUNT_MAX & count2 = COUNT_MAX & count1 = COUNT_LIT) begin count3 <= 1'b0; end

11、 endend assign flag_1s = (count3 = COUNT_MAX)?(1'b1 & flag_1ms):1'b0; always (posedge clk or negedge rst_n)begin if(!rst_n) begin clk_out <= 1'b0; state <= 1'b0; end else begin case(state) 0:begin / led from low to high if(count2 < count3) begin clk_out <= 1'b0; e

12、nd else begin clk_out <= 1'b1; end if(flag_1s) state <= state; else state <= state; end 1:begin / led from high to low if(count2 < count3) begin clk_out <= 1'b1; end else begin clk_out <= 1'b0; end if(flag_1s) state <= state; else state <= state; end default: state <= 1'b0; endcase end

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論