[go: up one dir, main page]

0% found this document useful (0 votes)
83 views64 pages

EEL 4783: HDL in Digital System Design: Lecture 2: The Verilog Language

The document provides an overview of the Verilog hardware description language. It discusses that Verilog can be used for both structural and behavioral modeling of digital circuits. For structural modeling, Verilog allows modeling circuits as netlists of gates and their connections. For behavioral modeling, it uses initial and always blocks to model circuit behavior over time. The document describes various Verilog language constructs like modules, ports, primitives, continuous assignments, nets, regs, and four-value logic.

Uploaded by

sal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
83 views64 pages

EEL 4783: HDL in Digital System Design: Lecture 2: The Verilog Language

The document provides an overview of the Verilog hardware description language. It discusses that Verilog can be used for both structural and behavioral modeling of digital circuits. For structural modeling, Verilog allows modeling circuits as netlists of gates and their connections. For behavioral modeling, it uses initial and always blocks to model circuit behavior over time. The document describes various Verilog language constructs like modules, ports, primitives, continuous assignments, nets, regs, and four-value logic.

Uploaded by

sal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 64

EEL 4783: HDL in Digital System Design

Lecture 2: The Verilog Language


*

Prof. Mingjie Lin

* Based on Prof. Stephen A. Edwards’s talk 1


The Verilog Language

•  Originally a modeling language for a very efficient


event-driven digital logic simulator
•  Currently as a specification language for logic
synthesis
•  Two most commonly-used languages in digital
hardware design: Verilog and VHDL
•  Foundational tool for all chip designs including FPGA,
ASIC, etc.

•  Verilog is very power and descriptive, can model


digital circuits at various abstraction levels: structural
and behavioral modeling styles
2
Structural Modeling

•  When Verilog was first developed (1984) most logic


simulators operated on netlists
•  Netlist: list of gates and how they’re connected
•  A natural representation of a digital logic circuit

•  Not the most convenient way to express test benches

3
Behavioral Modeling

•  A much easier way to write testbenches


•  Also good for more abstract models of circuits
–  Easier to write
–  Simulates faster
•  More flexible
•  Provides sequencing

•  Verilog succeeded in part because it allowed both the


model and the testbench to be described together

4
How Verilog Is Used

•  Virtually every ASIC is designed using either Verilog


or VHDL (a similar language)
•  Behavioral modeling with some structural elements
•  “Synthesis subset”
–  Can be translated using Synopsys’ Design Compiler or
others into a netlist

•  Design written in Verilog


•  Simulated to death to check functionality
•  Synthesized (netlist generated)
•  Static timing analysis to check timing

5
Two Main Components of Verilog

•  Concurrent, event-triggered processes (behavioral)


–  Initial and Always blocks
–  Imperative code that can perform standard data
manipulation tasks (assignment, if-then, case)
–  Processes run until they delay for a period of time or wait for
a triggering event

•  Structure (Plumbing)
–  Verilog program build from modules with I/O interfaces
–  Modules may contain instances of other modules
–  Modules contain local signals, etc.
–  Module configuration is static and all run concurrently

6
Two Main Data Types

•  Nets represent connections between things


–  Do not hold their value
–  Take their value from a driver such as a gate or other module
–  Cannot be assigned in an initial or always block

•  Regs represent data storage


–  Behave exactly like memory in a computer
–  Hold their value until explicitly assigned in an initial or always
block
–  Never connected to something
–  Can be used to model latches, flip-flops, etc., but do not
correspond exactly
–  Shared variables with all their attendant problems
7
Discrete-event Simulation

•  Basic idea: only do work when something changes


•  Centered around an event queue
–  Contains events labeled with the simulated time at which
they are to be executed
•  Basic simulation paradigm
–  Execute every event for the current simulated time
–  Doing this changes system state and may schedule events
in the future
–  When there are no events left at the current time instance,
advance simulated time soonest event in the queue

