verdi npi training - vc apps · dm model introduction • lets users traverse and manipulate design...

26
Verdi 3 NPI Training Text Model Based on Verdi 3 2013.01

Upload: others

Post on 26-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 1

Verdi3 NPI Training Text Model

Based on Verdi3 2013.01

Page 2: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 2

Glossary

• VIA = Verdi Interoperability Applications

• NPI = Novas Programming Interface

• Novas KDB = Novas Knowledge Database

• FSDB = Fast Signal Database

• VPI = Verilog Procedural Interface

Page 3: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 3

Overview

• Text Model Introduction

• NPI Commands

• NPI Object Diagrams

• Case Study

Page 4: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 4

Overview

• Text Model Introduction

• NPI Commands

• NPI Object Diagrams

• Case Study

Page 5: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 5

DM Model Introduction

• Lets users traverse and manipulate design source code from a text

perspective

– Every file, line, and word is regarded as an object

• Provides basic insert, delete, and replace capabilities

• Users can access the attribute of each word from the design

analysis results of the Verdi system

What is NPI Text Model?

Page 6: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 6

Overview

• Text Model Introduction

• NPI Commands

• NPI Object Diagrams

• Case Study

Page 7: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 7

NPI Commands

• npi_text_file_by_name –name Filename

– Obtain a file handle with the specified full file name or local file name

• npi_text_handle –type TextObjType –ref ReferenceHandle

– Obtain a handle that contains the reference handle object

– Available values of TextObjType are npiTextFile and npiTextLine

• Example:

‏ % set file_hdl [ npi_text_file_by_name –name‏“example.v”‏]

‏ % set line_iter [ npi_text_iter_start –type‏“npiTextLine”‏–ref $file_hdl ]

‏ % set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ % set line_file_handle [ npi_text_handle –type‏“npiTextFile”‏–ref $line_hdl ]

Get Handles

Get the handle for example.v file

Get the handle for the file that the line ($line_hdl) belongs to

Page 8: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 8

NPI Commands

• npi_text_iter_start –type TextObjType –ref ReferenceHandle

– Obtain an iterator to iterate the reference handle object

– Available values of TextObjType are npiTextFile, npiTextLine, and

npiTextWord

– Specify‏an‏empty‏string‏(”“)‏to‏ReferenceHandle if the to-be iterated type is

npiTextFile

• npi_text_iter_next –iter IteratorHandle

– Iterate the iterator to the next element

• npi_text_iter_stop –iter IteratorHandle

– Free the iterator, and release the occupied resource

Create the Iterator and Iterate Items (1/2)

Page 9: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 9

NPI Commands

• Example:

‏ set file_iter [ npi_text_iter_start –type‏“npiTextFile”‏–ref‏”“‏]

‏ while‏{‏=!‏”“‏[‏set‏file_hdl‏[‏npi_text_iter_next –iter $file_iter ] ] } {

‏ set file_name [ npi_text_property_str –type‏“npiTextFileName”‏–ref

$file_hdl ]

‏ puts $file_name

‏ }

‏ npi_text_iter_stop –iter $file_iter

Create the Iterator and Iterate Items (2/2)

Create an iterator $file_iter for all imported files

Scan the iterator $file_iter and get the handle of the next file

Free the iterator $file_iter

Page 10: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 10

NPI Commands

• npi_text_property –type TextPropertyType –ref TargetHandle

– Get the specified integer property of the text object

• npi_text_property_str –type TextPropertyType –ref TargetHandle

– Get the specified string property of the text object

• Example:

‏ % set file_hdl [ npi_text_file_by_name –name‏“example.v”‏]

‏ % puts [ npi_text_property –type‏“npiTextLineCount”‏–ref $file_hdl ]

‏ % puts [ npi_text_property_str –type‏“npiTextFileName”‏–ref $file_hdl ]

Get Properties from Handles

Get the line count number of the file handle $file_hdl

Get the file name of the file handle $file_hdl

Page 11: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 11

NPI Commands

• npi_text_insert_line_before –ref ReferenceLineHandle –content “NewLine”

