Untitled

 avatar
unknown
plain_text
a year ago
1.8 kB
7
Indexable
module ALU_Design(
input [7:0] A,B, // ALU 8-bit Inputs
input [3:0] ALU_Sel,// ALU Selection
output [7:0] ALU_Out, // ALU 8-bit Output
output CarryOut // Carry Out Flag
);

reg [7:0] ALU_Result;
wire [8:0] tmp;
assign ALU_Out = ALU_Result; // ALU out
assign tmp = {1'b0,A} + {1'b0,B};
assign CarryOut = tmp[8]; // Carryout flag
always @(*)
begin
case(ALU_Sel)

4'b0000: // Addition
ALU_Result = A + B ;

4'b0001: // Subtraction
ALU_Result = A - B ;

4'b0010: // Multiplication
ALU_Result = A * B;

4'b0011: // Division
ALU_Result = A / B;

4'b0100: // Logical shift left
ALU_Result = A<<1;

4'b0101: // Logical shift right
ALU_Result = A>>1;

4'b0110: // Rotate left
ALU_Result = {A[6:0],A[7]};

4'b0111: // Rotate right
ALU_Result = {A[0],A[7:1]};

4'b1000: // Logical and
ALU_Result = A & B;

4'b1001: // Logical or
ALU_Result = A | B;

4'b1010: // Logical xor
ALU_Result = A ^ B;

4'b1011: // Logical nor
ALU_Result = ~(A | B);

4'b1100: // Logical nand
ALU_Result = ~(A & B);

4'b1101: // Logical xnor
ALU_Result = ~(A ^ B);

4'b1110: // Greatercomparison
ALU_Result = (A>B)?8'd1:8'd0 ;

4'b1111: // Equal comparison
ALU_Result =(A==B)?8'd1:8'd0 ;

default: ALU_Result = A + B ;

endcase
end

endmodule

module TF;
integer i;
// Inputs
reg [7:0] a;
reg [7:0] b;
reg [3:0] s;

// Outputs
wire [7:0] yout;
wire cf;

// Instantiate the Unit Under Test (UUT)
ALU_Design uut (a, b, s, yout, cf);

initial begin
// Initialize inputs
a = 8'h0A;

b = 8'h02;
s = 4'h0;

// Perform operations with ALU_Sel from 0 to 15
for (i=0; i<=15; i=i+1)
begin
s = s + 1;
#10;
end
#10;
// Reassign inputs
a = 8'hF6;
b = 8'h0A;
s = 4'h0; // Reset ALU_Sel to 0
for ( i=0; i<=15; i=i+1)
begin
s = s + 1;
#10;
end

end
initial
begin
$dumpfile("dump.vcd");

$dumpvars(1);
end

endmodule
Editor is loading...
Leave a Comment