In digital electronics, a collection of flip-flops, which are memory elements, is known as a register. Shift registers are special types of registers. Using shift registers we can shift data through a series of flip-flops. In brief, shift registers are sequential logic circuits, where a series of flip-flops are connected together in a daisy chain configuration to shift digital data from one flip-flop to another with every clock cycle.
Shift registers are built using D flip-flops. If we connect four flip-flops in the configuration of a shift register, we get a 4-bit shift register. Generally, 8-bit (1 byte) shift registers are common. However, in this post, we will take a look at the different types of shift registers using only 4-bits or four flip-flops.
How do shift registers move data?
We can feed and extract data to and from a shift register in two ways:
- Serially: Data enters the cascade of flip-flops in a stream. Each bit passes through the cascade in a line. We get the data output at the last flip-flop. The output is in the same order as the input.
- Parallel: Each flip-flop can have its own input. This particular setting of giving input is known as parallel input. Similarly, each flip-flop can have its own output too. This is parallel output.
So we have two ways in which data can ‘flow’ through a shift register. We can classify shift registers depending on these two data flow methods. Doing that, we get four main configurations. The types of inputs and outputs of these four categories are evident from their names.
- Serial In Serial Out shift register
- Serial In Parallel Out shift register
- Parallel In Parallel Out shift register
- Parallel In Serial Out shift register
So to quickly summarize a few things. Shift registers are a series of flip-flops connected together through which data shifts. They have four main types. The difference between these four types lies in the way we input and output data to/from them.
Apart from inputs and outputs, shift registers also have a clock input and a reset signal. The reset signal clears the contents of all the flip-flops. Additionally, since the clock input is given to all the flip-flops simultaneously, shift registers are also synchronous circuits.
What are the uses of shift registers?
Since a shift register comprises of flip-flops, we can use them for the following general purposes
- To shift data – Shift registers can shift data either to the right, to the left or in both directions. In this post, we will look at shift registers where the data moves in the right direction.
- To store data – The flip-flops shift data on the application of a clock pulse. In the absence of a clock pulse, the shift register holds that data.
- To produce a delay – The data can stay inside the shift register or pass through it. Either way, the processes consume some clock cycles. So we can use them to introduce some delay if we need it.
- To convert between serial-parallel – Since we have both serial and parallel types of inputs and outputs, we can use shift registers to convert serial data to parallel or vice versa.
How to design a 4-bit Serial In Serial Out shift register (SISO)?
Okay, so we know that we have 4 D flip-flops. All of them have the same clock input. And all of them have the same reset input. Since we have a serial input, we will take only one input port. This input port is to the first flip-flop in the register. Similarly, since we are taking the output serially. We will have only one output which will be taken at the output pin of the last flip-flop. From the above configuration, our SISO shift register will look like this.
From the property of the D flip-flop, when we input a 1-bit signal “1”, it will be present at D1 flip-flops output at the rising edge of the first clock cycle. In the next clock cycle it will be taken as input by the D2 flip-flop and will be available at Q2 output and so on. Furthermore, at the fourth clock pulse, we will get the 1-bit data “1” at the output Q4, having undergone a successful shift.
How to design a 4-bit Serial In Parallel Out shift register (SIPO)?
Let’s take the four D flip-flops and take outputs from each individual flip-flop. That covers the parallel out part. Give a single input to the first flip-flop. Similarly, take a single output from the last flip-flop. Connect all the remaining flip-flops’ outputs to their subsequent flip-flops’ input. That settles the serial input part. Finally, apply the clock and the reset signal and voila you have your 4-bit SIPO shift register.
How to design a 4-bit Parallel in Parallel Out shift register (PIPO)?
Again repeating the same approach we saw earlier, we will go ahead with cues from the title. Let’s straightaway connect the output ports (Q ports) of the D flip-flops to the output pins. The name suggests that we have parallel inputs too. Hence, we will connect the input ports (D ports) of the flip-flops to the input pins. Eventually, we will connect the clock ports to the clock input and the reset ports to the reset inputs. The resulting logic circuit for the 4-bit PIPO shift register is as follows.
How to design a 4-bit Parallel in Serial Out shift register (PISO)?
Things get a little bit tricky here. Mostly due to the fact that we need to share ports in order to achieve this configuration. The title requires us to have parallel inputs, which means that all the D ports will have their own independent input lines. And the title also requires us to have serial outputs. From the preceding designs, we have seen that a serial output means that data has to be taken out from only the final flip-flop. Moreover, the data needs to move through the series of flip-flops. This means that the outputs of flip-flops (Q ports) will also need to be connected to the inputs (D ports) of their subsequent flip-flops. This puts us in a pickle.
Dealing with multiple inputs
The input ports need their separate input line as well as a connection from the previous flip-flops. How can we give two distinct signals to the same port? What can we use that would allow us to select from one of the two inputs that need to be given to the flip-flops?
The answer is a multiplexer. A 2:1 multiplexer will allow us to choose between two inputs. So moving on to the construction of the PISO shift register. To begin with, let’s connect all the clock inputs and reset signals to their respective inputs.
Then we know that we have a serial output so let’s connect the output of the last flip-flop to the output pin. The first flip-flop also does not need a serial input because there is no preceding flip-flop. So let’s give it its solitary input port. The remaining three flip-flops will have their inputs connected to the outputs of three multiplexers.
Let’s go ahead and make that connection. Now, the multiplexers have two inputs. The first is the independent input that we require because we are making a parallel input shift register. Second, the output of the preceding flip-flop since we need a serial shift of data to get a serial output.
The multiplexers also need a select input so that will be one extra input port. From the above configurations, we finally get a logic circuit for the 4-bit PISO shift register that looks like this.
Some commonly available shift registers
Commonly available Shift Register ICs (source)
Generally shift registers are available in 4000 series and 7000 series ICs.
- IC 4006 18 stage Shift register.
- IC 4014 8-stage shift register.
- IC 4015 Dual 4-stage shift register.
- IC 4021 8-bit static shift register.
- IC 40104 4 bit bidirectional Parallel-in/Parallel-out PIPO Shift Register.
- IC 40195 4-bit universal shift register.
- IC 7491 8-bit shift register, serial-in, serial-out, gated input.
- IC 7495 4-bit shift register, parallel in, parallel-out, serial input.
- IC 7496 5-bit parallel-In/parallel-out shift register, asynchronous preset.
- IC 7499 4-bit bidirectional universal shift register.
- IC 74164 8-bit parallel-out serial shift register with asynchronous.
- IC 74165 8-bit serial shift register, parallel Load, complementary outputs.
- IC 74166 parallel-Load 8-bit shift register.
- IC 74194 4-bit bidirectional universal shift register.
- IC 74198 8-bit bidirectional universal shift register.
- IC 74199 8-bit bidirectional universal shift register with J-Not-K serial inputs.
- IC 74291 4-bit universal shift register, binary up/down counter, synchronous.
- IC 74395 4-bit universal shift register with three-state outputs.
- IC 74498 8-bit bidirectional shift register with parallel inputs and three-state outputs.
- IC 74671 4-bit bidirectional shift register.
- IC 74673 16-bit serial-in serial-out shift register with output storage registers.
- IC 74674 16-bit parallel-in serial-out shift register with three-state outputs.
In these ICs, mostly used are
- 74HC595 Serial-In-Parallel-Out shift register
- 74HC165 Parallel-In-Serial-Out shift register
- 74HC 194 4-bit bidirectional universal shift register
- 74HC 198 8-bit bidirectional universal shift register