1. Half Adder:
Code:
module half_adder(
input A, B,
output Sum, Carry
);
assign Sum = A ^ B;
assign Carry = A & B;
endmodule
Testbench:
`timescale 1ns/1ps
module tb_half_adder;
reg A, B;
wire Sum, Carry;
half_adder HA(.A(A), .B(B), .Sum(Sum), .Carry(Carry));
initial begin
$dumpfile("half_adder.vcd");
$dumpvars(0, tb_half_adder);
A = 0; B = 0; #10;
A = 0; B = 1; #10;
A = 1; B = 0; #10;
A = 1; B = 1; #10;
$finish;
end
endmodule
Waveform Output:
2. Full Adder:
Code:
module full_adder(
input A, B, Cin,
output Sum, Cout
);
assign Sum = A ^ B ^ Cin;
assign Cout = (A & B) | (B & Cin) | (A & Cin);
endmodule
Testbench:
`timescale 1ns/1ps
module tb_full_adder;
reg A, B, Cin;
wire Sum, Cout;
full_adder FA(.A(A), .B(B), .Cin(Cin), .Sum(Sum), .Cout(Cout));
initial begin
$dumpfile("full_adder.vcd");
$dumpvars(0, tb_full_adder);
A = 0; B = 0; Cin = 0; #10;
A = 0; B = 1; Cin = 1; #10;
A = 1; B = 1; Cin = 0; #10;
A = 1; B = 1; Cin = 1; #10;
$finish;
end
endmodule
Waveform Output:
3. 4:1 Mux:
Code:
module mux_4to1(
input [1:0] sel,
input [3:0] data,
output out
);
assign out = (sel == 2'b00) ? data[0] :
(sel == 2'b01) ? data[1] :
(sel == 2'b10) ? data[2] : data[3];
endmodule
Testbench:
`timescale 1ns/1ps
module tb_mux_4to1;
reg [1:0] sel;
reg [3:0] data;
wire out;
mux_4to1 MUX(.sel(sel), .data(data), .out(out));
initial begin
$dumpfile("mux4to1.vcd");
$dumpvars(0, tb_mux_4to1);
data = 4'b1010;
sel = 2'b00; #10;
sel = 2'b01; #10;
sel = 2'b10; #10;
sel = 2'b11; #10;
$finish;
end
endmodule
Waveform Output:
4. ALU:
Code:
module alu(
input [1:0] op,
input [3:0] A, B,
output reg [3:0] result
);
always @(*) begin
case(op)
2'b00: result = A + B; // ADD
2'b01: result = A - B; // SUB
2'b10: result = A & B; // AND
2'b11: result = A | B; // OR
endcase
end
endmodule
Testbench:
`timescale 1ns/1ps
module tb_alu;
reg [1:0] op;
reg [3:0] A, B;
wire [3:0] result;
alu ALU(.op(op), .A(A), .B(B), .result(result));
initial begin
$dumpfile("alu.vcd");
$dumpvars(0, tb_alu);
A = 4'b0101; B = 4'b0011;
op = 2'b00; #10; // ADD
op = 2'b01; #10; // SUB
op = 2'b10; #10; // AND
op = 2'b11; #10; // OR
$finish;
end
endmodule
Waveform Output: