What is Bidirectional Shift Register : Working & Its Applications

A flip flop (FF) is a device used mainly for storing a single binary data bit either 0 or 1. But to store several bits of data, we require several FFs. So n-bits of data can be stored by connecting a number of flip-flops. A Register is a set of FFs which are connected in series for storing multiple data bits. The data which is stored in these types of registers can be transmitted through shift registers. A shift register (SR) is one kind of digital circuit that includes a set of FFs wherever the first flip flop’s output pin is connected to the second FF’s data input pin because all FFs simply work on a similar clock, then the array bit can be stored within the register will move by a single position. There are different types of shift registers like SISO, SIPO, PIPO, PIPO, and Bidirectional shift registers. This article discusses an overview of a bidirectional shift register – working with applications.

What is a Bidirectional Shift Register?

The register which is used to shift the data on the right side or left side based on the selected mode is known as the bidirectional shift register. If the selected mode is high (1), then the data will be moved to the right side & if the selected mode is low (0), then data will be moved to the left side.

Here, if we move a binary number (base two) to the left side, it is to multiply the number by 2 and if we shift the same binary number to the right side by 1 position, it is equal to dividing the number with 2. To execute these operations, we require a register to shift the data in any direction.

Bidirectional Shift Register Circuit Diagram

A bidirectional Shift register is used for shifting data either in right or left side based on the input. This register can be implemented through a D flip flop and logic gates which allow the data bit to transfer from one stage to the next stage to any side either right or left based on an input signal. Here, the direction of data shifting is selected by the mode control.

Bidirectional Shift Register Circuit
Bidirectional Shift Register Circuit

If we utilize the shift register for multiplying & dividing the data, we can shift the binary input data by right or left position then it is known as a bidirectional shift register.

How Does a Bidirectional Shift Register Work?

The bidirectional shift register mainly includes two serial i/ps like the data input with serial right shift (DR) and the data input with serial left shift (DL) with a select mode input (M). Whenever the data needs to shift on the right side then input is given to the DR. Similarly, if the data needs to shift on the left side then input is given from DL.


When a mode control has a high signal then it allows the data to shift to the right side whereas the mode signal has a low signal then it shifts the data to the left side. If the i/p data is shifted left with 1 position then it is multiplied by 2 and if i/p data is shifted right with1 position, it is divided by 2.

Truth Table

The bidirectional shift register works in two conditions M=1 and M=0 which are discussed in the following bidirectional shift register truth table.



If the mode select i/p like M = 1, next the operation, is shifted right. If Mode control = High (1), then 1st, 3rd, 5th & 7th AND logic gates are enabled & the remaining 2nd, 4th, 6th & 8th AND gates are not enabled.

The binary data on serial right shift data input (DR) can be moved to the right bit side through a bit from flip flop3 to flip flop0 on the CLK pulses application. So for M = 1 condition, we can attain the serial shift right operation.

If the mode select i/p like M = 0, then the operation is shifted left. If mode control = Low (0) then 2nd, 4th, 6th & 8th AND gates are enabled and 1st, 3rd, 5th & 7th AND gates are disabled.

The data on the serial left shift data i/p (DL) is moved left bit side through a bit from Flip Flop0 to Flip Flop3 on the CLK pulses application. So for M = 0 conditions, we can obtain the serial shift left operation.

Bidirectional Shift Register Verilog Code

The verilog code for n- bit bidirectional shift register is shown below.

module shift_reg #(parameter MSB = 8) ( input d, // Declare input for data to the first flipflop in the shift register

input clk, // Declare i/p for the clock to all flops in the shift register

input en, //Declare i/p for enable to switch the shift register on or off

input dir, //Declare i/p to shift in either right or left direction

input rstn, // Declare input to reset the register to a default value

output reg [MSB-1:0] out; // Declare o/p to read out the current value of all flipflops in this register

// This always block will “always” be triggered on the rising edge of the clock

// Once it enters the block, it will first check to see if reset is 0 and if yes, then reset register

// If no, then check to see if the shift register is enabled

// If no => maintain previous output. If yes, then shift based on the requested direction

always @ (posedge clk)

if (!rstn)

out <= 0;

else begin

if (en)

case (dir)

0 : out <= {out[MSB-2:0], d};

1 : out <= {d, out[MSB-1:1]};



out <= out;



Difference between Unidirectional and Bidirectional Shift Register

The difference between a Unidirectional Shift Register and the Bidirectional Shift Register is discussed below.

Unidirectional Shift Register

Bidirectional Shift Register

This shift register is used to shift the bits in one direction only. This shift register is used to shift the bits in both directions only.
A parallel load is not possible. A parallel load may be possible.


The applications of the bidirectional shift register include the following.

  • These types of registers are the storage devices used for shifting the data either right otherwise left based on the preferred mode.
  • These registers are broadly used in several applications like digital low-dropout regulators, digital DC
  • These shift registers are used in DC buck converters, digital delay-locked loops & decompressors.
  • These are used for transferring data and storing data temporarily.
  • These registers are used in calculators, computers, etc.

Thus, this is all about an overview of the bidirectional shift register –working with applications. The most frequently used bidirectional shift register ICs are; 74498IC, 74194IC, and 74671IC. The movement of data in this type of register is in both directions like from right to left and left to right. Here is a question for you, what is the SIPO shift register?