– Insert a line just before a specified line handle

• npi_text_insert_line_after –ref ReferenceLineHandle –content “NewLine”

– Insert a line just after a specified line handle

• npi_text_delete_line –ref TargetLineHandle

– Delete a line handle

• npi_text_replace_line –ref TargetLineHandle –content “NewContent”

– Replace the content of the target line with the specified new content

• NOTE1: The NewLine and NewContent should be enclosed by double quotation marks,‏and‏they‏could‏be‏an‏empty‏string‏(”“)‏

• NOTE2: a change line (\n) will automatically be added to the end of the NewLine. If the NewLine argument is an empty string, this function still inserts a change line (\n) just before the reference line handle.

Manipulate Lines (1/2)

Page 12: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 12

NPI Commands

• Example:

‏ % set file_hdl [ npi_text_file_by_name –name‏“example.v”‏]

‏ % set line_iter [ npi_text_iter_start –type‏“npiTextLine”‏–ref $file_hdl ]

‏ % set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ % set inserted_line_hdl_before [ npi_text_insert_line_before –ref $line_hdl –content‏*/“‏comment‏”/*‏]

‏ % set inserted_line_hdl_after [ npi_text_insert_line_after –ref $line_hdl –

content‏‏“‏wire‏c;”‏]

‏ % set replaced_line [ npi_text_replace_line –ref $line_hdl –content‏*/“‏port‏

declaration‏”/*‏]

‏ % set delete_result [ npi_text_delete_line -ref $line_hdl ]

Manipulate Lines (2/2)

Insert a line before the line handle $line_hdl

Insert a line before the line handle $line_hdl

Page 13: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 13

NPI Commands

• npi_text_insert_word_before –ref ReferenceWordHandle –word NewWord

– Insert a word just before the specified word handle

• npi_text_insert_word_after –ref ReferenceWordHandle –word NewWord

– Insert a word just after the specified word handle

• npi_text_replace_word –ref TargetWordHandle –word NewWord

– Replace the word of a specified word handle

• npi_text_delete_word –ref TargetWordHandle

– Delete a word handle

• NOTE: The NewWord could‏be‏an‏empty‏string‏(”“)‏

Manipulate Words (1/2)

Page 14: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 14

NPI Commands

• Example:

‏ % set file_hdl [ npi_text_file_by_name –name‏“example.v”‏]

‏ % set line_iter [ npi_text_iter_start –type‏“npiTextLine”‏–ref $file_hdl ]

‏ % set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ % set word_iter [ npi_text_iter_start –type‏“npiTextWord”‏–ref $line_hdl ]

‏ % set inserted_before_word_hdl [ npi_text_insert_word_before –ref $word_hdl –word‏[‏”//“‏

‏ % set inserted_after_word_hdl [ npi_text_insert_word_after –ref $word_hdl –word‏“‏//comment”‏[‏

‏ % set replaced_word [ npi_text_replace_word –ref $word_hdl –word

“AND_g1”‏]

‏ % set delete_word [ npi_text_delete_word -ref $word_hdl ]

Manipulate Words (2/2)

Insert a word before the word handle $word_hdl

Insert a word after the

word handle $word_hdl

Replace the word for the word handle $word_hdl

Delete the word handle $word_hdl

Page 15: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 15

NPI Commands

• npi_text_expand_include –ref ReferenceWordHandle

– Expand the content of the include file to a file

• Example:

‏ set file_hdl [ npi_text_file_by_name –name‏“expand_include.v”‏]

‏ set line_iter [ npi_text_iter_start –type‏“npiTextLine”‏–ref $file_hdl ]

‏ set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ set word_iter [ npi_text_iter_start –type‏“npiTextWord”‏–ref $line_hdl ]

‏ while‏{‏=!‏”“‏[‏set‏word_hdl [ npi_text_iter_next –iter $word_iter ] ] } {

‏ if‏}‏“npiTextIncludeFile”‏]‏==‏npi_text_property_str –type “npiTextWordAttribute”‏–ref $word_hdl ] } {

‏ set expand_flag [ npi_text_expand_include –ref $word_hdl ]

‏ }

‏ }

Expand the Include File

Check whether the property

of‏the‏word‏handle‏is‏“include”

Expand the include file of the word handle

Page 16: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 16

NPI Commands

• npi_text_expand_macro –ref ReferenceWordHandle

– Expand macro description to a file

• Example:

‏ set file_hdl [ npi_text_file_by_name –name‏“expand_include.v”‏]

‏ set line_iter [ npi_text_iter_start –type‏“npiTextLine”‏–ref $file_hdl ]

‏ set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ set word_iter [ npi_text_iter_start –type‏“npiTextWord”‏–ref $line_hdl ]

‏ while‏{‏=!‏”“‏[‏set‏word_hdl [ npi_text_iter_next –iter $word_iter ] ] } {

‏ if‏}‏“npiTextMacroName”‏]‏==‏npi_text_property_str –type “npiTextWordAttribute”‏–ref $word_hdl ] } {

‏ set expand_flag [ npi_text_expand_macro –ref $word_hdl ]

‏ }

‏ }

Expand the Macro

Check whether the property

of‏the‏word‏handle‏is‏“macro”

Expand the macro description of the word handle

Page 17: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 17

Overview

• DM Model Introduction

• NPI Commands

• NPI Object Diagrams

• Case Study

Page 18: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 18

How to Use Object Diagrams?

• Which object diagram should I refer to?

– Find the object diagram based on your reference object handle

– For example, if you are looking for all words for a line, you need to check

the‏“line”‏object‏diagram

• Which NPI command should I use to get the handle?

– Refer to the object diagram according to your reference object handle,

and check the arrow type

– Single arrow (one to one):

npi_text_handle

– Double arrow (one to many):

npi_text_iter_start

Guidelines for Reading Object Diagrams

Page 19: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 19

How to Use Object Diagrams?

• How can I get the type string of –type option for npi_text_handle and npi_text_iter_start?

– Refer to the object diagram according to your reference object handle, and check the name for each object

– Change the first character to uppercase, and then add "npiText" as the prefix.

– Available types are: npiTextFile, npiTextLine, and npiTextWord

• How can I get the type string of –type option for npi_text_property and npi_text_property_str?

– Refer to the object diagram according to your reference object handle, and check the description under the object diagram – str: means the property is string type.

Use npi_text_property_str command

– Int: means the property is integer type Use npi_text_property commands

– bool: means the property is Boolean type Use npi_text_property command

Guidelines for Reading Object Diagrams

Page 20: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 20

Object Diagram File

file line

->type

str: npiTextHandleType

->name

str: npiTextFileFullName

str: npiTextFileName

->content

str: npiTextFileContent

->line count

int: npiTextLineCount

% set file_iterator [ npi_text_iter_start –type

npiTextFile –ref‏[‏”“‏

% set line_iterator [ npi_text_iter_start –type

npiTextLine –ref $file_handle ]

% puts [ npi_text_property_str –type

“npiTextFileContent”‏–ref $file_hdl ]

% puts [ npi_text_property –type

“npiTextLineCount”‏–ref $file_hdl ]

Get all imported file handles Get all line handles from a file handle

Get‏the‏“file‏content”‏property‏

From a file handle (str)

Get‏the‏“line‏count”‏property‏

from a file handle (int)

Page 21: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 21

Object Diagram Line

line word

->type

str: npiTextHandleType

->content

str: npiTextLineContent

->line number

int: npiTextLineNumber

->word count

int: npiTextWordCount

file

‏ % set file_handle [

npi_text_handle –type

npiTextFile –ref

$line_handle ]

‏ % set word_iterator [

npi_text_iter_start –type

npiTextWord –ref

$line_handle ]

‏ % puts [

npi_text_property_str –

type‏“npiTextLineContent”‏–

ref $line_hd

‏ % puts [ npi_text_property

–type‏“npiTextLineNumber”‏

–ref $line_hdl ]

Get the file handle

from a line handle

Get all line handles from a file handles Get‏the‏“line‏number”‏property‏

from a line handle (int)

Get‏the‏“line‏content”‏property‏

from a line handle (str)

Page 22: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 22

Object Diagram Word

word

->type

str: npiTextHandleType

->name

str: npiTextWordName

->word number

str: npiTextWordNumber

->attribute

int: npiTextWordAttribute

str: npiTextWordAttribute

line

‏ % set line_handle [ npi_text_handle –type

npiTextLine –ref $word_handle ]

‏ % puts [ npi_text_property –type

“npiTextWordNumber”‏–ref $word_hdl ]

‏ % puts [ npi_text_property_str –type

“npiTextWordAttribute”‏–ref $word_hdl ]

Get the line handle from a file handle

Get‏the‏“word‏number”‏property‏

from a file handle (int)

Get‏the‏“word‏attribute”‏property‏

from a file handle (str)

Page 23: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 23

Overview

• DM Model Introduction

• NPI Commands

• NPI Object Diagrams

• Case Study

Page 24: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 24

Case Study

• Requirement:

– Modify the source code to create a input port d

• To execute the script:

– Verdi example.v –play insert_word_before.tcl &

– Refer to following slide for the content of insert_word_before.tcl

Overview

module test (a, b, c);

input a, b;

output c;

and and_gate (c, a, b);

endmodule

module test (a, b, c, d);

input a, b, d;

output c;

and and_gate (c, a, b);

endmodule

Page 25: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 25

Case Study

‏ set file_hdl [ npi_text_file_by_name –name‏“example.v”‏]

‏ set line_iter [ npi_text_iter_start –type‏“npiTextLine”‏–ref $file_hdl ]

‏ set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ set word_iter [ npi_text_iter_start –type‏“npiTextWord”‏–ref $line_hdl

]

‏ while‏{‏=!‏”“‏[‏set‏word_hdl [ npi_text_iter_next –iter $word_iter ] ] } { ‏ if‏]‏==‏”(“‏}‏npi_text_property_str –type‏“npiTextWordName”‏–ref

$word_hdl ] } { ‏ set inserted_word_hdl [ npi_text_insert_word_before –ref

$word_hdl –word‏,“‏d”‏] ‏ } ‏ }

‏ npi_text_iter_stop –iter $word_iter

Script (1/2) Get the handle

for file example.v

Create iterator $line_iter for all lines in the example.v file

Scan the $line_iter iterator

to get the first line

Create iterator $word_iter for all words in the first line

Scan the $word_iter iterator, if the result is not null then check

whether‏the‏word‏is‏;‏”(“‏insert‏the‏word‏“, d”‏before‏the‏“)”

Free the memory of iterator $word_iter

Page 26: Verdi NPI Training - VC Apps · DM Model Introduction • Lets users traverse and manipulate design source code from a text perspective – Every file, line, and word is regarded

© Synopsys 2012 26

Case Study

‏ set line_hdl [ npi_text_iter_next –iter $line_iter ]

‏ set word_iter [ npi_text_iter_start –type‏“npiTextWord”‏–ref $line_hdl ]

‏ while‏{‏=!‏”“‏[‏set‏word_hdl [ npi_text_iter_next –iter $word_iter ] ] } { ‏ if‏]‏==‏”;“‏}‏npi_text_property_str –type‏“npiTextWordName”‏–ref

$word_hdl ] } { ‏ set inserted_word_hdl [ npi_text_insert_word_before –ref

$word_hdl –word‏,“‏d”‏] ‏ } ‏ } ‏ npi_text_iter_stop –iter $word_iter ‏ npi_text_iter_stop –iter $line_iter

‏ set result_file [ npi_text_property_str –type‏“npiTextFileContent”‏–

ref $file_hdl ] ‏ puts –nonewline $result_file

Script (2/2) Scan the $line_iter iterator

to get the next line

Create iterator $word_iter for all words in the second line

Scan the $word_iter iterator, if the result is not null then check

whether‏the‏word‏is‏;‏”;“‏insert‏the‏word‏“, d”‏before‏the‏“;”

Free the memory of iterator

$line_iter and $word_iter

Create an output file and write

the modified content into the file