What is the primary function of a comparator in digital design?
A comparator compares two binary numbers and outputs signals indicating if one number is greater than, less than, or equal to the other.
Click to reveal answer
beginner
In Verilog, which operator is commonly used to compare two values for equality?
The '==' operator is used to check if two values are equal in Verilog.
Click to reveal answer
intermediate
Explain the difference between combinational and sequential comparator designs.
Combinational comparators produce outputs immediately based on inputs without memory, while sequential comparators use clocked elements and can store comparison results over time.
Click to reveal answer
beginner
What is the output of a 2-bit comparator when inputs A=2'b10 and B=2'b01?
Since A (2) is greater than B (1), the comparator outputs 'A > B' signal as true, and 'A < B' and 'A == B' as false.
Click to reveal answer
beginner
Write a simple Verilog snippet to compare two 4-bit inputs A and B and output if A is greater than B.
module comparator_4bit(input [3:0] A, input [3:0] B, output reg A_gt_B);
always @(*) begin
A_gt_B = (A > B);
end
endmodule
Click to reveal answer
Which Verilog operator checks if two values are not equal?
A==
B<=
C>=
D!=
✗ Incorrect
The '!=' operator checks if two values are not equal in Verilog.
What type of comparator outputs signals immediately based on inputs without using a clock?
ASynchronous comparator
BSequential comparator
CCombinational comparator
DAsynchronous memory
✗ Incorrect
Combinational comparators produce outputs immediately based on inputs without clock or memory.
In a comparator, if A equals B, which output signal should be true?
AA == B
BA < B
CA > B
DNone
✗ Incorrect
When A equals B, the 'A == B' output signal is true.
What is the output of the expression (4'b1010 > 4'b1001) in Verilog?
A1 (true)
B0 (false)
CUndefined
DError
✗ Incorrect
4'b1010 (decimal 10) is greater than 4'b1001 (decimal 9), so the expression evaluates to true (1).
Which Verilog construct is best to use for a combinational comparator?
Aalways @(posedge clk)
Balways @(*)
Cinitial block
Dalways @(negedge clk)
✗ Incorrect
The 'always @(*)' block is used for combinational logic like comparators.
Describe how a simple 2-bit comparator works and what outputs it produces.
Think about comparing two small numbers and signaling which is bigger or if they are equal.
You got /3 concepts.
Explain how you would implement a 4-bit comparator in Verilog using combinational logic.
Focus on how to write code that checks inputs and sets outputs without a clock.
You got /3 concepts.
Practice
(1/5)
1.
What is the main purpose of a comparator in Verilog?
easy
A. To store data temporarily
B. To check if one number is greater, less, or equal to another
C. To add two numbers together
D. To generate clock signals
Solution
Step 1: Understand comparator function
A comparator compares two values to determine their relationship.
Step 2: Identify correct purpose
Only To check if one number is greater, less, or equal to another describes comparing numbers, which is the comparator's job.
Final Answer:
To check if one number is greater, less, or equal to another -> Option B
Quick Check:
Comparator = Compare numbers [OK]
Hint: Comparator compares values, not adds or stores [OK]
Common Mistakes:
Confusing comparator with adder
Thinking comparator stores data
Mixing comparator with clock generator
2.
Which of the following is the correct way to start an always block for a comparator that reacts to changes in inputs a and b?
easy
A. always @(a, b) begin
B. always @(posedge clk) begin
C. always @(a and b) begin
D. always @(a or b) begin
Solution
Step 1: Understand sensitivity list syntax
In Verilog, sensitivity list uses 'or' to list signals that trigger the block.
Step 2: Check options
always @(a or b) begin uses 'or' correctly. always @(a, b) begin uses comma which is not valid in Verilog sensitivity lists.
Final Answer:
always @(a or b) begin -> Option D
Quick Check:
Sensitivity list uses 'or' between signals [OK]
Hint: Use 'or' between signals in sensitivity list [OK]
Common Mistakes:
Using commas instead of 'or' in sensitivity list
Using 'and' instead of 'or'
Using clock edge when not needed
3.
Given the following Verilog code snippet, what will be the output signals gt, lt, and eq if a = 5 and b = 3?
module comp(input [3:0] a, b, output reg gt, lt, eq);
always @(a or b) begin
if (a > b) begin
gt = 1; lt = 0; eq = 0;
end else if (a < b) begin
gt = 0; lt = 1; eq = 0;
end else begin
gt = 0; lt = 0; eq = 1;
end
end
endmodule
medium
A. gt=0, lt=0, eq=1
B. gt=0, lt=1, eq=0
C. gt=1, lt=0, eq=0
D. gt=1, lt=1, eq=0
Solution
Step 1: Compare values a=5 and b=3
Since 5 is greater than 3, the condition 'a > b' is true.
Step 2: Determine output signals
For 'a > b', gt=1, lt=0, eq=0 as per code.
Final Answer:
gt=1, lt=0, eq=0 -> Option C
Quick Check:
5 > 3 means gt=1 [OK]
Hint: Check which condition is true first [OK]
Common Mistakes:
Mixing up greater than and less than
Setting multiple outputs to 1 incorrectly
Ignoring else conditions
4.
Identify the error in this comparator code snippet:
module comp(input [3:0] a, b, output reg gt, lt, eq);
always @(a, b) begin
if (a > b)
gt = 1; lt = 0; eq = 0;
else if (a < b)
gt = 0; lt = 1; eq = 0;
else
gt = 0; lt = 0; eq = 1;
end
endmodule
medium
A. Missing begin-end blocks after if and else if
B. Incorrect sensitivity list syntax
C. Output signals should be wires, not regs
D. Using non-blocking assignments instead of blocking
Solution
Step 1: Check if-else statement structure
Multiple statements after if need to be grouped with begin-end blocks.
Step 2: Identify missing begin-end
Here, multiple assignments after if and else if lack begin-end, causing syntax errors.
Final Answer:
Missing begin-end blocks after if and else if -> Option A
Quick Check:
Multiple statements need begin-end [OK]
Hint: Use begin-end for multiple statements in if blocks [OK]
Common Mistakes:
Forgetting begin-end with multiple statements
Confusing sensitivity list syntax
Wrong data type for outputs
5.
You want to design a 4-bit comparator that sets gt high if a > b, lt high if a < b, and eq high if equal. However, you also want to ignore the comparison if either a or b is zero (all bits zero), setting all outputs low in that case. Which Verilog code snippet correctly implements this?
hard
A. always @(a or b) begin
if (a == 0 || b == 0) begin
gt = 0; lt = 0; eq = 0;
end else if (a > b) begin
gt = 1; lt = 0; eq = 0;
end else if (a < b) begin
gt = 0; lt = 1; eq = 0;
end else begin
gt = 0; lt = 0; eq = 1;
end
end
B. always @(a or b) begin
if (a == 0 && b == 0) begin
gt = 0; lt = 0; eq = 0;
end else if (a > b) begin
gt = 1; lt = 0; eq = 0;
end else if (a < b) begin
gt = 0; lt = 1; eq = 0;
end else begin
gt = 0; lt = 0; eq = 1;
end
end
C. always @(a or b) begin
if (a != 0 && b != 0) begin
if (a > b) begin
gt = 1; lt = 0; eq = 0;
end else if (a < b) begin
gt = 0; lt = 1; eq = 0;
end else begin
gt = 0; lt = 0; eq = 1;
end
end else begin
gt = 0; lt = 0; eq = 0;
end
end
D. always @(a or b) begin
if (a == 0 || b == 0) begin
gt = 1; lt = 1; eq = 1;
end else if (a > b) begin
gt = 1; lt = 0; eq = 0;
end else if (a < b) begin
gt = 0; lt = 1; eq = 0;
end else begin
gt = 0; lt = 0; eq = 1;
end
end
Solution
Step 1: Understand the zero check condition
The requirement is to ignore comparison if either a or b is zero, so use 'a == 0 || b == 0'.
Step 2: Verify output assignments
always @(a or b) begin
if (a == 0 || b == 0) begin
gt = 0; lt = 0; eq = 0;
end else if (a > b) begin
gt = 1; lt = 0; eq = 0;
end else if (a < b) begin
gt = 0; lt = 1; eq = 0;
end else begin
gt = 0; lt = 0; eq = 1;
end
end sets all outputs low when either input is zero, then compares normally otherwise.
Final Answer:
Option A code snippet -> Option A
Quick Check:
Use '||' to check either zero, outputs low [OK]
Hint: Use '||' to check either zero, set outputs low [OK]
Common Mistakes:
Using '&&' instead of '||' for zero check
Setting outputs high when inputs are zero
Not handling zero inputs separately
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.