/////////////////////////////////////////////////////////////////////////////////////
// Author : Sidharth
//Permission : This code only for educational purpose only
//contact :sidharth.sankar77@gmail.com
//////////////////////////////////////////////////////////////////////////////
module alu (op,a,b,c_log_arith);
output reg [3:0] op; //output of alu
input [3:0] a,b; //inputs to alu
input [1:0] c_log_arith;//control signal for logical/arithmatic operation
always @(*)
begin
case (c_log_arith)
2'b00 : begin op = a + b; $display("Addition operation"); end
2'b01 : begin op = a - b; $display("Subtraction operation"); end
2'b10 : begin op = ~(a & b); $display("logical NAND operation"); end
2'b11 : begin op = a ^ b; $display("Logical XOR operation"); end
default:op = 4'bXXXX;
endcase
end
endmodule
----------------------------------------------
test bench// Author : Sidharth
//Permission : This code only for educational purpose only
//contact :sidharth.sankar77@gmail.com
//////////////////////////////////////////////////////////////////////////////
module alu (op,a,b,c_log_arith);
output reg [3:0] op; //output of alu
input [3:0] a,b; //inputs to alu
input [1:0] c_log_arith;//control signal for logical/arithmatic operation
always @(*)
begin
case (c_log_arith)
2'b00 : begin op = a + b; $display("Addition operation"); end
2'b01 : begin op = a - b; $display("Subtraction operation"); end
2'b10 : begin op = ~(a & b); $display("logical NAND operation"); end
2'b11 : begin op = a ^ b; $display("Logical XOR operation"); end
default:op = 4'bXXXX;
endcase
end
endmodule
----------------------------------------------
-----------------------------------------------
`timescale 1ns/1ps
module alu_tst;
reg [3:0] a,b;
reg [1:0] c_log_arith;
wire [3:0] op;
alu u1 (.op(op), .a(a), .b(b) , .c_log_arith(c_log_arith));
initial
begin
a=4'b0011;
b=4'b1101;
c_log_arith=2'b00;
#100;
a=4'b1101;
b=4'b1111;
c_log_arith=2'b01;
#100;
a=4'b0011;
b=4'b1100;
c_log_arith=2'b10;
#100;
a=4'b1110;
b=4'b0100;
c_log_arith=2'b11;
#100;
a=4'b0111;
b=4'b1001;
c_log_arith=2'b00;
#100;
a=4'b1111;
b=4'b1111;
c_log_arith=2'b01;
#100;
a=4'b1011;
b=4'b1101;
c_log_arith=2'b10;
#100;
a=4'b1110;
b=4'b0111;
c_log_arith=2'b11;
#100
$stop;
end
endmodule
0 comments:
Post a Comment