Assessment-3
CODE
// Module definition
module decoder(
input wire EN, // Enable pin
input wire A, // Input A
input wire B, // Input B
input wire C, // Input C
output reg F // Output F
);
always @(*) begin
// Default F to 0
F = 1'b0;
// Use case statement with {EN, A, B, C}
case ({EN, A, B, C})
4'b0000: F = 1'b0; // 0
4'b0001: F = 1'b1; // 1
4'b0010: F = 1'b0; // 2
4'b0011: F = 1'b1; // 3
4'b0100: F = 1'b1; // 4
4'b0101: F = 1'b0; // 5
4'b0110: F = 1'b1; // 6
4'b0111: F = 1'b0; // 7
4'b1000: F = 1'b1; // 8
4'b1001: F = 1'b0; // 9
4'b1010: F = 1'b1; // 10
4'b1011: F = 1'b0; // 11
4'b1100: F = 1'b1; // 12
4'b1101: F = 1'b0; // 13
4'b1110: F = 1'b0; // 14
4'b1111: F = 1'b1; // 15
default: F = 1'b0; // Default case
endcase
end
endmodule
// Testbench
module TB_decoder;
reg EN; // Enable input
reg A, B, C; // Select inputs
wire F; // Output
// Instantiate the decoder module
decoder dut(.EN(EN), .A(A), .B(B), .C(C), .F(F));
// Test stimulus
initial begin
$monitor("EN=%b, A=%b, B=%b, C=%b, F=%b", EN, A, B, C, F);
// Test with various inputs
// EN = 0 (Output F should be 0 for all cases)
EN = 0;
A = 0; B = 0; C = 0; #10; // F should be 0 (0)
A = 0; B = 0; C = 1; #10; // F should be 1 (1)
A = 0; B = 1; C = 0; #10; // F should be 0 (2)
A = 0; B = 1; C = 1; #10; // F should be 1 (3)
A = 1; B = 0; C = 0; #10; // F should be 1 (4)
A = 1; B = 0; C = 1; #10; // F should be 0 (5)
A = 1; B = 1; C = 0; #10; // F should be 1 (6)
A = 1; B = 1; C = 1; #10; // F should be 0 (7)
// Enable = 1 to check outputs for 8-15
EN = 1;
A = 0; B = 0; C = 0; #10; // F should be 1 (8)
A = 0; B = 0; C = 1; #10; // F should be 0 (9)
A = 0; B = 1; C = 0; #10; // F should be 1 (10)
A = 0; B = 1; C = 1; #10; // F should be 0 (11)
A = 1; B = 0; C = 0; #10; // F should be 1 (12)
A = 1; B = 0; C = 1; #10; // F should be 0 (13)
A = 1; B = 1; C = 0; #10; // F should be 1 (14)
A = 1; B = 1; C = 1; #10; // F should be 1 (15)
// End the simulation
$finish;
end
endmodule
OUTPUT