Chapter 2 Verilog Syntax, Structural Verilog and Timing (1)
Chapter 2 Verilog Syntax, Structural Verilog and Timing (1)
pail.phenikaa- thuan.levan@phenikaa-
Syllabus
pail.phenikaa- thuan.levan@phenikaa-
Administrative Matters
Reading
• [2] Chapter 3 (Basic Concepts – Verilog HDL)
• [2] Chapter 4 (module and port declaration, hierarchical naming)
• [2] Chapter 5 (structural module, gate primitives, delays)
• Slides Chapter 2 (Canvas)
Homework
• Homework 1
Project
• Team up and topic selection after Chapter 3
3
pail.phenikaa- thuan.levan@phenikaa-
Content
1.Comments
2.Numbers
3.Signals
4.Data Types
5.Parameters and Define
6.Structural Verilog
7.Module Ports
8.Timing and Delay
pail.phenikaa- thuan.levan@phenikaa-
1. Comments
Commenting is important
• In industry many other peoples are going to read your code
• Some people (perhaps you many years later) are going to have to
reference your code when a customer discovers a bug.
The best comments document why you are doing what you are
doing, not what you are doing
• Any people who knows Verilog can tell what the code is doing
• Comment why (motivation/thought process) you are doing that
thing
pail.phenikaa- thuan.levan@phenikaa-
1. Comments
pail.phenikaa- thuan.levan@phenikaa-
1. Comments
pail.phenikaa- thuan.levan@phenikaa-
2. Numbers
General format is: <size>’<base><number>
Examples:
• 4’b1101 // This is a 4-bit binary number equal to 13
• 10’h2e7 // This is a 10-bit wide number specified in hex
Available base:
• d = decimal (please only use in test benches)
• h = hex (use this frequently)
• b = binary (use this frequently for smaller #’s)
• o = octal (rarely, please avoid)
pail.phenikaa- thuan.levan@phenikaa-
2. Numbers
Numbers can have x or z characters as values
• x = unknown, z = High Impedance
• 12’h13x // 12-bit number with lower 4-bits unknown
If size is not specified then it depends on simulator/machine (must be
at least 32 bits).
• Always size the number for the Design Under Test (DUT) Verilog
Supports negative numbers as well
• -16’h3A // this would be -3A in hex (i.e. FFC6 in 2’s complement)
Underscore and question marks
• Underscore “_” is allowed anywhere except the first character. Example:
12’b1011_0011_0110
• Question mark “?” substitutes for x in the context of number.
9
pail.phenikaa- thuan.levan@phenikaa-
3. Signals
Identifiers are the names you choose for your signal
Some Rules
• Case sensitivity
• Start with alphabetic character or an underscore
• Can not start with a digit or a $
You should choose descriptive variable names and signal names.
• Use mixed case and/or _ to delimit descriptive names
• Have a convention for signals that active low
Many errors occur on the interface between blocks written by 2 or more different
people. One assumed a signal was active low, and the other assumed it was active high.
Use _n at the end of a signal to indicate active low
For example: rst_n = 1’b0 // active low reset signal 10
pail.phenikaa- thuan.levan@phenikaa-
3. Signals
Signals can have 1 of 4 values
pail.phenikaa- thuan.levan@phenikaa-
3. Signals
Resolving 4-Value Logic
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Nets
• Represent the connection between hardware element.
• Have values continuously driven on the outputs of the device they are
connected to.
• Declared primarily with keyword wire
• Default values are z.
b a
c
a=b&c
13
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Registers are storage nodes
• A variable that can hold a value until another value is place on it.
• Can be changed in simulation by assigning a new value
• Declared by the keyword reg.
• Default value is x.
14
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Registers are not necessarily flip-flops
• Do not confuse the term registers in Verilog with hardware registers.
• Verilog register do not need a clock as hardware register do.
• In your Design Unit Test (DUT) Verilog registers are typically flip-flops
• Anything assigned in an always or initial block must be assigned to a
register.
• A wire can connect with a reg, but a reg cannot.
• You will use registers in your testbenches, but they will not be flip-flops
15
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Vectors are a collection of wire or reg data types (i.e. 16-bit wide of
nets of reg data types)
Vector can be declared at [high# : low#] or [low# : high#], but the left
number is always the most significant bit (MSB) of the vectors
16
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Can be select parts of a vector (single bit or a range)
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Array
• Allows in Verilog for reg, integer, time, and vector register data types
and does not allow for real variables.
• <array_name>[<subscript>]
• Multidimensional arrays is not permitted.
• A vector is a single element that is n-bits wide, whereas arrays are
multiple elements that are 1-bit or n-bit wide.
18
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Integer
• General purpose register data type with the keyword integer
• Default width depends on the machine (usually al least 32-bit)
• reg can only stores unsigned values, whereas integer stores signed values
String
• Can be stored in reg. The width of the reg variables must be large enough to
hold the string
• Each character in the string takes up 8 bits (1 byte).
Time
• It is the simulation time with the keyword time.
• The system function $time get the current simulation time.
19
pail.phenikaa- thuan.levan@phenikaa-
4. Data Types
Can have multi-dimensional arrays
• reg [7:0] mem[0:99][0:3]; // what is this?
Often have a model memories
• SRAM, ROM, Flash, Cache
• Memories can be useful in your test bench
pail.phenikaa- thuan.levan@phenikaa-
5. Parameters and Define
Parameters are useful to make your code more generic/flexible.
Read about it in text.
`define statement can make code more readable
pail.phenikaa- thuan.levan@phenikaa-
5. Parameters and Define
pail.phenikaa- thuan.levan@phenikaa-
Useful System Tasks
$display : Like printf in C. Useful for testbenches and debug
pail.phenikaa- thuan.levan@phenikaa-
Primitives
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Any Verilog design you do will be a module
This includes testbenches!
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Build up a module from smaller pieces
Design: typically top-down
Verification: typically bottom-up
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Build up a module from smaller pieces
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
You can use other types of Verilog modules to build the structure
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Verilog Module Hierarchy
• Every module instance, signal, or variable is defined with an identifier.
The identifier can be declared only one time.
• A hierarchical name is a list identifiers separated by dots (“.”) for each
level of hierarchy.
• This is useful generally in testbench coding, in a somewhat backdoor way,
in a different module within your testbench.
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Parent cannot access “internal” signals of child
Can have all modules in a single file
• Module order doesn’t matter!
• Good for small designs
• Not so good for bigger ones
• Not so good for module reuse (cut & paste)
Can break up modules into multiple files
• Helps with organization
• Let’s you find a specific module easily
• Good for module reuse (add file to project)
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Connection: Positional or Connect by Order
• Can be okay in some situations
Designs with very few ports
Interchangeable input ports (and/or/xor gate inputs)
• Get confusing for large numbers of ports
pail.phenikaa- thuan.levan@phenikaa-
6. Structural Verilog
Connection: Explicit or Connect by name method
• Help avoid “misconnections”
• Don’t have to remember port order
• Can be easier to read
• .<port name>(signal name)
pail.phenikaa- thuan.levan@phenikaa-
7. Module Ports
Ports provide the interface by which a module can communicate with
other modules.
List of ports is an optional in a module. If the module does not exchange
signals with any, there are no ports in the list.
pail.phenikaa- thuan.levan@phenikaa-
7. Module Ports
All ports declarations are implicitly declared as wire.
Ports of the type input and inout cannot be declared as reg because
input ports should not store value.
input ports only reflect the changes in the external signals they are
connected to.
However, if output ports hold a value, they must be declared as reg.
inout ports must always be of the type wire and connected to a net.
Two items with different sizes can be connected but there is a
warning.
Verilog allows ports to remain unconnected.
pail.phenikaa- thuan.levan@phenikaa-
7. Module Ports
Example of illegal port connection
pail.phenikaa- thuan.levan@phenikaa-
8. Timing and Delay
Can put “delay” in a Verilog design
• Gates, wires, and behavior statements
Delays are useful for Simulation only!
• Used to approximate ”real” operation while simulating
• Used to control testbench
SYSTHESIS
• Systhesis tool IGNORES these timing controls
Cannot tell a gate to wait 1.5 nanoseconds
Delay is a results of physical properties
pail.phenikaa- thuan.levan@phenikaa-
8. Timing and Delay
When no timing controls specified: zeros delay
• Unrealistic – even electrons take time to move
• OUT is updated same time A and/or B change:
and A0(OUT, A, B);
Unit delay often used
• No accurate either, but closer ...
• “Depth” of circuit does affect speed!
• Easier to see how changes propagate through circuit
• OUT is updated 1 “unit” timing after A and/or B change:
and #1 A0(OUT, A, B);
pail.phenikaa- thuan.levan@phenikaa-
8. Timing and Delay
Example
pail.phenikaa- thuan.levan@phenikaa-
8. Timing and Delay
Types Of Delays: Inertial Delay (Gates)
• Suppresses pulses shorter than delay amount
• In reality, gates need to have inputs held a certain time before output
is accurate (hold time).
Types Of Delays: Transport Delay (Nets)
• “Time of flight” from source to sink
• Short pulses transmitted
Not critical for our project, however, in industry
pail.phenikaa- thuan.levan@phenikaa-
8. Timing and Delay
wire #5 net_1; // 5 unit transport delay
pail.phenikaa- thuan.levan@phenikaa-
Summary
Comments should show why you are doing what you are
doing, not what you are doing
<size>’<base><number>. Available base: d, h, b, o
Identify the components of a Verilog module definition such
as module names, port lists, comments, numbers, signals, and
parameter declaration.
Understand how to connect ports to external signals, by
ordered list, and by name
Hierarchy: design (top-down), verification (bottom-up)
pail.phenikaa- thuan.levan@phenikaa-