4-bit adder subtractor using 1 bit adder - EDA Playground
Warning! This exercise has been opened in another tab; autosave has been disabled. Close this tab or refresh to reactivate.

 Languages & Libraries

 Tools & Simulators

 Examples

209


27
 
1
module RCAS_TB;
2
  wire [3:0] S, Cout;
3
  reg [3:0] A, B;
4
  reg ctrl;
5
  
6
  ripple_carry_adder_subtractor rcas(A, B, ctrl, S, Cout);
7
  
8
  initial begin
9
    $monitor("CTRL=%b: A = %b, B = %b --> S = %b, Cout[3] = %b", ctrl, A, B, S, Cout[3]);
10
    ctrl = 0;
11
    A = 1; B = 0;
12
    #3 A = 2; B = 4;
13
    #3 A = 4'hb; B = 4'h6;
14
    #3 A = 5; B = 3;
15
    ctrl = 1;
16
    A = 1; B = 0;
17
    #3 A = 2; B = 4;
18
    #3 A = 4'hb; B = 4'h6;
19
    #3 A = 5; B = 3;
20
    #3 $finish;
21
  end
22
  
23
  initial begin
24
    $dumpfile("waves.vcd");
25
    $dumpvars;
26
  end
27
endmodule
xxxxxxxxxx
1
28
 
1
module full_adder(
2
  input a, b, cin,
3
  output sum, cout
4
);
5
  
6
  assign {sum, cout} = {a^b^cin, ((a & b) | (b & cin) | (a & cin))};
7
  //or
8
  //assign sum = a^b^cin;
9
  //assign cout = (a & b) | (b & cin) | (a & cin);
10
endmodule
11
12
module ripple_carry_adder_subtractor #(parameter SIZE = 4) (
13
  input [SIZE-1:0] A, B, 
14
  input CTRL,
15
  output [SIZE-1:0] S, Cout);
16
  bit [SIZE-1:0] Bc;
17
  genvar g;
18
  
19
  assign Bc[0] = B[0] ^ CTRL;
20
    
21
  full_adder fa0(A[0], Bc[0], CTRL, S[0], Cout[0]);
22
  generate  // This will instantial full_adder SIZE-1 times
23
    for(g = 1; g<SIZE; g++) begin
24
      assign Bc[g] = B[g] ^ CTRL;
25
      full_adder fa(A[g], Bc[g], Cout[g-1], S[g], Cout[g]);
26
    end
27
  endgenerate
28
endmodule
41 views and 0 likes     
A short description will be helpful for you to remember your playground's details
 
100:0