**8-bit Magnitude Comparator: Comparing Binary Numbers**

An 8-bit magnitude comparator is a circuit that compares two 8-bit binary values and produces a 1-bit flag as a result, indicating whether the first value is greater than, less than, or equal to the second value. The block diagram of the comparator is shown in Figure 1. In Verilog, the `reg`

data type is treated as an unsigned integer number of the specified width. Therefore, a comparison like 0 and -5 results in (0 < -5). This is because the 2’s complement representation of -5 is 251, and indeed 0 is less than 251.

**Truth Table for 8-bit Magnitude Comparator**

The truth table for the 8-bit magnitude comparator is shown in Figure 2. The comparator takes two 8-bit input signals, `A`

and `B`

, and compares their magnitudes. The three 1-bit output signals are `A < B`

, `A = B`

, and `A > B`

.

**General Truth Tabel:**

The truth table for a 4-bit magnitude comparator:

A (4-bit) | B (4-bit) | A > B | A < B | A = B |
---|---|---|---|---|

0000 | 0000 | 0 | 0 | 1 |

0000 | 0001 | 0 | 1 | 0 |

0000 | 0010 | 0 | 1 | 0 |

0000 | 0011 | 0 | 1 | 0 |

0000 | 0100 | 0 | 1 | 0 |

0000 | 0101 | 0 | 1 | 0 |

… | … | … | … | … |

1111 | 1110 | 1 | 0 | 0 |

1111 | 1111 | 0 | 0 | 1 |

In the truth table, `A`

and `B`

represent two 4-bit binary numbers being compared. The output `A > B`

is 1 (True) if `A`

is greater than `B`

, otherwise 0 (False). Similarly, `A < B`

is 1 (True) if `A`

is less than `B`

, otherwise 0 (False). Finally, `A = B`

is 1 (True) if `A`

is equal to `B`

, otherwise 0 (False). The table shows all possible combinations of inputs and their corresponding comparison results for a 4-bit magnitude comparator.

**Verilog Module: 8-bit Magnitude Comparator**

Figure 3 displays the Verilog module for the 8-bit magnitude comparator. The module has two 8-bit input ports, `In1`

and `In2`

, and three 1-bit output ports, `Gt`

, `Lt`

, and `Eq`

.

**Verilog Code for 8-bit Magnitude Comparator **

module magComp (

input [7:0] In1,

input [7:0] In2,

output Gt,

output Lt,

output Eq

);

reg Gt, Lt, Eq;

always @ (In1 or In2) // Check the state of the input lines

begin

Gt <= (In1 > In2) ? 1’b1 : 1’b0;

Lt <= (In1 < In2) ? 1’b1 : 1’b0;

Eq <= (In1 == In2) ? 1’b1 : 1’b0;

end

endmodule

**Verilog Test Bench: 8-bit Magnitude Comparator**

The Verilog test bench for the 8-bit magnitude comparator is demonstrated in Figure 5. It tests the functionality of the comparator by providing stimulus to the input ports (`In1`

and `In2`

) and observing the output ports (`Gt`

, `Lt`

, and `Eq`

)

module magComp_tb;

// Inputs

reg [7:0] In1;

reg [7:0] In2;

// Outputs

wire Gt;

wire Lt;

wire Eq;

// Instantiate the Unit Under Test (UUT)

magComp uut (

.In1(In1),

.In2(In2),

.Gt(Gt),

.Lt(Lt),

.Eq(Eq)

);

initial begin

// Initialize Inputs

In1 = 8’b0;

In2 = 8’b0;

// Wait 100 ns for global reset to finish

#100;

// Add stimulus here

In1 = 8’d8;

In2 = 8’d7;

#20;

In1 = 8’d100;

In2 = 8’d120;

#20;

In1 = 8’d250;

In2 = 8’d250;

#20;

In1 = 8’d0;

In2 = -8’d5;

#20;

In1 = -8’d5;

In2 = -8’d5;

#20;

end

endmodule

**Timing Diagram for 8-bit Magnitude Comparator**

Following figure presents the timing diagram of the 8-bit magnitude comparator, illustrating the waveforms of the output signals `Gt`

, `Lt`

, and `Eq`

as the input numbers are compared.

The 8-bit magnitude comparator is an important component in digital systems, used to make decisions based on the relative magnitudes of binary numbers. The provided Verilog module and test bench ensure accurate and reliable comparison of 8-bit values.