always@(posedge clk or negedge rst)begin
if (!rst)
begin
cnt_T <= 0;
count<=0;
end
else if(cnt_T == CYCLE-1'b1)
begin
cnt_T <= 0;
count<=count+1'b1;
end
else
cnt_T <= cnt_T +1'b1;
end
always@(posedge clk or negedge rst)begin
if(!rst)
pwm_1 <= 0;
else if (cnt_T <= CYCLE * PERCENT /100 -1 )
pwm_1 <= 1;
else
pwm_1 <= 0;
end
assign sctrl=pwm_1;
endmodule
pwm占空比
module speed(clk,rst,key_out,PERCENT);
input clk,rst,key_out;
output reg [6:0]PERCENT;
always@(posedge clk or negedge rst)
begin
if(!rst)
PERCENT<=7'd5;
else if(key_out)
PERCENT<=7'd25;
end
always@(posedge clk or negedge rst)begin
if (!rst)begin
cnt_delay<=32'd0;
key_reg<=1'b1;
end
else begin
key_reg<=key_in1;
if(key_reg!=key_in1)
cnt_delay<=CNT_20MS;
else begin
if (cnt_delay>32'd0)
cnt_delay<=cnt_delay-1'b1;
else
cnt_delay<=cnt_delay;
end
end
end
always @(posedge clk or negedge rst)begin
if(!rst)begin
key_value<=1'b1;
key_flag<=1'b0;
end
else begin
if (cnt_delay==32'd1)begin
key_value<=key_in1;
key_flag<=1'b1;
end
else begin
key_value<=key_value;
key_flag<=1'b0;
end
end
end