Professional Documents
Culture Documents
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
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,