📖 Scenario: You are working on a simple digital circuit that needs to shift bits in a binary number to the left or right. This is common in hardware design for tasks like multiplying or dividing by powers of two.
🎯 Goal: Build a Verilog module that uses shift operators to shift an 8-bit input number left and right by a fixed number of bits, then display the results.
📋 What You'll Learn
Create an 8-bit input register with a specific binary value
Create a 3-bit shift amount register
Use the left shift operator (<<) to shift the input left by the shift amount
Use the right shift operator (>>) to shift the input right by the shift amount
Display the original input, left shifted, and right shifted values
💡 Why This Matters
🌍 Real World
Shift operators are used in digital circuits for fast multiplication, division, and bit manipulation.
💼 Career
Understanding shift operators is essential for hardware engineers and FPGA/ASIC designers working with Verilog.
Progress0 / 4 steps
1
Create the input data
Create an 8-bit register called data_in and set it to the binary value 8'b10110011.
Verilog
Hint
Use reg [7:0] data_in = 8'b10110011; to create the 8-bit input.
2
Create the shift amount
Create a 3-bit register called shift_amt and set it to 3'b010 (which is decimal 2).
Verilog
Hint
Use reg [2:0] shift_amt = 3'b010; to create the shift amount.
3
Apply shift operators
Create two 8-bit wires called shift_left and shift_right. Assign shift_left to data_in shifted left by shift_amt using the << operator. Assign shift_right to data_in shifted right by shift_amt using the >> operator.
Verilog
Hint
Use wire [7:0] shift_left = data_in << shift_amt; and wire [7:0] shift_right = data_in >> shift_amt;.
4
Display the results
Write an initial block that uses $display to print the values of data_in, shift_left, and shift_right in binary format.
Verilog
Hint
Use initial block and $display with %b to print binary values.
Practice
(1/5)
1. What does the left shift operator << do to a binary number in Verilog?
easy
A. Moves bits to the left, multiplying the number by powers of 2
B. Moves bits to the right, dividing the number by powers of 2
C. Reverses the bits in the number
D. Sets all bits to zero
Solution
Step 1: Understand the left shift operator
The left shift operator << moves all bits in a binary number to the left by a specified number of positions.
Step 2: Effect on the number's value
Moving bits left multiplies the number by 2 for each position shifted.
Final Answer:
Moves bits to the left, multiplying the number by powers of 2 -> Option A
Quick Check:
Left shift = multiply by 2 [OK]
Hint: Left shift multiplies by 2 powers quickly [OK]
Common Mistakes:
Confusing left shift with right shift
Thinking it reverses bits
Assuming it clears bits
2. Which of the following is the correct syntax to shift a 4-bit register reg [3:0] a; two bits to the right in Verilog?
easy
A. a >>> 2;
B. a >> 2;
C. a << 2;
D. a >> 2 =;
Solution
Step 1: Identify the right shift operator syntax
In Verilog, the right shift operator is >> and is used as variable >> number_of_bits;.
Step 2: Check the options for correct syntax
a >> 2; uses a >> 2; which correctly shifts a two bits to the right. a << 2; is left shift, a >>> 2; is arithmetic right shift (signed), and a >> 2 =; has invalid syntax.
Final Answer:
a >> 2; -> Option B
Quick Check:
Right shift syntax = a >> number [OK]
Hint: Use >> for right shift, << for left shift [OK]
Common Mistakes:
Using left shift operator instead of right shift
Confusing logical and arithmetic shifts
Writing invalid syntax like assignment inside shift
3. Given reg [7:0] x = 8'b00011010; what is the value of x << 3 in binary?
medium
A. 8'b11010000
B. 8'b11010000000
C. 8'b00011010
D. 8'b00000000
Solution
Step 1: Understand the initial value and shift
The initial value is 00011010 (decimal 26). Left shifting by 3 moves bits 3 places left, adding zeros on the right.
Step 2: Perform the left shift
Shifting left by 3: 00011010 becomes 11010000 (the leftmost bits shifted out are lost, and zeros fill from right).
Final Answer:
8'b11010000 -> Option A
Quick Check:
Left shift 3 bits = 11010000 [OK]
Hint: Left shift drops left bits, adds zeros right [OK]
Common Mistakes:
Expecting longer bit width after shift
Not losing bits shifted out
Confusing left and right shift effects
4. What is wrong with this Verilog code snippet?
reg [3:0] a = 4'b1010;
reg [3:0] b;
b = a >> 5;
medium
A. Right shift operator should be << instead of >>
B. Syntax error due to missing semicolon
C. Shifting by more bits than width causes all zeros
D. Cannot assign shifted value to a register
Solution
Step 1: Analyze the shift amount vs register width
The register a is 4 bits wide. Shifting right by 5 bits exceeds its width.
Step 2: Effect of shifting more than width
Shifting more bits than the width results in all bits shifted out, so the result is zero.
Final Answer:
Shifting by more bits than width causes all zeros -> Option C
Quick Check:
Shift > width = zero result [OK]
Hint: Shift count > width clears all bits [OK]
Common Mistakes:
Thinking syntax error occurs
Confusing left and right shift operators
Believing assignment to register is invalid
5. You want to multiply a 6-bit unsigned number num by 8 using shift operators in Verilog. Which expression correctly does this without overflow?
hard
A. num >>> 3
B. num >> 3
C. num << 2
D. num << 3
Solution
Step 1: Understand multiplication by powers of 2 using shifts
Multiplying by 8 equals multiplying by 2^3, so shifting left by 3 bits achieves this.
Step 2: Check for overflow considerations
Since num is 6 bits, shifting left by 3 bits results in a 9-bit value. To avoid overflow, the result should be stored in a wider register. The expression num << 3 correctly multiplies by 8.
Final Answer:
num << 3 -> Option D
Quick Check:
Multiply by 8 = shift left 3 [OK]
Hint: Multiply by 8 = shift left 3 bits [OK]
Common Mistakes:
Using right shift instead of left shift
Using arithmetic right shift (>>>)
Shifting by wrong number of bits
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.