# Lab 10
Name: SUDDULA VINEETH RAGHAVENDRA
Roll No.: CS22B045
---
## Question 1 : ALU
**Code**
```
module MyALU (
input [31:0] operand1,
input [31:0] operand2,
input [3:0] alu_control,
output reg [31:0] alu_result,
output reg zero_flag
);
always @(*) begin
// Operating based on control input
case(alu_control)
4'b0000: alu_result = operand1 + operand2;
4'b0001: alu_result = operand1 - operand2;
4'b0010: alu_result = operand1 ^ operand2;
4'b0011: alu_result = operand1 | operand2;
4'b0100: alu_result = operand1 & operand2;
4'b0101: alu_result = operand1 << operand2;
4'b0110: alu_result = operand1 >> operand2;
4'b0111: alu_result = operand1 >>> operand2;
4'b1000: alu_result = (operand1 < operand2) ? 1 : 0;
endcase
// Setting zero_flag if ALU_result is zero
zero_flag = (alu_result == 0) ? 1'b1 : 1'b0;
end
endmodule
module MyALU_Testbench;
reg [31:0] operand1;
reg [31:0] operand2;
reg [3:0] alu_control;
wire [31:0] alu_result;
wire zero_flag;
// Instantiate ALU
MyALU uut (
.operand1(operand1),
.operand2(operand2),
.alu_control(alu_control),
.alu_result(alu_result),
.zero_flag(zero_flag)
);
// Stimulus
initial begin
operand1 = 32'h0000000A; // Example1 value
operand2 = 32'h00000005; // Example1 value
alu_control = 4'b0000; // Example1 control value
#10; // Wait for 10 time units
// Change inputs
operand1 = 32'h0000000F; // example2 value
operand2 = 32'h0000000F; // example2 value
alu_control = 4'b0001; // example2 control value
#10; // Wait for 10 time units
// Add more test cases as needed
$finish; // End simulation
end
// Output display
always @(alu_result, zero_flag)
$display("ALU Result = %h, Zero Flag = %b", alu_result, zero_flag);
endmodule
```
**Observations:**