8
Four-valued Data

•  Verilog’s nets and registers hold four-valued data

•  0, 1
–  Obvious
•  Z
–  Output of an undriven tri-state driver
–  Models case where nothing is setting a wire’s value
•  X
–  Models when the simulator can’t decide the value
–  Initial state of registers
–  When a wire is being driven to 0 and 1 simultaneously
–  Output of a gate with Z inputs

9
Four-valued Logic

•  Logical operators work on three-valued logic

0 1 X Z

Output 0 if one input is 0


0 0 0 0 0
1 0 1 X X
X 0 X X X
Output X if both inputs are
Z 0 X X X gibberish

10
Structural Modeling

11
Nets and Registers

•  Wires and registers can be bits, vectors, and arrays

wire a; // Simple wire


tri [15:0] dbus; // 16-bit tristate bus
tri #(5,4,8) b; // Wire with delay
reg [-1:4] vec; // Six-bit register
trireg (small) q; // Wire stores a small charge
integer imem[0:1023]; // Array of 1024 integers
reg [31:0] dcache[0:63]; // A 32-bit memory

12
Modules and Instances

•  Basic structure of a Verilog module:

module mymod(output1, output2, … input1, input2);


output output1;
output [3:0] output2;
Verilog convention lists
input input1; outputs first
input [2:0] input2;

endmodule

13
Instantiating a Module

•  Instances of

module mymod(y, a, b);

•  look like

mymod mm1(y1, a1, b1); // Connect-by-position


mymod (y2, a1, b1),
(y3, a2, b2); // Instance names omitted
mymod mm2(.a(a2), .b(b2), .y(c2)); // Connect-by-name

14
Gate-level Primitives

•  Verilog provides the following:

and nand logical AND/NAND


or nor logical OR/NOR
xor xnor logical XOR/XNOR
buf not buffer/inverter
bufif0 notif0 Tristate with low enable
bifif1 notif1 Tristate with high enable

15
Delays on Primitive Instances

•  Instances of primitives may include delays

buf b1(a, b); // Zero delay


buf #3 b2(c, d); // Delay of 3
buf #(4,5) b3(e, f); // Rise=4, fall=5
buf #(3:4:5) b4(g, h); // Min-typ-max

16
User-Defined Primitives

•  Way to define gates and sequential elements using a


truth table
•  Often simulate faster than using expressions,
collections of primitive gates, etc.
•  Gives more control over behavior with X inputs
•  Most often used for specifying custom gate libraries

17
A Carry Primitive

primitive carry(out, a, b, c);


output out; Always have exactly one
output
input a, b, c;
table
00? : 0; Truth table may include don’t-
0?0 : 0; care (?) entries

?00 : 0;
11? : 1;
1?1 : 1;
?11 : 1;
endtable
endprimitive

18
A Sequential Primitive

Primitive dff( q, clk, data);


output q; reg q;
input clk, data;
table
// clk data q new-q
(01) 0 : ? : 0; // Latch a 0
(01) 1 : ? : 1; // Latch a 1
(0x) 1 : 1 : 1; // Hold when d and q both 1
(0x) 0 : 0 : 0; // Hold when d and q both 0
(?0) ? : ? : -; // Hold when clk falls
? (??) : ? : -; // Hold when clk stable
endtable
endprimitive
19
Continuous Assignment

•  Another way to describe combinational function


•  Convenient for logical or datapath specifications

Define bus widths


wire [8:0] sum;
wire [7:0] a, b; Continuous assignment:
wire carryin; permanently sets the value of
sum to be a+b+carryin
Recomputed when a, b, or
assign sum = a + b + carryin; carryin changes

20
Behavioral Modeling

21
Initial and Always Blocks

•  Basic components for behavioral modeling


initial always
begin begin
… imperative statements … … imperative statements …
end end

Runs when simulation starts Runs when simulation starts


