EE-421: Digital System Design
Introduction to Verilog
Acknowledgements
• The material used in this slide-set contain material/illustrations
from Prof. Milo Martin, Andy Phelps, Prof. Stephen brown, Prof.
Steve Wilton and Prof. Onur Mutlu.
2
Where are we Heading?
3
How to Deal with This Complexity?
• A fact of life in computer engineering
– Need to be able to specify complex designs
▪ communicate with others in your design group
– … and to simulate their behavior
▪ yes, it’s what I want to build
– … and to synthesize (automatically design) portions of it
▪ have an error-free path to implementation
5
How to Describe a Design?
• Two Ways:
– Schematic – Draw a picture
– Hardware Description Language – Standardized text-based description
• Why text is better?
– More scalable
– Easier to store
– Easier to search
– Easier for revision control
– Easier to standardize
– Can leverage automated
tools (more on this later)
• All these benefits of HDLs have lead to higher engineer
productivity
• Practically ALL digital design is now done with HDLs
6
HDLs History
• Abel (circa 1983) - developed by Data-I/O
– targeted to programmable logic devices (PLAs, PALs etc.)
– not good for much more than state machines
• ISP (circa 1977) - research project at CMU
– simulation, but no synthesis
• VHDL (circa 1987) - DoD sponsored standard
– “V” is for “VHSIC” (very high speed integrated circuit)
– similar to Ada (emphasis on re-use and maintainability)
– very general but verbose
– IEEE standard
• Verilog (circa 1985) - developed by Gateway (now part of Cadence)
– similar to Pascal and C
– fairly efficient and easy to write
– 1995: adopted as IEEE standard [1364-1995]
– 2001: Revised to an enhanced version [1364-2001]
– 2002 – 2009: efforts to add support for “hardware verification”
– System-Verilog: combined Hardware Description language [HDL] and
Hardware Verification Language [HVL]. IEEE [1800-2017]
7
What are we going to use in this course?
• We’ll use Verilog HDL in this course to express our
circuits.
• Verilog is not perfect!
– But then, neither is the X86 instruction set!
– And it’s nowhere near that bad.
– In fact, it’s pretty good…
▪ If you know what to watch out for.
8
So, about Verilog
• Verilog is a (surprisingly) big language
– Lots of features for synthesis and simulation of hardware
– Can represent low-level features, e.g. individual transistors
– Can act like a programming language, with “for” loops etc.
– Daunting task to learn all of its features
• We’re going to learn a focused subset of Verilog
– We will use it at a level (behavioral) appropriate for digital
design
– Focus on synthesizable constructs
– Focus on avoiding subtle synthesis errors
– Initially restrict some features just because they aren’t
necessary
11
Before we start, Remember one lesson
• HDLs are NOT “programming languages”
– No, really. Even if they look like it, they are not.
– For many people, a difficult conceptual leap
• Hardware is not Software
– Software is sequential
– In a program, we start at the beginning (e.g. “main”), and we
proceed sequentially through the code as directed
– The program represents an algorithm, a step-by-step sequence
of actions to solve some problem
for (i = 0; i<10; i=i+1) {
if (newPattern == oldPattern[i]) match = i;
}
– Hardware is all active at once; there is no starting point
• The magic is NOT in the language;
– It’s in your express-i-bility!
• Verilog is case sensitive
– K is not the same as k
12
FPGA CAD
Synthesis
Placement
Routing
Timing Analysis
bitstream
(.sof file)
14
What Happens with HDL Code?
• Synthesis
– Modern tools are able to map synthesizable HDL code
into
low-level cell libraries → netlist describing gates and wires
– They can perform many optimizations
– … however they can not guarantee that a solution is
optimal
▪ Mainly due to computationally expensive placement and
routing algorithms
– Most common way of Digital Design these days
• Simulation
– Allows the behavior of the circuit to be verified without
actually manufacturing the circuit
– Simulators can work on structural or behavioral HDL
15
Verilog Module
16
Defining a Module in Verilog
• A module is the main building block in Verilog
• We first need to define:
– Name of the module
– Directions of its ports (e.g., input, output)
– Names of its ports
• Then:
– Describe the functionality of the module
a
Verilog
b example y
Module
c
inputs output
17
Implementing a Module in Verilog
a
Verilog
b example y
Module
c
name of Port list
module (inputs and outputs)
module example (a, b, c, y);
ports have a
input a;
declared type
input b;
input c;
output y; a module
definition
// here comes the circuit description
endmodule
18
A Question of Style
• The following two codes are functionally identical
module test ( a, b, y ); module test ( input a,
input a; input b,
input b; output y );
output y;
endmodule
endmodule
port name and direction declaration
can be combined
19
What If We Have Multi-bit Input/Output?
• You can also define multi-bit Input/Output (Bus)
– [range_end : range_start]
– Number of bits: range_end – range_start + 1
• Example:
input [31:0] a; // a[31], a[30] .. a[0]
output [15:8] b1; // b1[15], b1[14] .. b1[8]
output [7:0] b2; // b2[7], b2[6] .. b2[0]
input c; // single signal
• a represents a 32-bit value, so we prefer to define it as:
[31:0] a
• It is preferred over [0:31] a which resembles array definition
• It is good practice to be consistent with the representation of
multi-bit signals, i.e., always [31:0] or always [0:31]
20
Basic Syntax
• Verilog is case sensitive
– SomeName and somename are not the same!
• Names cannot start with numbers:
– 2good is not a valid name
• Whitespaces are ignored
// Single line comments start with a //
/* Multiline comments
are defined like this */
21