Truth Table:
| A1 |
A0 |
B1 |
B0 |
X(A=B) |
Y(A>B) |
Y(A<B) |
| 0 |
0 |
0 |
0 |
1 |
0 |
0 |
| 0 |
0 |
0 |
1 |
0 |
0 |
1 |
| 0 |
0 |
1 |
0 |
0 |
0 |
1 |
| 0 |
0 |
1 |
1 |
0 |
0 |
1 |
| 0 |
1 |
0 |
0 |
0 |
1 |
0 |
| 0 |
1 |
0 |
1 |
1 |
0 |
0 |
| 0 |
1 |
1 |
0 |
0 |
0 |
1 |
| 0 |
1 |
1 |
1 |
0 |
0 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
0 |
| 1 |
0 |
0 |
1 |
0 |
1 |
0 |
| 1 |
0 |
1 |
0 |
1 |
0 |
0 |
| 1 |
0 |
1 |
1 |
0 |
0 |
1 |
| 1 |
1 |
0 |
0 |
0 |
1 |
0 |
| 1 |
1 |
0 |
1 |
0 |
1 |
0 |
| 1 |
1 |
1 |
0 |
0 |
1 |
0 |
| 1 |
1 |
1 |
1 |
1 |
0 |
0 |
Boolean Expression:
X = (A1 XNOR B1).(A0 XNOR B0)
Y = A1(B1') + (A1 XNOR B1).(A0.(B0'))
Z = (A1')(B1) + (A1 XNOR B1).(A0').B0))
CODE:
module twoBitComparator(tbc_eq, tbc_lt, tbc_gt, A, B);
input[1:0] A, B;
output tbc_lt, tbc_gt, tbc_eq;
wire lt1, gt1, eq1,lt2, gt2, eq2,t1,t2,t3;
oneBitComparator c1(lt1, gt1, eq1, A[0], B[0]);
oneBitComparator c2(lt2, gt2, eq2, A[1], B[1]);
and andmain1(tbc_eq,eq1,eq2);
and andmain3(t2,eq2,gt1);
or ormain2(tbc_gt,t2,gt2);
and andmain2(t1,eq2,lt1);
or ormain1(tbc_lt,t1,lt2);
endmodule
module oneBitComparator(lt, gt, eq, A, B);
input A, B;
output lt, gt, eq;
lt l1(lt, A, B);
gt g1(gt, A, B);
eq e1(eq, A, B);
endmodule
module lt(lt_out, lt_a, lt_b);
input lt_a, lt_b;
output lt_out;
wire temp;
not n1(temp,lt_b);
and a1(lt_out, lt_a, temp);
endmodule
module gt(gt_out, gt_a, gt_b);
input gt_a, gt_b;
output gt_out;
wire temp;
not n2(temp,gt_a);
and a2(gt_out, temp, gt_b);
endmodule
module eq(eq_out, eq_a, eq_b);
input eq_a, eq_b;
output eq_out;
xnor x1 (eq_out, eq_a, eq_b);
endmodule
Testbench:
module twoBitComapratorTB;
reg [1:0] x,y;
wire greater,less,equal;
twoBitComparator DUT(.tbc_eq(equal),.tbc_lt(less),.tbc_gt(greater),.A(x),.B(y));
initial
begin
#0 x=2'b00; y=2'b00;
#10 x=2'b00; y=2'b01;
#20 x=2'b00; y=2'b10;
#30 x=2'b00; y=2'b11;
#40 x=2'b01; y=2'b00;
#50 x=2'b01; y=2'b01;
#60 x=2'b01; y=2'b10;
#70 x=2'b01; y=2'b11;
#80 x=2'b10; y=2'b00;
#90 x=2'b10; y=2'b01;
#100 x=2'b10; y=2'b10;
#110 x=2'b10; y=2'b11;
#120 x=2'b11; y=2'b00;
#130 x=2'b11; y=2'b01;
#140 x=2'b11; y=2'b10;
#150 x=2'b11; y=2'b11;
end
initial
begin
$monitor("X0X1 = %b%b, Y0Y1 = %b%b, Equal=%b, Less=%b, Greater=%b", x[1],x[0],y[1],y[0],equal,less,greater);
end
initial
begin
$dumpfile("twoBitComapratorTB.vcd");
$dumpvars(0,twoBitComapratorTB);
end
endmodule
Output:
X0X1 = 00, Y0Y1 = 00, Equal=1, Less=0, Greater=0
X0X1 = 00, Y0Y1 = 01, Equal=0, Less=0, Greater=1
X0X1 = 00, Y0Y1 = 10, Equal=0, Less=0, Greater=1
X0X1 = 00, Y0Y1 = 11, Equal=0, Less=0, Greater=1
X0X1 = 01, Y0Y1 = 00, Equal=0, Less=1, Greater=0
X0X1 = 01, Y0Y1 = 01, Equal=1, Less=0, Greater=0
X0X1 = 01, Y0Y1 = 10, Equal=0, Less=0, Greater=1
X0X1 = 01, Y0Y1 = 11, Equal=0, Less=0, Greater=1
X0X1 = 10, Y0Y1 = 00, Equal=0, Less=1, Greater=0
X0X1 = 10, Y0Y1 = 01, Equal=0, Less=1, Greater=0
X0X1 = 10, Y0Y1 = 10, Equal=1, Less=0, Greater=0
X0X1 = 10, Y0Y1 = 11, Equal=0, Less=0, Greater=1
X0X1 = 11, Y0Y1 = 00, Equal=0, Less=1, Greater=0
X0X1 = 11, Y0Y1 = 01, Equal=0, Less=1, Greater=0
X0X1 = 11, Y0Y1 = 10, Equal=0, Less=1, Greater=0
X0X1 = 11, Y0Y1 = 11, Equal=1, Less=0, Greater=0
Simulation: