基於FPGA的VHDL語言呼吸燈設計

2021-08-20 13:07:34 字數 1280 閱讀 4654

網上的各種資料講解地不是很全,希望能把自己的思考分享給大家,一同學習。

有不足的地方希望大家能指出,共同進步!

本設計在alteracyclone ii ep2c35 平台上,利用鎖相環、計數器等數位電路,產生占空比可隨時間自動變化的pwm波形,從而控制led燈的亮度變化,實現以2s為週期的led燈的呼吸顯示效果。

2.系統原理圖

如圖 1所示,input和output為輸入輸出模組。altpll0為鎖相環模組,inclk0為輸入引腳,c0為輸出引腳。count10為十分頻計數器模組,clk為輸入引腳,outclk為輸出引腳。pwm為脈衝寬度調製模組,clkus為輸入引腳,pwmout為輸出引腳。pin_u11為fpga開發板上的50mhz晶振產生引腳,pin_w22為led燈1的電平輸入引腳。

圖1 系統原理圖

晶振產生的50mhz訊號從input輸入後經過鎖相環處理,將不穩定的晶振轉換為穩定可靠的10mhz時鐘訊號,從鎖相環模組的c0腳輸出。10mhz時鐘訊號又從十分頻計數器模組的clk引腳輸入,在outclk 引腳輸出所需要的1mhz脈衝訊號。1mhz的脈衝訊號通過脈衝寬度調製模組,從clkus引腳輸入,pwmout引腳輸出。將調製處理後的訊號接pin_w22引腳,即接led燈,從而實現對led亮度的控制。

50mhz晶振通過pll鎖相環和十進位制分頻計數器後得到所需的1mhz時鐘訊號,所有計數調製操作均以1mhz時鐘訊號為基礎[3]。

對上公升沿進行計數,計滿1000個上公升沿,即經過1000個基本時鐘週期(1ms)時,拉低輸出電平,同時時計數值歸0,使pwm調製後的輸出波形頻率為1khz。每次計數後將計數值pwmcount與閾值pwmgate進行比較,若兩者相等,拉高輸出電平。當light=0,也就是處於一次完整呼吸的前半個過程時,在每次拉高輸出電平後使閾值加1。當light=0,處於呼吸的後半個過程時,在每次拉高輸出電平後使閾值減1。閾值的上下限分別為999和1,控制呼吸週期為2s。

圖2 系統流程框圖1.十分頻計數器的vhdl實現

2.波形調製的vhdl實現

基於FPGA的呼吸燈設計

網上類似的標題很多,有一些呼吸燈的設計是基於微控制器的,還有一部分設計是基於fpga的,我也一時手癢,將這兩天自己重新寫的verilog描述語句曬出來,免得壓箱底放久了,出現發霉點。為什麼說重新寫的呢,之前有老師教過,講過呼吸燈,並且畫出了 波形圖和框圖,這段時間,略有閒暇,就將之前學習的程式,重新...

FPGA設計 VHDL語言篇 1 模組例化

關於模組例化有兩種方式,一種是通過宣告,在進行例化,另一種是直接進行例化操作,第一種可以通過configuration進行配置,便於統一管理配置,第二種呼叫方便,但不能通過configuration進行配置,不利於日後配置結構體。宣告 component port port1 port2 end c...

基於FPGA的秒錶

功能 四位數碼管顯示,從零開始計數,前兩位顯示秒 0 59 後兩位顯示0.01秒 0 99 計滿後從零開始,有開始鍵 暫停鍵 復位鍵。當第一次按下開始鍵,秒錶從初始開始計數,led顯示器上顯示當前計時值 當緊按下 按住 暫停鍵時,秒錶暫停計時,led上顯示當前計時值,放開則繼續計時 當按下復位鍵時,...