1 Serialadd
1 Serialadd
TAXILA
ASSIGNMENT NO: 01
N-BIT SERIAL ADDER
SUBMITTED TO: DR. SYED AZHAR ALI ZAIDI
SUBMITTED BY: AYESHA FARMAN
ROLL NO: 19-ENC-MS-03
FSM BASED CONTROLLER FOR n-BIT SERIALADDER
module serial_add
//for parameterized code
#(parameter N = 8)
(
input wire clk,syn_clr,
input wire shft,load_reg,cnt_en,
input wire [N-1:0]din_A, din_B,
output wire [N-1:0]sum,
output reg cout,
output wire max_tick
);
// Signal Declaration
reg a=1'b0,b=1'b0;
reg cout_s=0;
reg sum_s=0;
reg [N-1:0]i1=0;
reg [N-1:0]i2=0;
reg [N-1:0] C_in=0;
reg s_reg;
reg s_next;
// State Register
always@(posedge clk)
if(syn_clr)
s_reg <= 1'b0;
else
s_reg <= cout_s;
// Next state logic
always@(posedge clk)
begin
if(load_reg)
begin
i1 <= din_A;
i2 <= din_B;
end
else if (shft)
begin
a = i1[0];
b = i2 [0];
i1 = {1'b0, i1[N-1:1]}; // shifting using concatenation
i2 = {1'b0, i2[N-1:1]};
C_in <= {sum_s,C_in[N-1:1]};
end
end
//
always @ *
{cout_s,sum_s} = a + b + s_reg;
//
always@*
cout = s_reg;
assign sum = C_in;
endmodule
SCHEMATICS
TEST BENCH
module tb();
localparam T=20;
reg data_ready,clk,reset;
reg [7:0]din_A,din_B;
wire [7:0]sum;
wire cout;
wire op_ready;
// instantiation
top_serial TB(
.sum(sum),
.data_ready(data_ready),
.clk(clk),
.reset(reset),
.din_A(din_A),
.din_B(din_B),
.op_ready(op_ready),
.cout(cout)
);
//clock
always
begin
clk=1'b1;
#(T/2);
clk=1'b0;
#(T/2);
end
//reset
initial
begin
reset= 1'b1;
#(T/2);
reset= 1'b0;
end
//values
initial
begin
data_ready=1'b0;
#(T);
data_ready=1'b1;
din_A=8'b00000011;
din_B=8'b00000001;
#(15*T);
$stop;
end
endmodule
SIMULATIONS