📖 Scenario: You are designing a simple digital circuit in Verilog. To simulate your design correctly, you need to specify the time unit and time precision using the timescale directive.
🎯 Goal: Learn how to write the timescale directive in Verilog to set the time unit and precision for simulation.
📋 What You'll Learn
Write the timescale directive with exact time unit and precision
Create a simple module named delay_example
Use a delay statement with the specified time unit
Print a message to show the delay effect
💡 Why This Matters
🌍 Real World
In digital design, the timescale directive helps simulate circuits with correct timing, which is crucial for verifying hardware behavior before manufacturing.
💼 Career
Understanding timescale is essential for hardware engineers and FPGA developers to write accurate testbenches and verify designs.
Progress0 / 4 steps
1
Add the timescale directive
Write the `timescale 1ns / 1ps directive at the top of your Verilog file.
Verilog
Hint
The timescale directive sets the time unit to 1 nanosecond and the time precision to 1 picosecond.
2
Create a simple module
Create a Verilog module named delay_example with no ports.
Verilog
Hint
Use module delay_example(); to start and endmodule to end the module.
3
Add a delay statement inside an initial block
Inside the delay_example module, add an initial block with a #10 delay statement followed by a $display statement printing "Delay finished".
Verilog
Hint
The #10; means wait for 10 time units (10 ns here).
4
Run the simulation and print the output
Run the simulation and print the output of the $display statement.
Verilog
Hint
When you run the simulation, after 10 ns delay, the message Delay finished will print.
Practice
(1/5)
1. What does the Verilog `timescale directive specify?
easy
A. The memory size for variables
B. The clock frequency of the design
C. The voltage levels for signals
D. The time unit and time precision for simulation
Solution
Step 1: Understand the purpose of `timescale
The `timescale directive defines how time is measured and how precise the simulation timing is.
Step 2: Identify what it controls
It sets the time unit (like 1ns) and the precision (like 1ps) for delays and timing in the simulation.
Final Answer:
The time unit and time precision for simulation -> Option D
Quick Check:
Timescale = time unit + precision [OK]
Hint: Timescale sets simulation time units and precision [OK]
Common Mistakes:
Confusing timescale with clock frequency
Thinking it sets voltage or memory size
Placing it inside a module instead of top of file
2. Which of the following is the correct syntax for setting a timescale of 1 nanosecond unit and 10 picoseconds precision?
easy
A. `timescale 1ns / 10ps
B. `timescale 10ps / 1ns
C. `timescale 1ns, 10ps
D. `timescale 1ns 10ps
Solution
Step 1: Recall the correct syntax format
The correct syntax uses a space after `timescale and a slash between unit and precision: `timescale time_unit / time_precision.
Step 2: Match the given options
`timescale 1ns / 10ps matches this format exactly: `timescale 1ns / 10ps. Others use commas or wrong order.
Final Answer:
`timescale 1ns / 10ps -> Option A
Quick Check:
Syntax = `timescale unit / precision [OK]
Hint: Use slash '/' between unit and precision in timescale [OK]
Common Mistakes:
Using comma instead of slash
Swapping unit and precision order
Omitting slash or space
3. Given the following code snippet, what is the delay time for #5 in real time?
`timescale 1ns / 1ps
module test;
initial begin
#5 $display("Delay reached");
end
endmodule
medium
A. 5 nanoseconds
B. 5 picoseconds
C. 1 nanosecond
D. Cannot determine from code
Solution
Step 1: Identify the timescale unit
The timescale is 1ns / 1ps, so the time unit is 1 nanosecond.
Step 2: Calculate the delay for #5
The delay #5 means 5 times the time unit, so 5 x 1ns = 5 nanoseconds.
Final Answer:
5 nanoseconds -> Option A
Quick Check:
Delay #5 x 1ns = 5ns [OK]
Hint: Delay number x time unit = real delay [OK]
Common Mistakes:
Confusing precision with time unit
Thinking delay is in picoseconds
Ignoring timescale directive
4. Identify the error in this Verilog code snippet:
`timescale 1ps / 1ns
module delay_test;
initial begin
#10 $display("Test delay");
end
endmodule
medium
A. Timescale directive uses wrong separator
B. Time unit and precision order is incorrect
C. Delay value #10 is invalid
D. No error, code is correct
Solution
Step 1: Check the timescale format
The timescale is `timescale 1ps / 1ns. The time unit should be larger or equal to precision, but here unit is 1ps and precision is 1ns, which is reversed.
Step 2: Understand the impact
This reversed order is invalid because precision cannot be larger than unit, causing simulation errors.
Final Answer:
Time unit and precision order is incorrect -> Option B
Quick Check:
Unit must be ≥ precision [OK]
Hint: Time unit must be equal or larger than precision [OK]
Common Mistakes:
Swapping unit and precision values
Ignoring timescale order rules
Assuming any order is valid
5. You want to simulate a design with delays specified in microseconds but need precision down to nanoseconds. Which `timescale directive should you use to achieve this?
hard
A. `timescale 1ns / 1us
B. `timescale 1us / 1ms
C. `timescale 1us / 1ns
D. `timescale 1ms / 1us
Solution
Step 1: Identify required time unit and precision
The design delays are in microseconds (us), so time unit should be 1us. The precision needed is nanoseconds (ns), which is smaller than microseconds.
Step 2: Choose correct timescale format
The timescale directive format is `timescale time_unit / time_precision. So it should be `timescale 1us / 1ns to have microsecond units and nanosecond precision.
Final Answer:
`timescale 1us / 1ns -> Option C
Quick Check:
Unit = us, Precision = ns [OK]
Hint: Unit bigger than precision, use `timescale unit / precision [OK]
Common Mistakes:
Swapping unit and precision
Using larger precision than unit
Choosing unrelated time units
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.