# NOR Gate as a Universal Gate

Updated: Aug 12

You might have already seen the basic #logicgates before arriving at this article. #NOR gate has a special property amongst the gates. It allows users to design any logical Boolean expression using NOR gates alone if composed properly. This property is practiced to #NAND gates also.

A NOR is nothing but a gate that gives an inverted output of the OR gate. Let us take a short peek at the gate and its #truthtable.

**Input A Input B Output Q **

** 0 0 1**

** 0 1 0**

** 1 0 0 **

** 1 1 0 **

So how does this implementation actually work? Dive in right away.

## NOT using NOR gate

This can be made by simply joining the two inputs of the NOR gate. Because a NOR gate is similar to an OR gate that leads to NOT gate, this immediately removes the "OR" part of the NOR gate, removing it from consideration and keeping just the NOT part.

The desired output of the NOT gate is **Q** = NOT( **A** ).

The implementation of the NOT gate using the NOR gate is **A **NOR **A**.

## OR gate using NOR gate

The NOR gate is the inverted #circuit of an OR gate. So if we invert the NOR gate again, there it is, back to the OR gate. Check out the implementation for more clarity.

The expected output of the OR gate is **Q** = **A** OR **B**.

The implementation of the OR gate using NOR gates is { **A** NOR **B** } NOR { **A** NOR **B** }.

AND gate using NOR gate

The output of the AND gate is TRUE only if both the inputs are TRUE. So, AND is implemented by inverting the inputs of the NOR gate.

The desired output of the AND gate is **Q** = **A** AND **B**.

The actual implementation of AND gates using NOR gates is { **A** NOR **A** } NOR { **B** NOR **B** }.

## NAND gate using NOR gate

We already saw how to implement AND using NOR gates. NAND is the inversion of AND gate and can be implemented by adding another NOR gate to reverse the output. Sounds pretty easy right?

The desired implementation of the NAND gate is **Q** = **A** NAND **B**.

The actual implementation of the NAND gate using NOR gates is [ ( **A** NOR **A** ) NOR ( **B** NOR **B** ) ] NOR [ ( **A** NOR **A** ) NOR ( **B** NOR **B** ) ].

## XNOR using NOR gates

#XNOR gate can be implemented using NOR gates in two ways; one using 4 gates and other using 5 gates.

The desired implementation of the XNOR gate **Q** = **A** XNOR **B**.

First, let us take a look at the implementation that is most commonly used.

Here the output will be: -

**{ B** NOR ( **A **NOR **B** ) } **NOR { A** NOR ( **A** NOR **B** ) } .

There is also a conjunctive normal form that is often used. This is derived from DeMorgan's law and requires 5 nor gates for the implementation.

Here the output will be: -

**{ A** NOR ( **B** NOR **B** ) **}** **NOR{ B** NOR ( **A** NOR **A** ) **}.**

## XOR using NOR gates

XOR gate gives a TRUE output when an odd number of inputs are TRUE. This circuit can also be in two ways.

The desired output of the XOR gate is **Q** = **A** XOR **B**.

The first implementation of XOR requires the use of 5 NOR gates.

The output of the implementation is as: -

{ ( **A** NOR **A** ) NOR ( **B** NOR **B** ) } **NOR **( **A** NOR **B** )

There is also a version of XOR using NOR gates that is often used as it has a cleaner circuit.

It is done by adding an inverter to an XNOR implementation using 4 gates.

{ **A** NOR ( **A** NOR **B** ) ] NOR

[ **B** NOR ( **A** NOR **B** ) ] } NOR

{ [ **A** NOR ( **A** NOR **B** ) ]

NOR [ **B** NOR ( **A** NOR **B** ) }

**Hence we understand that any boolean circuit can be implemented using NOR gates alone. Try doing some of the ****#booleanexpressions**** by yourself using ****these implementations****.**

DRAFTJS_BLOCK_KEY:27f38You might have already seen the basic