Square Wave Generation Verilog Code
How to Generate Square Wave of Different Duty Cycle in Verilog.
In this post we are sharing the Verilog code to generate square wave of different duty cycle.
///////////////////////////////////////
//Verilog Code for Square Wave Generation
//////////////////////////////////////
`timescale 10ns / 1ps
module square_wave(
input clock,reset,
input [3:0] m,
input [3:0] n,
output reg square,
output reg clkby2=1'b0
);
reg [3:0] M;
reg [3:0] N;
reg [3:0] count1;
reg [3:0] count2;
reg state;
reg flag;
reg flag1;
reg int_flag;
parameter s0=1'b0, s1=1'b1;
always @(posedge clock)
begin
clkby2=~clkby2;
if(reset==1)
begin
int_flag=0;
count1=0;
count2=0;
state=0;
flag=0;
flag1=0;
square=0;
M=4'b0000;
N=4'b0000;
end
if(reset==0)
begin
if(int_flag==0)
begin
M=m;
N=n;
end
int_flag=1'b1;
case(state)
s0:
begin
if(flag==1'b0)
count1=M;
if(count1>4'b0000)
begin
square=1'b1;
flag=1'b1;
count1=count1-4'b0001;
if(count1==4'b0000)
begin
flag1=0;
state=s1;
end
else
state=s0;
end
end
s1: begin
if(flag1==1'b0) count2=N;
if(count2>4'b0000)
begin
square=1'b0;
count2=count2-4'b0001;
flag1=1;
if(count2==4'b0000)
begin
flag=0; state=s0;
end
else
state=s1;
end
end
endcase
end
end
endmodule
