Verilog Assignment3
Verilog Assignment3
Part A
Code
module HalfAdder(
input wire A,
input wire B,
output wire Sum,
output wire Cout
);
assign Sum = A ^ B;
assign Cout = A & B;
endmodule
module FullAdder(
input wire A,
input wire B,
input wire Cin,
output wire Sum,
output wire Cout
);
wire Sum1, Cout1, Cout2;
module FourBitAdder(
input [3:0] A,
input [3:0] B,
input Cin,
output [3:0] Sum,
output Cout
);
wire [3:0] Sum1;
wire Cout4;
endmodule
module EightBitAdder(
input [7:0] A,
input [7:0] B,
input Cin,
output [7:0] Sum,
output Cout
);
wire [3:0] Sum1;
wire Cout1, Cout2;
endmodule
///////////////////////////////////////////////
module HalfAdder_TB;
// Inputs
reg A;
reg B;
// Outputs
wire Sum;
wire Cout;
// Stimulus generation
initial begin
// Test case 1: A=0, B=0
A = 1'b0;
B = 1'b0;
#10; // Wait for a few simulation cycles
$display("Test case 1: A=0, B=0 => Sum=%b, Cout=%b", Sum, Cout);
endmodule
/////////////////////////
module FullAdder_TB;
// Inputs
reg A;
reg B;
reg Cin;
// Outputs
wire Sum;
wire Cout;
// Stimulus generation
initial begin
// Test case 1: A=0, B=0, Cin=0
A = 1'b0;
B = 1'b0;
Cin = 1'b0;
#10; // Wait for a few simulation cycles
$display("Test case 1: A=0, B=0, Cin=0 => Sum=%b, Cout=%b", Sum, Cout);
endmodule
///////////////////////////////
module FourBitAdder_TB;
// Inputs
reg [3:0] A;
reg [3:0] B;
reg Cin;
// Outputs
wire [3:0] Sum;
wire Cout;
// Stimulus generation
initial begin
// Test case 1: A=5 (0101), B=3 (0011), Cin=0
A = 4'b0101;
B = 4'b0011;
Cin = 1'b0;
#10; // Wait for a few simulation cycles
$display("Test case 1: A=5, B=3, Cin=0 => Sum=%b, Cout=%b", Sum, Cout);
endmodule
/////////////////////////////////
module EightBitAdder_TB;
// Inputs
reg [7:0] A;
reg [7:0] B;
reg Cin;
// Outputs
wire [7:0] Sum;
wire Cout;
// Stimulus generation
initial begin
// Test case 1: A=74 (01001010), B=55 (00110111), Cin=0
A = 8'b01001010;
B = 8'b00110111;
Cin = 1'b0;
#10; // Wait for a few simulation cycles
$display("Test case 1: A=74, B=55, Cin=0 => Sum=%b, Cout=%b", Sum, Cout);
endmodule
Result
Half adder
Full adder
4 bit adder
8 bit adder
Part B
Simulation of 8:1 MUX
Code
module MUX8to1 (
input [7:0] i,
input s2, s1, s0,
output reg out
);
always @ (i or s2 or s1 or s0)
case ({s2, s1, s0})
3'b000: out = i[0];
3'b001: out = i[1];
3'b010: out = i[2];
3'b011: out = i[3];
3'b100: out = i[4];
3'b101: out = i[5];
3'b110: out = i[6];
3'b111: out = i[7];
default: out = 1'bx;
endcase
endmodule
/////////////////////////////////
module MUX8to1_TB;
// Inputs
reg [7:0] i;
reg s2, s1, s0;
// Output
wire out;
// Initialize Inputs
initial begin
i = 8'b10101010;
s2 = 0;
s1 = 0;
s0 = 0;
#100; // Wait 100 ns for global reset to finish
// Display output
initial begin
#100;
$monitor("i=%b, s2=%b, s1=%b, s0=%b, out=%b", i, s2, s1, s0, out);
$finish;
end
endmodule
Results