Terminates when control reaches the end Restarts when control reaches the end
Good for providing stimulus Good for modeling/specifying hardware

22
Initial and Always

•  Run until they encounter a delay

initial begin
#10 a = 1; b = 0;
#10 a = 0; b = 1;
end

•  or a wait for an event

always @(posedge clk) q = d;


always begin wait(i); a = 0; wait(~i); a = 1; end

23
Procedural Assignment

•  Inside an initial or always block:

sum = a + b + cin;

•  Just like in C: RHS evaluated and assigned to LHS


before next statement executes

•  RHS may contain wires and regs


–  Two possible sources for data
•  LHS must be a reg
–  Primitives or cont. assignment may set wire values

24
Imperative Statements

if (select == 1) y = a;
else y = b;

case (op)
2’b00: y = a + b;
2’b01: y = a – b;
2’b10: y = a ^ b;
default: y = ‘hxxxx;
endcase

25
For Loops

•  A increasing sequence of values on an output

reg [3:0] i, output;

for ( i = 0 ; i <= 15 ; i = i + 1 ) begin


output = i;
#10;
end

26
While Loops

•  A increasing sequence of values on an output

reg [3:0] i, output;

i = 0;
while (I <= 15) begin
output = i;
#10 i = i + 1;
end

27
Modeling A Flip-Flop With Always

•  Very basic: an edge-sensitive flip-flop

reg q;

always @(posedge clk)


q = d;

•  q = d assignment runs when clock rises: exactly the


behavior you expect

28
Blocking vs. Nonblocking

•  Verilog has two types of procedural assignment

•  Fundamental problem:
–  In a synchronous system, all flip-flops sample
simultaneously
–  In Verilog, always @(posedge clk) blocks run in some
undefined sequence

29
A Flawed Shift Register

•  This doesn’t work as you’d expect:

reg d1, d2, d3, d4;

always @(posedge clk) d2 = d1;


always @(posedge clk) d3 = d2;
always @(posedge clk) d4 = d3;

•  These run in some order, but you don’t know which

30
Non-blocking Assignments
Nonblocking rule:
RHS evaluated when
•  This version does work: assignment runs

reg d1, d2, d3, d4;

always @(posedge clk) d2 <= d1;


always @(posedge clk) d3 <= d2;
always @(posedge clk) d4 <= d3;

LHS updated only after all events


for the current instant have run

31
Nonblocking Can Behave Oddly

•  A sequence of nonblocking assignments don’t


communicate
a = 1; a <= 1;
b = a; b <= a;
c = b; c <= b;

Blocking assignment: Nonblocking assignment:


a=b=c=1 a=1
b = old value of a
c = old value of b

32
Nonblocking Looks Like Latches

•  RHS of nonblocking taken from latches


•  RHS of blocking taken from wires
a = 1;
b = a; “ 1
a b c

c = b;

1 a
a <= 1;
b <= a;
c <= b; “ b ”
c

33
Building Behavioral Models

34
Modeling FSMs Behaviorally

•  There are many ways to do it:

•  Define the next-state logic combinationally and define


the state-holding latches explicitly

•  Define the behavior in a single always @(posedge


clk) block

•  Variations on these themes

35
FSM with Combinational Logic
Output o is declared a reg
because it is assigned
procedurally, not because it
module FSM(o, a, b, reset); holds state
output o;
reg o;
input a, b, reset;
Combinational block must be
reg [1:0] state, nextState; sensitive to any change on
any of its inputs

always @(a or b or state) (Implies state-holding


elements otherwise)
case (state)
2’b00: begin
nextState = a ? 2’b00 : 2’b01;
o = a & b;
end
2’b01: begin nextState = 2’b10; o = 0; end
endcase 36
FSM with Combinational Logic

module FSM(o, a, b, reset);


always @(posedge clk or reset)


if (reset) Latch implied by sensitivity to
state <= 2’b00; the clock or reset only
else
state <= nextState;

