Modeling FIFO Communication Channels Using SystemVerilog Interfaces
Modeling FIFO Communication Channels Using
SystemVerilog Interfaces
Stuart Sutherland
Sutherland HDL, Inc.
stuart@sutherland-
ABSTRACT
The Verilog Hardware Description Language (Verilog HDL) does not have a direct equivalent to
SystemC channels.
These channels are often used for modeling abstract, high-level
communications between modules. This paper shows how the SystemVerilog extensions to
Verilog can be used to model high-level communication channels.
SystemVerilog extends the Verilog HDL with a powerful interface construct. This construct
provides a way to encapsulate the communication between the major blocks of a design.
Interfaces can be used for more than just data encapsulation, however. An interface can also
contain procedural code, tasks and functions. This paper provides a brief tutorial on
SystemVerilog interfaces, and then delves into one way in which interfaces can be used for highlevel modeling. A FIFO channel is used as the basis for examples in this paper, but the concepts
presented can be applied to other types of communication channels, such as a mutex channel. The
FIFO behavior is modeled using other powerful SystemVerilog constructs: mailboxes and queues.
The interface FIFO channel is modeled to be reconfigurable; it can be configured to pass data of
any data type, including integers, reals, vectors of any size, and user-defined types. The paper also
discusses synthesizing SystemVerilog interfaces and the modeling constructs used in the
examples shown.
SNUG Boston 2004
1 Modeling FIFO Channels Using SystemVerilog Interfaces
Table of Contents
1.0 SystemC channels versus SystemVerilog interfaces .............................................................3
2.0 SystemVerilog interface tutorial ............................................................................................4
2.1 Referencing signals defined within an interface ...........................................................5
2.2 Interface module port declarations (modports) .............................................................5
2.3 Selecting modports .......................................................................................................5
2.4 Interface methods ..........................................................................................................7
2.5 Interface processes ........................................................................................................8
2.6 Parameterized SystemVerilog interfaces ......................................................................8
3.0 Modeling FIFO channels using SystemVerilog mailboxes ...................................................9
3.1 Overview of SystemVerilog mailboxes ........................................................................9
3.2 A FIFO channel using mailboxes ...............................................................................11
3.3 Connecting and using the interface channel ...............................................................13
3.4 Synthesis considerations with mailboxes ...................................................................14
4.0 Modeling FIFO channels using SystemVerilog queues ......................................................15
4.1 Overview of SystemVerilog queues ...........................................................................15
4.2 An abstract FIFO channel using queues .....................................................................16
4.3 Connecting and using the interface channel ...............................................................17
4.4 Synthesis considerations with queues .........................................................................17
5.0 A synthesizable FIFO channel using queues .......................................................................18
5.1 Connecting and using the interface channel ...............................................................21
5.2 Synthesis considerations .............................................................................................21
6.0 Conclusions ..........................................................................................................................22
7.0 Future work ..........................................................................................................................23
8.0 References ............................................................................................................................24
9.0 About the author ..................................................................................................................24
List of Figures and Examples
Figure 1:
Inter-module communication using a FIFO ..............................................................4
Figure 2:
Verilog Ports vs. Interface Ports ...............................................................................5
Example 1: SystemVerilog Interface with modports ...................................................................6
Example 2: Interface modport selection as part of the module instance ......................................7
Example 3: Interface modport selection as part of the module definition ...................................7
Example 4: Interface methods imported into modules ................................................................8
Example 5: Calling imported interface methods ..........................................................................9
Example 6: Interface with procedural code .................................................................................9
Example 7: Parameterized interface FIFO size ..........................................................................10
Example 8: Parameterized interface data types .........................................................................10
Figure 3:
UNI and NNI ATM switch data packets ................................................................13
Example 9: SystemVerilog definitions for UNI and NNI ATM switch data packets ................13
Example 10: Complete SystemVerilog FIFO interface channel using SystemVerilog mailboxes14
Example 11: Netlist connecting two modules using the FIFO interface channel .........................15
Example 12: Abstract SystemVerilog FIFO interface channel using SystemVerilog queues .....18
Example 13: Synthesizable SystemVerilog FIFO interface channel using queues ......................20
SNUG Boston 2004
2 Modeling FIFO Channels Using SystemVerilog Interfaces
1.0 SystemC channels versus SystemVerilog interfaces
SystemC provides channels and interfaces for communication between modules. A SystemC
channel encapsulates how information is transferred between modules. A SystemC interface
defines a set of methods (functions) for a channel. These methods are used to send and receive
information through a channel, and to probe and control a channel. Channels can be user defined,
and can be built from other SystemC constructs, such as ports, module instances, other channels,
and processes. The current SystemC standard, 2.0.1[1] also includes a number of pre-defined
channels, such as sc_signal, sc_fifo, sc_mutex, and sc_sempahore. In general, these predefined SystemC channels are not considered to be synthesizable[2]. They do not contain the
level of logic detail required for synthesis tools to realize the intended hardware implementation.
SystemVerilog adds an interface construct to the Verilog language. A SystemVerilog interface is
essentially the same as a SystemC channel. An interface encapsulates the communication
information between Verilog modules. This encapsulation can include the module port
definitions, tasks, functions, always blocks, continuous assignments, assertions, and other
modeling constructs. Interfaces can also include instances of other interfaces, allowing more
complex, hierarchical interfaces to be modeled.
Unlike SystemC, SystemVerilog does not provide a set of pre-defined communication channels.
SystemVerilog provides the general purpose interface construct, enabling designers to model any
type of communication functionality. SystemVerilog also provides a number of powerful
extensions to Verilog that make it easy to model complex communications between modules at a
higher level of abstraction than is possible with Verilog. These extensions include semaphores,
mailboxes and queues.
This paper shows how the functionality of one of the more complex SystemC built-in channels, a
FIFO (First-In, First-Out), can be easily modeled using SystemVerilog interfaces. FIFOs are
typically used to communicate data between design blocks that are operating with different,
asynchronous clocks. Both high-level abstract versions of a communication channel are
presented, as well as synthesizable versions. The concepts shown in this paper can be readily
adapted to a variety of other communication channel types.
Figure 4. Inter-module communication using a FIFO
Master
module
packet
data packet
write
pointer
write
method
SNUG Boston 2004
Slave
module
BUS interface
data packet
data packet
read
method
read
pointer
packet
3 Modeling FIFO Channels Using SystemVerilog Interfaces
2.0 SystemVerilog interface tutorial
The basic building block for a SystemVerilog interface is the keyword pair interface...
endinterface. This keyword pair is used to define a separate structural block, similar to a
Verilog module. In its most basic form, an interface simply encapsulates the signals that are used
to communicate between Verilog modules. The interface block is then used as a module port,
replacing multiple discrete ports for each communication net. Figure 5 contrasts module
interconnections using Verilog module ports with a basic SystemVerilog interface. Observe the
usage of the interface...endinterface keyword pair, and how the MASTER and SLAVE modules
use the interface as a module port.
Figure 5. Verilog Ports vs. Interface Ports
Module Communication Using
Verilog Ports
MASTER
module
SLAVE
module
Module Communication Using
SystemVerilog Interfaces
MASTER
module
BUS
data
data
address
address
request
request
grant
grant
ready
ready
clock
SLAVE
module
clock
¡°BUS¡± is the
module MASTER (input
clock,
inout [31:0] data,
output [15:0] address,
output
request,
input
grant,
input
ready );
...
endmodule
module SLAVE
(input
clock,
inout [31:0] data,
input [15:0] address,
input
request,
output
grant,
output
ready );
...
endmodule
module top (input clock);
wire [31:0] data,
wire [15:0] address,
wire
request, grant, ready;
MASTER
SLAVE
interface BUS ;
interface name
wire
[31:0] data,
logic [15:0] address,
logic
request, grant, ready;
endinterface
module MASTER (interface io_bus);
...
¡°io_bus¡± is the
endmodule
module port name
module SLAVE (interface io_bus);
...
endmodule
module top (input clock);
¡°io¡± is the
BUS
io ();
interface
MASTER i1 (io, clock); instance name
SLAVE
i2 (io, clock);
endmodule
i1 (clock, data, address,
request, grant, ready);
i2 (clock, data, address,
request, grant, ready);
endmodule
SNUG Boston 2004
4 Modeling FIFO Channels Using SystemVerilog Interfaces
2.1 Referencing signals defined within an interface
Modules that are connected to an interface can reference the interface signals by using a relative
hierarchical path name. The path name is formed by prepending the name of the interface port to
the signal name. For example:
module MASTER (interface io_bus);
always @(io_bus.request)
...
// "io_bus" is the port name
// "request" is inside the interface
2.2 Interface module port declarations (modports)
Each module connected to an interface may need to see a different view of the signals within the
interface. In the example above, the request signal is an output from the MASTER module, and is
an input to the SLAVE module. SystemVerilog interfaces provide a means to define different views
of an interface. The definition is made within the interface, using the modport keyword, which is
an abbreviation for module port. An interface can have any number of modport definitions, each
describing a different view of the signals within the interface. Examples of two modport
declarations are:
Example 14. SystemVerilog Interface with modports
interface BUS ;
wire
[31:0] data;
logic [15:0] address;
logic
request, grant, ready;
modport master_ports (inout
output
output
input
input
data,
address,
request,
grant,
ready );
modport slave_ports
data,
address,
request,
grant,
ready );
(inout
input
input
output
output
endinterface
2.3 Selecting modports
SystemVerilog provides two ways to specify which modport a module interface port should use:
? As part of the interface connection to a module instance
? As part of the module port declaration in the module definition
Selecting the modport at the module instance
When a module is instantiated and an instance of an interface is connected to a module instance
port, the specific modport of the interface can be specified, as illustrated in Example 15.
SNUG Boston 2004
5 Modeling FIFO Channels Using SystemVerilog Interfaces
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related download
- systemverilog interface based design researchgate
- systemverilog ports and interfaces
- is there a future for systemverilog interfaces accellera
- introduction to systemverilog computer architecture stony brook lab
- a brief introduction to systemverilog computer architecture stony
- unit 2 systemverilog for design columbia university
- systemverilog pass interface to class
- systemverilog s virtual world an introduction to virtual classes
- towards a practical design methodology with systemverilog interfaces
- systemverilog interface in package
Related searches
- marketing communication channels list
- defining different communication channels for business
- communication channels meaning
- communication channels definition
- communication channels in business
- communication channels in the workplace
- communication channels in use today
- types of communication channels pdf
- communication channels pmp
- communication channels pmp formula
- calculating communication channels pmp
- communication channels examples