Serial Binary Adder
Serial Binary Adder
PROGRAM
module serialmealy(clk,rst,inp,outp);
input clk,rst;
input [1:0] inp;
output outp;
reg state;
reg outp;
always @(posedge clk,posedge rst)
begin
if(rst==1)
state<=0;
else
begin
case(state)
1'b0:
begin
if(inp==2'b00)
begin
state<=1'b0;
outp<=0;
end
else if(inp==2'b01||inp==2'b10)
begin
state<=1'b0;
outp<=1;
end
else if(inp==2'b11)
begin
state<=1'b1;
outp<=0;
end
end
1'b1:
begin
if(inp==2'b00)
begin
state<=1'b0;
outp<=1;
end
else if(inp==2'b01||inp==2'b10)
begin
state<=1'b1;
outp<=0;
end
else if(inp==2'b11)
begin
state<=1'b1;
outp<=1;
end
end
endcase
end
end
endmodule
TESTBENCH
module serialmealy_tb();
reg clk,rst;
WAVEFORM
begin
state<=2'b10;
out<=0;
end
else
begin
state<=2'b01;
out<=0;
end
end
2'b10: begin
if(inp==0)
begin
state<=2'b11;
out<=0;
end
else
begin
state<=2'b01;
out<=0;
end
end
2'b11: begin
if(inp==0)
begin
state<=2'b00;
out<=0;
end
else
begin
state<=2'b01;
out<=1;
end
end
endcase
end
end
endmodule
TESTBENCH
module mealypattern_tb();
reg inp,rst,clk;
wire out;
mealypattern m1(out,inp,rst,clk);
initial
begin
forever
begin
clk<=0;
#50 clk<=1;
#50 clk<=0;
end
end
initial
begin
rst=1;
#100 rst=0;
#100 inp=1;
#100 inp=0;
#100 inp=0;
#100 inp=1;
#100 inp=0;
#100 inp=1;
#100 inp=0;
#100 inp=0;
#100 inp=1;
#100 inp=0;
#100 inp=1;
end
endmodule
WAVEFORM
begin
if(inp==0)
state<=3'b011;
else
state<=3'b001;
end
3'b011:
begin
if(inp==0)
state<=3'b000;
else
state<=3'b100;
end
3'b100:
begin
if(inp==0)
state<=3'b010;
else
state<=3'b001;
end
endcase
end
end
always@(posedgeclk, posedgerst)
begin
if(rst==1)
out<=0;
else
if(state==3'b000||state==3'b001|state==3'b010|state==3'b011)
out<=0;
else if(state==3'b100)
out<=1;
end
endmodule
TESTBENCH
module patternmoore_tb();
reg inp,rst,clk;
wire out;
patternmoore m1(out,inp,rst,clk);
initial
begin
forever
begin
clk<=0;
#50 clk<=1;
#50 clk<=0;
end
end
initial
begin
rst=1;
#100 rst=0;
#100 inp=1;
#100 inp=0;
#100 inp=0;
#100 inp=1;
#100 inp=0;
#100 inp=1;
#100 inp=0;
#100 inp=0;
#100 inp=1;
#100 inp=0;
#100 inp=1;
end
endmodule
WAVEFORM
state<=2'b01;
else if(inp==2'b11)
state<=2'b11;
end
2'b10:
begin
if(inp==2'b00)
state<=2'b00;
else if(inp==2'b01||inp==2'b10)
state<=2'b10;
else if(inp==2'b11)
state<=2'b01;
end
2'b11:
begin
if(inp==2'b00)
state<=2'b10;
else if(inp==2'b01||inp==2'b10)
state<=2'b01;
else if(inp==2'b11)
state<=2'b11;
end
endcase
end
end
always@(posedgeclk, posedgerst)
begin
if(rst==1)
outp<=0;
else
if(state==2'b11||state==2'b10)
outp<=1;
else
outp<=0;
end
endmodule
TESTBENCH
module serialmealy_tb();
reg clk,rst;
reg [1:0]inp;
wire outp;
serialmealy sm(clk,rst,inp,outp);
initial
begin
forever
begin
clk<=1;
#50 clk<=0;
#50 clk<=1;
end
end
initial
begin
rst=1;
#50 rst=0;
#50 inp=2'b00;
#50 inp=2'b01;
#50 inp=2'b10;
#50 inp=2'b11;
#50 inp=2'b01;
#50 inp=2'b11;
#50 inp=2'b00;
#50 inp=2'b10;
end
endmodule
WAVEFORM