37
FSM from Combinational Logic

always @(a or b or state) This is a Mealy machine


case (state) because the output is directly
affected by any change on
2’b00: begin the input
nextState = a ? 2’b00 : 2’b01;
o = a & b;
end
2’b01: begin nextState = 2’b10; o = 0; end
endcase

always @(posedge clk or reset)


if (reset)
state <= 2’b00;
else
state <= nextState; 38
FSM from a Single Always Block
Expresses Moore machine
behavior:
module FSM(o, a, b); Outputs are latched
output o; reg o; Inputs only sampled at clock
input a, b; edges
reg [1:0] state;

Nonblocking assignments
always @(posedge clk or reset) used throughout to ensure
if (reset) state <= 2’b00; coherency.
else case (state) RHS refers to values
calculated in previous clock
2’b00: begin cycle
state <= a ? 2’b00 : 2’b01;
o <= a & b;
end
2’b01: begin state <= 2’b10; o <= 0; end
endcase 39
Simulating Verilog

40
How Are Simulators Used?

•  Testbench generates stimulus and checks response


•  Coupled to model of the system
•  Pair is run simultaneously

Stimulus

Testbench System Model

Response
Result
checker

41
Writing Testbenches
Inputs to device under test

module test;
Device under test
reg a, b, sel;

mux m(y, a, b, sel); $monitor is a built-in event driven


“printf”

initial begin
$monitor($time,, “a = %b b=%b sel=%b y=%b”,
a, b, sel, y); Stimulus generated by sequence
a = 0; b= 0; sel = 0; of assignments and delays
#10 a = 1;
#10 sel = 1;
#10 b = 1;
end
42
Simulation Behavior

•  Scheduled using an event queue


•  Non-preemptive, no priorities
•  A process must explicitly request a context switch
•  Events at a particular time unordered

•  Scheduler runs each event at the current time,


possibly scheduling more as a result

43
Two Types of Events

•  Evaluation events compute functions of inputs


•  Update events change outputs
•  Split necessary for delays, nonblocking assignments,
etc. Evaluation event reads values
of b and c, adds them, and
schedules an update event

Update event writes new


value of a and schedules a <= b + c
any evaluation events
that are sensitive to a
change on a

44
Simulation Behavior

•  Concurrent processes (initial, always) run until they


stop at one of the following

•  #42
–  Schedule process to resume 42 time units from now
•  wait(cf & of)
–  Resume when expression “cf & of” becomes true
•  @(a or b or y)
–  Resume when a, b, or y changes
•  @(posedge clk)
–  Resume when clk changes from 0 to 1

45
Simulation Behavior

•  Infinite loops are possible and the simulator does not


check for them
•  This runs forever: no context switch allowed, so ready
can never change

while (~ready)
count = count + 1;

•  Instead, use

wait(ready);

46
Simulation Behavior

•  Race conditions abound in Verilog

•  These can execute in either order: final value of a


undefined:

always @(posedge clk) a = 0;


always @(posedge clk) a = 1;

47
Simulation Behavior

•  Semantics of the language closely tied to simulator


implementation

•  Context switching behavior convenient for simulation,


not always best way to model
•  Undefined execution order convenient for
implementing event queue

48
Verilog and Logic Synthesis

49
Logic Synthesis

•  Verilog is used in two ways


–  Model for discrete-event simulation
–  Specification for a logic synthesis system

•  Logic synthesis converts a subset of the Verilog


language into an efficient netlist
•  One of the major breakthroughs in designing logic
chips in the last 20 years
•  Most chips are designed using at least some logic
synthesis

50
Logic Synthesis

•  Takes place in two stages:

•  Translation of Verilog (or VHDL) source to a netlist


–  Register inference

•  Optimization of the resulting netlist to improve speed


and area
–  Most critical part of the process
–  Algorithms very complicated and beyond the scope of this
class

51
Translating Verilog into Gates

