Beruflich Dokumente
Kultur Dokumente
UNIT - I Using
Verilog
Adopted from
T. R. Padmanabhan and B. Bala Tripura Sundari,
Design through Verilog HDL –Wiley, 2009.
Prepared BY
D. Khalandar Basha
Assoc Prof., IARE
Unit - I
Unit - I
INTRODUCTION TO VERILOG:
Verilog as HDL
Levels of design Description
Concurrency
Simulation and Synthesis
Functional Verification
System Tasks
Programming Language Interface (PLI)
Module
Simulation and Synthesis Tools
Test Benches.
Gate Level
Data Flow
Behavioral
Level
Circuit
Level or
switch level
Circuit Level or switch level
y = (ab+cd)
Behavioral Level
Concurrency
Functional Verification
System Tasks
All the activities scheduled at one time step are completed and
then the simulator.
Simulation and Synthesis
Prepared By D. Khalandar Basha, IARE, HYD.
“synthesis.”
Verilog code.
PLI is primarily used for doing the things which would not
“module.”
A module is the name given to any system considering it as a
black box with input and output terminals as shown in Figure
The terminals of the module are referred to as ‘ports’.
Cont…
Prepared By D. Khalandar Basha, IARE, HYD.
inout ports: These represent ports through which one gets entry into the
module or exits the module
Functional Description
(gate / switch / data flow / Behv.)
endmodule
SIMULATION AND SYNTHESIS TOOLS
Prepared By D. Khalandar Basha, IARE, HYD.
- Modelsim and
A test
bench is HDL code that allows you to provide a
Prepared By D. Khalandar Basha, IARE, HYD.
module tb_module_name ;
endmodule
LANGUAGE CONSTRUCTS AND
CONVENTIONS IN VERILOG
Prepared By D. Khalandar Basha, IARE, HYD.
CASE SENSITIVITY
KEYWORDS
IDENTIFIERS
Blanks (\b), tabs (\t), newlines (\n), and form feed form the
COMMENTS
A single line comment begins with “//”
multiline comments “/*” signifies the beginning of a
comment and “*/” its end.
NUMBERS, STRINGS
NUMBERS
Prepared By D. Khalandar Basha, IARE, HYD.
The two types differ in the way they are used as well as with
regard to their respective hardware structures.
Net data type
Prepared By D. Khalandar Basha, IARE, HYD.
WIRE 0 1 X Z WAND 0 1 X Z
Prepared By D. Khalandar Basha, IARE, HYD.
/TRIAN
/TRI D
0 0 X X 0 0 0 0 0 0
1 X 1 X 1 1 0 1 X 1
X X X X X X 0 X X X
Z 0 1 X Z Z 0 1 X Z
WOR 0 1 X Z
/TRIO TRI1(0 0 1 X Z
R )
0 0 1 X 0 0 0 X X 0
1 1 1 1 1 1 X 1 X 1
X X 1 X X X X X X X
Z 0 1 X Z Z 0 1 X 1(0)
Variable Data Type
Prepared By D. Khalandar Basha, IARE, HYD.
MEMORY
Entities
reg[2:0] b;
reg[4:2] c;
wire[-2:2] d ;
PARAMETERS
Prepared By D. Khalandar Basha, IARE, HYD.
OPERATORS
Unary: – for example, ~a.
Binary: – for example, a&b.
Ternary: – for example, a?b:c
Digital Design
Through
Verilog
Adopted from
T. R. Padmanabhan and B. Bala Tripura Sundari,
Design through Verilog HDL –Wiley, 2009.
Prepared BY
D. Khalandar Basha
Assoc Prof., IARE
Unit - II
Unit - II
GATE LEVEL MODELING:
Introduction
AND Gate Primitive
Module Structure
Other Gate Primitives
Illustrative Examples
Tri-State Gates
Array of Instances of Primitives
Design of Flip – Flops with gate primitives
Delays
Strengths and Contention Resolution,
Net Types
Design of Basic Circuits.
MODELING AT DATA FLOW LEVEL:
Introduction
Continuous Assignment Structures
Delays and Continuous Assignments
Assignment to Vectors, Operators .
Unit - II
TRI-STATE GATES
primitives
Unit - II
SimpleLatch
module sbrbff(sb,rb,q,qb);
input sb,rb;
output q,qb;
nand(q,sb,qb);
nand(qb,rb,q);
endmodule
Unit - II
RS Flip-Flop module
module srff(s,r,q,qb);
input s,r;
output q,qb;
wire ss,rr;
not(ss,s),(rr,r);
nand(q,ss,qb);
nand(qb,rr,q);
endmodule
Unit - II
module srffcplev(cp,s,r,q,qb);
input cp,s,r;
output q,qb;
wire ss,rr;
nand (ss,s,cp),
(rr,r,cp),
(q,ss,qb),
(qb,rr,q);
endmodule
Unit - II
D-Latch module
moduledlatch(en,d,q,qb);
input d,en;
output q,qb;
wire dd;
wire s,r;
not n1(dd,d);
nand (sb,d,en);
nand g2(rb,dd,en);
sbrbff ff(sb,rb,q,qb);
endmodule
Unit - II
DELAYS
NetDelay
wire #2 nn;
// nn is declared as a net with a propagation delay of 2
time steps
wire # (2, 1) nm;
//the positive (0 to 1) transition has a delay of 2 time steps
//The negative (1 to 0) transition has a delay of 1 time step
Gate Delay
and #3 g( a, b, c);
and #(2, 1) g(a, b, c);
Unit - II
wire #(1:2:3) a;
Unit - II
Net Charges
net can have a capacitor associated with it, which can store the
signal level even after the
keyword trireg.
Unit - II
wire #2 c;
assign c = a & b;
CONCATENATION OF VECTORS
{a, b, c}
{a(7:4), b(2:0)}
{2{p}} = {p, p}
{2{p}, q} = {p, p, q}
{a, 3 {2{b , c}, d}} = {a, b, c, b, c, d, b, c, b, c, d, b, c, b, c, d }
Unit - II
OPERATORS
Unit - II
Unary Operators
Unit - II
Binary Operators
Cont..
cont…
Ternary operator
A? B:C
assign y = w ? x : z;
Operator Priority
Adopted from
T. R. Padmanabhan and B. Bala Tripura
Sundari, Design through Verilog HDL –Wiley,
2009.
Prepared by
D. Khalandar Basha
Assoc Prof., IARE
UNIT - III
BEHAVIORAL MODELING:
• Introduction
• BEHAVIORAL MODELING
Operations and Assignments
• Functional Bifurcation
• Initial Construct, Always Construct
• Assignments with Delays Wait Construct
• Multiple Always Blocks
• Designs at Behavioral Level
• Blocking and Non-Blocking Assignments
• The case statement
• Simulation Flow
• if and if-else constructs
• assign–deassign construct, repeat construct, for loop, the disable construct,
while loop, forever loop, parallel blocks, force-release construct, Event.
BEHAVIORAL MODELING
BEHAVIORAL MODELING
Behavioral level modeling constitutes design
description at an abstract level.
BEHAVIORAL
executed only Once
MODELING
• In any assignment statement the left-hand side has to be a storage
type of element (and not a net). It can be a reg, integer, or real type
of variable. The right-hand side can be a storage type of variable or
a net.
initial
begin
a = 1'b0;
b = 1'b0;
#2 a = 1'b1;
#3 b = 1'b1;
#100$stop;
end
MULTIPLE INITIAL BLOCKS
modulenil1;
BEHAVIORAL MODELING
initial
reg a, b;
begin
a = 1'b0; b = 1'b0;
$display ($time, "display : a = %b, b = %b", a, b);
#2 a = 1'b1;
end
initial #100$stop;
initial
begin #2 b = 1'b1;
end
endmodule
ALWAYS CONSTRUCT
The always process signifies activities to be executed on
an “always basis.”
BEHAVIORAL MODELING
Its essential characteristics are:
• Any behavioral level design description is done using an
always block.
• The process has to be flagged off by an event or a
change in a net or a reg. Otherwise it ends in a stalemate.
• The process can have one assignment statement or
multiple assignment statements.
• Normally the statements are executed sequentially in the
order they appear.
EVENT CONTROL
The always block is executed repeatedly and endlessly. It
is necessary to specify a condition or a set of conditions,
BEHAVIORAL MODELING
which will steer the system to the execution of the block.
Alternately such a flagging-off can be done by
specifying an event preceded by the symbol “@”.
@(negedge clk) :executes the following block at the negative edge of clk.
@(posedge clk) : executes the following block at the positive edge of the
clk.
@clk : executes the following block at both the edges of clk.
@(prt or clr) :
@(posedge clk1 or negedge clk2) :
@ (a or b or c) can also write as @ (a or b or c) @ (a, b, c) @ (a, b or
c)
EXAMPLE COUNTER
module counterup(a,clk,N);
BEHAVIORAL
input clk;
MODELING
input[3:0]N;
output[3:0]a;
reg[3:0]a;
initial a=4'b0000;
endmodule
ASSIGNMENTS WITH DELAYS
always #3 b = a;
Values of a at the 3rd, 6th, 9th, etc., ns are sampled and assigned to
BEHAVIORAL
b. MODELING
Initial
begin
a = 1’b1;
b = 1’b0;
#1 a = 1’b0;
#3 a = 1’b1;
#1 a = 1’b0;
#2 a = 1’b1;
#3 a = 1’b0;
end
INTRA-ASSIGNMENT DELAYS
The “intra-assignment” delay carries out the assignment
in two parts.
BEHAVIORAL MODELING
An assignment with an intra-assignment has the form
A = # dl expression;
Here the expression is scheduled to be evaluated as soon
as it is encountered.
However, the result of the evaluation is assigned to the
right-hand side quantity a after a delay specified by dl.
dl can be an integer or a constant expression
always #2 a = a + 1;
always #b a = a + 1;
always #(b + c) a = a + 1;
ZERO DELAY
A delay of 0 ns does not really cause any delay.
BEHAVIORAL MODELING
However, it ensures that the assignment following is
executed last in the concerned time slot.
always
begin a = 1;
#0 a = 0;
end
WAIT CONSTRUCT
The wait construct makes the simulator wait for the
specified expression to be true before proceeding with
BEHAVIORAL MODELING
the following assignment or group of assignments.
Its syntax has the form
wait (alpha) assignment1;
alpha can be a variable, the value on a net, or an
expression involving them.
@clk a = b; assigns the value of b to a when clk changes;
wait (clk) #2 a = b; the simulator waits for the clock to
be high and then assigns b to a
BLOCKING AND NONBLOCKING ASSIGNMENTS
And
A=B;
B=A; // A, B will have same value
NONBLOCKING ASSIGNMENTS AND DELAYS
The principle of Delays of the intra-assignment type operation is
similar to that with blocking assignments.
BEHAVIORAL
always @(a or b)
#3 c1 = a&b;
MODELING
which has a delay of 3 ns for the blocking assignment to c1. If a or b
changes, the always block is activated. Three ns later, (a&b) is
evaluated and assigned to c1. The event “(a or b)” will be checked
for change or trigger again. If a or b changes, all the activities are
frozen for 3 ns. If a or b changes in the interim period, the block is
not activated. Hence the module does not depict the desired output.
always @(a or b)
c2 = #3 a&b;
The always block is activated if a or b changes. (a & b) is evaluated
immediately but assigned to c2 only after 3 ns. Only after the
delayed assignment to c2, the event (a or b) checked for change. If a
or b changes in the interim period, the block is not activated.
always @(a or b)
#3 c3 <= a&b;
BEHAVIORAL MODELING
The block is entered if the value of a or b changes but the
evaluation of a&b and the assignment to c3 take place with a
time delay of 3ns. If a or b changes in the interim period, the
block is not activated.
always @(a or b)
c4 <= #3 a&b;
represents the best alternative with time delay. The always block is activated if a or b
changes. (a&b) is evaluated immediately and scheduled for assignment to c4 with a
delay of 3 ns. Without waiting for the assignment to take effect (i.e., at the same time
step as the entry to the block), control is returned to the event control operator.
Further changes to a or b – if any – are again taken cognizance of.
THE CASE STATEMENT
simple construct for multiple branching in a module. The
keywords case, endcase, and default are associated with
BEHAVIORAL MODELING
the case construct.
Format of the case construct is
Case (expression)
Ref1 : statement1;
Ref2 : statement2;
Ref3 : statement3;
.. .
...
default: statementd;
endcase
EXAMPLE
moduledec2_4beh(o,i);
BEHAVIORAL MODELING
output[3:0]o;
input[1:0]i;
reg[3:0]o;
always@(i)
begin
case(i)
2'b00:o=4'h0;
2'b01:o=4'h1;
2'b10:o=4'h2;
2'b11:o=4'h4;
default: begin $display ("error");
o=4'h0;
CASEX AND CASEZ
Prepared BY
D. Khalandar Basha
Assoc Prof., IARE
UNIT - IV
SWITCH LEVEL MODELING
Basic Transistor Switches, CMOS Switch, Bi –
directional Gates, Time Delays with Switch
Primitives, Instantiations with Strengths and Delays,
Strength Contention with Trireg Nets
SYSTEM TASKS, FUNCTIONS, AND COMPILER
DIRECTIVES:
Parameters, Path Delays, Module Parameters,
System Tasks and Functions, File – Based Tasks and
Functions, Compiler Directives, Hierarchical
Access, User-defined Primitives (UDP).
INTRODUCTION
Display Tasks
The $display task, whenever encountered, displays the arguments in the
desired format; and the display advances to a new line. $write task carries
out the desired display but does not advance to the new line
$strobe Task
When a variable or a set of variables is sampled and its value displayed,
the $strobe task can be used; it senses the value of the specified
variables and displays them.
$monitor Task
$monitor task is activated and displays the arguments specified
whenever any of the arguments changes
$random Function
One can start with a seed number (optional) and generate a
random number repeatedly. Such random number sequences can
be fruitfully used for testing.
FILE-BASED TASKS AND FUNCTIONS
To carry out any file-based task, the file has to be opened, reading,
writing, etc., completed and the file closed. The keywords for all file-
based tasks start with the letter f to distinguish them from the other tasks
All the system tasks to output information can be used to output to a file.
$display, $strobe, $monitor, etc., are of this category. The respective
keywords to output to the file are $fdisplay, $fstrobe, $fmonitor.
The first field of the task statement is an argument – the file descriptor.
The subsequent fields are identical to the corresponding nonfile tasks.
COMPILER DIRECTIVES
Time-Related Tasks
The `timescale compiler directive allows the time scale to be specified
for the design. The `timescale directive has two components
`timescale 1 ms/100 μs
HIERARCHICAL ACCESS
126
Sequential Models
127
Sequential Models
128
Sequential
Models
Sequential
Models
A two-state (one-bit)
Memory element
S
Q
R
Feedback Line
130
Capacitive Model
131
Sequential
Models
C The complement
of the stored data
D Q
Capacitive Storage
132
Implicit Model
133
Sequential
Models
1S Q
1R
C1
An SR-Latch Notation
134
Basic Memory Components
Basic Memory
Components
User Defined
Gate Level Primitives
Sequential Primitives
Memory Vectors
Flip-flop Timing
and Arrays
135
Gate Level Primitives
Basic Memory
Components
User Defined
Gate
GateLevel
LevelPrimitives
Primitives
Sequential Primitives
Memory Vectors
Flip-flop Timing
and Arrays
136
Gate Level Primitives
latch 1-bit Storage
Element
s q_b
g1
r g2
q
g4
r g2 q_b
_r
Master-Slave D Flip-Flop
142
Gate Level Primitives
`timescale 1ns/100ps
module master_slave (input d, c, output q, q_b );
wire qm, qm_b;
defparam master.tplh=4, master.tphl=4,
slave.tplh=4, slave.tphl=4;
Hierarchical Naming
latch_p
master ( d, ~d, c, qm, qm_b ),
slave ( qm, qm_b, ~c, q, q_b );
endmodule
Memory Vectors
Flip-flop Timing
and Arrays
144
User Defined
Sequential Primitives
Verilog provides language constructs for defining sequential UDPs:
Faster Simulation of memory elements
Correspondence to specific component libraries
145
User Defined Sequential
Primitives
primitive latch( q, s, r, c );
output q;
reg q;
input s, r, c;
initial q=1'b0;
table
// s r c q q+ ;
// ------:---:----;
??0:?:- ;
001:?:- ; Table defining the latch
011:?:0 ; output
101:?:1 ;
endtable
endprimitive
User Defined
Gate Level Primitives
Sequential Primitives
Memory
Memory Elements
Elements Behavioral
Using
UsingAssignments
Assignments Memory Elements
Memory Vectors
Flip-flop Timing
and Arrays
148
Memory Elements Using
When a block’s
clock input is 0,
it puts its output back
Assignments
master_slave
to itself (feedback),
and when its clock is
1 it puts its data input
into its output.
d qm q
c
~c
Basic Memory
Components
User Defined
Gate Level Primitives
Sequential Primitives
Memory Vectors
Flip-flop Timing
and Arrays
151
Behavioral Memory
Elements
Behavioral Coding:
A more abstract and easier way of writing Verilog code for a latch or
flip-flop.
The storage of data and its sensitivity to its clock and other control inputs will be
implied in the way model is written.
152
Behavioral Memory Elements
153
Behavioral
Memory
Elements
Latch Flip-flop
Modeling Modeling
Flip-flop Other
with Set-Reset Storage Element
Control Modeling Styles
Latch Modeling
154
Behavioral
Memory
Elements
Latch
Latch Flip-flop
Modeling
Modeling Modeling
Flip-flop Other
with Set-Reset Storage Element
Control Modeling Styles
While c is 1
changes on d directly affect q
and q_b outputs.
Latch Modeling A Storage unit
Level Sensitive to c :
`timescale 1ns/100ps A Latch
Non-blocking assignments
Latch Model Using Nonblocking Assignments With intra-statement delay
156
controls
Latch Modeling
at time 30
Flip-flop Modeling
158
Behavioral
Memory
Elements
Latch Flip-flop
Flip-flop
Modeling Modeling
Modeling
Flip-flop Other
with Set-Reset Storage Element
Control Modeling Styles
With each clock edge,
Flip-flop Modeling
the entire procedural block is
executed once from begin to A basic edge trigger
end. flip-flop model at the
behavioral level
`timescale 1ns/100ps
Behavioral
Memory
Elements
Latch Flip-flop
Modeling Modeling
Flip-flop
Flip-flop Other
with Set-Reset
with Set-Reset Storage Element
Control
Control Modeling Styles
Flip-flop With Set-Reset
Control
`timescale 1ns/100ps
q_Asynch
Comparing Synchronous and Asynchronous Flip-Flop changes occur
Controls
independent of the clock when s
q_Synch will waits for the edge of or r becomes active 168
the clock to set or reset
Other Storage Element Modeling
169
Styles
Behavioral
Memory
Elements
Latch Flip-flop
Modeling Modeling
Flip-flop Other
Other Storage
with Set-Reset Element Modeling
Storage Element
Control StyleStyles
Modeling
Other Storage Element
Modeling Styles A latch using a wait
statement instead of an
`timescale 1ns/100ps
event control statement
module latch (input d, c, output reg q, q_b );
Basic Memory
Components
User Defined
Gate Level Primitives
Sequential Primitives
Memory Vectors
Flip-flop
Flip-flop Timing
Timing
and Arrays
171
Flip-flop Timing
172
Flip-flop
Timing
Width
Setup Hold
And
Time Time
Period
Setup Time
173
Flip-flop
Timing
Width
Setup Hold
And
Time Time
Period
Setup Time
Setup Time
The Minimum necessary time that a data input requires to setup before it is
clocked into a flip-flop.
Verilog construct for checking the setup time: $setup task
The $setup task:
Takes flip-flop data input, active clock edge and the setup time as its parameters.
Is used within a specify block.
174
Continuously checks timing
distance between changes on d
$setup task within a specify block and the positive edge of clk.
Setup Time If this distance is less than 5ns,
a violation message will be issued.
`timescale 1ns/100ps
module d_ff ( input d, clk, s, r, output reg q, q_b );
specify
$setup ( d, posedge clk, 5 );
endspecify
always @( posedge clk or posedge s or posedge r )
begin
..............
end
endmodule
Positive edge trigger flip-flop and
Asynchronous set and reset
controls
177
Hold Time
178
Flip-flop
Timing
Width
Setup Hold
And
Time Time
Period
Hold Time
Hold Time
The Minimum necessary time a flip-flop data input must stay stable (holds its
value) after it is clocked.
Verilog construct for checking the setup time: $hold task
The $setup task:
Takes flip-flop data input, active clock edge and the required hold time as its
parameters.
Is used within a specify block.
179
Hold Time
`timescale 1ns/100ps
181
Hold Time
The Verilog $setuphold task combines setup and hold timing checks.
Example:
$setuphold (posedge clk, d, 5, 3)
182
Width And Period
183
Flip-flop
Timing
Width
Setup Hold
And
Time Time
Period
Width And Period
Verilog $width and $period check for minimum pulse width and period.
Pulse Width: Checks the time from a specified edge of a reference signal to its
opposite edge.
Period: Checks the time from a specified edge of a reference signal to the same edge.
184
Width And Period
specify
$setuphold ( posedge clk, d, 5, 3 );
$width (posedge r, 4);
$width (posedge s, 4);
$period (negedge clk, 43);
endspecify
185
Setup, Hold, Width, and Period Checks (Continued)
Controllers
Component
Description
Data
Controllers
Controllers
Components
186
Controllers
Decisions
Based on :Inputs ,
Outputs ,State
Go to Next State
Controller Outline
187
Controllers
Controller:
Is wired into data part to control its flow of data.
The inputs to controller determine its next states and outputs.
Monitors its inputs and makes decisions as to when and what output signals to
assert.
Keeps the history of circuit data by switching to appropriate states.
Two examples to illustrate the features of Verilog for describing state machines:
Synchronizer
Sequence Detector
188
Controllers
Controllers
Sequence
Synchronizer
Detector
189
Synchronizer
Controllers
Sequence
Synchronizer
Synthesizer
Detector
190
Synchronizer
Clk
adata
synched
Synchronizing adata
191
Synchronizer
`timescale 1ns/100ps
module Synchronizer (input clk, adata,
output reg synched);
always @(posedge clk)
if (adata == 0) synched <= 0;
else synched <= 1;
endmodule If a 1 is Detected on
adata on the rising
edge of clock, synched
becomes 1 and
A Simple Synchronization Circuit remains 1
for at least one
clock period
192
Sequence Detector
Controllers
Sequence
Sequence
Synthesizer
Detector
Detector
193
Sequence Detector
When the sequence
Searches on is detected, the w
it’s a input Output becomes 1 and
for the stays 1 for a complete
110 Sequence clock cycle
If 110 is detected
a on a, then w gets w
1, else w gets 0.
clk
State Machine Description
194
Sequence Detector
A Moore Machine
Sequence Detector
States are named: The State in which the
s0 , s1 , s2 , s3 110 sequence is
detected.
0 1
reset
1 1 0
S0 S1 S2 S3
0 0 0 0 1
1
Initia
l 0
State
It Takes at least
3 clock periods to get
to the s3 state
Sequence Detector State Machine
195
Sequence Detector
module Detector110 (input a, clk, reset, output w);
parameter [1:0] s0=2'b00, s1=2'b01, s2=2'b10, s3=2'b11;
reg [1:0] current;
always @(posedge clk) begin
if (reset) current = s0;
else
case (current)
s0: if (a) current <= s1; else current <= s0;
s1: if (a) current <= s2; else current <= s0;
s2: if (a) current <= s2; else current <= s3;
s3: if (a) current <= s1; else current <= s0;
endcase
end
assign w = (current == s3) ? 1 : 0;
endmodule
State Machine
Coding
A ROM Based
Controller
197
Moore Machines
State Machine
Coding
A ROM Based
Controller
198
Moore Machines
Moore Machine :
A state machine in which all outputs are carefully synchronized with the circuit
clock.
In the state diagram form, each state of the machine specifies its outputs
independent of circuit inputs.
In Verilog code of a state machine, only circuit state variables participate in the
output expression of the circuit.
199
Mealy Machines
State Machine
Coding
A ROM Based
Controller
200
Mealy Machines
Mealy Machine :
Is different from a Moore machine in that its output depends on its current state
and inputs while in that state.
State transitions and clocking and resetting the machine are no different from
those of a Moore machine. The same coding techniques are used.
201