Sie sind auf Seite 1von 35

Programming Language Interface (PLI)

Pedram A. Riahi Test Seminar August 11th, 2004

Contents
PLI History Verilog PLI Overview Verilog VPI Routines Cadence VPI Environment Mentor Graphics VPI Environment References

Aug. 11th, 2004

Test Seminar

PLI History

1985 - The PLI was developed by Gateway Design Automation as part of the proprietary Verilog-XL simulator 1990 - The PLI standard was released to the public domain along with the Verilog HDL and Verilog SDF standards by Cadence Design System 1990 - Open Verilog International (OVI) owned the Verilog HDL, the OVI version of the PLI was called PLI 1.0 1993 - OVI released PLI 2.0, a completely new interface, intended to replace PLI 1.0 1993 - OVI submitted Verilog to the IEEE for standardization 1995 -The IEEE-1364-1995 Verilog PLI standard was released 2001 -The IEEE-1364-2001 Verilog HDL & PLI standard updated with many new language features many new language features

Aug. 11th, 2004

Test Seminar

Verilog PLI Overview


IEEE Std Verilog HDL LRM Clauses 20-27 and Appendices E-G Verilog PLI Generations:

Task/Function Routines (TF Routines, tf_) Access Routines (ACC Routines, acc_) Verilog Procedural Interface Routines (VPI Routines, vpi_)

Aug. 11th, 2004

Test Seminar

Verilog PLI Overview

User-Defined System Tasks and Functions


Names ($) Types Overriding User-Supplied PLI Applications Arguments

Interface Mechanism Include Files


acc_user.h veriuser.h vpi_user.h

Memory Restriction

Aug. 11th, 2004

Test Seminar

Verilog VPI Routines

System Tasks and Functions


vpi_register_systf() vlog_startup_routines[]

Interface

Call-backs

vpi_register_cb()

Access to HDL and Simulation Objects

module m, wire w: m1.w, m2.w

Error Handling Function Availability Traversing Expressions

Aug. 11th, 2004

Test Seminar

Verilog VPI Routines

Call-backs

Simulation Call-backs
Simulation Action and Features Simulation Times Simulation Events

Statement Call-backs Removing Call-backs

Time Queue

Aug. 11th, 2004

Test Seminar

Verilog VPI Routines

Diagram Key for Objects and Classes

Object Definition
Object Reference

Class Definition

Class Reference

Unnamed Class

Aug. 11th, 2004

Test Seminar

Verilog VPI Routines

Diagram Key for Traversing Relationships

obj_h = vpi_handle (obj, ref_h);

obj_h = vpi_handle (Tag, ref_h);

obj_h = vpi_handle (obj, NULL);

Aug. 11th, 2004

Test Seminar

Verilog VPI Routines

Diagram Key for Traversing Relationships

itr = vpi_iterate (obj, ref_h); while (obj_h = vpi_scan (itr)) { process obj_h}

itr = vpi_iterate (Tag, ref_h); while (obj_h = vpi_scan (itr)) { process obj_h}

itr = vpi_iterate (obj, NULL); while (obj_h = vpi_scan (itr)) { process obj_h}

Aug. 11th, 2004

Test Seminar

10

Verilog VPI Routines

Diagram Key for Accessing Properties


PLI_INT32 vect_flag = vpi_get (vpiVector, obj_h); PLI_INT32 size = vpi_get (vpiSize, obj_h); PLI_INT8 *name = vpi_get_str (vpiName, obj_h);

Identified Routines

Aug. 11th, 2004

Test Seminar

11

Verilog VPI Routines

Object Relationships and Properties

modH = vpi_handle (vpiModule, netH);

Aug. 11th, 2004

Test Seminar

12

Verilog VPI Routines

Object Relationships and Properties

vpiHandle net, mod; net = vpiHandle_by_name (top.m1.w, NULL); mod = vpi_handle (vpiModule, net);

vpi_handle (vpiExpr, partH);

Aug. 11th, 2004

Test Seminar

13

Verilog VPI Routines

Object Relationships and Properties

PLI_BYTE8 *name = vpi_get_str (vpiFullName, mod);

vpiHandle itr; itr = vpi_iterate(vpiNet, mod); while (net = vpi_scan (itr)) vpi_printf(%s\n, vpi_get_str (vpiFullName, net));

Aug. 11th, 2004

Test Seminar

14

Verilog VPI Routines

Object Relationships and Properties

void traverseExpr (vpiHandle expr) { vpiHandle subExprI, subExprH; switch (vpi_get (vpiExpr, expr)) { case vpiOperation: subExprI = vpi_iterate (vpiOperand, expr); if (subExprI) while (subExprH = vpi_scan (subExprI)) traverseExpr (subExprH); default: break; }}

Aug. 11th, 2004

Test Seminar

15

Verilog VPI Routines

Object Relationships and Properties

Type Properties -> type int: vpiType

vpi_get (vpiType, H); vpi_get_str (vpiType, H);


File and -> location int: vpiLineNo str: vpiFile

Line Properties

Delays and Values


16

Aug. 11th, 2004

Test Seminar

Verilog VPI Routines

VPI Routines for Simulation Related Call-backs


vpi_register_cb(): Register a simulation-related call-back vpi_remove_cb(): Remove a simulation-related call-back vpi_get_cb_info(): Get information about a simulation-related call-back

Aug. 11th, 2004

Test Seminar

17

Verilog VPI Routines

VPI Routines for System Task/Function Call-backs


vpi_register_systf(): Register a system task/function call-back vpi_get_systf_info(): Get information about a system task/function call-back

Aug. 11th, 2004

Test Seminar