•  Parts of the language easy to translate


–  Structural descriptions with primitives
•  Already a netlist
–  Continuous assignment
•  Expressions turn into little datapaths

•  Behavioral statements the bigger challenge

52
What Can Be Translated

•  Structural definitions
–  Everything
•  Behavioral blocks
–  Depends on sensitivity list
–  Only when they have reasonable interpretation as
combinational logic, edge, or level-sensitive latches
–  Blocks sensitive to both edges of the clock, changes on
unrelated signals, changing sensitivity lists, etc. cannot be
synthesized
•  User-defined primitives
–  Primitives defined with truth tables
–  Some sequential UDPs can’t be translated (not latches or
flip-flops)

53
What Isn’t Translated

•  Initial blocks
–  Used to set up initial state or describe finite testbench stimuli
–  Don’t have obvious hardware component
•  Delays
–  May be in the Verilog source, but are simply ignored
•  A variety of other obscure language features
–  In general, things heavily dependent on discrete-
event simulation semantics
–  Certain “disable” statements
–  Pure events

54
Register Inference

•  The main trick

•  reg does not always equal latch

•  Rule: Combinational if outputs always depend


exclusively on sensitivity list
•  Sequential if outputs may also depend on previous
values

55
Register Inference

•  Combinational:
Sensitive to changes on all of
the variables it reads
reg y;
always @(a or b or sel)
if (sel) y = a; Y is always assigned
else y = b;

•  Sequential:

reg q; q only assigned when clk is 1

always @(d or clk)


if (clk) q = d;

56
Register Inference

•  A common mistake is not completely specifying a


case statement
•  This implies a latch:

always @(a or b) f is not assigned when {a,b} =


2b’11
case ({a, b})
2’b00 : f = 0;
2’b01 : f = 1;
2’b10 : f = 1;
endcase

57
Latch Vs Flip-Flop Registers in Digital
Design & FPGA Synthesis

•  Latch is sensitive to input whereas flip-flop is


sensitive to clock transition. Latch is a (clock/enable)
level sensitive device while flip-flop is an clock edge
sensitive device. Latch is sensitive to glitches on
enable pin, whereas flip-flop is immune to glitches.
Latches take less gates (also less power) to
implement than flip-flops. Latches are faster than flip-
flops.

58
Register Inference

•  The solution is to always have a default case

always @(a or b)
case ({a, b})
2’b00: f = 0; f is always assigned

2’b01: f = 1;
2’b10: f = 1;
default: f = 0;
endcase

59
Inferring Latches with Reset

•  Latches and Flip-flops often have reset inputs


•  Can be synchronous or asynchronous

•  Asynchronous positive reset:

always @(posedge clk or posedge reset)


if (reset)
q <= 0;
else q <= d;

60
Simulation-synthesis Mismatches

•  Many possible sources of conflict

•  Synthesis ignores delays (e.g., #10), but simulation


behavior can be affected by them
•  Simulator models X explicitly, synthesis doesn’t
•  Behaviors resulting from shared-variable-like
behavior of regs is not synthesized
–  always @(posedge clk) a = 1;
–  New value of a may be seen by other @(posedge clk)
statements in simulation, never in synthesis

61
Compared to VHDL

•  Verilog and VHDL are comparable languages


•  VHDL has a slightly wider scope
–  System-level modeling
–  Exposes even more discrete-event machinery
•  VHDL is better-behaved
–  Fewer sources of nondeterminism (e.g., no shared variables)
•  VHDL is harder to simulate quickly
•  VHDL has fewer built-in facilities for hardware
modeling
•  VHDL is a much more verbose language
–  Most examples don’t fit on slides

62
Lecture schedule

See Webpage:
www.eecs.ucf.edu/~mingjie/EEL4783_2012

63
Final issues

•  Please fill out the student info sheet before leaving

•  Come by my office hours (right after class)

•  Any questions or concerns?

64

You might also like