资源描述:
《pwm调整灯的亮度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.实验原理学习PWM原理,用Verilog硬件描述语言设计PWM逻辑电路,实现PWM信号占空比可调,通过按键调整PWM信号的占空比,将此PWM信号输出驱动LED,观察不同占空比时LED的亮度如何变化。在实验箱上实现按键调整LED亮度,数码管显示PWM信号的占空比。二.设计方案modulecnt100(clr,clk,ctrl,q);//100计数器inputclr,clk,ctrl;output[7:0]q;reg[7:0]q;wirenew_clk=clk&ctrl;//ctrl为1时计数,为0时暂停always@(posedgenew_
2、clkornegedgeclr)//毫秒if(!clr)beginq<=8'h50;endelseif(q==8'h99)q<=0;elseif(q==8'h?9)q<=q+4'h7;elseq<=q+1'b1;endmodulemoduledebounce(clk,key_in,key_out);//按键去抖动//parameterwidth=0;inputclk;inputkey_in;//[width-1:0]outputkey_out;regdout1,dout2,dout3;assignkey_out=(dout1&dout2&do
3、ut3);//两个D触发器,实现去抖动//若开关刚开始接低电平则为dout1&dout2&dout3always@(posedgeclk)begin//若开关刚开始接高电平则为dout1
4、dout2
5、dout3dout1<=key_in;dout2<=dout1;dout3<=dout2;endendmodulemoduledeled(in,a,b,c,d,e,f,g,dp);input[3:0]in;outputa,b,c,d,e,f,g,dp;wirea,b,c,d,e,f,g,dp;assign{dp,a,b,c,d,e,f,g}=(i
6、n==4'b0000)?8'b01111110:(in==4'b0001)?8'b00110000:(in==4'b0010)?8'b01101101:(in==4'b0011)?8'b01111001:(in==4'b0100)?8'b00110011:(in==4'b0101)?8'b01011011:(in==4'b0110)?8'b01011111:(in==4'b0111)?8'b01110000:(in==4'b1000)?8'b01111111:(in==4'b1001)?8'b01111011:(in==4'b1010)?8'
7、b00000000:8'b00000001;//为A时全熄endmodulemodulediv_clk(cki,f,cko);inputcki;input[25:0]f;outputcko;//parameterf=26'D1000;//输出频点在此随意设置,当前输出10K//例如输出12345Hz,则parameterf=26'D12345;//例如输出5Hz,则parameterf=26'D5;reg[25:0]c;regcko;always@(posedgecki)beginif(c>=26'H17D7840)beginc=0;cko=
8、!cko;end//50M的一半就是26'H17D7840elsec=c+f;endendmodulemodulemux2(a1,a2,sel,out);input[3:0]a1,a2;inputsel;output[3:0]out;assignout=sel?a2:a1;endmodulemodulepwm(clr,clk,data,led);//100进制计数器inputclr,clk;input[7:0]data;outputled;reg[7:0]q;assignled=(q9、lkornegedgeclr)//毫秒if(!clr)beginq<=8'h00;endelseif(q==8'h99)q<=0;elseif(q==8'h?9)q<=q+4'h7;elseq<=q+1'b1;endmodulemodulescan(clk,q);inputclk;outputq;regq;always@(posedgeclk)beginq=q+1'b1;endendmodulemodulepwm_top(clr,clk,ctrl,a,b,c,d,e,f,g,sel,led);//定时计数器inputclr,clk,ctrl;
10、outputa,b,c,d,e,f,g,sel,led;wirese,clkp,wctrl;wire[3:0]din;wire[7:0]q100;div_clkcl