Computer Organization 9
Name: T.Venkat Kaushal
Roll Number: CS22B058
---
## Question 1
Verilog Code for ALU:
This code supports ADD, SUB, AND, OR Operations
```verilog=
module ALU_2bit (
input wire [1:0] A, B,
input wire [1:0] Ctrl,
output reg [1:0] Out
);
always @(*) begin
case (Ctrl)
2'b00: Out = A + B;
2'b01: Out = A - B;
2'b10: Out = A & B;
2'b11: Out = A | B;
endcase
end
endmodule
```
Testbench
```verilog=
module ALU_TestBench();
reg [1:0] A, B;
reg [1:0] Ctrl;
wire [1:0] Out_ALU;
ALU_2bit uut (
.A(A),
.B(B),
.Ctrl(Ctrl),
.Out(Out_ALU)
);
initial begin
A = 2'b10;
B = 2'b01;
Ctrl = 2'b00;
#100;
A = 2'b10;
B = 2'b01;
Ctrl = 2'b01;
#100;
A = 2'b10;
B = 2'b01;
Ctrl = 2'b10;
#100;
A = 2'b10;
B = 2'b01;
Ctrl = 2'b11;
#100;
$finish;
end
endmodule
```

---
## Question 2
SimpleProcessor.v
```verilog=
module simple_processor (
input [7:0] instruction,
input [7:0] data_in,
output reg [7:0] data_out
);
reg [7:0] memory [255:0];
reg [7:0] reg_file [15:0];
reg [4:0] dest_reg;
reg [3:0] offset;
reg [1:0] src_reg;
reg load;
always @(*) begin
load = instruction[7];
dest_reg = instruction[6:5];
offset = instruction[4:2];
src_reg = instruction[1:0];
end
always @(*) begin
if (load)
begin
reg_file[dest_reg] = memory[reg_file[src_reg] + offset];
data_out = reg_file[dest_reg];
end
else
begin
reg_file[src_reg] = data_in;
memory[reg_file[dest_reg] + offset] = reg_file[src_reg];
end
end
initial begin
reg_file[1] = 8'b00000001; // R1
reg_file[2] = 8'b00000010; // R2
memory[3] = 8'b11111111;
end
```
Testbench
```verilog=
module simple_processor_tb;
reg [7:0] instruction;
reg [7:0] data_in;
wire [7:0] data_out;
// Instantiate the simple processor module
simple_processor dut (
.instruction(instruction),
.data_in(data_in),
.data_out(data_out)
);
initial begin
// Load operation: lw R2, 3(R1)
instruction = 8'b01001101; // Opcode: 0, Dest: 01 (R2), Offset: 011 (3), Src: 01 (R1)
data_in = 8'b00000000; // Data input not used for load
#100; // Wait for processing
$display("Loaded value: %h", data_out);
// Store operation: sw R2, 3(R1)
instruction = 8'b11001101; // Opcode: 1, Dest: 01 (R2), Offset: 011 (3), Src: 01 (R1)
data_in = 8'b10101010; // Data input to store
#100; // Wait for processing
end
endmodule
```

---
## Question 3
### C Code:
```c=
#include<iostream>
int main ()
{
int sum = 0;
for(int i = 0; i < 100; i++){
sum = sum + i;
}
return 0;
}
```
Compiled the C++ code : g++ filename.cpp
Attached the pin to the executable of C program
```
../../../pin -t obj-intel64/inscount0.so -o CS22B058_lab9_q3.log -- /home/dsl4/a.out
```
Output:
```
Count 2166578
```
Screenshot:
