Q:
Implement a comparator using combinational logic, that compares two 2-bit numbers A and B. The comparator should have 3 outputs:
A > B, A < B, A = B.
A:
A1 A0 B1 B0 A>B B>A A=B
---------------------------------------------------
0 0 0 0 0 0 1
0 0 0 1 0 1 0
0 0 1 0 0 1 0
0 0 1 1 0 1 0
0 1 0 0 1 0 0
0 1 0 1 0 0 1
0 1 1 0 0 1 0
0 1 1 1 0 1 0
1 0 0 0 1 0 0
1 0 0 1 1 0 0
1 0 1 0 0 0 1
1 0 1 1 0 1 0
1 1 0 0 1 0 0
1 1 0 1 1 0 0
1 1 1 0 1 0 0
1 1 1 1 0 0 1
Here is the behavioral model of the comparator in verilog:
module comp0 (y1,y2,y3,a,b);
input [1:0] a,b;
output y1,y2,y3;
wire y1,y2,y3;
assign y1= (a >b)? 1:0;
assign y2= (b >a)? 1:0;
assign y3= (a==b)? 1:0;
endmodule
The gate level model:
module comp0 (y1,y2,y3,a,b);
input [1:0] a,b;
output y1,y2,y3;
wire y1,y2,y3;
wire xor1_out,xor2_out,nand1_out,nand2_out,nand3_out,nand4_out,or1_out,or2_out;
xor xor1 (xor1_out,a[0],b[0]);
xor xor2 (xor2_out,a[1],b[1]);
nand nand1(nand1_out,a[0],xor1_out);
nand nand2(nand2_out,b[0],xor1_out);
nand nand3(nand3_out,a[1],xor2_out);
nand nand4(nand4_out,b[1],xor2_out);
nand nand5(y1,or1_out,nand3_out);
nand nand6(y2,or2_out,nand4_out);
or or1 (or1_out,nand1_out,xor1_out);
or or2 (or2_out,nand2_out,xor1_out);
nor nor1 (y3,xor1_out,xor2_out);
endmodule
Please enable JavaScript to view the comments powered by Disqus.