名稱(chēng):Quartus信號(hào)發(fā)生器Verilog代碼遠(yuǎn)程云端平臺(tái)
軟件:Quartus
語(yǔ)言:Verilog
代碼功能:
1.設(shè)計(jì)內(nèi)容和要求(包括設(shè)計(jì)內(nèi)容、主要目標(biāo)與技術(shù)參數(shù))
設(shè)計(jì)內(nèi)容:基于FPGA的PWM信號(hào)發(fā)生器的設(shè)計(jì)
設(shè)計(jì)要求:
(1)設(shè)計(jì)語(yǔ)言為Verilog;
(2)設(shè)計(jì)基于FPGA的PWM信號(hào)發(fā)生器,產(chǎn)生PWM波并可以調(diào)占空比、頻率;
(3)采用層次化的設(shè)計(jì)。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在遠(yuǎn)程云端平臺(tái)驗(yàn)證,遠(yuǎn)程云端平臺(tái)如下,其他遠(yuǎn)程云端平臺(tái)可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 管腳分配
6. 仿真文件(VWF)
7. 仿真圖
8. 遠(yuǎn)程平臺(tái)
由于平臺(tái)登錄不了
手繪原理圖如下:
部分代碼展示:
module?pwm(clk,?RST,?period_add,?period_sub,duty_add,duty_sub,pulse); ???input????????clk;//1KHz時(shí)鐘 ???input????????RST;//復(fù)位 ???input??period_add;//周期增加按鍵 ???input??period_sub;//周期減小按鍵 ???input??duty_add;//占空比增加按鍵 ???input??duty_sub;//占空比減小按鍵 ???output???????pulse;//輸出PWM波 ??? ??? ???reg?????????pulse=0; ???reg?[15:0]??period_cnt=16'd1000;//周期計(jì)數(shù)器,默認(rèn)周期1s ???reg?[7:0]???duty_cnt=8'd50;//占空比信號(hào)1%~99%,默認(rèn)50% ??? ??? ???reg?[15:0]??count; //調(diào)整周期 always@(posedge?clk?or?posedge?RST) if(RST) period_cnt<=16'd1000;//周期計(jì)數(shù)器,默認(rèn)周期1s else if(period_cnt<=16'd100) period_cnt<=16'd100;//周期計(jì)數(shù)器,最低周期100ms else if(period_add)//周期增加按鍵 period_cnt<=period_cnt+16'd100;//周期計(jì)數(shù)器,步進(jìn)100ms else?if(period_sub)//周期減小按鍵 period_cnt<=period_cnt-16'd100;//周期計(jì)數(shù)器,步進(jìn)100ms else period_cnt<=period_cnt; //調(diào)整占空比 always@(posedge?clk?or?posedge?RST) if(RST) duty_cnt<=8'd50;//占空比信號(hào)1%~99%,默認(rèn)50% else if(duty_add)//占空比增加按鍵 if(duty_cnt>=8'd99) duty_cnt<=8'd99;//最大99% else duty_cnt<=duty_cnt+8'd2;//占空比計(jì)數(shù)器,步進(jìn)2 else?if(duty_sub)//占空比減小按鍵 if(duty_cnt<=8'd1) duty_cnt<=8'd1;//最小1% else duty_cnt<=duty_cnt-8'd2;//占空比計(jì)數(shù)器,步進(jìn)2 else duty_cnt<=duty_cnt;??? ??? //計(jì)數(shù)到period_cnt always?@(posedge?clk)?????? ????begin ????????if?(count?>=?period_cnt-16'd1) ????????????count?<=?16'd0; ????????else ????????????count?<=?count?+?16'd1; ????end ??? ???always?@(posedge?clk)????? ??????begin ?????????if?(count*100?<?period_cnt?*?duty_cnt) ????????????pulse?<=?1'b1;//根據(jù)計(jì)數(shù)器判斷輸出PWM波 ?????????else ????????????pulse?<=?1'b0; ??????end ??? endmodule
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=358