2,425
社区成员
发帖
与我相关
我的任务
分享
module delay(osc_in,osc_out,clk_in,clk_out,input_signal,PWM1,PWM2,PWM3,start,signal_buffer);
input osc_in,clk_in,input_signal;
output PWM1,PWM2,PWM3,start;
output osc_out,clk_out;
output signal_buffer;
reg PWM1,PWM2,PWM3,osc_out,clk_out,start;//out1,out2,out3,out4,out5,out6
reg[10:0] count;
reg signal_buffer;
initial
begin
PWM1<=1'b0;
PWM2<=1'b0;
PWM3<=1'b0;
start<=1'b0;
count<=11'd0;
signal_buffer<=1'b0;
end
always @(osc_in)
begin
if(osc_in==1)
begin
osc_out<=0;
clk_out<=0;
end
else
begin
osc_out<=1;
clk_out<=1;
end
end
always @(posedge clk_in)
begin
if(input_signal==1'b0)
begin
case(count)
11'd0: if(signal_buffer==1'b1)
start<=1'b1;
else
start<=1'b0;
11'd2: PWM3<=1'b0;
11'd4: PWM2<=1'b0;
11'd6: begin
PWM1<=1'b0;
start<=1'b0;
signal_buffer<=1'b0; //remember the input signal
end
default:
begin
PWM1<=PWM1;
PWM2<=PWM2;
PWM3<=PWM3;
end
endcase
end
else
begin
case(count)
11'd0:if(signal_buffer==1'b0)
start<=1'b1;
else
start<=1'b0;
11'd2:PWM1<=1'b1;
11'd4:PWM2<=1'b1;
11'd6:begin
PWM3<=1'b1;
start<=1'b0;
signal_buffer<=1'b1;
end
default:
begin
PWM1<=PWM1;
PWM2<=PWM2;
PWM3<=PWM3;
end
endcase
end
end
always@(posedgeclk_in or negedge start)
if(start==1'b0)
count<=11'd0;
else
if(count>11'd1500)
count<=11'd0;
else
count<=count+11'd1;
endmodule