EE577b Verilog for Behavioral Modeling
Verilog for Behavioral Modeling
Nestoras Tzartzanis
E-mail: [email protected]
Dept. of Electrical Engineering-Systems
University of Southern California
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Objective of the Lecture
To address those features of Verilog that are required for the class project
discussion will be limited to behavioral modeling
features will be briefly presented
emphasis will be given to the examples
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Warning
This lecture includes features supported by and tested with the Cadence Verilog-XL
simulator
The primary source of the presented material is the Cadence Verilog-XL Reference
Manual
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
Expressions
Assignments
Behavioral modeling
Hierarchical structures (modules)
System (built-in) functions
Example
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Verilog Features
Verilog can simulate models at the following levels:
algorithmic
RTL
gate
switch
Verilog offers:
behavioral language
structural language
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Verilog Behavioral Language
Structures procedures for sequential or concurrent execution
Explicit control of the time of procedure activation specified by both delay
expressions and by value changes called event expressions
Explicitly named events to trigger the enabling and disabling of actions in their
procedures
Procedural constructs for conditional, if-else, case, and looping operations
Arithmetic, logical, bit-wise, and reduction operators for expressions
Procedures called tasks that can have parameters and non-zero time durations (not
covered in todays lecture)
Procedures called functions that allow the definition of new operators (not covered in
todays lecture)
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
========>
Data types
Expressions
Assignments
Behavioral modeling
Hierarchical structures
System (built-in) functions
Example
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Data Types
Value sets:
0:
logic zero or false condition
1:
logic one or true condition
x:
unknown logic value
z:
high-impedance state
Registers
Nets
Memories
Integers and times
integer type declaration example:
integer
n, k[1:64];
Reals
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Data Types: Registers
Abstractions of data storage elements
They store a value from one assignment to the other
Register type declaration examples:
reg
a;
// a scalar register
reg [3:0]
b;
// a 4-bit vector register
reg [2:5]
c;
Nestoras Tzartzanis
February 3, 1998
EE577b Verilog for Behavioral Modeling
Data Types: Nets
Physical connections
They do not store a value
They must be driven by a driver (i.e., gate or continuous assignment)
Their value is z, if not driven
Net type declaration examples:
wire
d;
// a scalar wire
wire [3:0]
e, f;
// 4-bit vector wires
Warning:
There are more types of nets than wires, but they are not needed for behavioral
modeling
Nestoras Tzartzanis
10
February 3, 1998
EE577b Verilog for Behavioral Modeling
Data Types: Memories
Memories are modeled as arrays of registers
Each register in the array (i.e., an element or word) is addressed by a single array
index
Memories are declared in register declaration statements:
reg [31:0]
Nestoras Tzartzanis
Imem[0:255];
// a 256-word, 32-bit memory
11
February 3, 1998
EE577b Verilog for Behavioral Modeling
Parameters
Parameters are not variables
they are constants
Parameter declaration examples
parameter
Nestoras Tzartzanis
size = 8;
// defines size as a constant with value 16
12
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
========>
Expressions
Assignments
Behavioral modeling
Hierarchical structures
System (built-in) functions
Example
Nestoras Tzartzanis
13
February 3, 1998
EE577b Verilog for Behavioral Modeling
Expressions
The following operator types are supported:
binary arithmetic
relational
equality
logical
bit-wise
reduction
shift
concatenation
conditional
Nestoras Tzartzanis
14
February 3, 1998
EE577b Verilog for Behavioral Modeling
Number Representation
Constant numbers can be: decimal, hexadecimal, octal, or binary
Two forms of representation are available:
simple decimal number (e.g., 45, 507, 234, etc.)
<size><base_format><number>
<size>:
number of bits that the constant contains
<base_format>:
a letter specifying the numbers base (d, h, o, or b),
followed by the single quote character (')
<number>:
digits that are legal for the specified <base_format>
Examples:
Nestoras Tzartzanis
4'b1001
// a 4-bit binary number
16'ha04f
// a 16-bit hexadecimal number
4'b01x0
// a 4-bit binary number
12'hx
// a 12-bit unknown number
15
February 3, 1998
EE577b Verilog for Behavioral Modeling
Arithmetic Operators
Binary:
+, -, *, /, % (the modulus operator)
Unary:
+, -
Integer division truncates any fractional part
The result of a modulus operation takes the sign of the first operand
If any operand bit value is the unknown value x, then the entire result value is x
Register data types are used as unsigned values
negative numbers are stored in twos complement form
Nestoras Tzartzanis
16
February 3, 1998
EE577b Verilog for Behavioral Modeling
Relational Operators
a<b
a less than b
a>b
a greater than b
a <= b
a less than or equal to b
a >= b
a greater than or equal to b
The result is a scalar value:
0 if the relation is false
1 if the relation is true
x if any of the operands has unknown x bits
Note: If a value is x or z, then the result of that test is false
Nestoras Tzartzanis
17
February 3, 1998
EE577b Verilog for Behavioral Modeling
Equality Operators
a === b
a equal to b, including x and z
a !== b
a not equal to b, including x and z
a == b
a equal to b, result may be unknown
a != b
a not equal to b, result may be unknown
Operands are compared bit by bit, with zero filling if the two operands do not have
the same length
Result is 0 (false) or 1 (true)
For the == and != operators the result is x, if either operand contains an x or a z
For the === and !== operators
bits with x and z are included in the comparison and must match for the result to
be true
the result is always 0 or 1
Nestoras Tzartzanis
18
February 3, 1998
EE577b Verilog for Behavioral Modeling
Logical Operators
logical negation
&&
logical and
||
logical or
Expressions connected by && and || are evaluated from left to right
Evaluation stops as soon as the result is known
The result is a scalar value:
0 if the relation is false
1 if the relation is true
x if any of the operands has unknown x bits
Nestoras Tzartzanis
19
February 3, 1998
EE577b Verilog for Behavioral Modeling
Bit-wise Operators
negation
&
and
inclusive or
exclusive or
^~ or ~^
exclusive nor (equivalence)
Computations include unknown bits, in the following way:
~x = x, 0&x = 0, 1&x = x&x = x, 1|x = 1, 0|x = x|x = x
0^x = 1^x = x^x = x, 0^~x = 1^~x = x^~x = x
When operands are of unequal bit length, the shorter operand is zero-filled in the
most significant bit positions
Nestoras Tzartzanis
20
February 3, 1998
EE577b Verilog for Behavioral Modeling
Reduction Operators
&
and
~&
nand
or
~|
nor
xor
^~ or ~^
xnor
Reduction operators are unary
They perform a bit-wise operation on a single operand to produce a single bit result
Reduction unary NAND and NOR operators operate as AND and OR respectively,
but with their outputs negated
Unknown bits are treated as described before
Nestoras Tzartzanis
21
February 3, 1998
EE577b Verilog for Behavioral Modeling
Shift Operators
<<
left shift
>>
right shift
The left operand is shifted by the number of bit positions given by the right operand
The vacated bit positions are filled with zeroes
Nestoras Tzartzanis
22
February 3, 1998
EE577b Verilog for Behavioral Modeling
Concatenation Operator
Concatenations are expressed using the brace characters { and }, with commas
separating the expressions within
Examples
{a, b[3:0], c, 4'b1001}
// if a and c are 8-bit numbers, the results has 24 bits
Unsized constant numbers are not allowed in concatenations
Repetition multipliers that must be constants can be used:
{3{a}}
// this is equivalent to {a, a, a}
Nested concatenations are possible:
{b, {3{c, d}}}
Nestoras Tzartzanis
// this is equivalent to {b, c, d, c, d, c, d}
23
February 3, 1998
EE577b Verilog for Behavioral Modeling
Conditional Operator
The conditional operator has the following C-like format:
cond_expr ? true_expr : false_expr
The true_expr or the false_expr is evaluated and used as a result depending on
whether cond_expr evaluates to true or false
Nestoras Tzartzanis
24
February 3, 1998
EE577b Verilog for Behavioral Modeling
Operator Precedence Rules
!, ~
highest precedence
, /, %
+, <<, >>
<, <=, >, >=
==, !=, ===, !==
&
^, ^~
|
&&
||
?:
Nestoras Tzartzanis
lowest precedence
25
February 3, 1998
EE577b Verilog for Behavioral Modeling
Issues about Operands
Parts or single bits of registers and nets can be used as operands:
reg [7:0]
a;
// a is declared as an 8-bit register
a[4] could be used as a single-bit operand in an expression
a[6:3] could be used as a 4-bit operand in an expression
There is no mechanism to express bit-selects or pert-selects of memory elements
directly (only entire memory words)
reg [7:0]
mema[0:255] // mema is declared as a 8-bit, 256 word register
mema[15] is a valid operand which includes the 16th memory word
Nestoras Tzartzanis
26
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
Expressions
========>
Assignments
Behavioral modeling
Hierarchical structures
System (built-in) functions
Example
Nestoras Tzartzanis
27
February 3, 1998
EE577b Verilog for Behavioral Modeling
Assignments
Continuous assignments, which assigns values to nets
Procedural assignments, which assigns values to registers
Nestoras Tzartzanis
28
February 3, 1998
EE577b Verilog for Behavioral Modeling
Continuous Assignments
Continuous assignments drive values onto nets (vector and scalar)
The assignment occurs whenever simulation causes the value of the right-hand side
to change
They provide a way to model combinational logic specifying the logical expression
that drives the net instead of an interconnection of gates
The right-hand side expression is not restricted in any way
Whenever an operand in the right hand side changes value during simulation, the
whole right-hand side expression is evaluated and assigned to the left-hand side
Modeling a 16-bit adder with a continuous assignment
wire [15:0]
sum, a, b;
wire
cin, cout;
assign
{cout, sum} = a + b + cin;
Nestoras Tzartzanis
// declaration of 16-bit vector nets
// declaration of 1-bit (scalar) nets
// assign is a keyword
29
February 3, 1998
EE577b Verilog for Behavioral Modeling
Procedural Assignments
Procedural assignments drive values onto registers (vector and scalar)
They do not have duration (the register data type holds the value of the assignment
until the next procedural assignment to the register)
They occur within procedures such as always and initial (described right after)
They are triggered when the flow of execution in the simulation reaches them
Nestoras Tzartzanis
30
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
Expressions
Assignments
========>
Behavioral modeling
Hierarchical structures
System (built-in) functions
Example
Nestoras Tzartzanis
31
February 3, 1998
EE577b Verilog for Behavioral Modeling
Behavioral Modeling
Introduction
Procedural assignments
Conditional statement
Case statement
Looping statements
Timing controls
Block statements
Structured procedures
Nestoras Tzartzanis
32
February 3, 1998
EE577b Verilog for Behavioral Modeling
Introduction to Behavioral Modeling
Activity starts at the control constructs initial and always
Each initial and always statement starts a new concurrent activity flow
Time units are used to represent simulation time
A simple example:
module behave;
reg [1:0]
initial
begin
a,b;
// a and b are 2-bit register data types
// this statement is executed only once
a = 2'b01;
b = 2'b00;
// a is initialized to 01
// b is initialized to 00
#50 a = ~a;
// this statement is repetitively executed until
// simulation is completed
// register a inverts every 50 time units
#100 b = ~b;
// this statement is repetitively executed
// simulation is completed
// register b inverts every 100 time units
end
always
begin
end
always
begin
end
endmodule
Nestoras Tzartzanis
33
February 3, 1998
EE577b Verilog for Behavioral Modeling
More on Procedural Assignments
Blocking procedural assignments:
<lvalue>=<timing_control> <expression>
must be executed before the execution of the statements that follow them in a
sequential block
does not prevent the execution of statements that follow them in a parallel block
Non-blocking procedural assignments: <lvalue><=<timing_control> <expression>
allow to schedule assignments without blocking the procedural flow
used whenever you want to make several register assignments within the same
time step without regard to order or dependance upon each other (e.g., register
swap)
they are executed in two steps: (a) the simulator evaluates the right-hand side,
(b) the assignment occurs at the end of the time step indicated by the
<timing_control>
<timing_control> is optional in both cases
It is possible to complete your project by using blocking only statements
Nestoras Tzartzanis
34
February 3, 1998
EE577b Verilog for Behavioral Modeling
Procedural Assignment Example
module block;
reg a, b, c, d, e, f;
initial begin
a = #10 1;
b = #2 0;
c = #4 1;
end
initial begin
d <= #10 1;
e <= #2 0;
f <= #4 1;
end
endmodule
Nestoras Tzartzanis
// a is assigned at simulation time 10
// b is assigned at simulation time 12
// c is assigned at simulation time 16
// d is assigned at simulation time 10
// e is assigned at simulation time 2
// f is assigned at simulation time 4
35
February 3, 1998
EE577b Verilog for Behavioral Modeling
Procedural Assignment Example (cond)
module block;
reg a, b, c, d, e, f;
initial begin
#10 a = 1;
#2 b = 0;
#4 c = 1;
end
initial begin
#10 d <= 1;
#2 e <= 0;
$4 f <= 1;
end
endmodule
Nestoras Tzartzanis
// a is assigned at simulation time 10
// b is assigned at simulation time 12
// c is assigned at simulation time 16
// d is assigned at simulation time 10
// e is assigned at simulation time 12
// f is assigned at simulation time 16
36
February 3, 1998
EE577b Verilog for Behavioral Modeling
Conditional Statement
if (<expression>) <statement> else <statement>
Equivalent to: if (<expression> != 0) <statement> else <statement>
else-clause is optional and is always associated with the closest previous if that lacks
an else
Example
if (index > 0)
if (rega > regb)
result = rega;
else
// else applies to preceding if
result = regb;
Nestoras Tzartzanis
37
February 3, 1998
EE577b Verilog for Behavioral Modeling
Case Statement
Case statement is a special multi-way decision statement:
reg [1:0]
sel;
reg [15:0]
in0, in1, in2, in3, out;
case (sel)
2'b00:
out = in0;
2'b01:
out = in1;
2'b10:
out = in2;
2'b11:
out = in3;
default out = 16'bx;
endcase
The default statement is optional
If all comparisons fail and the default is not given, none of the case statements is
executed
Nestoras Tzartzanis
38
February 3, 1998
EE577b Verilog for Behavioral Modeling
Case Statement (cond)
Case statement used to trap x and z values:
reg [1:0]
sel, flag;
reg [15:0]
in0, in1, in2, in3, out;
case (sel)
2'b00:
out = in0;
2'b01:
out = in1;
2'b0x,
2'b0z:
out = flag ? 16'bx : 16'b0;
2'b10:
out = in2;
2'b11:
out = in3;
2'bx0,
2'bz0:
out = flag ? 16'bx : 16'b0;
default out = 16'bx;
endcase
Nestoras Tzartzanis
39
February 3, 1998
EE577b Verilog for Behavioral Modeling
Case Statement with Dont-Cares
casez: high-impedance (z) values are treated as dont-cares
casex: high-impedance (z) and unknown (x) values are treated as dont-cares
reg [31:0]
instruction;
reg [2:0]
aluOp;
casez (instruction[31:26])
6'b00????:
aluOp = 3'b000;
6'b100???:
aluOp = 3'b001;
6'b101???:
aluOp = 3'b010;
6'b1100??:
aluOp = 3'b001;
6'b11010?:
aluOp = 3'b100;
6'b110110:
aluOp = 3'b101;
endcase
Nestoras Tzartzanis
40
// ? indicates a dont-care bit position
February 3, 1998
EE577b Verilog for Behavioral Modeling
Looping Statements
forever
repeat
while
for
Nestoras Tzartzanis
41
February 3, 1998
EE577b Verilog for Behavioral Modeling
Forever Statement
Continuously executes a statement
Should be used in conjunction with the timing controls (to be presented later)
Nestoras Tzartzanis
42
February 3, 1998
EE577b Verilog for Behavioral Modeling
Repeat Statement
Executes a statement a fixed number of times
parameter
size = 8, longsize = 16;
reg [size:1]
opa, opb;
reg [longsize:1]
result;
begin: mult
// begin-end statements could optionally be named
reg [longsize:1] shift_opa, shift_opb;
shift_opa = opa;
shift_opb = opb;
result = 0;
repeat (size)
begin
if (shift_opb[1])
result = result + shift_opa;
shift_opa = shift_opa << 1;
shift_opb = shift_opb >> 1;
end
end
Nestoras Tzartzanis
43
February 3, 1998
EE577b Verilog for Behavioral Modeling
While Statement
Executes a statement until an expression becomes false
begin: count1s
reg [7:0]
tempreg;
count = 0;
tempreg = rega;
while (tempreg)
begin
if (tempreg[0]) count = count + 1;
tempreg = tempreg >> 1;
end
end
Nestoras Tzartzanis
44
February 3, 1998
EE577b Verilog for Behavioral Modeling
For Statement
Similar to C for-statement
for (initial_assignment; condition; step_assignment)
statement
Using a for-loop to initialize a memory:
begin :init_mem
reg [7:0]
tempi;
for (tempi = 0; tempi < memsize; tempi = tempi + 1)
memory[tempi] = 0;
end
Nestoras Tzartzanis
45
February 3, 1998
EE577b Verilog for Behavioral Modeling
Procedural Timing Controls
delay control, which is introduced by the number symbol (#)
event control, which is introduced by the at symbol (@)
wait statement, which operates like a combination of the event control and the while
loop
Nestoras Tzartzanis
46
February 3, 1998
EE577b Verilog for Behavioral Modeling
Delay Control
Examples
#10 rega = regb;
#d rega = regb;
// d is defined as a parameter
#((d+e)/2) rega = regb;
#regr regr = regr + 1;
Nestoras Tzartzanis
// delay is the value in regr
47
February 3, 1998
EE577b Verilog for Behavioral Modeling
Event Control
Synchronizes execution of a procedural statement with a value change on a net or
register, or the occurrence of a declared event
Examples:
@r rega = regb;
// controlled by any value changes in the register r
@(posedge clock) rega = regb; // controlled by positive edge on clock
forever @(negedge clock) rega = regb; // controlled by negative edge
@(trig or enable) rega = regb;
// controlled by trig or enable
@(posedge clock_a or posedge clock_b) rega = regb;
Nestoras Tzartzanis
48
February 3, 1998
EE577b Verilog for Behavioral Modeling
Wait Statement
The execution of a statement can be delayed until a condition becomes true
The wait statement checks a condition: if it is false, causes the procedure to pause
until that condition becomes true before continuing
wait (condition_expression) statement
Example:
reg
enable, a, b;
initial begin
wait (!enable) #10 a = 1;
#10 b = 1;
end
initial
#100 enable = 0;
Nestoras Tzartzanis
// a becomes 1 at #110
// b becomes 1 at #120
49
February 3, 1998
EE577b Verilog for Behavioral Modeling
Intra-Assignment Timing Controls
Can be delay or event controls
The right-hand side expression is evaluate before the delay or the event, but the
assignment happens when the delay expires or the event happens:
a = #5 b;
equivalent to:
begin
temp = b;
#5 a = temp;
end
a = @(posedge clk) b;
equivalent to:
begin
temp = b;
@(posedge clk) a = temp;
end
Nestoras Tzartzanis
50
February 3, 1998
EE577b Verilog for Behavioral Modeling
Block Statements
Sequential blocks delimited by the keywords begin and end
statements execute in sequence, one after another
delays are cumulative; each statement executes after all the delays preceding it
have elapsed
control passes out of the block after the last statement executes
Parallel blocks delimited by the keywords fork and join
statements execute concurrently
delay values for each statement are relative to the simulation time when control
enters the block
delay control is used to provide time-ordering for assignments
control passes out of the block when the last time-ordered statement executes or
a disable statement executes
Nestoras Tzartzanis
51
February 3, 1998
EE577b Verilog for Behavioral Modeling
Sequential Block Examples
begin
#10 a = 1;
#20 a = 0;
end
// a becomes 1 at #10
// a becomes 0 at #30
begin
@trig r = 1;
#250 r = 0;
end
// r becomes 1 when trig changes value
// r becomes 0 250 time units after r changes value
begin
@(posedge clock) q = 0;
@(posedge clock) q = 1;
end
Nestoras Tzartzanis
// q becomes 0 at the posedge of clock
// q becomes 1 at the next posedge of clock
52
February 3, 1998
EE577b Verilog for Behavioral Modeling
Parallel Block Examples
fork
#30 a = 0;
#10 a = 1;
// a becomes 0 at #30
// a becomes 1 at #10
join
fork
@(posedge clock) q = 0;
@(posedge clock) w = 1;
// q becomes 0 at the posedge of clock
// w becomes 1 at the same posedge of clock
join
begin
fork
@Aevent;
@Bevent;
join
areg = breg;
// this statement is executed after both Aevent and
// Bevent have occurred regardless their order
end
Nestoras Tzartzanis
53
February 3, 1998
EE577b Verilog for Behavioral Modeling
Structured Procedures
initial statement
always statement
task (not discussed)
function (not discussed)
Nestoras Tzartzanis
54
February 3, 1998
EE577b Verilog for Behavioral Modeling
Initial Statement
Activated at the beginning of simulation
Executed once
initial
begin
areg = 0;
// initialize a register
for (index = 0; index < size; index = index + 1)
memory[index] = 0;
// initialize a memory
end
initial
begin
inputs = 6'b000000;
#10 inputs = 6'b001011;
#10 inputs = 6'b110001;
end
Nestoras Tzartzanis
55
February 3, 1998
EE577b Verilog for Behavioral Modeling
Always Statement
Activated at the beginning of simulation
Repeats continuously throughout the whole simulation run
always
#100 clock = ~clock
always
@(posedge clock)
begin
#10 a = 0;
#20 b = 1;
#40 b = 0;
end
Nestoras Tzartzanis
// creates a clock signal with #200 period time
// the block below starts execution at posedge of clock
// #10 after the posedge of clock, a becomes 0
// #30 after the posedge of clock, b becomes 1
// #70 after the posedge of clock, b becomes 1
56
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
Expressions
Assignments
Behavioral modeling
========>
Hierarchical structures
System (built-in) functions
Example
Nestoras Tzartzanis
57
February 3, 1998
EE577b Verilog for Behavioral Modeling
Hierarchical Structures
Hierarchy consists of modules
High-level modules create instances of lower-level modules
Modules communicate through input, output, and bidirectional ports
Each module definition stands alone; the definitions are not nested
Nestoras Tzartzanis
58
February 3, 1998
EE577b Verilog for Behavioral Modeling
Syntax of Module Definitions
module mname (port1, port2, port3, port4, ...); // keywords are in italics
output port1;
input
port2, port3;
inout
port4;
reg
port1;
// output ports are usually defined as registers
reg
variable1, variable2; // definitions of local variables
wire
variable3;
initial
statements // any of the behavioral modeling statements
always
statements // any of the behavioral modeling statements
assign
continuous-assign-statements // required for nets
mod1
mod1Instance (variable1, variable2, ...) // instantiating lowerlevel modules
endmodule
Nestoras Tzartzanis
59
February 3, 1998
EE577b Verilog for Behavioral Modeling
Module Ports
Used to connect modules
Can be thought as procedure parameters
Could be input, output, or inout
Input and inout ports can be only net data type
My advice is:
define all the output ports as registers
works fine with input ports because, in module connections, input ports are
driven by output ports that are registers
define all the inout ports as wires and use assign statements for them
Nestoras Tzartzanis
60
February 3, 1998
EE577b Verilog for Behavioral Modeling
Example
module m;
reg
clk;
wire [1:10]
out_a, in_a;
wire [1:5]
out_b, in_b;
// create an instance and set parameters
vddf #(10, 15) mod_a (out_a, in_a, clk);
// create an instance leaving default values
vddf
mod_b (out_b, in_b, clk);
endmodule
module vdff (out, in, clk);
parameter
size = 1, delay = 1;
input [0:size-1] in;
input
clk;
output [0:size-1] out;
reg [0:size-1]
out;
always @(posedge clk)
#delay out = in;
endmodule
Nestoras Tzartzanis
61
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
Expressions
Assignments
Behavioral modeling
Hierarchical structures
========>
Nestoras Tzartzanis
System (built-in) functions
Example
62
February 3, 1998
EE577b Verilog for Behavioral Modeling
$display and $write
They display information
They are identical, except that $display automatically adds a newline character to the
end of the output
Similar to the C printf statement
$display("rval = %h hex %d decimal", rval, rval)
$display("rval = %o octal %b binary", rval, rval)
$write("simulation time is $t \n", $time); //$time is a function that returns the
current simulation time
Nestoras Tzartzanis
63
February 3, 1998
EE577b Verilog for Behavioral Modeling
Format Specifications
%h or %H
display in hexadecimal format
%d or %D
display in decimal format
%o or %O
display in octal format
%b or %B
display in binary format
%c or %C
display in ASCII character format
%m or %M
display hierarchical name (doesnt need a parameter)
%s or %S
display as a string
%t or %T
display in current time format
Nestoras Tzartzanis
64
February 3, 1998
EE577b Verilog for Behavioral Modeling
Continuous Monitoring
$monitor, $monitoron, $monitoroff
$monitor displays a list of variables any time one of them changes
$monitoron and $monitoroff enable and disable the monitor statement respectively
$monitor($time, "rxb=%b txb=%b", rxb, txb);
Nestoras Tzartzanis
65
February 3, 1998
EE577b Verilog for Behavioral Modeling
Strobed Monitoring
The $strobe system task displays the specified information at the end of the time unit
Same format as $display
forever @(negedge clock)
$strobe("At time %d, data is %h", $time, data);
Nestoras Tzartzanis
66
February 3, 1998
EE577b Verilog for Behavioral Modeling
File Output
$fopen opens a file:
integer
out_file;
// out_file is a file descriptor (declared as integer)
out_file = $fopen("cpu.data"); // cpu.data is the file opened
$fdisplay, $fwrite, $fstrobe, $fmonitor are used to write data into the file:
$fdisplay(out_file, "rval = %h hex %d decimal", rval, rval);
$fclose closes a file:
$fclose(out_file);
Nestoras Tzartzanis
67
February 3, 1998
EE577b Verilog for Behavioral Modeling
$finish
$finish causes the simulator to exit and pass control back to the host operating system
Example: if the simulation time is #800, then use the following statement at the
beginning of the top-level module
initial
#800 $finish;
Nestoras Tzartzanis
68
February 3, 1998
EE577b Verilog for Behavioral Modeling
Loading Memories from Text Files
$readmemb and $readmemh read and load (binary and hexadecimal respectively)
data from a specified text file into a specified memory
reg [7:0]
mem[1:256]
// a 8-bit, 256-word memory is declared
To load the memory at simulation time 0 starting at address 1 from file mem.data:
initial $readmemh("mem.data", mem)
To load the memory at simulation time 0 starting at address 16 and continuing on
towards address 256 from file mem.data:
initial $readmemh("mem.data", mem, 16)
To load the memory at simulation time 0 starting at address 128 and continuing down
towards address 1 from file mem.data:
initial $readmemh("mem.data", mem, 128, 1)
Nestoras Tzartzanis
69
February 3, 1998
EE577b Verilog for Behavioral Modeling
Displaying Signals as Graphical Waveforms
Used with cwaves graphical interface
$shm_open opens a database
$shm_probe specifies signals whose waveform can be displayed with cwaves
$shm_close terminates the simulations connection to the database
initial
#800
Nestoras Tzartzanis
$shm_open("signals.shm"); // default database name is waves.shm
$shm_probe(clk, opA, opB);
// $shm_probe("AS"); would probe all signals
$shm_close();
$finish;
70
February 3, 1998
EE577b Verilog for Behavioral Modeling
Outline
Introduction
Data types
Expressions
Assignments
Behavioral modeling
Hierarchical structures
System (built-in) functions
========>
Nestoras Tzartzanis
Example
71
February 3, 1998
EE577b Verilog for Behavioral Modeling
Simulating a Simple Instruction Set Architecture
A baby-instruction set:
7 6
3 2
0
0 Imm
Rd
MV:
7 6 5
3 2
0
1 0 Rsr
Rd
ADD: Rd Rd + Rsr
7 6 5
3 2
0
1 1 Rsr
Rd
XOR: Rd Rd Rsr
Rd sign_ext(Imm)
No memory instructions
No control transfer instructions
If the operand of an instruction is written by the previous one, the old value is read
Nestoras Tzartzanis
72
February 3, 1998
EE577b Verilog for Behavioral Modeling
Block Diagram Data Path
I-Memory
CPU
Counter
ALU
PC
Register
File
Reset
Instruction
Decoder
Nestoras Tzartzanis
73
February 3, 1998
EE577b Verilog for Behavioral Modeling
A Data-Memory Example
Test Module
Accessing the
Memory
D-Memory
Address
Data
Rd/Wr
An example where a module port should be declared as inout (i.e., the data bus)
Assuming a single phase clocking scheme, the data bus is actively driven by the test
module during the first half cycle and by the memory during the second half cycle
Temporary register data type variables are required from both sides
The assign-statement should be used
Nestoras Tzartzanis
74
February 3, 1998