You are on page 1of 7

//arithmetic

module arithmetic
(input [3:0] A, B,
output logic [4:0] Q1,
output logic [3:0] Q2, Q3,
output logic [7:0] Q4);
always_comb
begin
assert(A^B!==4'bx) else $warning("Input is xx");
Q1 = A + B; //addition
Q2 = A - B; //subtraction
Q3 = A / 2; //division
Q4 = A * B; //multiplication
end
endmodule
//test bench-arithmetic
module arithmetic_tb();
logic [3:0] A, B;
logic [4:0] Q1;
logic [3:0] Q2, Q3;
logic [7:0] Q4;
arithmetic DUT(.*);
initial
begin
$fmonitor( $fopen("./arithmetic.txt"),"A B Q1 Q2 Q3 Q4");
$fdisplay( $fopen("./arithmetic.txt"),"A=%b B=%b Q1=%b Q2=%b Q3=%b
Q4=%b", A, B, Q1, Q2, Q3, Q4);
end
initial
repeat(20)
begin
A = $urandom_range(4'b1111);
B = $urandom_range(4'b1111);
#10 $display("A=%b B=%b Q1=%b Q2=%b Q3=%b Q4=%b", A, B, Q1, Q2, Q3,
Q4);
end
endmodule
OUTPUT:
A=0011
A=1101
A=0111
A=0101
A=1000
A=1100
A=1011
A=0100

B=0000
B=0010
B=0001
B=1100
B=1100
B=1011
B=0101
B=1100

Q1=00011
Q1=01111
Q1=01000
Q1=10001
Q1=10100
Q1=10111
Q1=10000
Q1=10000

Q2=0011
Q2=1011
Q2=0110
Q2=1001
Q2=1100
Q2=0001
Q2=0110
Q2=1000

Q3=0001
Q3=0110
Q3=0011
Q3=0010
Q3=0100
Q3=0110
Q3=0101
Q3=0010

Q4=00000000
Q4=00011010
Q4=00000111
Q4=00111100
Q4=01100000
Q4=10000100
Q4=00110111
Q4=00110000

A=0111
A=1010
A=0011
A=1100
A=1011
A=0011
A=1100
A=1001
A=1010
A=1000
A=0110
A=0000

B=1100
B=0110
B=1101
B=1000
B=1011
B=1101
B=0110
B=1001
B=1110
B=1101
B=0110
B=1011

Q1=10011
Q1=10000
Q1=10000
Q1=10100
Q1=10110
Q1=10000
Q1=10010
Q1=10010
Q1=11000
Q1=10101
Q1=01100
Q1=01011

Q2=1011
Q2=0100
Q2=0110
Q2=0100
Q2=0000
Q2=0110
Q2=0110
Q2=0000
Q2=1100
Q2=1011
Q2=0000
Q2=0101

Q3=0011
Q3=0101
Q3=0001
Q3=0110
Q3=0101
Q3=0001
Q3=0110
Q3=0100
Q3=0101
Q3=0100
Q3=0011
Q3=0000

Q4=01010100
Q4=00111100
Q4=00100111
Q4=01100000
Q4=01111001
Q4=00100111
Q4=01001000
Q4=01010001
Q4=10001100
Q4=01101000
Q4=00100100
Q4=00000000

/////////////////////////////////////////////////////////////////////////
//////////
/////////////////////////////////////////////////////////////////////////
//////////
module mux4to1
( input c, d ,e ,f,
input [1:0] s,
output logic MUX_OUT);
always_comb
begin
assert(^s!==1'bx)
else $warning("Select is x");
case (s)
2'b00
: MUX_OUT = c;
2'b01
: MUX_OUT = d;
2'b10
: MUX_OUT = e;
default : MUX_OUT = f;
endcase
end
endmodule
//test bench
module mux4to1_tb();
bit c, d ,e ,f;
logic [1:0] s;
logic MUX_OUT;
mux4to1 DUT(.*);
initial
begin
$fmonitor( $fopen("./mux4to1.txt"),"s MUX_OUT");
$fdisplay( $fopen("./mux4to1.txt"),"s=%b MUX_OUT=%b",
end
initial
repeat(50)
begin
c= $random();

s, MUX_OUT);

d= $random();
e= $random();
f= $random();
s= $random();
#10 $display("s=%b MUX_OUT=%b",
end
endmodule
OUTPUT:
s=01
s=01
s=01
s=11
s=00
s=01
s=10
s=11
s=01
s=00
s=00
s=10
s=01
s=01
s=11
s=00
s=11
s=00
s=01
s=00
s=00
s=10
s=11
s=10
s=01
s=10
s=01
s=10
s=00
s=01
s=10
s=01
s=11
s=01
s=10
s=10
s=10
s=00
s=11
s=01
s=01
s=11
s=01
s=10

MUX_OUT=1
MUX_OUT=1
MUX_OUT=1
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=1
MUX_OUT=1
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=1
MUX_OUT=0
MUX_OUT=1
MUX_OUT=0
MUX_OUT=1
MUX_OUT=1
MUX_OUT=1
MUX_OUT=1
MUX_OUT=0
MUX_OUT=1
MUX_OUT=1
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=1
MUX_OUT=0
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0

s, MUX_OUT);

s=01
s=11
s=10
s=10
s=10
s=11

MUX_OUT=1
MUX_OUT=1
MUX_OUT=0
MUX_OUT=0
MUX_OUT=0
MUX_OUT=1

/////////////////////////////////////////////////////////////////////////
//////
/////////////////////////////////////////////////////////////////////////
//////
module relational
(input [3:0] A, B,
output logic Q1, Q2, Q3, Q4);
always_comb
begin
// Q1 = A > B; //greater than
// Q2 = A < B; //less than
// Q3 = A >= B; //greater than equal to
assert(A^B!=4'bx)
else $warning("Input is xxxx");
if (A <= B) //less than equal to
Q4 = 1;
else
Q4 = 0;
end
endmodule
//test bench
module relational_tb();
logic [3:0] A, B;
logic Q1, Q2, Q3, Q4;
relational DUT(.*);
initial
begin
$fmonitor( $fopen("./relational.txt"),"A B Q1 Q2 Q3 Q4");
$fdisplay( $fopen("./relational.txt"),"A=%b B=%b Q1=%b Q2=%b Q3=%b
Q4=%b", A, B, Q1, Q2, Q3, Q4);
end
intial
begin
A= $random();
B= $random();
#10 $display("A=%b B=%b Q1=%b Q2=%b Q3=%b Q4=%b", A, B, Q1, Q2, Q3,
Q4);
end
endmodule

/////////////////////////////////////////////////////////////////////////
//////////////////////
/////////////////////////////////////////////////////////////////////////
//////////////////////
//Tristate
module TRISTATE (
input logic a, e,
output logic y
);
always_comb
begin
assert (^e !== 1'bx)
else ("input data e = X")
if (e)
y <= a;
else
y <= 1'bz;
end
endmodule
/////////////////////////////////////////////////////////////////////////
////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////
//Shift Operation
module shift (
input logic [3:0] data,
output logic [3:0] q1, q2
);
parameter B = 2;
always_comb
begin
assert (^data !== 1'bx)
else ("input data = X")
q1 = data << B; // logical shift left
q2 = data >> B; //logical shift right
end
endmodule
/////////////////////////////////////////////////////////////////////////
//////////////////
/////////////////////////////////////////////////////////////////////////
//////////////////
//Relational Operation

module relational (
input logic [3:0] A, B,
output logic Q1, Q2, Q3, Q4
);
always _comb
begin
assert (^{A, B} !== 1'bx)
else ("inputs = X")
//
//
//
if

Q1 = A > B; //greater than


Q2 = A < B; //less than
Q3 = A >= B; //greater than equal to
(A <= B) //less than equal to
Q4 = 1;
else
Q4 = 0;

end
endmodule
/////////////////////////////////////////////////////////////////////////
/////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////
module example_1 (
input logic ifcond, a, b,
output logic if_out
);
always_comb
begin
assert (^ifcond !== 1'bx)
else $error("ifcond = X");
if (ifcond)
if_out = a;
else
if_out = b;
end
endmodule
/////////////////////////////////////////////////////////////////////////
///////////////
/////////////////////////////////////////////////////////////////////////
///////////////
module
ALU_behav(
output logic [3:0] data_out,
output logic cout,
input logic [3:0] x, y,

input logic [2:0] select


);
parameter ADD = 3'b000,
SUB = 3'b001,
INR = 3'b010,
DCR = 3'b011,
CMP = 3'b100,
AND = 3'b101,
OR = 3'b110,
XOR = 3'b111;
always_comb
begin
assert (^select !== 1'bx)
else ("select = X")
case(select)
ADD: {cout, data_out} = x + y;
SUB: {cout, data_out} = x - y;
INR: {cout, data_out} = x + 1'b1;
DCR: {cout, data_out} = x - 1'b1;
CMP: begin data_out = ~x; cout = 1'b0; end
AND: begin data_out = x & y; cout = 1'b0; end
OR: begin data_out = x | y; cout = 1'b0; end
XOR: begin data_out = x ^ y; cout = 1'b0; end
endcase
end
endmodule
/////////////////////////////////////////////////////////////////////////
//////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////
////////

You might also like