A module is the basic building block in Verilog. It defines a hardware block with inputs, outputs, and internal logic.
Click to reveal answer
beginner
How do you declare a module in Verilog?
Use the keyword module followed by the module name and port list, then end with endmodule.
Click to reveal answer
beginner
What are ports in a Verilog module?
Ports are the inputs and outputs of a module. They connect the module to other parts of the design.
Click to reveal answer
intermediate
Can a module contain other modules inside it?
Yes, modules can be instantiated inside other modules to build complex designs from simple blocks.
Click to reveal answer
beginner
Why are modules important in Verilog?
Modules help organize code, reuse designs, and make hardware easier to understand and build.
Click to reveal answer
What keyword starts a module declaration in Verilog?
Amodule
Bbegin
Centity
Dblock
✗ Incorrect
The keyword module is used to declare a module in Verilog.
Which of these is NOT a port direction in a Verilog module?
Ainput
Boutput
Cinout
Dinternal
✗ Incorrect
internal is not a port direction; ports can be input, output, or inout.
What keyword ends a module definition?
Aendmodule
Bend
Cfinish
Dclose
✗ Incorrect
Modules end with the keyword endmodule.
Can modules be reused in other modules?
AOnly in testbenches
BNo, each module is unique
CYes, by instantiating them
DOnly if they have no ports
✗ Incorrect
Modules can be reused by instantiating them inside other modules.
What is the main purpose of using modules in Verilog?
ATo write software programs
BTo organize and reuse hardware design
CTo create user interfaces
DTo compile code faster
✗ Incorrect
Modules help organize and reuse hardware design blocks.
Explain what a Verilog module is and why it is important.
Think about how hardware blocks connect and work together.
You got /3 concepts.
Describe the basic syntax to declare a Verilog module with inputs and outputs.
Remember the start and end keywords and how ports are listed.
You got /4 concepts.
Practice
(1/5)
1.
What is the main purpose of a module in Verilog?
easy
A. It defines a reusable block of hardware design.
B. It runs software programs inside the chip.
C. It stores data permanently like a hard drive.
D. It controls the power supply of the circuit.
Solution
Step 1: Understand what a module represents
A module in Verilog is a block that describes hardware behavior or structure.
Step 2: Identify the purpose of modules
Modules help organize and reuse hardware design parts, not software or power control.
Final Answer:
It defines a reusable block of hardware design. -> Option A
Quick Check:
Module = reusable hardware block [OK]
Hint: Modules are like building blocks for hardware [OK]
Common Mistakes:
Thinking modules run software code
Confusing modules with memory storage
Assuming modules control power
2.
Which of the following is the correct way to start and end a Verilog module named my_module?
?
easy
A. start my_module; finish
B. module my_module(); endmodule
C. begin my_module() end
D. module: my_module() endmodule:
Solution
Step 1: Recall Verilog module syntax
A module starts with the keyword module followed by the module name and ends with endmodule.
Step 2: Check each option
module my_module(); endmodule uses correct keywords and syntax. Others use invalid keywords or punctuation.
Final Answer:
module my_module(); endmodule -> Option B
Quick Check:
module ... endmodule = correct syntax [OK]
Hint: Modules always start with 'module' and end with 'endmodule' [OK]
Common Mistakes:
Using wrong keywords like start or finish
Missing parentheses after module name
Adding colons or semicolons incorrectly
3.
What will be the output of the following Verilog module when input_a = 1 and input_b = 0?
module simple_and(input input_a, input input_b, output reg out);
always @(*) begin
out = input_a & input_b;
end
endmodule
medium
A. out = input_b
B. out = 1
C. out = input_a
D. out = 0
Solution
Step 1: Understand the operation inside the module
The module assigns out as the AND of input_a and input_b.
Step 2: Calculate the AND of inputs
Given input_a = 1 and input_b = 0, 1 & 0 = 0.
Final Answer:
out = 0 -> Option D
Quick Check:
1 AND 0 = 0 [OK]
Hint: AND output is 1 only if both inputs are 1 [OK]
Common Mistakes:
Assuming output equals one input directly
Confusing AND with OR operation
Ignoring that output is reg type
4.
Identify the error in this Verilog module code:
module faulty_module(input a, input b, output reg c);
always @(*) begin
c = a | b
end
endmodule
medium
A. Wrong sensitivity list in always block.
B. Incorrect use of 'reg' for output.
C. Missing semicolon after assignment inside always block.
D. Module name should be capitalized.
Solution
Step 1: Check syntax inside always block
The assignment c = a | b is missing a semicolon at the end.
Step 2: Verify other parts
Using reg for output is correct; sensitivity list @(*) is valid; module names can be lowercase.
Final Answer:
Missing semicolon after assignment inside always block. -> Option C
Quick Check:
Statements inside always need semicolons [OK]
Hint: Always end statements inside always block with semicolon [OK]
Common Mistakes:
Forgetting semicolon after assignment
Thinking output cannot be reg
Believing sensitivity list must list signals explicitly
5.
You want to create a Verilog module named counter that counts from 0 to 3 repeatedly using a 2-bit output count. Which module header and port declaration is correct?
hard
A. module counter(input clk, output reg [1:0] count); endmodule
B. module counter(output reg [2:0] count, input clk); endmodule
C. module counter(input clk, output [1:0] count); endmodule
D. module counter(input clk, output reg count[1:0]); endmodule
Solution
Step 1: Identify correct port order and types
The clock input clk should be input, and count is a 2-bit register output, declared as output reg [1:0] count.
Step 2: Check each option
module counter(input clk, output reg [1:0] count); endmodule correctly declares ports and types. module counter(output reg [2:0] count, input clk); endmodule has wrong bit width. module counter(input clk, output [1:0] count); endmodule misses reg for output assigned inside always block. module counter(input clk, output reg count[1:0]); endmodule uses incorrect syntax for bus declaration.