ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL...
Transcript of ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL...
![Page 1: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/1.jpg)
ECE 4514Digital Design II
Spring 2008
Lecture 5:
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Lecture 5: How HDL simulation works
A tool & methodology Lecture
Patrick Schaumont
![Page 2: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/2.jpg)
Today's topic
� We look at the simulation mechanism of Verilog
Verilog Model
of a hardware circuit
(many gates)
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Modelsim
Verilog Simulator
Sequential
Machine
Simulator creates the
illusion of parallel
activites in model
Simulator is a software
program running on
a PC
![Page 3: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/3.jpg)
HDL simulation is different from C execution
� Need to express concurrency (things happening simultaneously)
� Need to model time
� Need to model non-standard wordlengths
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� Need to model non-standard values (X,Z)
� Need organization in modules rather than functions
![Page 4: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/4.jpg)
HDL simulation is different from C execution
� Need to express concurrency (things happening simultaneously)
� Need to model time
� Need to model non-standard wordlengths
Simulation Time + Concurrency Model (events, cycles, ..)
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� Need to model non-standard values (X,Z)
� Need organization in modules rather than functions
New data types, custom syntax
![Page 5: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/5.jpg)
Focus of this lecture
� Need to express concurrency (things happening simultaneously)
� Need to model time
Simulation Time + Concurrency Model (events, cycles, ..)
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
• Understand the concept of event driven simulation
• Understand how gate-level models are simulated
• Understand how behavioral models are simulated
Objectives:
![Page 6: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/6.jpg)
The need for concurrent hardware models
a b
Let's write a simulation for this circuit in C
clk
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
int a, b;
void clock_cycle() {
a = b;
b = a;
}
We create a function clock_tick which will be called for each clock cycle. Is the following a correct implementation of this function?
![Page 7: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/7.jpg)
The need for concurrent hardware models
a b
Let's write a simulation for this circuit in C
clk
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
int a, b;
void clock_cycle() {
a = b;
b = a;
} No! a and b will have the same value after one call
We create a function clock_tick which will be called for each clock cycle. Is the following a correct implementation of this function?
![Page 8: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/8.jpg)
A better solution
a b
Let's write a simulation for this circuit in C
clk
Is this better?
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
int a, b;
int new_a, new_b;
void clock_cycle() {
new_a = b;
new_b = a;
b = new_b;
a = new_a;
}
Is this better?
![Page 9: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/9.jpg)
A better solution
a b
Let's write a simulation for this circuit in C
clkint a, b;
int new_a, new_b;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
This is better.
new_a, new_b variables accountfor the fact that registers havetwo values: the previous value and the current value (i.e. the input and the output of a register can bedifferent values)
int new_a, new_b;
void clock_cycle() {
// evaluate new inputs
new_a = b;
new_b = a;
// update outputs
b = new_b;
a = new_a;
}
![Page 10: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/10.jpg)
Cycle-based simulation
Thus, we simulate concurrency by making the simulation progress intwo phases, which alternate at the pace of the clk signal
a
b
logic_a
logic_b
logic_a and logic_b appear to executeconcurrently
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
1. Evaluate 2. Update
Find new values at the
inputs of a and b
new_value_a = logic(a,b);
new_value_b = logic(a,b);
Adjust the 'output' value of a
and b to reflect the new values
a = new_value_a;
b = new_value_b;
clk
![Page 11: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/11.jpg)
Transition between phases driven by events
1. Evaluate 2. Update
Find what the new values at the
inputs of a and b
new_value_a = logic(a,b);
new_value_b = logic(a,b);
Adjust the 'old' value of a and b
to reflect the new values
a = new_value_a;
b = new_value_b;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
The evaluate event
indicates when a gate or function
would change its about because
the input has changed
The update event
adjusts the value of a
variable to reflect a new value
![Page 12: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/12.jpg)
The evaluate event
indicates when a gate or function
would change its output because
the input has changed
The update event
adjusts the value of a
variable to reflect a new value
Transition between phases driven by events
a logic_a
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� What is the cause of the update event ?
a
b
clk
logic_a
logic_b
![Page 13: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/13.jpg)
Cycle-based simulation has two types of events
The evaluate event
indicates when a gate or function
would change its output because
the input has changed
The update event
adjusts the value of a
variable to reflect a new value
a logic_a
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� What is the cause of the update event ?
a
b
clk
logic_a
logic_b
The cause of the update event is the upgoing clock edge
![Page 14: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/14.jpg)
Cycle-based simulation has two types of events
The evaluate event
indicates when a gate or function
would change its output because
the input has changed
The update event
adjusts the value of a
variable to reflect a new value
a logic_a
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� What is the cause of the evaluate event ?
a
b
clk
logic_a
logic_b
![Page 15: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/15.jpg)
Cycle-based simulation has two types of events
The evaluate event
indicates when a gate or function
would change its output because
the input has changed
The update event
adjusts the value of a
variable to reflect a new value
a logic_a
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� What is the cause of the evaluate event ?
a
b
clk
logic_a
logic_b
The output of the registers (a, b) changing their value
![Page 16: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/16.jpg)
But what exactly is an event?
� Event = tuple (activity, simulation time)
10 20 30 40 50 60 70
r
s
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Events: (r_rises, 20), (s_rises, 20), (r_falls, 30), (s_falls, 35)
� A list of events expresses concurrent activities
� E.g. (s_rises, 20) and (r_rises, 20) happen at the same time
� !!! In fact, the simulator cannot tell which of (s_rises, 20) and (r_rises, 20) happens first.
![Page 17: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/17.jpg)
Verilog is an event-driven simulator
� The Verilog simulator maintains an ordered list of all future events of interest: the Event Queue
� The simulation engine reads events from the queue, executes them, and inserts new events as needed
schedule new event
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Simulation
Engine
Time-ordered
Event Queue
remove
event
Active events with identical timestamps
can be removed in arbitrary order
![Page 18: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/18.jpg)
Verilog is an event-driven simulator
� There are two types of events: evaluate events and update events
Variable (reg)
or Net (wire)
Processes
Processes
Processes
reg/wire
reg/wire
reg/wire
When a variable or a net When a process runs,
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
When a variable or a netchanges its value, one or moreprocesses can run (evaluate).
"Evaluate" is an event
When a process runs,it can update to value of
one or more variables or nets.
"Update" is an event
� We will just call them 'events'.
![Page 19: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/19.jpg)
Some Verilog 'processes'
Variable (reg)
or Net (wire)
Processes
Processes
Processes
reg/wire
reg/wire
reg/wire
Fanout of a net
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� Primitives (gates)
� Initial Blocks and Always Blocks
� Procedural Assignments
� Continuous Assignments and Ports
We talk about
these in this
lecture
This is for
later
![Page 20: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/20.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G4
All gates have
propagation delay
of 5 unitse
Event Queue
initial begin
#20 a = 1;
end
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
empty
T = 0
Initialize simulation
All nets are at X
![Page 21: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/21.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G4
update
X XX
X
X
All gates have
propagation delay
of 5 unitse
Event Queue
T=0
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
update
a = 1
@T = 20
T = 0Initialize simulationAll nets are at X
![Page 22: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/22.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G4X XX
X
X
All gates have
propagation delay
of 5 units
update
e
Event Queue
T=0
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Remove event from Q. Event T = 20Adjust simulation time to T = 20Update value of aFanout of a = {G1}Execute G1. Output b should change to 0 at T = 20 + 5 = 25
update
a = 1
@T = 20
![Page 23: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/23.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G4
update
1 XX
X
X
All gates have
propagation delay
of 5 unitse
Event Queue
T=20
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
update
b = 0
@T = 25
![Page 24: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/24.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G4
update
1 XX
X
X
All gates have
propagation delay
of 5 unitse
Event Queue
T=20
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
update
b = 0
@T = 25
Remove event from Q. Event T = 25Adjust simulation time to T = 25Update value of bFanout of b = {G2, G3}Execute G2. c should change to 1 at T = 25 + 5 = 30Execute G3. d should change to 1 at T = 25 + 5 = 30
![Page 25: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/25.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 0X
X
X
All gates have
propagation delay
of 5 units
update update
e
Event Queue
T=25
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
update
c = 1
@T = 30
update
d = 1
@T = 30
![Page 26: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/26.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 0X
X
X
All gates have
propagation delay
of 5 units
updateupdate
e
Event QueueNote: It is equally
valid to choose update-c
T=25
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Remove event from Q. Event T = 30.Adjust simulation time to T = 30Update value of dFanout of d = {G4}Execute G4. e will remain at X. No new event.
update
c = 1
@T = 30
update
d = 1
@T = 30
valid to choose update-c
event. Event prodcessing
order for equal timestamps
is not guaranteed.
![Page 27: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/27.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 0X
X
1
All gates have
propagation delay
of 5 units
update
e
Event Queue
T=30
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
update
c = 1
@T = 30
![Page 28: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/28.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 0X
X
1
All gates have
propagation delay
of 5 units
update
e
Event Queue
T=30
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Remove event from Q. Event T = 30.Simulation time remains at 30.Update value of cFanout of c = {G4}Execute G4. e should change to 1 at T = 30 + 5 = 35.
update
c = 1
@T = 30
![Page 29: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/29.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 0X
1
1
All gates have
propagation delay
of 5 units
update
e
Event Queue
T=30
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
update
e = 1
@T = 35
![Page 30: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/30.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 0X
1
1
All gates have
propagation delay
of 5 units
update
e
Event Queue
T=30
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Remove event from Q. Event T = 35.Simulation time adjusts to 35.Update value of eFanout of e = { }
update
e = 1
@T = 35
![Page 31: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/31.jpg)
Let's see how gate-level simulation works
a b c
d
G1 G2
G3
G41 01
1
1
All gates have
propagation delay
of 5 unitse
Event Queue
T=35
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
No new events. Done.
![Page 32: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/32.jpg)
Gate-level simulation
�Gate-level simulation works as follows
a b c
d
G1 G2
G3
G41 01
1
1
e
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
�Gate-level simulation works as follows
� If a wire is updated, then all gates attached to the fan-out of that wire are executed.
� Gate Execution really means: generate update event for the wire at the gate output
![Page 33: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/33.jpg)
Event driven simulation in Behavioral Models
� We next discuss event modeling in always and initial blocks, and for procedural blocking assignments. E.g.:
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
end
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
end
always begin
@(upedge a);
b = a + 1;
a = #20 b;
end
endmodule
� A few constructs (procedural non-blocking assignments, continuous assignments, module ports) will be covered later.
![Page 34: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/34.jpg)
Modeling time and events in behavioral code
�#(number):
� Delay a specified units of time
�@(expression):
� Wait for an event of that expression
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
Wait for an event of that expression
�wait(expression):
� Test the expression. If true, continue, else wait for update of that expression and test again.
![Page 35: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/35.jpg)
@(expression)
� Means: stop execution and wait for an update event for that expression
wire a;
always @(a)
begin
...
end
X X
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
end
always @(posedge a)
begin
...
end
always @(negedge a)
begin
...
end
X X
X X
![Page 36: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/36.jpg)
wait(expression)
� Wait for the value of expression to become TRUE.
� wait tests levels, @ tests edges.
reg a; test the value of a
if a !=5 then
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
always
begin
...
wait(a == 5);
...
end
if a !=5 then
stop execution
wait for update a
repeat the test
else
continue execution
![Page 37: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/37.jpg)
while and wait
� Wait is not a busy loop - it really pauses the execution of behavioral code
reg[4:0] a, b;
initial a = 0;
initial b = 0;
always #10 a = a + 1;
reg[4:0] a, b;
initial a = 0;
initial b = 0;
always #10 a = a + 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
always
begin
wait(a == 5);
#10 b = 1;
end
always
begin
while (a != 5) b = 0;
#10 b = 1;
end
This will pause the bottom alwaysand continue with the top alwayswhen a reaches 5, bottom always
continues and sets b to 1
This will never set b to 1; a while loop does not interrupt
procedural flow. Once the bottomalways block starts, it cannot exit
![Page 38: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/38.jpg)
Simulating Behavioral Models with Events
� In a block statement, we can control execution by using multiple #, @, wait
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 39: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/39.jpg)
Simulating Behavioral Models with Events
� You can think of a single block statement as severalpieces of code.
b = 0
a = 1#100
Each piece will run in one stepafter event is seen
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
a = 1
b = b + 1
b = a + 1
a = b
#100
up(a)
#20
#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 40: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/40.jpg)
Simulating Behavioral Models with Events
� T = 0. initial block and always block start. b set to 0. always block waits for upedge of a.
b = 0
#100 a = 1
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
b = a + 1
a = b
#100
up(a)
#20
a = 1
b = b + 1
#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 41: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/41.jpg)
Simulating Behavioral Models with Events
� T = 0. #100 schedules evaluate of initial block at 100. always block still waits for upedge of a.
b = 0
#100 a = 1
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
b = a + 1
a = b
#100
up(a)
#20
a = 1
b = b + 1
#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 42: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/42.jpg)
Simulating Behavioral Models with Events
� T = 100. Initial block updates a, b to 1 (update event of a,b at 100). Initial block terminates. Always block still waits for upedge of a.
b = 0
#100 a = 1
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
b = a + 1
a = b
#100
up(a)
#20
a = 1
b = b + 1#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 43: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/43.jpg)
Simulating Behavioral Models with Events
� T = 100. Update event a triggers @(upedge a). b updated to 2. #20 schedules an evaluate of the always block at 120.
b = 0
#100 a = 1
module tata;
reg a, b;
initial begin
b = 0;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
b = a + 1
a = b
#100
up(a)
#20
a = 1
b = b + 1
b = 0;
#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 44: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/44.jpg)
Simulating Behavioral Models with Events
� T = 120. Update a to 2. Wait for upedge of a (which will never come).
b = 0
#100 a = 1
module tata;
reg a, b;
initial begin
b = 0;
#100 a = 1;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
b = a + 1
a = b
#100
up(a)
#20
a = 1
b = b + 1
#100 a = 1;
b = b + 1;
end
always begin
@(upedge a);
b = a + 1;
#20 a = b;
end
endmodule
![Page 45: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/45.jpg)
Intra-assignment events
� Intra-assignments means: while an assignment is executing
always
#10 a = a + 1; at time = 10, read a, add 1, assign to a
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
always
a = #10 a + 1;at time = 0, read a and add 1.
at time = 10 assign result to a.
Equivalent to:
always
tmp = a + 1;
#10 a = tmp;
![Page 46: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/46.jpg)
Sensitivity List
� Sensitivity List of a process is the list of nets that will affect a given process
� Gate-level models have a fixed sensitivity list:
a b cG1 G2
e
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
G3
Sensitivity(G3) = {c, d}
dG4
![Page 47: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/47.jpg)
Sensitivity List
� Behavioral models have a variable sensitivity list, changing during execution
Here it waitsfor an upedge of aalways begin
@(upedge a);
b = a + 1;
wait (c == 3);Here it waits for
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
wait (c == 3);
#20 b = a + 1;
end
endmodule
Here it waits forc to be 3
Here it waits for timeto advance 20 units
![Page 48: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/48.jpg)
So in a nutshell
NetsVariables
are in thesensitivity
list of
Gates
Behavioralcode
execute and makechanges to
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� Events glue everything together and allow to mix gate-level code and behavioral code
code
![Page 49: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/49.jpg)
Concurrent Programming - Pay attention!
� We already discussed this one ..
module syntst;
reg b;
initial
begin
b = 0;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
b = 0;
end
initial
begin
b = 1;
end
endmodule;
![Page 50: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/50.jpg)
Concurrent Programming - Pay attention!
� But sometimes it gets very subtle
module doh(muxout, select, a, b)
output muxout;
reg muxout;
input a, b, select;
wire notselect;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
always
@select muxOut = (a & select) | (b & notselect);
not (notselect, select);
endmodule;
What is the issue here ?
![Page 51: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/51.jpg)
Concurrent Programming - Pay attention!
� But sometimes it gets very subtle
module doh(muxout, select, a, b)
output muxout;
reg muxout;
input a, b, select;
wire notselect;
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
always
@(select or notselect or a or b)
muxOut = (a & select) | (b & notselect);
not (notselect, select);
endmodule;
This may be better
![Page 52: ECE 4514 Digital Design II Spring 2008 How HDL simulation ... cu FPGA CURS/lecture5[1].pdfa PC. HDL simulation is different from C execution Need to express concurrency (things happening](https://reader030.fdocuments.us/reader030/viewer/2022040220/5e2c01561daefc315a0e8847/html5/thumbnails/52.jpg)
Summary
� Event driven simulation:
� Update events are tuples of (time + signal_value)
� Evaluate events are tuples of (time + process_execution)
� Events are sorted over time in an event queue and processed
� Fan-out = Set of process inputs driven by a signal
� Sensitivity List = Set of signals attached to process
Patrick SchaumontSpring 2008
ECE 4514 Digital Design IILecture 5: How HDL Simulation Works
� Sensitivity List = Set of signals attached to process execution
� Gates have fixed fanout and sensivity list
� Behavioral models have variable fanout and sensitivity
� They make use of event control (@, #, wait)