18

Verilog VPI Routines

VPI Routines for Traversing Verilog HDL Hierarchy


vpi_handle(): Obtain a handle for an object with a one-to-one relationship vpi_iterate(), vpi_scan(): Obtain handles for objects in a one-to-many relationship vpi_handle_multi(): Obtain a handle for an object in a many-to-one relationship

Aug. 11th, 2004

Test Seminar

19

Verilog VPI Routines

VPI Routines for Accessing Properties of Objects


vpi_get(): Get the value of objects with types of int or bool vpi_get_str(): Get the value of objects with types of string

Aug. 11th, 2004

Test Seminar

20

Verilog VPI Routines

VPI Routines for Accessing Objects from Properties


vpi_handle_by_name(): Obtain a handle for a named object vpi_handle_by_index(): Obtain a handle for an indexed object vpi_handle_by_multi_index(): Obtain a handle to a word or bit in an array

Aug. 11th, 2004

Test Seminar

21

Verilog VPI Routines

VPI Routines for Delay Processing


vpi_get_delays(): Retrieve delays or timing limits of an object vpi_put_delays(): Write delays or timing limits to an object

Aug. 11th, 2004

Test Seminar

22

Verilog VPI Routines

VPI Routines for Logic and Strength Value Processing


vpi_get_value(): Retrieve logic value or strength value of an object vpi_put_value(): Write logic value or strength value to an object

Aug. 11th, 2004

Test Seminar

23

Verilog VPI Routines

VPI Routines for Simulation Time Processing

vpi_get_time(): Find the current simulation time or the scheduled time of future events

Aug. 11th, 2004

Test Seminar

24

Verilog VPI Routines

VPI Routines for Miscellaneous Utilities

vpi_printf() vpi_vprintf() vpi_flush() vpi_mcd_open() vpi_mcd_close() vpi_mcd_printf() vpi_mcd_vprintf() vpi_mcd_flush() vpi_mcd_name() vpi_get_vlog_info() vpi_compare_objects() vpi_chk_error() vpi_free_object() vpi_put_data() vpi_get_data() vpi_put_userdata() vpi_get_userdata() vpi_sim_control()

Aug. 11th, 2004

Test Seminar

25

Verilog VPI Routines

Module Data Model

Aug. 11th, 2004

Test Seminar

26

Verilog VPI Routines

Net Data Model

Aug. 11th, 2004

Test Seminar

27

Verilog VPI Routines

Reg Data Model

Aug. 11th, 2004

Test Seminar

28

Verilog VPI Routines

Cadence PLI Environment

Aug. 11th, 2004

Test Seminar

29

Verilog VPI Routines

Cadence PLI Environment

Creating a C Function

#include <stdio.h> #include vpi_user.h int hello_task () { vpi_printf (Hello from a new VPI task \n);}

Creating a C++ Function

extern C void ncmain (int, char **); main(argc, argv) int argc; char* argv[]; { ncmain(argc, argv); }

Aug. 11th, 2004

Test Seminar

30

Verilog VPI Routines

Cadence PLI Environment

Associating C Function with a new System Task

void register_my_systfs () { s_vpi_systf_data task_data_s; p_vpi_systf_data task_data_p = &task_data_s; task_data_p->type = vpiSysTask; task_data_p->tfname = $hello ; task_data_p->calltf = (int(*)()) hello_task; task_data_p->compiletf = NULL; vpi_register_systf (task_data_p); }

Aug. 11th, 2004

Test Seminar

31

Verilog VPI Routines

Cadence PLI Environment

Registering Users New System Task

/* vpi_user.c */ #include vpi_user.h #include vpi_user_cds.h void (*vlog_startup_routines[]) () = {register_my_systfs, 0};

Invoking Users System Task

module top; Initial begin $hello; end endmodule

Aug. 11th, 2004

Test Seminar

32

Verilog VPI Routines

Cadence PLI Environment

Compiling C Files (vconfig)

Static/Dynamic

cc -KPIC -c ~/vpi_user.c -I<InstDir>/include cc -KPIC -c ~/hello.c -I<InstDir>/include ld -G vpi_user.o hello.o -o libvpi.so executable file

Compiling and Simulating Verilog File

setenv LD_LIBRARY_PATH \ ~/<LibDir>:$LD_LIBRARY_PATH ncelab access+rwc worklib.top:v ncverilog +ncaccess+rwc +plinowarn hello.v

Aug. 11th, 2004

Test Seminar

33

Verilog VPI Routines

Mentor Graphics PLI Environment

Compiling C Files

cc -c ~/vpi_user.c -I<InstDir>/include cc -c ~/hello.c -I<InstDir>/include ld -G vpi_user.o hello.o -o vpi_lib.so

Compiling and Simulating Verilog File (modelsim.ini)

vlib work vlog hello.v vsim -c -pli vpi_lib.so top

Aug. 11th, 2004

Test Seminar

34

References
Cadence Design Systems, Inc., VPI User Guide and Reference, Product Version 3.2, Dec. 2000. Cadence Design Systems, Inc., NCVerilog Simulator Help, Product Version 3.2, Dec. 2000. Cadence Design Systems, Inc., Verilog-XL User Guide and Reference, Product Version 2.8, Aug. 1999. Mentor Graphics, ModelSim SE User's Manual, Version 5.7a, Jan. 2003 Stuart Sutherland, The Verilog PLI Handbook, Kluwer Academic Publishers, 2002. Swapnajit Mittra, Principles of Verilog PLI, Kluwer Academic Publishers, 1999.

Aug. 11th, 2004

Test Seminar

35

Das könnte Ihnen auch gefallen