Aa  `Pp0P 0 0 00`p #Author AccelleraTitleSystemVerilog 3.1/draft 1Subject9PRELIMINARY draft of SystemVerilog 3.1, SUBJECT TO CHANGEH $ d HHZZ̀̀̀ff@  'd Footnote TableFootnote**/ - :;,.!? g-  gOTOCHeading1Heading2\APIsLimitedInteractiveMaxTime SystemVerilogVCsVerilog*assert(vpi_data_read_isinloadlist(loadlist"assert(vpi_get(vpiDataReadLoadListassert(vpi_get(vpiTypebig_loadCollection big_scope big_scope;cbcbEndofCompile cbValueChangecollectionloadCollectiondata_busdata_write_objdatafile debuggers delieanatedesignCollection designObjdumpvarsenumfnamegoto implementorsinstanceHandleintinteroperabilityiteratoritrloadCollection loadedObj loadedVarloadlistminobj obj_handle obj_trvs_hdl object_handleobjs p_vpi_time p_vpi_valueref_h scaleunit scopetypesignal_iterator some_portsome_regstruct sub)scope subscopestime_ptime_p;timelinetrvsCollectiontrvsHndltrvsObjvalue_p value_pointervar(s varCollection var_handle vc_trvs_hdlversion:Versionvpi vpiAccessvpiAccessInteractivevpiAccessLimitedInteractivevpiAccessPostProcess vpiCollection vpiDataLoadedvpiDataReadAccessvpiDataReadAccessInteractivevpiDataReadAccessPostProcessvpiDataReadGotoNextVCvpiDataReadIsLoadedvpiDataReadLoadListvpiDataReadMinTimevpiDataReadTrvsGotoNextVCvpiDataReadTrvsGotoPrevVCvpiDataReadTrvsHasVCvpiDataReadTrvsHndlvpiDataReadTrvsMaxTimevpiDataReadTrvsMinTimevpiDataReadTrvsTimevpiDataWriteFileTypevpiDataWriteType vpiHandlevpiName vpiParentvpiPortvpiRegvpiTrvsCollection vpiTrvsHasVCvpiTrvsMaxTimevpiTrvsMinTime vpiTrvsNextVC vpiTrvsObj vpiTrvsPrevVC vpiTrvsTimevpiTypevpiTypes vpi_control!vpi_control(vpiDataReadGotoNextVCvpi_control(vpiDataReadMinTimevpi_control(vpiTrvsMinTimevpi_control(vpiTrvsNextVCvpi_control(vpiTrvsTimevpi_control(vpiType vpi_createvpi_create(vpiCollectionvpi_create(vpiTrvsCollectionvpi_create(vpiTypevpi_data_addtoloadlistvpi_data_createloadlistvpi_data_isinloadlist vpi_data_read_addtolist(loadlistvpi_data_read_addtoloadlist%vpi_data_read_addtoloadlist(vpiHandlevpi_data_read_createloadlistvpi_data_read_get_timevpi_data_read_get_time(vpiTypevpi_data_read_get_versionvpi_data_read_getversionvpi_data_read_init$vpi_data_read_init(vpiDataReadAccess/vpi_data_read_init(vpiDataReadAccessPostProcessvpi_data_read_init(vpiTypevpi_data_read_isinloadlist$vpi_data_read_isinloadlist(vpiHandlevpi_data_read_jump&vpi_data_read_jump(vpiDataReadTrvsTimevpi_data_read_jump(vpiTypevpi_data_read_loadvpi_data_read_load(loadlistvpi_data_read_load(var_handlevpi_data_read_load(vpiHandlevpi_data_read_readloadlistvpi_data_read_resetloadlistvpi_data_read_unloadvpi_data_read_unload(vpiHandlevpi_data_resetloadlistvpi_data_write_begintree"vpi_data_write_begintree(vpiHandlevpi_data_write_closevpi_data_write_close(vpiHandlevpi_data_write_createscope$vpi_data_write_createscope(vpiHandlevpi_data_write_createtime#vpi_data_write_createtime(vpiHandlevpi_data_write_createupscope&vpi_data_write_createupscope(vpiHandlevpi_data_write_createvalue$vpi_data_write_createvalue(vpiHandlevpi_data_write_createvar"vpi_data_write_createvar(vpiHandlevpi_data_write_endtree vpi_data_write_endtree(vpiHandlevpi_data_write_get_versionvpi_data_write_openvpi_data_write_open(charvpi_data_write_openfilevpi_data_write_setscaleunit%vpi_data_write_setscaleunit(vpiHandlevpi_free_objectvpi_getvpi_get(vpiDataLoadedvpi_get(vpiDataReadIsLoadedvpi_get(vpiDataReadTrvsHasVCvpi_get(vpiTrvsHasVC vpi_get_timevpi_get_time(trvsCollectionvpi_get_time(vc_trvs_hdl vpi_get_valuevpi_get_value(R`'YC<c@ cB IIII I I IFJFLFMFOF_yFt Fv Fw Fy F F F F K Y_4Z<Z=[&[([)[d6d8_}E_[\m] ]]s]u]v]]]_5 `)`* 31675: H2,1.1: 29.6 Reading data( *34910: H3,1.1.1: 29.6.3 Reading an object ) H90003: TableTitle: Table291: Usage extensions to existing VPI routines, +35454: H4,1.1.1.1: 29.6.3.2 Jump Behavior / $25024: H3,1.1.1: 29.1.1 Requirements7 .46458: H3,1.1.1: 29.6.6 Time-ordered traversal: &34758: H2,1.1: 29.7 Unloading the data '44643: H3,1.1.1: 29.3.1 Traverse object         ?D8 $*34910: H3,1.1.1: 29.6.3 Reading an object ?D8 H90003: TableTitle: Table291: Usage extensions to existing VPI routines?D8$+35454: H4,1.1.1.1: 29.6.3.2 Jump Behavior ?D8$+35454: H4,1.1.1.1: 29.6.3.2 Jump Behavior ?D8$*34910: H3,1.1.1: 29.6.3 Reading an object ?D8$.46458: H3,1.1.1: 29.6.6 Time-ordered traversal?D8$&34758: H2,1.1: 29.7 Unloading the data?D8$'44643: H3,1.1.1: 29.3.1 Traverse object$ <$curpagenum><$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear>;<$monthname> <$daynum>, <$year> <$hour>:<$minute00> <$ampm>"<$monthnum>/<$daynum>/<$shortyear><$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear> <$fullfilename> <$filename> <$paratext[ChapterTitle]> <$paratext[SectionTitle]> <$curpagenum> <$paranumonly[Chapter]><$paranum[Chapter]> (continued)+ (Sheet <$tblsheetnum> of <$tblsheetcount>)Heading & Page <$paratext> on page<$pagenum>Pagepage<$pagenum>See Heading & Page%See <$paratext> on page<$pagenum>. Table All7Table<$paranumonly>, <$paratext>, on page<$pagenum>Table Number & Page'Table<$paranumonly> on page<$pagenum> Draft Number (Draft 1) Draft_title7SystemVerilog 3.1, Accellera Extensions to Verilog-2001VerilogXL version #VerilogXL 1.5c <$volnum>copy2003std#SystemVerilog 3.1 <$chapnum>AnnexAnnex<$paranumonly> $paranumonly<$paranumonly>SectionSection<$paranumonly>TableTable<$paranumonly> $paratext <$paratext>FigureFigure<$paranumonly>ExampleExample<$paranumonly>$paranum <$paranum> (HTML Headings++A..A00hh33557BAaacceeAkkmmooArrAuuAww||~~A   AATOCfFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGG G GGGGGGGGGGG G"G$G&G(G*G,G.G0G2G4G5G6G8G:G<G>G@GAGBGDGFGHGJGLGNGPGRGTGVGXGZG\G^G`GbGdGfGhGjGlGnGpGrGtGvGxGzG|G~GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHH H HHHHHHHHHH H"H%H'H)H+H-H/H1H3H5H7H9H;H=H?HAHCHEHGHJHLHNHPHRHTHVHXHZH\H^H`HcHeHgHiHkHmHoHqHsHuHwHyH{H}HHHHHHHHHHHHHHHHHHHHHH%HHH*HHH*HHH*HHLHHHLF$LF7LF8F?F%F&I$ Section 29HFIFPFQ;LZ729.7.5 M29.2.2 JD29.2.1 Jr29.7.1 KpLL<=La1LL)>3>>>I>T>_>jL`OLZ8LLR5oZZLLZ`29.8 ]G!!ZdLLR.ZrLLZtLLZx!!Z!LZ!!Z!!Z!!Z!!Z!!Z!!Z!!Z!!Z!!Z!!R5R.R 5X29.3.1 `LLR&.R(.R)L Table292: XL1)X 2)X 3)U29.1.1 X&X..X 29.3.2.1 XLLXLLXLYYLY!L]H!!ULRs 2)Ru a)XLUR R R UUUXLLY& b)Z!!Y$!!Y%!!]I!!Y'!!Y(!!Y)L!]jLLY+!!Y0!!Y1LLY2!!Y4!!Z!!ULLVLZ!LZ!!Z!!Z!!YLLV LV 29.7.2.2 YY5!!Vb.X5_t29.5 _e.Y@LLVd5`L!V 29.7.2.1 cLLX229.7.3 YCLLVVd5LZ!!V_f..W!Z!!b!W!X!LX"LLX&XUL_h._j5_l.X>LXgLZ!!X.Z!`!!Z!Z!!Z LLZLLZ!`!!ZLL_v29.4 [ LFigure 291 _wLL_x"_yc._ Figure 292 ]29.7.6 _L _LL_ Figure 293 \LL]LL] LL]kL]oL]LL] 29.9 ]LL]LL^L^ 29.9.1 _m Table291: `LL` LL`L`!!`!!`.`5a55aLLa:aSLLaw!!a[!a!!a!!a!!a!!a!!a!!a!a!!a!!bKbLc!!c!!c!NLLC<c!c!!c!!HFFFLF-FRLFWF^LFbFcFdFeFfFrFsFzF{F|LFFFFFLFLH!H"H#H$H%H&H'H(HLI729.2 I29.1 ILI29.1.2 c!!d<Lc!!c!!ILc!!IIc!!IdLIJLJ 29.7.3.1 JJJJJJJJJLMLM 29.2.2.1 J29.2.3 J K  29.2.2.2 K- 29.2.2.2.1 MKuL29.3 K.K5K.K5K.K5K  Table293: K.K.K5K.K5K.K5K.K5Ln429.7.4 M! a)M"M'&b)M(BdF*5}sZRQ8sZR GWW3 `To dFdH HN`@H HN`@HRHRAFootnote Hq<@`@H Hq<@`@HzHzA Single LineH'H  Footnote$H$% HH W, dH* }6F=?6 W- dN }2-F>@2- W. dN }_?F?A_? W/ d }$F@B$ W0 d P:Heading2 }HFACH W1 dH* }6GBD6 W2 dN }2-GCE2- W3 dN }_?GDF_? W4 d }$GEG$ W5 dP:HeadingRunIn }HG FHH W6 dH* }6G GI6 W7 dN }2-G HJ2- W8 dN }_?GIK_? W9 d }$ ,GJL$ , W: d P:Indented } H,GKM H,, ; dP <d Parent = UL Q=d Depth = 0 } 6,GLN 6, W> dN }2 -,GMO2 -, W? dN }_ ?,GNP_ ?, W@ d }$9GOQ$9 WA dP:Mapping Table Cell }9HGPR9H WB dP }96G!QS96 WC dN }29-G#RT29- WD dN }_9?G%SU_9? WE d }$IG'TV$IWF dP:Mapping Table Title }IHG)UWIHWG dP }I6G+VXI6WH dN }2I-G-WY2I-WI dN }_I?G/XZ_I?WJ d }$Y,G1Y[$Y,WK d P:Numbered }YH,G3Z\YH,,L dLI Md Parent = OL QNd Depth = 0 }Y6,G7[]Y6,WO dN }2Y-,G9\^2Y-,WP dN }_Y?,G;]_Y?,WQ d }$b,G= `$b,#WR e P:Numbered1 }bH,G? _abH,,#S eLI Te Parent = OL QUe Depth = 0 }b6,GC `bb6,#WV eN }2b-,GE ac2b-,#WW eN }_b?,GG bd_b?,#WX e }$GI ce$#WY eP:TableFootnote }HGK dfH#WZ eP }6GM eg6#W[ eN }2-GO fh2-#W\ eN }_?GQ gi_?#W] e }$GS hj$#W^ e P:TableTitle }HGU ikH#W_ eH* }6GW jl6#W` eN }2-GY km2-#Wa eN }_?G[ ln_?#Wb e }$G] mo$#Wc eP:Title }HG_ npH#Wd eH* }6Ga oq6#We eN }2-Gc pr2-#Wf eN }_?Ge qs_?#Wg e }$Gg rt$#Wh e C:Emphasis }HGi suH#Wi eEM }6Gk tv6#Wj eN }2-Gm uw2-#Wk eN }_?Go vx_?#Wl e }$Gq wy$#Wm eC:EquationVariables }HGs xzH#Wn eEM }6Gu y{6#Wo eN }2-Gw z|2-#Wp eN }_?Gy {}_?#Wq e }$G{ |~$#Wr eX:Heading & Page }HG} }H#Ws eHeading }6G ~6#Wt eN }2-G 2-#Wu eN }_?G _?#Wv e }$G $#Ww eX:Page }HG H#Wx eHeading }6G 6#Wy eN }2-G 2-#Wz eN }_?G _?#W{ e }$G $#W| eX:See Heading & Page }HG  H#W} e See Also }6G  6#W~ eN }2-G 2-#W eN }_?G _?#W e }$G $#W e X:Table All }HG H#W e Table All }6G 6#W eN }2-G 2-#W eN }_?G _?#W e }$G $#W eX:Table Number & Page }HG H# %Table PENumber }6G 6#W eN }2-G 2-#W  eN }_?G _?#W  e }$B G $B #W eHTML Options Table }B G B #W e }hB G hB #W e }$RG $R#W eControl }RG R#W eValue }hRHG hRH#W e Comments }$bG $b#W e Image Format }bG b#W e0001IMAGGIF GIF }hbHG hbH#W e }$rG  $r#W e!Copy Files Imported by Reference }rG !r#W eN }hrHG "hrH#W e }$G !#$#W eExport Encoding }G "$#W e ISO-8859-1 }hHG #%hH#W e }$G $&$# W eCSS Export Encoding }G %'# W e ISO-8859-1 }hHG &hH# W e }$$ G$,$$ &!WeSystem Macros }$ G$$ &!We }$ G$$ &!We }\$ G$\$ &!W e }$4hG$(-$4h&"W! e Macro Name }4hG$,.4h&"W" e Replace With }4hG$-/4h&"W# eHead }\4BG$.0\4B&"W$ e Comments }$Dh,G$/1$Dh,&#W% e StartOfDoc }Dh,G$02Dh,&#W& e }Dh,G$13Dh,,&#' % ���<$defaulttitle></P���ETITLE> }\��DB,��G�$24���\��DB,&�#W( ���e }$ph��G�$35���$ph&�$�W) ���e EndOfDoc }��ph��G�$46�����ph&�$W* ���e }��ph��G�$57�����ph&�$W+ ���e }\��pB��G�$68���\��pB&�$W, ���e }$��h,��G�$79���$��h,&�%�W- ���eStartOfSubDoc }����h,��G�$8:�������h,&�%W. ���e }����h,��G�$9;�������h,,&�%/ ���%<TITLE> ���<$defaulttitle></P���ETITLE> }\����B,��G�$:<���\����B,&�%W0 ���e }$��h��G�$;=���$��h&�&�W1 ���e EndOfSubDoc }����h��G�$<>�������h&�&W2 ���e }����h��G�$=?�������h&�&W3 ���e }\����B��H�$>@���\����B&�&W4 ���e }$��h,��H�$?A���$��h,&�'�W5 ���eStartOfFirstSubDoc }����h,��H�$@B�������h,&�'W6 ���e }����h,��H�$AC�������h,,&�'7 ���%<TITLE> ���<$defaulttitle></P���ETITLE> }\����B,��H �$BD���\����B,&�'W8 ���e }$��h��H �$CE���$��h&�(�W9 ���eEndOfFirstSubDoc }����h��H �$DF�������h&�(W: ���e }����h��H�$EG�������h&�(W; ���e }\����B��H�$FH���\����B&�(W< ���e }$��h,��H�$GI���$��h,&�)�W= ���eStartOfLastSubDoc }����h,��H�$HJ�������h,&�)W> ���e }����h,��H�$IK�������h,,&�)? ���%<TITLE> ���<$defaulttitle></P���ETITLE> }\����B,��H�$JL���\����B,&�)W@ ���e }$$��h��H�$KM���$$��h&�*�WA ���eEndOfLastSubDoc }��$��h��H�$LN�����$��h&�*WB ���e }��$��h��H�$MO�����$��h&�*WC ���e }\��$��B��H!�$NP���\��$��B&�*WD ���e }$:���� ��H$�$OS���$:���� &�+�WE���eCross-Reference Macros }��:���� ��H&�$�������:���� &�+WF���e }D��:���� ��H(�$�����D��:���� &�+WG���e }$J������H*�$PT���$J����&�,�WH ���e Macro Name }��J������H,�$SU�����J����&�,WI ���e Replace With }D��J��?��H.�$TV���D��J��?&�,WJ ���e Comments }$Z������H0�$UW���$Z����&�-�WK ���eHeading }��Z������H2�$VX�����Z����&�-WL ���e <$paratext> }D��Z��?��H4�$WY���D��Z��?&�-WM ���e }$j������H6�$XZ���$j����&�.�WN ���e See Also }��j������H8�$Y[�����j����&�.WO ���eSee <$paratext>. }D��j��?��H:�$Z\���D��j��?&�.WP ���e }$z������H<�$[]���$z����&�/�WQ ���e Table All }��z������H>�$\^�����z����&�/R ���%Table <$paranumonly>, P���E <$paratext> }D��z��?��H@�$]_���D��z��?&�/WS ���e }$������HB�$^`���$����&�0�WT ���e Table Number }��������HD�$_a���������&�0WU ���eTable <$paranumonly> }D����?��HF�$`����D����?&�0WV ���e }$$�� ��HI�'�f���$$�� )�1�WW���eGeneral Macros }v$�� ��HK�'�����v$�� )�1WX���e }$�� ��HM�'�����$�� )�1WY���e }2��$�� ��HO�'�����2��$�� )�1WZ���e }$4ev��HQ�'bg���$4ev)�2�W[ ���e Macro Name }v4ev��HS�'fh���v4ev)�2W\ ���e Replace With }4C��HU�'gi���4C)�2W] ���eHead }2��4Q��HW�'hj���2��4Q)�2W^ ���e Comments }$Dev��HY�'ik���$Dev)�3�W_ ���e }vDev��H[�'jl���vDev)�3W` ���e }DC��H]�'km���DC)�3Wa ���e }2��DQ��H_�'ln���2��DQ)�3Wb ���e }$Z�� ��Hb�'mq���$Z�� )�4�Wc���eCharacter Macros }lZ�� ��Hd�'�����lZ�� )�4Wd���e }��Z�� ��Hf�'�������Z�� )�4We���e }$jH��Hh�'nr���$jH)�5�Wf ���e Character }lj����Hj�'qs���lj��)�5Wg ���e Replace With }��j?��Hl�'rt�����j?)�5Wh ���e Comments }$zH��Hn�'su���$zH)�6�Wi ���e }lz����Hp�'tv���lz��)�6Wj ���e¢ }��z?��Hr�'uw�����z?)�6Wk ���e }$��H��Ht�'vx���$��H)�7�Wl ���e }l������Hv�'wy���l����)�7Wm ���e© }����?��Hx�'xz�������?)�7Wn ���e }$��H��Hz�'y{���$��H)�8�Wo ���e }l������H|�'z|���l����)�8Wp ���e® }����?��H~�'{}�������?)�8Wq ���e }$��H��H�'|~���$��H)�9�Wr ���e }l������H�'}���l����)�9Ws ���e° }����?��H�'~��������?)�9Wt ���e }$��H��H�'���$��H)�:�Wu ���e }l������H�'����l����)�:Wv ���e-- }����?��H�'�������?)�:Ww ���e }$��H��H�'���$��H)�;�Wx ���e }l������H�'���l����)�;Wy ���e- }����?��H�'�������?)�;Wz ���e }$��H��H�'���$��H)�C�W{ ���e }l������H�'���l����)�CW ���e... }����?��H�'��������?)�CW ���e ��d������H���������""����������d������H��������� ��������$$h������H� �����$$h������ �����l��� $$h������H� �����$$h���������� ! ����W��@l }$h�� ��H� ����$h��  �<�W|���dHeadings Table }��h�� ��H� �������h��  �<W}���e }��h�� ��H� �������h��  �<W~���e }$Cl��H� ���$Cl �=�W ���dHeading Level }��Cu��H� �����Cu �=W� ���dParagraph Format }��CH��H� �����CH �=W ���d Comments }$Sl��H� ���$Sl �>�W ���d1 }��Su��H� �����Su �>W ���dTitle }��SH��H� �����SH �>W ���d }$il��H� ���$il �?�W ���d2 }��iu��H� �����iu �?W UTUT���d Heading1 }��iH��H� �����iH �?W ���d }${l��H� ���${l �@�W ���d3 }��{u��H� �����{u �@W  ���d Heading2 }��{H��H� �����{H �@W  ���d }$l��H� ���$l �A�W  ���d4 }��u��H� �����u �AW  ���d HeadingRunIn }��H��H� �����H �AW  ���d }$l��H�  ���$l �B�W ���d4 }��u��H� !�����u �BW  ���d TableTitle }��H��H� ������H �BW ���d $$������H� �����$$����%##����l��� $$������H� �����$$�����������_'"�_dinsx} "%(,048<@DHLPSVY\_bfjnqtwz}�����d������H���������%%��������$$������H�$�����$$����"(&&�����l��� $$������H�$�����$$�������� ���(a%�(,048<@DHLPSVY\_ bfjnqtwz}�����d������H���������(( ��������$$������H�'�����$$����%�))����l��� $$������H�'�����$$�������� ����b(� bfjnqtwz}���� ���~��F� �+������~���������>�UH��ˆ����F� *3���UH��ˆ�����22 ����l�����d������F/���������-h�������� ���~��F0� ,�.������~���������>�Zl��d����F1� ,-0���Zl��d�����//����l��� Zl��d����F2�,�����Zl��d����������.����W���e U$����F3� ,.h���U$�����11����l��� U$����F4�,�����U$����������0����W���d UH��ˆ����F������UH��ˆ����������+����W���d U$����F � +5���U$�����44 ����l��� U$����F!������U$����������3�������` Accellera Q��`-Extensions to Verilog-2001SystemVerilog 3.1 U�w��R��F"� 3����U�w��R���gg ����l��� UH��ˆ����;������UH��ˆ��„� ��� mm��7����UTUT���  UR���@SystemVerilog Data Read API  ��� oThis chapter extends the SystemVerilog VPI with read facilities so that the Verilog Procedural Interface (VPI) 0����hacts as an Application Programming Interface (API) for data access and tool interaction irrespective of ����qwhether the data is in memory or a persistent form such as a file, and also irrespective of the tool the user is ���@interacting with. 9UTqUL���` Motivation :��� mSystemVerilog is both a design and verification language consequently its VPI has a wealth of design and ver0����oification data access mechanisms. This makes the VPI an ideal vehicle for tool integration in order to replace ����oarcane, inefficient, and error-prone file-based data exchanges with a new mechanism for tool to tool, and user ����nto tool interface. Moreover, a single access API eases the interoperability investments for vendors and users ����nalike. Reducing interoperability barriers allows vendors to focus on tool implementation. Users, on the other ����nhand, will be able to create integrated design flows from a multitude of best-in-class offerings spanning the ��@jrealms of design and verification such as simulators, debuggers, formal, coverage or test bench tools.  9⪙���h/Requirements ���`ISystemVerilog adds several design and verification constructs including:  ���`[C data types such as � int� , � struct� , � union� , and � enum� . ���`7Advanced built-in data types such as � string� . ���`User defined data types. ���`&Test bench data types and facilities. U��� mThe access API shall be implemented by all tools as a minimal set for a standard means for user-tool or tool-0`����rtool interaction that involves SystemVerilog object data querying (reading). In other words, there is no need for ����ua simulator to be running for this API to be in effect; it is a set of API routines that can be used for any interac����wtion for example between a user and a waveform tool to � read�  the data stored in its file database. This usage ���@#flow is shown in the figure below. k�� h4 a9=��`Data read VPI usage model U��� oOur focus in the API is the user view of access. While the API does provide varied facilities to give the user p`����tthe ability to effectively architect his or her application, it does not address the tool level efficiency concerns ����qsuch as time-based incremental load of the data, and/or predicting or learning the user access. It is left up to ����limplementors to make this as easy and seamless as possible on the user. To make this easy on tools, the API ����qprovides an initialization routine where the user specifies access type and design scope. The user should be priUH��ˆ����;� �����UH��ˆ����D66 ����l���}6py��R�Qo���6pyR �GWX3 ���`Use ��d������Q���������== �������� UH��ˆ����Q�9�����UH��ˆ���7���7����= ����M����pobject, the traversal here can walk or jump back and forth on the value change timeline of an object. To create 0����ja value change traverse handle the routine � vpi_handle()�  must be called in the following manner: ���� ����<vpiHandle trvsHndl = vpi_handle(vpiTrvsObj, object_handle); "���� ����lNote that the user (or tool) application can create more than one value change traverse handle for the same ����lobject, thus providing different views of the value changes. Each value change traverse handle shall have a ����omeans to have an internal index, which is used to point to its current time and value change of the place it ����spoints. In fact, the value change traversal can be done by increasing or decreasing this internal index. What this ����qindex is, and how its function is performed is left up to tools implementation; we only use it as a concept for ���@explanation here. 2��� nOnce created the traverse handle can point anywhere along the timeline; its initial location is left for tool 0����kimplementation, however, if the traverse object has no value changes the handle shall point to the minimum ����|time (of the trace), so that calls to � vpi_get_time()�  can return a valid time. It is up to the user to call an ini���@Gtial � vpi_control()�  to the desired initial pointing location. I9���`$Traversing value changes of objects hӪ��� uAfter getting a traverse � vpiHandle� , the application can do a forward or backward walk or jump traversal by ު���@gusing � vpi_control()�  on a � vpiTrvsObj�  object type with the new traverse properties. [���`\Here is a sample code segment for the complete process from handle creation to traversal. :�� OvpiHandle instanceHandle; /* Some scope object is inside*/ 0���>vpiHandle var_handle; /* Object handle*/ ���AvpiHandle vc_trvs_hdl; /* Traverse handle */ ����vpiHandle itr; ���<p_vpi_value value_p; /* Value storage*/ ��@9p_vpi_time time_p; /* Time storage*/ ?���`... !@ ��� !/* Initialize the read interface ���CAccess data from (say simulator) memory, for scope instanceHandle ���and its subscopes */ ����9/* Call marks access for all the objects in the scope */ ����Kvpi_read_init(vpiAccessLimitedInteractive, NULL, NULL, instanceHandle, 0); ���� ����1itr = vpi_iterate(vpiVariables, instanceHandle); ����%while (var_handle = vpi_scan(itr)) { ���Aif (vpi_get(vpiDataLoaded, var_handle) == 0) { /* not loaded*/ ���1/* Load data: object-based load, one by one */ ���Lif (!vpi_read_load(var_handle)); /* Data not found !*/ ��@ break; P��`} Y��`1/* Create a traverse handle for read queries */ !R �� 3vc_trvs_hdl = vpi_handle(vpiTrvsObj, var_handle); ���/* Go to minimum time */ ���+vpi_control(vpiTrvsMinTime, vc_trvs_hdl); ��� /* Get info at the min time */ ���7vpi_get_time(vc_trvs_hdl, time_p); /* Minimum time */ ���vpi_printf(...); ���2vpi_get_value(vc_trvs_hdl, value_p); /* Value */ ���vpi_printf(...); ���<if (vpi_get(vpiTrvsHasVC, vc_trvs_hdl)) { /* Have VCs ? */ ��@,for (;;) { /* All the elements in time */ aB�� 7if (vpi_control(vpiTrvsNextVC, vc_trvs_hdl) == 0) { ���;/* failure (e.g. already at MaxTime or no more VCs) */ ���#break; /* cannot go further */ ���} ���/* Get Max */ }UsT��_6�N�(���UsTO=�O�W/3 ���`To ~U³;��X��C�J�����U³;��XŚXK���(��� k The word trace can be replaced by simulation; we use trace here for generality since a dump file can be \終(0���@generated by several tools. UH��ˆ����Q� 9�����UH��ˆ���\L:: ����l���}sZ��R�Q`?���sZR �L�WZ3 ���`Get read interface version }6py��R�Q>]���6pyR �LWf ���`vpi_read_get_version() }33��K�WA���33X'�D�\3 ��� $Obtain a handle to a word or bit in P���@ an array }1��K�W@���1X'�D] ��� vpi_handle_by_multi_indeP���@x() ��d������E���������DD �������� UH��ˆ����E�B�����UH��ˆ��‡�&���&����D�������@fmarily concerned with the API specified here, and efficiency issues are dealt with behind the scenes. ;9���`Naming conventions @���`\All elements added by this interface shall conform to the VPI interface naming conventions. BC���`+ All names are prefixed by � vpi� . CT��� } All � type names � shall start with � vpi� , followed by initially capitalized words with no separators, e.g., `���@ vpiName. Eq�� w All callback names shall start with � cb� , followed by initially capitalized words with no separators, e.g., }���@cbValueChange� . G���  All � routine names � shall start with � vpi� _, followed by all lowercase words separated by underscores (� _� ), ���@e.g., � vpi_handle()� . 8UTUJ���`Extensions to VPI enumerations HѪ��� qThese extensions shall be appended to the contents of the � vpi_user.h � file, described in IEEE Std. 1364-ܪ���@v2001, Annex G. The numbers in the range�  800 - 899�  are reserved for the read data access portion of the VPI. #9���` Object types - ��� wAll objects in VPI have a � vpiType� . This API adds a new object type for data traversal, and two other objects ���@<types for object collection and traverse object collection. F$��� 2/* vpiHandle type for the data traverse object */ 00���D#define vpiTrvsObj 800 /* use in vpi_handle()*/ ���O#define vpiObjCollection801 /* Collection of design objs*/ ��@Q#define vpiTrvsCollection802 /* Collection of vpiTrvsObjs*/ ,^��� rThe other object types that this API references, for example to get a value at a specific time, are all the valid i����utypes in the VPI that can be used as arguments in the � VPI routines for logic and strength value processing such ���@Xas � vpi_get_value(<object_handle>, <value_pointer>)� . � These types include: J���` Constants P���`Nets and net arrays K���`Regs and reg arrays L���` Variables M���`Memory N���` Parameters O���` Primitives Q���` Assertions R��� |In other words, any limitation in � vpiType�  of � vpi_get_value()�  will also be reflected in this data access $���@API. "9;���`Object properties SQ���`2This section lists the object property VPI calls. T9d���` Static info Zx��� /* Check type */ P„���=#define vpiDataLoaded 803 /* use in vpi_get() */ UH��ˆ����E� B�����UH��ˆ���7GCC  ����l�����d������E���������GG �������� UH��ˆ����E�E�����UH��ˆ��m�+���+����G����Z���;#define vpiTrvsHasVC804 /* use in vpi_get() */ 0���� ����/* Access type */ ���L#define vpiAccessLimitedInteractive805 /* interactive */ ���G#define vpiAccessInteractive806 /* interactive: history */ ��@B#define vpiAccessPostProcess807 /* data file*/  S��� /* Member of a collection */ _��@<#define vpiMember808 /* use in vpi_iterate() */ X9s���` Dynamic info Y���`Control constants V��� 9/* Control Traverse: use in vpi_control() or vpi_goto() 0���for a vpiTrvsObj type */ ���:#define vpiTrvsMinTime809/* min time*/ ���:#define vpiTrvsMaxTime810/* max time*/ ���'#define vpiTrvsPrevVC  811 ���&#define vpiTrvsNextVC 812 ��@9#define vpiTrvsTime 813/* time jump*/ ;9���`Get properties = ��� TThe following properties are intended to enhance the access efficiency. The routine ����ovpi_trvs_get_time()�  is similar to � vpi_get_time()�  with the additional ability to get the min and "����vmax times of the traverse handle; not just the current place it points (as is the case for � vpi_get_time()� ). ����vNo new properties are added here, the same � vpiType� s can be used where the context (get or go to) can distin���@guish the intent. <I��� </* Get: Use in vpi_trvs_get_time() for a vpiTrvsObj type */ 0U����/* ���3#define vpiTrvsMinTime809// min time ���3#define vpiTrvsMaxTime810// max time ���<#define vpiTrvsTime813// traverse handle time ���@*/ U9���`System callbacks %��� kThe access API adds no new system callbacks. The reader routines (methods) can be called whenever the user ���@3application has control and wishes to access data. [UTU4���`VPI object type additions ~9���hTraverse object w ��� iTo access the value changes of an object over time, the notion of a Value Change (VC) traverse handle is 0����ladded. A value change traverse object is used to traverse and access value changes not just for the current ����xvalue (as calling � vpi_get_time()�  or � vpi_get_value()�  on the object would) but for any point in time: ����wpast, present, or future. To create a value change traverse handle the routine � vpi_handle()�  is called with a ���@vpiTrvsObj vpiType� : yF���  rR����-vpiHandle object_handle; /* design object */ ����8vpiHandle trvsHndl = vpi_handle(/*vpiType*/vpiTrvsObj, ��@(/*vpiHandle*/ object_handle); UH��ˆ����E� E�����UH��ˆ���DJFF ����l�����d������E���������JJ �������� UH��ˆ����E�H�����UH��ˆ��€�/���/����J����,9���`Collection object x��� nIn order to read data efficiently, we may need to specify a group of objects for example when loading (or tra0����tversing) data we may wish to specify a list of objects that we want to mark as targets of data load (or traversal). ���@lSuch a grouping we refer to as a � collection� . We add the notion of a collection of objects to VPI.  G��� tThe collection object of type � vpiObjCollection�  represents a user-defined collection of VPI objects in the 0R����sdesign; these cannot be traverse objects of type � vpiTrvsObj� . The collection contains a set of member VPI ����qobjects and can take on an arbitrary size. The collection may be created at any time and existing objects can be ����padded to it. The purpose of a collection is to group design objects and permit operating on each element with a ����Tsingle operation applied to the whole collection group. � vpi_iterate(vpiMember, ����q<collection_handle>)�  is used to create a member iterator. � vpi_scan()�  can then be used to scan the ���@-iterator for the elements of the collection.  ���``A � vpiTrvsCollection�  is a collection of traverse objects of type � vpiTrvsObj� . \���`-Our usage here in the read API is of either:  Ī��� mDesign object collections: Used for example in � vpi_read_load()�  to load data for all the objects. A 0Ъ����lcollection of objects is of type � vpiObjCollection�  in general (the elements can be any object type ���@Ein the design except traverse objects of type � vpiTrvsObj� ).  ��� iData traverse objects: Used for example in � vpi_control()�  (or � vpi_goto()� ) to move the 0����ntraverse handles of all the objects in the collection (all are of type � vpiTrvsObj� ). A collection of ���@3traverse objects is a � vpiTrvsCollection� . ��� A collection object is created with � vpi_create()� . The first call gives � NULL�  handles to the collection object 0'����oand the object to be added. Following calls, which can be performed at any time, provide the collection handle ���@cand a handle to the object for addition. The return argument is a handle to the collection object. (G���` For example: Q���`vpiHandle designCollection; \���`vpiHandle designObj; '���`vpiHandle trvsCollection; "���`vpiHandle trvsObj;  ��`9/* Create a collection of design objects*/ &���`=designCollection = vpi_create(vpiObjCollection, NULL, NULL); j��`7/* Add design object designObj into it*/ ���`NdesignCollection = vpi_create(vpiObjCollection, designCollection, designObj); !���` #��`5/* Create a collection of traverse objects*/ *���`<trvsCollection = vpi_create(vpiTrvsCollection, NULL, NULL); 6��`8/* Add traverse object trvsObj into it */ )���`ItrvsCollection = vpi_create(vpiTrvsCollection, trvsCollection, trvsObj); $몓��� uA collection objects exists from the time it is created until its handle is released. It is the applications respon���@dsibility to keep a handle to the created collection, and to release it when it is no longer needed.  9 ���`Operations on collections ;��� tWe define a method for loading data of objects in a collection: � vpi_read_load()� . This operation loads all 0*����tthe objects in the collection. It is equivalent to performing a � vpi_read_load()�  on every single handle of ���@'the object elements in the collection. %J��� qA traverse collection can be obtained (i.e. created) from a design collection using vpi_handle(). The call would U���@take on the form of: ne��� vpiHandle loadCollection; pq����</* Obtain a traverse collection from the load collection */ ���@/vpi_handle(vpiTrvsCollection, loadCollection); UH��ˆ����E� H�����UH��ˆ���GMII  ����l�����d������E���������MM�������� UH��ˆ����E�K�����UH��ˆ��[����EE��M����o���hGThe usage of this capability is discussed in Section 929.7.68. A��� pWe also define methods on collections of traverse handles i.e. collections of type � vpiTrvsCollection� . ����lThis methods are � vpi_control()�  and � vpi_goto()� . Their function is equivalent to applying ����nvpi_control()�  with the same time control arguments to move the traverse handle of every single object in ���@the collection. `UTZUO���`Object model diagram additions br��� zA traverse object of type � vpiTrvsObj�  is related to its parent object; it is a means to access the value data of 0}����osaid object. An object can have several traverse objects each pointing and moving in a different way along the ����xvalue data horizon. This is shown graphically in the model diagram below. The � traversable�  class is a represen���@1tational grouping consisting of any object that: c���` Has a name d��� jCan take on a value accessible with � vpi_get_value()� , the value must be variable over time (i.e. ª���@Knecessitates creation of a traverse object to access the value over time). ت��� rThe class consists of nets, net arrays, regs, reg arrays, variables, memory, primitive, primitive arrays, and con㪛�� Hcurrent assertions.2 f9*���`!Model diagram of traverse object hB��� tA collection object of type � vpiObjCollection�  groups together a set of design objects Obj (of any type). A pM����ttraverse collection object of type � vpiTrvsCollection�  groups together a set of traverse objects trvsObj of ���@type � vpiTrvsObj� . UH��ˆ����E� K�����UH��ˆ���JPLL ����l�����d������E���������PP�������� UH��ˆ����E�N�����UH��ˆ��U���� [[;AP����i�� h3 j9���`Model diagram of collection 9UTUS���`!Usage extensions to VPI routines -ڪ��� jSeveral VPI routines have been extended in usage with the addition of new object types and/or properties. 0媦����nWhile the extensions are fairly obvious, they are emphasized here again to turn the readers attention to the ���@extended usage. . ���` Wv/��@h4)Usage extensions to existing VPI routines= UH��ˆ����E� N�����UH��ˆ���MSOO  ����l�����d������E���������SS�������� UH��ˆ����E�Q�����UH��ˆ��x������1S����*UTUT���`New additions to VPI routines ���`6This section lists all the new VPI routine additions. +���` /��@h New Reader VPI routines YUTUO���hReading data 9���`&Reading data is performed in 3 steps: ���`mA design object must be � selected�  for loading from a database (or from memory) into active memory. Ȫ��� vOnce an object is selected, it can then be � loaded�  into memory. This step creates the traverse object handle Ԫ���@1used to traverse the design objects stored data. 誟��� nAt this point the object is available for reading. A traverse object must be created to permit the data value ���@traversal and access. $9 ���`Object selection for loading &"���`(Selecting an object is done in 3 steps: (5��� ^ The first step is to initialize the read access with a call to � vpi_read_init()�  (or A���@)vpi_read_init_create()� ) by setting: U���`AAccess type: The following VPI properties set the type of access ��� `vpiAccessLimitedInteractive� : Means that the access will be done for the data stored in the Ru����ktool memory (e.g. simulator), the history (or future) that the tool stores is implementation dependent. If UH��ˆ����E� Q�����UH��ˆ���PVRR ����l�����d������E���������VV�������� UH��ˆ����E�T�����UH��ˆ����������V��������ithe tool does not store the requested info then the querying routines shall return a fail. The file argu���@]ment to � vpi_read_init()�  in this mode will be ignored (even if not � NULL� ). ��� dvpiAccessInteractive� : Means that the access will be done interactively. The tool will then use 2����rthe data file specified as a flush file for its data. This mode is very similar to the � vpiAccess� Limit����gedInteractive with the additional requirement that all the past history (before current time) shall be ���@jstored (for the specified scope/collection, see the � Access Scope/Collection�  description below). Z��� cvpiAccessPostProcess� : Means that the access will be done through the specified file. All data 2f����jqueries shall return the data stored in the specified file. Data history depends on what is stored in the ���@)file, and can be nothing (i.e. no data). ��� cSpecifying the elements that will be accessed is accomplished by specifying a scope and/or an item 0����kcollection. At least one of the two needs to be specified. If both are specified then the union of all the ���@Eobject elements forms the entire set of objects the user may access. ��� fAccess scope: The specified scope handle, and nesting mode govern the scope that access returns. Data 0����kqueries outside this scope (and its sub-scopes as governed by the nesting mode) shall return a fail in the ����uaccess routines unless the object belongs to � access collection � described below. It can be used either in a ����zcomplementary or in an exclusive fashion to � access collection� . � NULL�  is to be passed to the collection ���@=when � access scope�  is used in an exclusive fashion. )��� gAccess collection: The specified collection stores the traverse object handles to be loaded. It can be 0�����{used either in a complementary or in an exclusive fashion to � access scope� . � NULL�  is to be passed to the ���@Hscope when � access collection � is used in an exclusive fashion. t"��� nvpi_read_init() � can be called multiple times. The access specification of a call remains valid until the -���@next call is executed.�  B��� ivpi_read_init_create()�  can be called anywhere � vpi_read_init()�  is called. The two have the 2M����qsame function; in addition to initialization � vpi_read_init_create()�  creates a load collection list con����qsisting of all the (valued) objects in the specified access scope if any (and its sub-scopes as governed by nest����oing mode) and the objects in the access collection if any. The return of � vpi_read_init_create()�  is a ���@;collection handle, with � NULL�  indicating failure. ��� fThe next step entails obtaining the object handle. This can be done using any of the VPI routines for p����ltraversing the HDL hierarchy and obtaining an object handle based on the type of object relationship to the ���@Cstarting handle. These routines are listed in the following table. UH��ˆ����E� T�����UH��ˆ���SYUU  ����l�����d������E���������YY�������� UH��ˆ����E�W�����UH��ˆ��|������'"Y ����f/��@hB'VPI routines for obtaining handle from hierarchy or property 7��� mAny tool that implements this read API (e.g. waveform tool) shall implement at least a basic subset of these ����mdesign navigation VPI routines that shall include � vpi_handle_by_name()�  to permit the user to get a ����qvpiHandle�  from an object name. It is left up to tool implementation to support additional design navigation "����srelationships. It should be noted that an objects � vpiHandle�  obtained through a post process access mode ����g(� vpiAccessPostProcess� ) from a waveform tool for example is not interchangeable with a handle ����gobtained through interactive access mode (� vpiAccessLimitedInteractive�  or � vpiAccessInter����vactive� ) from a simulator. This is because objects, their data, and relationships in a stored file database could ���@7be quite different from those in the simulation model. D9a���`Loading objects Cw��� pOnce the object handle is obtained then we can use the VPI data load routine � vpi_read_load()�  with the 0����xobjects � vpiHandle�  to load the data for the specific object onto memory. Alternatively, for efficiency consid����perations, � vpi_read_load()�  can be called with a design object collection handle of type � vpiObjCol"����glection� . The collection must have already been created by either using � vpi_create()�  (or ����gvpi_read_init_create()� ) and the (additional) selected object handles added to the load collection "����wusing � vpi_create()�  with the created collection list passed as argument. The object(s) data is not accessible ���H~as of yet to the users read queries; a traverse handle must still be created. This is presented in Section 29.7.3. 'Ϊ��� rNote that loading the object means loading the object from a file into memory, or marking it for active use if it 0٪����mis already in the memory hierarchy. Object loading is the portion that tool implementors need to look at for ����nefficiency considerations. Reading the data of an object, if loaded in memory, is a simple consequence of the ����nload. The API does not specify here any memory hierarchy or caching strategy that governs the access (load or ����pread) speed. It is left up to tool implementation to choose the appropriate scheme. It is recommended that this ����qhappens in a fashion invisible to the user. The API does provide the tool with the chance to prepare itself with ����othe � vpi_read_init() (� or � vpi_read_init_create()� ). With this call, the tool can examine what ���@ptype of access, and what signals the user wishes to access before the actual load and then read access is made. >9.���`,Iterating the design for the loaded objects 3D��� dThe user shall be allowed to iterate for the loaded objects in a specific instantiation scope using O����qvpi_iterate()� . This shall be accomplished by calling � vpi_iterate()�  with the appropriate reference ���@Mhandle, and using the property � vpiDataLoaded� . This is shown below. zm��� oIterate all data read loaded objects in the design: use a � NULL � reference handle (� ref_h� ) to Ry���@vpi_iterate()� , e.g., UH��ˆ����E� W�����UH��ˆ���V\XX ����l�����d������E���������\\�������� UH��ˆ����E�Z�����UH��ˆ���/���/����\ ����{��� 4itr = vpi_iterate(vpiDataLoaded, /* ref_h */ NULL); 0����$while (loadedObj = vpi_scan(itr)) { ����/* process loadedObj */ ���@} |��� iIterate all data read loaded objects in an instance: pass the appropriate instance handle as a reference J���@)handle to � vpi_iterate()� , e.g., }^��� >itr = vpi_iterate(vpiDataLoaded, /* ref_h */ instanceHandle); 0j����$while (loadedObj = vpi_scan(itr)) { ����/* process loadedObj */ ���@} 49���`=Iterating the load collection for its element loaded objects S��� uThe user shall be allowed to iterate for the loaded objects in the load collection using � vpi_iterate()�  and ����ovpi_scan()� . This shall be accomplished by creating an iterator for the members of the collection and then ���@5use � vpi_scan()�  on the iterator handle e.g. OҪ���  2ު ���6vpiHandle var_handle;/* some object*/ ���?vpiHandle varCollection;/* object collection*/ ���>vpiHandle loadedVar;/* Loaded object handle*/ ���3vpiHandle itr;/* iterator handle*/ ���3/* Create load object collection*/ ����DvarCollection = vpi_create(� vpiObjCollection, NULL, NULL� ); ���;/* Add elements to the object collection*/ ����<varCollection = vpi_create(vpiObjCollection, varCollection, ���@ var_handle); 5O���  R[����./* Iterating a collection for its elements */ "���Uitr = vpi_iterate(vpiMember, varCollection);/* create iterator*/ ���Jwhile (loadedVar = vpi_scan(itr)) {/* scan iterator*/ ����/* process loadedVar */ ���@} @9���h(Reading an object 8���`So far we have outlined: ʪ���`aHow to select an object for loading, in other words, marking this object as a target for access. Nܪ��� eHow to load an object into memory by obtaining a handle and then either loading objects individually 誈���@)or as a group using the load collection. L���`^How to iterate the design scope and the load collection to find the loaded objects if needed. M��� oReading an object means obtaining its value changes. VPI, before this extension, had allowed a user to query a p ����svalue at a specific point in time--namely the current time, and its access does not require the extra step of load����ling the object data. We add that step here because we extend VPI with a temporal access component: The user ����scan ask about all the values in time (regardless of whether that value is available to a particular tool, or found ����min memory or a file, the mechanism is provided). Since accessing this value horizon involves a larger memory ����nexpense, and possibly a considerable access time, we have added also in this Chapter the notion of loading an ����dobjectss data for read. Lets see now how to access and traverse this value timeline of an object. ���� ����jTo access the value changes of an object over time we use a traverse object introduced earlier in Section ���u?29.3.1>. Several VPI routines are also added to traverse the value changes (using this new handle) back and ����tforth. This mechanism is very different from the iteration notion of VPI that returns objects related to a given UH��ˆ����E� Z�����UH��ˆ���Y=[[  ����l���}sZ��R�Q?^���sZR �M�Wl3 ���`Initialize read interface }6py��R�Q]���6pyR �MW{ ���`vpi_read_init() }s/Z��R�Q���s/ZR �N�|3 ��� 7Load data (for a single design object or a collection) P���@ onto memory ��d������F ���������ae��������U$����F � `�c���U$�����bb ����l��� U$����F �`�����U$����������a������` Accellera Q��`-SystemVerilog 3.1Extensions to Verilog-2001 Uw��R��F� `ae���Uw��R���dd ����l��� Uw��R��F�`�����Uw��R��������c����W��lH19Copyright 2003 Accellera. All rights reserved. UH��ˆ����F� `c����UH��ˆ�����ff ����l��� UH��ˆ����F�`�����UH��ˆ����������e����W���d�  U�w��R��F#������U�w��R��������5����W��lHCopyright 2003 Accellera. All rights reserved.18 Zw��R��F5� ,0����Zw��R���ii����l��� Zw��R��F6�,�����Zw��R��������h����W��lU Running H/F 4 Copyright 2003 Accellera. All rights reserved.. #  ��d������FA���������ko��������U$����FB� j�m���U$�����ll ����l��� U$����FC�j�����U$����������k������d Accellera Q��dSystemVerilog 3.1 Uw��R��FD� jko���Uw��R���nn ����l��� Uw��R��FE�j�����Uw��R��������m������lU#Copyright 2003 Accellera. All rights reserved..Running H/F 4 Q���d UH��ˆ����FF� jm����UH��ˆ�����pp ����l��� UH��ˆ����FG�j�����UH��ˆ����������o����W���d ��d������FT���������rr��������UH��ˆ����FU� q�����UH��ˆ�����ss����l��� UH��ˆ����FV�q�����UH��ˆ����������r����W?UTUT���e ��d������FY���������uw��������UH��ˆ����FZ� t�w���UH��ˆ�����vv����l��� UH��ˆ����F[� t�����UH��ˆ����������u����W���d U8I��6y��F\� tu����U8I��6y���xx����l��� U8I��6y��F]� t�����U8I��6yOJ����yy��w����@�� l  i���d !h���d "UR���d #UR���$cAll rights reserved. No part of this document may be reproduced or distributed in any medium whatPKe���DHsoever to any third parties without prior written consent of Accellera. UBI��J��F`�t�������zz�x�����h ���Fa� y������h ���h…��d������Fh���������|��������U$����Fi� {�~���U$�����}}����l��� U$����Fj�{�����U$����������|����$��d Accellera Q%��d-SystemVerilog 3.1Extensions to Verilog-2001 Uw��R��Fk� {|����Uw��R�������l��� Uw��R��Fl�{�����Uw��R��������~����&��lT# Copyright 2003 Accellera. All rights reserved.!Running H/F 4" Q'���d D�;Hˆ����Fm� {~���D�;Hˆ��������l��� D�;Hˆ����Fn�{�����D�;Hˆ�������������������UHˆ����Fo� {�����UHˆ���������l��� UHˆ����Fp�{�����UHˆ��������������W(���d UH�ˆ����Fq�{����UH�ˆ�����d������F~����������������� ��_���F� ������_����������>�D�;Hˆ����F�  � ��D�;Hˆ��� � ����l��� D�;Hˆ����F������D�;Hˆ������������������U$����F�  ���U$�����  ����l��� U$����F������U$���������� ����)���d Accellera Q*��d-Extensions to Verilog-2001SystemVerilog 3.1 U�w��R��F�  ���U�w��R���  ����l��� U�w��R��F������U�w��R�������� ����+��lU#Running H/F 4$Copyright 2003 Accellera. All rights reserved..%#& Q,���d UHˆ����F�  ���UHˆ���� ����l��� UHˆ����F������UHˆ���������� ����W-���d UH�ˆ����F� ����UH�ˆ�� ��d������F�����������������UH��ˆ����F� �����UH��ˆ���������l��� UH��ˆ����F������UH��ˆ��������������W.���d ��d������H�����������������HH��ˆ����H� �����HH��ˆ����������l��� HH��ˆ����H� �����HH��ˆ��� ��� ��������/��d"<$paranum><$paratext><$pagenum> 0��d#<$paranum><$paratext><$pagenum> 1��d#<$paranum><$paratext><$pagenum> 2��d#<$paranum><$paratext><$pagenum> 3Z��d$<$paranum><$paratext><$pagenum> 4b��d#<$paranum><$paratext><$pagenum> 5~��d"<$paranum><$paratext><$pagenum> 6��d"<$paranum><$paratext><$pagenum> S7g���d }33��K�W���33X'�E�^3 ��� Obtain a handle for an indexed P���@object }1��K�W@���1X'�EW_ ���`vpi_handle_by_index() }33��K�W���33X'�F�W`3 ���`#Obtain a handle for a named object }1��K�W���1X'�FWa ���`vpi_handle_by_name() }6p/y��R�Q_b���6p/yR �NW} ���`vpi_read_load() ��d������Ze���������&&��������}1e��K�W'���1eX'�HWg3 ���`Use }33z��K�W���33zX'�I�h3 ��� %Obtain a handle for an object with a P���@one-to-one relationship }1z��K�W���1zX'�IWi ���` vpi_handle() }33��K�WA ���33X'�J�j3 ��� $Obtain handles for objects in a one-P���@to-many relationship }1��K�W!���1X'�Jk ���`vpi_iterate() Qp���` vpi_scan() }33 ��K�W "���33 X'�K�l3 ��� #Obtain a handle for an object in a P���@many-to-one relationship }1 ��K�W!����1 X'�KWm ���`vpi_handle_multi() UH��ˆ����Zf������UH��ˆ��„�9���9����& ����x9���`9Sample code using (load and traverse) object collections H�� GvpiHandle scope; /* Some scope we are looking at*/ 0���?vpiHandle var_handle; /* Object handle*/ ���?vpiHandle some_net;/* Handle of some net*/ ���?vpiHandle some_reg;/* Handle of some reg*/ ���AvpiHandle vc_trvs_hdl1; /* Traverse handle*/ ���AvpiHandle vc_trvs_hdl2; /* Traverse handle*/ ���2vpiHandle itr; /* Iterator */ ��@BvpiHandle loadCollection;/* Load collection*/ !o�� FvpiHandle trvsCollection;/* Traverse collection*/ ���� ���0char *datafile = ...;/* data file*/ ��@)p_vpi_time time_p; /* time*/ !J��� ... ����/* Create load collection */ ����;loadCollection = vpi_create(vpiObjCollection, NULL, NULL); ���� ����4/* Add data to collection: All the nets in scope */ ����"itr = vpi_iterate(vpiNet, scope); ����%while (var_handle = vpi_scan(itr)) { ���LloadCollection = vpi_create(vpiObjCollection, loadCollection, var_handle); ����} ����4/* Add data to collection: All the regs in scope */ ����"itr = vpi_iterate(vpiReg, scope); ����%while (var_handle = vpi_scan(itr)) { ���LloadCollection = vpi_create(vpiObjCollection, loadCollection, var_handle); ���@} !K��� G/* Initialize the read interface: Post process mode, read from a file, ���Iand focus only on the signals in the load collection: loadCollection */ ����Hvpi_read_init(vpiAccessPostProcess, datafile, loadCollection, NULL, 0); ���� ����(/* Demo scanning the load collection */ ����.itr = vpi_iterate(vpiMember, loadCollection); ����%while (var_handle = vpi_scan(itr)) { ���... ����} ���� ����6/* Load the data in one shot using load collection */ ����vpi_read_load(loadCollection); ���� ����/* Application code here */ ����some_net = ...; ����time_p = ...; ����some_reg = ...; ����.... ����1vc_trvs_hdl1 = vpi_handle(vpiTrvsObj, some_net); ����1vc_trvs_hdl2 = vpi_handle(vpiTrvsObj, some_reg); ����0vpi_control(vpiTrvsTime, vc_trvs_hdl1, time_p); ����0vpi_control(vpiTrvsTime, vc_trvs_hdl1, time_p); ����(/* Data querying and processing here */ ����.... ���� ���/* free handles*/ ���@vpi_free_object(...); Tk��� tThe code segment above creates an object load collection� loadCollection�  then adds to it all the objects in v����scope�  of type � vpiNet�  and � vpiReg� . It then initializes the read interface for post process read access from B�����file � datafile�  with access to the objects listed in � loadCollection� . � loadCollection�  can be iterated }smZ��R%�Qc%���smZR �X��3 ��� 2Get the traverse handle min, max, or current time P���@where it points. }6pmy��R'�Q$���6pmyR �XW ���`vpi_trvs_get_time() UH��ˆ����Zh� �����UH��ˆ���LD## ����l���}33e��K�W����33eX'�H�Wo3 ���`To }SsT��_8�N;)���SsTO=�OW03 ���`Use }qsT��_:�N(*���qsTO=�OW13 ���` New Usage }UT3��_<�N)+���UT3)O=�P�23 ��� (Create iterator for all loaded objects, p����&load collections, and traverse collec���@tions. }ST3��_>�N*,���ST3O=�PW3 ���`vpi_iterate() }qT3��_@�N+-���qT33O=�P43 ��� 'Add properties � vpiDataLoaded�  p����)and � vpiMember� . Extend with col����&lection handle to create a collection ���@member element iterator. }UT��_B�N,.���UTO=�Q�53 ��� &Obtain a traverse (collection) handle P���@#from an object (collection) handle }ST��_D�N-/���STO=�QW6 ���` vpi_handle() }qT��_F�N.3���qTO=�Q>3 ��� )Add a new types � vpiTrvsObj�  and R���@vpiTrvsCollection ��$���cW�E9������$����$��$}6py)��c�Q����6py)R �RWE ���` vpi_goto() ��d������c���������BB#��������}UT)��_N�N/4���UT)O=�S�WF3 ���`Obtain a property }ST)��_P�N35���ST)O=�SWG ���` vpi_get() }qT)��_R�N46���qT))O=�SH3 ��� #Extended with the new check proper����"ties: � vpiDataLoaded�  and B���@ vpiTrvsHasVC }UT��_T�N57���UTO=�T�WI3 ���` Get a value }ST��_V�N68���STO=�TWL ���`vpi_get_value() }qT��_X�N79���qTO=�TM3 ��� #Use traverse handle as argument to P���@get value where handle points }U"T��_Z�N8:���U"TO=�U�WN3 ���`#Get time traverse handle points at }S"T��_\�N9;���S"TO=�UWO ���`vpi_get_time() }q"T��_^�N:<���q"TO=�UQ3 ��� #Use traverse handle as argument to P���@get time where handle points }UAT)��_`�N;=���UAT)O=�V�S3 ��� Free traverse handle P���@"Free (traverse) collection handle }SAT)��_b�N<>���SAT)O=�VWT ���`vpi_free_object() }qAT)��_d�N=?���qAT))O=�V:3 ���` Use traverse handle as argument qG��� $Use (traverse) collection handle as ���@ argument }UjT3��_g�N>@���UjT3O=�W�P3 ��� %Move traverse (collection) handle to P���@min, max, or specific time }SjT3��_i�N?A���SjT3O=�WWQ ���`vpi_control() }qjT3��_k�N@����qjT33O=�WR3 ��� "Use traverse (collection) handles/p����&types and properties. Extended with a ����%time argument in case of jump to spe���@ cific time. ��d������[���������DD�������� UH��ˆ����[�B�����UH��ˆ��†�7���7����D����T����}using � vpi_iterate(� ) to create iterator and then use � vpi_scan()�  to scan it. The selected objects are then 0����sloaded in one shot using � vpi_read_load() � with � loadCollection�  as argument. The application code ����sis then free to obtain traverse handles for the loaded objects, and perform its querying and data processing as it ���@ desires. ��� tIf the user application wishes to access all (or a large number of) the objects in a specific scope (and may be its 0G����tsub-scopes) it is easier to call � vpi_read_init_create()�  to both initialize the tool and create a load col����llection of all the objects in a single shot. The code segment below shows a simple code segment that mimics ����rthe function of a $dumpvars call to access data of all the regs in a specific scope and its subscopes and process ���� the data. ���@ }�� KvpiHandle big_scope; /* Some scope we are looking at*/ 0���?vpiHandle obj_handle; /* Object handle*/ ���AvpiHandle obj_trvs_hdl; /* Traverse handle*/ ���FvpiHandle big_loadCollection;/* Load collection*/ ���HvpiHandle signal_iterator;/* Iterator for signals*/ ��@1p_vpi_time time_p; /* time*/ ! ���  ����!/* Initialize the read interface ���>Access data from (say simulator) memory, for scope big_scope ���and its subscopes */ ����P/* Call marks access AND creates collection for all the objects in the scope */ ����Mbig_loadCollection = vpi_read_init_create(vpiAccessLimitedInteractive, NULL, ����NULL, big_scope, 0); ���� ���@"if (big_loadCollection == NULL) { ��`#/* unable to create collection */ !��� } ���� ����6/* Load the data in one shot using load collection */ ����#vpi_read_load(big_loadCollection); ���� ����/* Application code here */ ���@./* Obtain handle for all the regs in scope */ ���`3signal_iterator = vpi_iterate(vpiReg, big_scope); !���  ����(/* Data querying and processing here */ ���@=while ( (obj_handle = vpi_scan(signal_iterator)) != NULL ) { ��`1assert(vpi_get(vpiType, obj_handle) == vpiReg);  ��`1/* Create a traverse handle for read queries */ ! �� 4obj_trvs_hdl = vpi_handle(vpiTrvsObj, obj_handle); ���time_p = ...; /* some time */ ���1vpi_control(vpiTrvsTime, obj_trvs_hdl, time_p); ���/* Get info at time */ ��@3vpi_get_value(obj_trvs_hdl, value_p); /* Value */  ��`vpi_printf(....); !��� } ���/* free handles*/ ���@vpi_free_object(...); !9,���`Object-based traversal lB��� mObject based traversal can be performed by creating a traverse handle for the object and then moving it back 0M����mand forth to the next or previous Value Change (VC) or by performing jumps in time. A traverse object handle ����xfor any object in the design can be obtained by calling � vpi_handle()�  with a � vpiTrvsObj�  type, and an ���Hobject � vpiHandle� . This is the method described in Section 629.7.35, and used in all the code examples thus far. mx��� nUsing this method, the traversal would be object-based because the individual object traverse handles are crePƒ����nated, and then the application can query the (value, time) pairs for each VC. This method works well when the UH��ˆ����[ � B�����UH��ˆ���&xCC  ����l���U.��/��_~�K�������F0�L2���� ��+�]��_�E�G�����+�]������H~��_�EFH���H~ x` �F��_�EGI���x` �Fx`hx`h����$Q���_�EHN�����$Q����$ ��$��d������RO���������LL�������� UH��ˆ����RP�J�����UH��ˆ��\X�)���)��<<L ����B���A/* vpi_trvs_get_time(vpiTrvsMaxTime, vc_trvs_hdl, time_p); */ 0���Gvpi_get_time(vc_trvs_hdl, time_p);/* Time of VC*/ ��@Fvpi_get_value(vc_trvs_hdl, value_p);/* VC data*/ !A�� } ���} ����} ����/* free handles */ ���@vpi_free_object(...); Jh��� lThe code segment above declares an interactive access scheme, where only a limited history of values is pro0s����kvided by the tool (e.g. simulator). It then creates a Value Change (VC) traverse handle associated with an ����uobject whose handle is represented by � var_handle�  but only after the object is loaded into memory first. It ����|then creates a traverse handle, � vc_trvs_hdl� . With this traverse handle, it first calls � vpi_control()�  to ����igo to the minimum time where the value has changed and moves the handle (internal index) to that time by ����{calling � vpi_control� () with a � vpiTrvsMinTime�  argument. It then repeatedly calls � vpi_control()�  ����rwith a�  vpiTrvsNextVC�  to move the internal index forward repeatedly until there is no value change left. ���@nvpi_get_time()�  gets the actual time where this VC is, and data is obtained by � vpi_get_value()� . Kʪ��� VThe traverse and collection handles can be freed when they are no longer needed using ժ���@vpi_free_object()� . U9誠���h,Jump Behavior V��� |Jump behavior refers to the behavior of � vpi_control()�  with a � vpiTrvsTime�  property, � vpiTrvsObj�  0 ����otype, and a jump time argument. The user specifies a time to which he or she would like the traverse handle to ����qjump, but the specified time may or not have value changes. In that case, the traverse handle shall point to the ���@5latest VC equal to or less than the time requested. _4��� In the example below, the whole simulation run is from time� 0�  to time � 65� , and a variable has value changes at 0?����time � 0� , � 15�  and � 50� . If we create a value change traverse handle associated with this variable and try to jump to ���@>a different time, the result will be determined as follows: \[���`CJump to � 10� ; traverse handle return time is � 0� . ]m���`EJump to � 15� ; traverse handle return time is � 15� . ^���`EJump to � 65� ; traverse handle return time is � 50� . _���`EJump to � 30� ; traverse handle return time is � 15� . `���`FJump to (� -1� ); traverse handle return time is � 0� . a���`EJump to � 50� ; traverse handle return time is � 50� . b˪��� mIf the jump time has a value change, then the internal index of the traverse handle will point to that time. ֪���@BTherefore, the return time is exactly the same as the jump time. p몐��� mIf the jump time does not have a value change, and if the jump time is not less than the minimum time of the p��pwhole trace run, then the return time is aligned backward. If the jump time is less than the minimum time, ����vthen the return time will be the minimum time. In case the object has � hold value semantics�  between the VCs ����vsuch as static variables, then the return code of � vpi_control()�  (with a specified time argument to jump to) ����tshould indicate � success� . In case the time is greater than the trace maximum time, or we have an automatic ����mobject or an assertion or any other object that does not hold its value between the VCs then the return code ���@Xshould indicate � failure�  (and the backward time alignment is still performed). UH��ˆ����RR� J�����UH��ˆ���=&KK  ����l��� ~zx)��b�E;+���~zx)F<~9nets ��~��_�EIO��� ��~ P �F��_�ENP���P �FP PeP Pe� )h}��_�EOQ���)h}''� vpiParent��$Q���_�EPR�����$Q�� ��$��$ ��)}��_�EQS�����)}��'��'� vpiTrvsObj ���]��_�ERT������]������ q���]��_�ESU���q���]q��q����?������_�ETV���?���� Q*���_�EUW���Q*�Q9Q9�� ��P:�F��_�EVY�����P:�F��������d������\���������xx�������� ���}��_�EWZ������}������ ���}��_�EY������}������UQ�����_�N�������\k�O3���� ZG�]��_�[�]���ZG�]ZZ��~t���_�[\^���~t���Z���_�[]_�����Z��������Q���_�[^a�����Q������}6py)��X�Qo>���6py)R �aW8 ���` vpi_create() ��~l��_�[_e�����~l}sNZ��Va�Qc���sNZR �h�73 ��� 4Unload data (for a single design object or a collecP���@tion) from memory }6pNy��Vc�Qb$���6pNyR �hW< ���`vpi_read_unload() ��xXO)��b�[gl��� ��xXO) �� ���9collection member z��E�]��_�[af���z��E�]z��z���� ?_��_�[eh���?_YSڙ1?1" collection��~���b�[?d�����~������ 6r$�F��_�[fj���6r$�F6|~6|~� � UH��ˆ����\�X�����UH��ˆ��…�7���7����x����m���@Ydesign is being navigated and there is a need to access the (stored) data of an object. g9���h7Time-ordered traversal k��� mAlternatively, we may wish to do a time-ordered traversal i.e. a time-based examination of values of several ����zobjects. We can do this by using a collection. We first create a � traverse collection�  of type � vpiTrvsCollec"����rtion�  of the objects we are interested in traversing from the design object collection of type � vpiObjCol����ulection�  using � vpi_handle()�  with a � vpiTrvsCollection�  type and collection handle argument. We "����{can then call � vpi_control()�  or � vpi_goto()�  on the traverse collection to move to next or previous or do ����kjump in time for the collection as a whole. A move to next (previous) VC means move to the next (previous) ����rearliest�  VC among the objects in the collection; any traverse handle that does not have any VC is ignored. A "����rjump to a specific time aligns the handles of all the objects in the collection (as if we had done this object by ���@;object, but here it is done in one-shot for all elements). m��� kWe can choose to loop in time by incrementing the time, and doing a jump to those time increments. This is ���@%shown in the following code snippet. p���` vpiHandle loadCollection = ...; y���`vpiHandle trvsCollection; w���`p_vpi_time time_p; r���` z���`?/* Obtain (create) traverse collection from load collection */ q���`@trvsCollection = vpi_handle(vpiTrvsCollection, loadCollection); s���`,/* Loop in time: increments of 100 units */ t���`%for (i = 0; i < 1000; i = i + 100) { u��`time_p = ...; x��`/* Go to point in time */ ��`3vpi_control(vpiTrvsTime, trvsCollection, time_p); v���`} nD��� sAlternatively we may wish to go to the next VC of the traverse collection defined to be the � VC with the smallO����vest time�  among the VCs in the traverse object in the collection; again traverse objects with no VCs are ignored. ���@-This is shown in the following code snippet. .d���` vpiHandle loadCollection = ...; 1/o��� vpiHandle trvsCollection; ���@&vpiHandle vc_trvs1_hdl, vc_trvs2_hdl; 0���`%p_vpi_time time_p, time1_p, time2_p; 1���` E���`!/* Create traverse collection */ I���`@trvsCollection = vpi_handle(vpiTrvsCollection, loadCollection); !Z�� Nvc_trvs1_hdl = ... ; /* some element of trvsCollection*/ ���Pvc_trvs2_hdl = ... ;/* another element of trvsCollection*/ ���@ U���`//* Go to earliest next VC in the collection */ W���`0for (;;) { /* for all collection VCs in time */ !]�� 8if (vpi_control(vpiTrvsNextVC, trvsCollection) == 0) { ���9/* failure (e.g. already at MaxTime or no more VCs) */ ���!break; /* cannot go further */ ���} ���Dvpi_get_time(trvsCollection, time_p);/* Time of VC */ ���9/* Test to see which elements have a VC at this time */ ���&vpi_get_time(vc_trvs1_hdl, time1_p); ��@&if (time1_p->real == time_p->real) { !X�� /* Element has a VC */ ��@Bvpi_get_value(vc_trvs1_hdl, value_p);/* VC data */ ^��`&/* Do something at this VC point */ z��`... !{�� } ��@... A+���`} 6k�F��_�[h{���6k�F6T6T� � ���}��b�[}�������}��������l��b�[dq�����lU������\��������n�64����~ -u��\�m�p���~ -u�}sZ)��X�Q8`���sZ))R �a�V3 ��� Create a new handle: used to ���@5- create an object (traverse) collection for loading A���`4- Add a (traverse) object to an existing collection �� ZQ��\�mns����� ZQ� 2 n΋)��b�[lr���2 n΋)K2$ traversable��Ql��b�[qz�����Ql��6��\�mpt�����6�;��?6��\�msu���;��?6�Z?$���\�mtv���Z?$��~?Z?---$��\�muw���---$ ���_��\�mvy������_��E1��E1�"�UH��ˆ����\� X�����UH��ˆ���Dii ����l��� ��n�_��\�mw�����n�_�����"� ;wX )��b�[r}���;wX )Ka;watrvsObj z��L�]��_�[j|���z��L�]z��Uz��U�� ��B�]��_�[{~�����B�]��K��K�� ph}��b�[zk���ph}pp� vpiMember�����_�[|������������}sZ)��c�Q%1���sZ))R �R�e3 ��� 4Move traverse collection handle to min, max, or spep����7cific time. Return a new collection containing all the ���@%objects that have a VC at that time. V��Iw�)��_�[~:���V��Iw�)V��RV��R�� ��֐DX)p��\�my�����֐DX)p�����? SystemVerilog CD֐)p��\�m���CD֐)pV��NCN?Foreign��H-���\�m�����H-��;��H��H��cZ$��\�m�����cZ$ ˰bk N<��\�m���˰bk N<��s˰bs6Waveform Database;��l6��\�m���;��l6 Gp��\�m���GpV��y�Gy�6Foreign��u$���\�m �����u$��;��u��u��-���\�m �����-����-��-��u���\�m �����u����u��u��u ��\�m �����u  QH\N_��\�m ���QH\N_�SQS"VPI KP6i`)p��\�m ���KP6i`)p�?KP??Read &ޠ]��\�m ����&ޠ]C�CsۺCsUser}sZ)��`�Q^���sZ))R �Y�|3 ��� 5Initialize read interface, and create a complete colp����7lection of all the objects in the specified scope (and ���@,sub-scopes if required) and load collection ��d������]��������� �������� UH��ˆ����]������UH��ˆ��ƒ�1���1��������=��� mBy testing the traverse handle time of any element against the collection VC time we can find out if the ele���@_ment has a VC at that time or not. This is shown in the last segment of the code sample above. ?��� oAlternatively, we may wish to get a new collection returned of all the objects that have a value change at the ����pgiven time we moved the traverse collection to. In this case � vpi_control()�  is replaced with a call to ����pvpi_goto()� . The latter returns a new collection with all the traverse objects that have a VC at that time. ���@0This is shown in the code snippet that follows. Q���`... ?\��`LvpiHandle vctrvsCollection;/* collection for the objects with VC */ ��`DvpiHandle itr;/* collection member iterator*/ A���`... ���`//* Go to earliest next VC in the collection */ ���`0for (;;) { /* for all collection VCs in time */ D��`=vctrvsCollection = vpi_goto(vpiTrvsNextVC, trvsCollection); ! �� !if (vctrvsCollection == NULL) { ���9/* failure (e.g. already at MaxTime or no more VCs) */ ���!break; /* cannot go further */ ���} ���3/* create iterator then scan the VC collection */ ���1itr = vpi_iterate(vpiMember, vctrvsCollection); ���(while (vc_trvs1_hdl = vpi_scan(itr)) { ���/* Element has a VC */ ��@Bvpi_get_value(vc_trvs1_hdl, value_p);/* VC data */ <��`&/* Do something at this VC point */ !�� ... ���} ��@... >���`} iUTLUN���h:Unloading the data rd��� sOnce the user application is done with accessing the data it had loaded, it shall call � vpi_read_unload()�  0o����oto unload the data from (active) memory. Failure to call this unload may affect the tool performance and capac����mity and its consequences are not addressed here since managing the data caching and memory hierarchy is left ���@to tool implementation. s��� sCalling � vpi_read_unload()�  before releasing (freeing) traverse (collection) handles that are manipulating ����qthe data using � vpi_free_object()�  is not recommended practice by users; the behavior of traversal using ����yexisting�  handles is not defined here. It is left up to tool implementation to decide how best to handle this. Tools "����oshall, however, prevent creation of new traverse handles by returning the appropriate fail codes in the respec����qtive creation routines; this situation is similar to attempting to create traverse handles before doing any data ���@Qloads with � vpi_read_load()� , and shall be treated in a similar fashion. qUTUB���`Reader VPI routines u9���` Extensions to existing routines e���(tThis section describes the extensions to existing VPI routines. Most are obvious and shown in +Table291*. (���@8vpi_control()�  is described here again for clarity. =8��� vpi_control() PD����nSynopsis: � Try to move value change traverse index to min, max or specified time. If the request is for a b����knext or previous VC and there is none (for collection this means no VC for any object) a fail is returned, ����iotherwise a success is returned. If there is no value change at specified time in a jump, then the value ���schange traverse index is aligned based on the jump behavior defined earlier in Section .29.7.3.2-, and the ����ftime will be updated based on the aligned traverse point. If there is a value change occurring at the ����lrequested time, then the value change traverse index is moved to that tag with success return, otherwise if UH��ˆ����]� �����UH��ˆ���x  ����l���}6py)��`�Q_���6py)R �Y} ���` Q~���`vpi_read_init_create() ��d������a?���������!�������� UH��ˆ����a@������UH��ˆ��€�3���3��������=����qthe object does not have hold semantics a fail is returned. In the case of a collection, a fail is only returned ����9when none of the objects in its group can return a true. P����ISyntax: � vpi_control(vpiType prop, vpiHandle obj, p_vpi_time time_p) I����>Returns:�  � PLI_INT32� , 1 for success, 0 for fail. "���� Arguments: ���$� vpiType�  � prop� : "���S� vpiTrvsMinTime� : Goto the minimum time of traverse (collection) handle. ���S� vpiTrvsMaxTime� : Goto the maximum time of traverse (collection) handle. ���D� vpiTrvsTime� : Jump to the time specified in � time_p. "���a� vpiHandle obj� : Handle to a traverse object (collection) of type � vpitrvsObj�  ���(� vpitrvsCollection� ) ���q� p_vpi_time time_p� : Pointer to a structure containing time information. Used only if � prop�  is ���9of type � vpiTrvsTime� , otherwise it is ignored. ����yRelated routines� : � vpi_goto()� . Difference is that � vpi_goto()�  can operate only on traverse collec"����mtion handles only, and returns a new traverse collection for the objects that have a VC at the time it moves ���@to. [9Ҫ���`Additional routines d誙���`>This section describes the additional VPI routines in detail. c��� vpi_read_getversion() 2P����,Synopsis� : � Get the reader version. ����(Syntax� : � vpi_read_getversion() I����1Returns: � char*� , for the version string "����Arguments� : None ����Related routines� : None ���� ����vpi_read_init() "P����rSynopsis� : � Initialize the reader with access type and access scope, and/or access collection of objects. ����PSyntax� : � vpi_read_init(vpiType prop, char* filename, vpiHandle loadCol����+lection, vpiHandle scope, PLI_INT32 level) I����9Returns: � PLI_INT32� , 1 for success, 0 for fail. ����Arguments� : " ���#� vpiType�  � prop� : ���`� vpiAccessLimitedInteractive� : Access data in tool memory, with limited history. The ���Ktool shall at least have the current time value, no history is required. ���_� vpiAccessInteractive� : Access data interactively. Tool shall keep value history up ���to the current time. ���M� vpiAccessPostProcess� : Access data stored in specified data file. ���&� char* filename� : Data file. ���f� vpiHandle loadCollection: � Load collection of type � vpiObjCollection� , a collection ����of ���design objects. ���/� vpiHandle scope� : Scope of the read. ���f� PLI_INT32 level� : If 0 then enables access to scope and all its subscopes, 1 means just the ���scope. ���@Related routines� : None. �A}��� vpi_read_init_create() PM|����uSynopsis� : � Initialize the reader with access type and access scope, and/or access collection of objects. It ����hreturns a load collection of all the (valued) design objects in access scope, and/or access collection. P����PSyntax� : � vpi_read_init(vpiType prop, char* filename, vpiHandle loadCol����+lection, vpiHandle scope, PLI_INT32 level) BI����kReturns: � vpiHandle�  � of type � vpiObjCollection � for success, � NULL�  for fail. UH��ˆ����aB� �����UH��ˆ��� ����l�����d������a���������"�������� UH��ˆ����a������UH��ˆ��~�5���5�������������Arguments� : 2 ���#� vpiType�  � prop� : ���`� vpiAccessLimitedInteractive� : Access data in tool memory, with limited history. The ���Ktool shall at least have the current time value, no history is required. ���_� vpiAccessInteractive� : Access data interactively. Tool shall keep value history up ���to the current time. ���M� vpiAccessPostProcess� : Access data stored in specified data file. ���&� char* filename� : Data file. ���f� vpiHandle loadCollection: � Load collection of type � vpiObjCollection� , a collection ����of ���design objects. ���/� vpiHandle scope� : Scope of the read. ���f� PLI_INT32 level� : If 0 then enables access to scope and all its subscopes, 1 means just the ���scope. ����2Related routines� : � vpi_read_init()� . ���� ����vpi_trvs_get_time() "P����YSynopsis: � Retrieve the time of the object or collection of objects traverse handle. ����GSyntax: � vpi_trvs_get_time(vpiType prop, vpiHandle obj, p_vpi_time ����time_p) I����9Returns: � PLI_INT32� , 1 for success, 0 for fail. "���� Arguments: ���$� vpiType�  � prop� : "���f� vpiTrvsMinTime� : Gets the minimum time of traverse object or traverse collection. Returns ���ffailure if traverse object or collection has no value changes and � time_p�  is not modified. ���f� vpiTrvsMaxTime� : Gets the maximum time of traverse object or traverse collection. Returns ���ffailure if traverse object or collection has no value changes and � time_p�  is not modified. ���h� vpiTrvsTime� : Gets the time where traverse handle points. Returns failure if traverse object ���lor collection has no value changes and � time_p�  is not modified. In the case of a collection, it ���dreturns success (and time_p is updated) only when all the traverse objects in the collection are ���Spointing to the same time, otherwise returns failure and time_p is not modified. "���p� vpiHandle obj� : Handle to a traverse object of type � vpiTrvsObj�  or a traverse collection of ���type � vpiTrvsCollection. ���_� p_vpi_time time_p� : Pointer to a structure containing the returned time information. ����rRelated routines� : � vpi_get_time()� . Difference is that � vpi_trvs_get_time()�  is more general ����fin that it allows an additional � vpiType�  argument to get the min/max/current time of handle. ����Fvpi_get_time()�  can only get the current time of traverse handle. &���� ����vpi_read_load() P����kSynopsis: � Load the data of the given object into memory for data access and traversal if object is an ����mobject handle; load the whole collection (i.e. set of objects) if passed handle is a load collection of type ����vpiObjCollection� . P����(Syntax: � vpi_read_load(vpiHandle h) I����Returns: � PLI_INT32� , 1 for success of loading (all) object(s) (in collection), 0 for fail of loading (any) object (in J���� collection). ���� Arguments: "���_� vpiHandle h� : Handle to a design object (of any valid type) or object collection of ���type � vpiObjCollection. ���@Related routines� : None BWy��� vpi_read_unload() Pcx����kSynopsis: � Unload the given object data from (active) memory if object is an object handle, unload the b���wwhole collection if passed object is a collection of type � vpiObjCollection� . See Section <29.8; for a ����description of data unloading. UH��ˆ����a� �����UH��ˆ���B  ����l��� Za����bT�EZ���Za��ZEZE�� N ^%��bZ�E���N ^%N zN z�trvsObj ���]��b\�E ������]������HL~��bn�E ���HL~Hg~��bp�E���Hg~H~��br�E!���H~ ����}��b`�E�������}������ �+�]��b}�E"����+�]����H�}��b~�E!#���H�} Q�*���b�E"$���Q�*�Q�9Q�9�� Z�a����b�E#%���Z�a��Z�Z���H�~��b�E$&���H�~H�~��b�E%'���H�~H�~��b�E&(���H�~H ~��b�E')���H ~ ��+�]��b�E(*�����+�]������ le]��b�E),���le]l8l8� traversable pc2Qz)��b�EM-���pc2Qz)F<Zpc2Z9 net arrays ��+�]��b�E*.�����+�]������ }\lz)��b�E+0���}\lz)F<u}\u9regs Q*���b�E,/���Q*�QA9QA9�� ZGa����b�E.3���ZGa��ZNZN�� pzU\)��b�E-1���pzU\)F<p9 reg arrays }z)��b�E02���}z)F<}9vars tz)��b�E14���tz)F<ƅtƅ9memory �+�]��b�E/5����+�]���� ~Y�)��b�E27���~Y�)~~�9� Q�*���b�E36���Q�*�Q�9Q�9�� Z�a����b�E5;���Z�a��Z�Z��� sr z8)��b�E48���sr z8)F<ᅤsr ᅤ9 primitive czJph)��b�E79���czJph)cc�9primitive arrays T h)��b�E80���T h) gT g9concurrent assertions$l��b�[�<���$l?�����b�E6M���?����?��~���b�[:=���~���� Qw�)��b�[<>���Qw�)QQ�9�  N")��b�[=@��� N")Xᓹ9 objCollection cX B)��b�[@g���cX B)Xaᓷca9trvsCollection$Ql��b�[>?���$Ql UH��ˆ����c�2�����UH��ˆ���(���(����B����BP����*Syntax: � vpi_read_unload(vpiHandle h) I����9Returns: � PLI_INT32� , 1 for success, 0 for fail. ���� Arguments: ���`� vpiHandle h� : Handle to an object or collection (of type � vpiObjCollection� ). ���@Related routines� : None. CG��� vpi_create() 2PS����?Synopsis: � Create or add to a load or traverse collection. ����BSyntax: � vpi_create(vpiType prop, vpiHandle h, vpiHandle obj) I���gReturns: � vpiHandle�  of type � vpiObjCollection�  for success, � NULL�  for fail. "���� Arguments: ���$� vpiType�  � prop� : "���W� vpiObjCollection� : Create (or add to) load (� vpiObjCollection� ) or ���5traverse (� vpiTrvsCollection� ) collection. ���f� vpiHandle h� : Handle to a (object) traverse collection of type (� vpiObjCollection� ) ���8vpiTrvsCollection� , NULL for first call (creation) ���b� vpiHandle obj� : Handle of object to add, NULL if for first time creation of collection. ���@Related routines� : None. Dܪ��� vpi_goto() P誘����iSynopsis: � Try to move value change traverse index of members of collection to min, max or specified "����vtime. If the request is for a next or previous VC and there is no VC for any object in collection a � NULL�  is ����jreturned signifying fail, otherwise a new collection with all objects that have a VC at the time we moved ����kto is returned signifying success. If there is no value change at specified time in a jump, then the value ����gchange traverse index for each object is aligned based on the jump behavior defined earlier in Section ���029.7.3.21, and its time will be updated based on the aligned traverse point. A fail (i.e. � NULL�  collection) is ����Zonly returned when none of the objects in its group can return an individual success. See ����kvpi_control()�  for a more detailed description of the semantics of individual traverse object handles. P����FSyntax: � vpi_goto(vpiType prop, vpiHandle obj, p_vpi_time time_p) I���rReturns:�  � vpiHandle�  of type � vpiObjCollection�  for success, � NULL�  for fail.� . "���� Arguments: ���$� vpiType�  � prop� : "���Q� vpiTrvsMinTime� : Goto the minimum time of traverse collection handle. ���Q� vpiTrvsMaxTime� : Goto the maximum time of traverse collection handle. ���D� vpiTrvsTime� : Jump to the time specified in � time_p. "���V� vpiHandle obj� : Handle to a traverse object of type � vpiTrvsCollection. ���q� p_vpi_time time_p� : Pointer to a structure containing time information. Used only if � prop�  is ���9of type � vpiTrvsTime� , otherwise it is ignored. ����yRelated routines� : � vpi_control()� . Difference is that � vpi_goto()�  can operate only on traverse col"����jlection handles only, and returns a new traverse collection for the objects that have a VC at the time it ���@ moves to. QF骃���` UH��ˆ����c� 2�����UH��ˆ����AA ����l����#�d�������`��Left�d�������Right�d������� Reference�d������� �����d���������HTML�d����� ��HTML�d�����  ��Headings�d����� $��HTML�d�����'��HTML�d���� �9�����d����� B�����d����� E�����d����� H�����d����� K�����d�����N�����d�����Q�����d�����T�����d�����W�����d���� � Z�����d���� � J�����d�����,��First�d�����j�� last left�d�����q�� boilerplate�d�����t�� title page�d�����{�� Index.left�d������� Index.right�d��������Cover�d��������TOC�d���� ������d���� �B�����d����� X�����d�����!�����d����� "�����d�����!#�����d�����"�2������"�������@��@��������������������� ���������������������������Mapping Table Title������. ������@��@��������������������� ���������������������������Body������. ��� f�@��������H�U��� ������� ���������������� ���������9 $���H���l����������������������� �����D�����h����������H3,1.1.1���H3H:<$chapnum>.<n>.<n+> Body. ���� �@��@��������HQ������������ =������������� ����������SectionHeading����H:Section <$chapnum> SectionTitle. ���� �@��@��������H�Q������������ =������������� ����������SectionHeading����H:Section <$chapnum> SectionTitle. �����f�@��������������������� ������������������������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �Normal������. ��� f�@��������H�U���������� ���������������� ��������� $���H���l����������������������� �����D�����h����������H2,1.1���H2H:<$chapnum>.<n+> Body. ���f�@��������H�U��� ������� ���������������� ���������9 $���H���l����������������������� �����D�����h���������� H4,1.1.1.1���H4H:<$chapnum>.<n>.<n>.<n+> Body. ��� f�@��������F�E������������ ���������������� ���������9� FigureCaption����F:Figure <$chapnum><n+> FigCaptionCont. ��� f�@���������P�������������������������� ��������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� � heading 1�����Normal. ��f�@��������L������������ ��������������������������. NumberedList2���� L:<n+>)\t�. ��� f�@���������P�������������������������� ��������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� � heading 2�����Normal. ��� f�@���������P���������� ���������������� ��������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� � heading 3�����Normal. �����f�@��������������������� ������������������������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �Default������. ���f�@���������@����������� ������������������������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �..�����Default. �����f�@��������������������� ����������������������������.����.�header������. �����f�@��������������������� ����������������������������.����.�footer������. ��� �f�@������������������� ������������������������� �Body������. �����f�@��������������������� ������������������������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� � footnote text������. ���&f33f�@���������@����������� ���������������;���������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �.. 2�����Default. ���f�@���������@����������� ���������������� ��������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �caption�����Normal. �f�@��������Z�A����������� ������������������������� �� NumberedLista���� Z:<a=1>)\t NumberedList2. ���33f�@���������@����������� ���������������;���������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �.. 3�����Default. ��f�@���������������������� �������������������������(�.�<�.�P�.�d�.�x�.����.����.����.����.����.����.����.����.�,���.�@���.�T���.�h���.�|���.����.����.����.����.�Body.Indented.1������. �����f�@���������@����������� ���������������;���������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� � Heading Base�����Default. ��f�@��������D������������� ��������������������������.�DashedList.indented����D:\t�. ������@��@��������������������� ����������������������������Mapping Table Title������. ��f�@��������L�A����������� ��������������������������. NumberedList1���� L:<n=1>)\tL,NumberedListb. ������@��@��������������������� ����������������������������Mapping Table Cell������. ��f�@���������������������� �������������������������(�.�<�.�P�.�d�.�x�.����.����.����.����.����.����.����.����.�,���.�@���.�T���.�h���.�|���.����.����.����.����.�Body.Indented.1������. ������@��@������������������������������������� ����������� �Mapping Table Cell������. 33�f�@��������Z������������ ��������������������������� NumberedListii���� Z:<r+>)\t�. ���f�@����������������������� �������������������������$�.�4�.�D�.�T�.�d�.�t�.����.����.����.����.����.����.����.����.����.����.�$���.�4���.�D���.�T���.�d���.�t���.����.����.����.����.����.����.�ExampleCode.Indented������. ��� �f�@������������������� ���������������� ���������Body������. ������@��@������������������������������������� ����������� �Mapping Table Cell������. �f�@��������Z������������ ������������������������� �� NumberedListb���� Z:<a+>)\t�. ������@��@��������������������� ���������������� ����������� �Mapping Table Cell������. ���f�@��������H�U��� ������� ���������������� ���������9 $���H���l����������������������� �����D�����h���������� H5,1.1.1.1.1���H5H:<$chapnum>.<n>.<n>.<n>.<n+> Body. �����f�@������������������� �������������������������3� TableText������. �����f�@���������������������� ������������������������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� �Normal������. �����f�@������������������� �������������������������� TableText������. �����f�@���������������������� ������������������������� $� �H� �l� ���� ���� ���� ���� � ��� �D��� �h��� ���� ���� � footnote text������. ��� �f�@������������������� ��������������������������Body������. ������@��@��������TA������������ ���������������|� ���������� TableTitle.1����T:Table<$chapnum><n=1>: Body. �����f�@��������AE������������ ���������������� ����������x.Annex.TableTitle.1����A:Table <A><n=1>T,Text. �����f�@��������AE������������ ���������������� ����������x.Annex.TableTitle����A:Table <A><n+1>T,Text. ���f�@��������D������������ ��������������������������.� DashedList����D:\t�. ��� �@��@��������SA������������ ��������������� �����������SyntaxBoxCaption.1����S:Syntax<$chapnum><n=1>Body. (���f�@�������������������� �������������������������.�.�=�.�BNF_SyntaxItem������. �����f�@�������������������� �������������������������� �� M���� CommitteeList������. ��f�@��������LA����������� ��������������������������. NumberedList1���� L:<n=1>)\tL,NumberedListb. �����f�@���������������������� ����������������������������� PageHeader.right������. ��� �@��@��������SA������������ ��������������� �����������SyntaxBoxCaption����S:Syntax<$chapnum><n+>Body. ������@��@��������TA���� ������� ���������������|� ���������� TableTitle����T:Table<$chapnum><n+>: Body. ��� f�@��������HU��� ������� ���������������� ��������� $���H���l����������������������� �����D�����h����������H3,1.1.1���H3H:<$chapnum>.<n>.<n+> Body. ����f�@��������������������� �������������������������� CellBody.X������. ��� �f�@������������������ ��������������������������Body������. ��� �f�@��������AU����������� ���������������� ����������x.Annex.H1,A.1���� A:<A>.<n+> T,Text. ������f�@���������������������� ����������������������������� PageHeader.left������. ��f�@��������L����������� ��������������������������. NumberedList2���� L:<n+>)\t�. ��f�@��������������������� �������������������������(�.�<�.�P�.�d�.�x�.����.����.����.����.����.����.����.����.�,���.�@���.�T���.�h���.�|���.����.����.����.����.�Body.Indented.1������. ����f�@��������AE����������� ���������������� ��������� $���H���l����������������������� �����D�����h����������x.Annex.H2,A.1.1���AH2A:<A>.<n>.<n+> T,Text. ����f�@������������������� ��������������������������x.Annex.normative������. �����f�@���������������������� ����������������������������� ���� PageFooter.left������. �����@��@��������AQ����������� =������������� ����������x.Annex.Heading���� A:Annex <A+> SectionTitle. ��� f�@���������D����������� ������������������������� $���H���l����������������������� �����D�����h����������Note����� P1,Normal. �����f�@���������������������� ����������������������������� ���� PageFooter.right������. ����f�@��������AE����������� ���������������� ��������� $���H���l����������������������� �����D�����h����������x.Annex.H3,A.1.1.1���AH3A:<A>.<n>.<n>.<n+> T,Text. ��� �f�@��������BE����������� �������������������������� Bibliography���� B:[B<n+>] �. ���f�@���������������������� �������������������������$�.�4�.�D�.�T�.�d�.�t�.����.����.����.����.����.����.����.����.����.����.�$���.�4���.�D���.�T���.�d���.�t���.����.����.����.����.����.����.�ExampleCode.Indented������. �����f�@���������������������� ��������������������������.� �.�0�.�@�.�P�.�`�.�p�.����.����.����.����.����.����.����.����.�����.����.� ���.�0���.�@���.�P���.�`���.�p���.����.����.����.����.����.����.� ExampleCode������. �����f�@�������������������� ��������������������������CellBody������. ���f�@��������HU��� ������� ���������������� ��������� $���H���l����������������������� �����D�����h���������� H4,1.1.1.1���H4H:<$chapnum>.<n>.<n>.<n+> Body. ���f�@��������HU��� ������� ���������������� ��������� $���H���l����������������������� �����D�����h���������� H5,1.1.1.1.1���H5H:<$chapnum>.<n>.<n>.<n>.<n+> Body. 3�����f�@������������������ ���������������� ���������� CellHeading������. ��� f�@���������T��������������������������� ���������� SectionTitle�����Body. �����f�@������������������ �������������������������� TableText������. ��f�@��������D������������ ��������������������������.�DashedList.indented����D:\t�. ��� �f�@��������AE����������� ���������������� ��������� $���H���l����������������������� �����D�����h����������x.Annex.H4,A.1.1.1.1���AH4A:<A>.<n>.<n>.<n>.<n+> T,Text. ��� �f�@��������AE����������� ���������������� ��������� $���H���l����������������������� �����D�����h����������x.Annex.H5,A.1.1.1.1.1���AH5A:<A>.<n>.<n>.<n>.<n>.<n+> T,Text. ��� f�@��������HU���������� ���������������� ��������� $���H���l����������������������� �����D�����h����������H2,1.1���H2H:<$chapnum>.<n+> Body. ��� �f�@��������HE������������ ������������������������� $���H���l����������������������� �����D�����h����������x.BNF.H2��� definition H:<n>.<n+> P1,Normal. ���f�@����������������������������������������������Footnote������. ��� �f�@��������HE������������ ������������������������� $���H���l����������������������� �����D�����h����������x.BNF.H3��� definitionH:<n>.<n>.<n+> P1,Normal. ��� �f�@��������HE������������ ������������������������� $���H���l����������������������� �����D�����h����������x.BNF.H4��� definitionH:<n>.<n>.<n>.<n+> P1,Normal. ��� �f�@��������HE������������ ������������������������� $���H���l����������������������� �����D�����h����������x.BNF.H5��� definitionH:<n>.<n>.<n>.<n>.<n+> P1,Normal. �f�@��������ZA����������� ������������������������� �� NumberedLista���� Z:<a=1>)\t NumberedList2. �f�@��������Z����������� ������������������������� �� NumberedListb���� Z:<a+>)\t�. 33�f�@��������ZA����������� ��������������������������� NumberedListi���� Z:<r=1>)\tNumberedListii. 33�f�@��������Z����������� ��������������������������� NumberedListii���� Z:<r+>)\t�. ��� �f�@��������AE������������ ���������������� ����������x.Annex.FigureTitle����A:Figure <A><n+>T,Text. ��� �f�@��������AE������������ ���������������� ����������x.Annex.FigureTitle.1����A:Figure <A><n=1>T,Text. 33�f�@��������LA����������� �������������������������33�� NumberedNote1���� L:<n=1>)\tL,NumberedListb. ��� �@��@��������EA������������ �� =������������ �����������ExampleCaption����E:Example<$chapnum><n+> Body. ��� �@��@��������EA������������ �� =������������ �����������ExampleCaption.1����E:Example<$chapnum><n=1> Body. ��� f�@��������FE������������ ���������������� ����������FigureCaption.1����F:Figure <$chapnum><n=1> FigCaptionCont. ��� f�@��������FE������������ ���������������� ���������� FigureCaption����F:Figure <$chapnum><n+> FigCaptionCont. 33�f�@��������L����������� �������������������������33�� NumberedNote2���� L:<n+>)\t�. ���� f�@���������T��������������������������� ���������� x.Annex.Title�����T,Text. ������@��@��������T�A���� ������� ���������������|� ���������/� TableTitle����T:Table<$chapnum><n+>: Body. �����@��@��������������������� �������������������������0�� A�� f�� ���� ���� ���� ���� ���� XCourier12������. �����f�@���������������������� �������������������������3 �� 6�� Q�� l�� ���� ���� ���� ���� ���� ���� )���� D���� _���� CellBody������. �����f�@������������������� ���������������� ���������6� CellHeading������. ��9X���f�@����������������������������������������������8xƨ��� Heading2T��� Chapter #��. �����f�@�������������������� ���������������� ���������9� CellHeading������. ��� �f�@������������������� ��������������������������Body������. �����5\\�@������������d��������� ���������������| ����������:�. 33�. H�. TableCell������. ����5\\�@������������d��������� ���������������|� ���������;Q�. c�. TableHead������. �����f�@���������������������� ��������������������������Table���Figure #��. �����\\�@������������d������������������������| ����������<�. 33�. H�. TabularListBody������. ]��̅\\�@��������A�Q�d�� ����������������������| ����������=]�. ���. TableTitle����A:Table <n>< ><n+>< >Body. ����f�@���������������������� ���������������� ���������� Table Heading������. �����33�@���������������������� ���������������� ���������6� LCellHeading������. ����33�@����������������������� �������������������������3� LCellBody������. �����33�@��������������������� ���������������� ���������9� CellHeading������. ����33�@���������������������� ��������������������������CellBody������. ����f�@���������������������� ������������������������� � RCellBody������. $$� �f�@��������J����������� ���������������� ����������TableTitle 1st����J:Table <n>-< >< ><n=1>. �. ������f�@���������������������� ������������������������� � Table body������. ������f�@����������������������� ����������������������������� ���� PageHeader.left������. �����f�@����������������������� ��������������������������� ���� ���� ���� PageFooter.left������. �����f�@����������������������� ����������������������������� PageHeader.right������. �����f�@����������������������� ��������������������������� ���� ���� ���� PageFooter.right������. � ��<f�@��������������������� ���������������� ���������? $�� H�� l�� ���� ���� ���� ���� ���� D���� h���� ���� P1,Normal������. ����f�@��������������������� ���������������| ����������@ $���H���l����������������������� �����D�����h���������� FL,FlushLeft������. ��� �@��@��������������������� �������������������������0�������..SectionHeadingTOC������. ������@��@��������������������� ��������������������������.�*�.�����.. H2,1.1TOC������. ��� �@��@��������������������� �����������������������������������..H1,1stLevelHeadTOC������. ������@��@��������������������� ����������������������������-�������..AT,AnnexTitleTOC������. ������@��@��������������������� �������������������������-���F���Z�������.. AH2,A.1.1TOC������. ���� �@��@��������������������� �������������������������-���F�������.. AH1,A.1TOC������. ��� �@��@��������������������� �������������������������-�������..x.Annex.HeadingTOC������. ���� �@��@��������������������� �������������������������-�������.. AN,AnnexTOC������. � � ���3��������� ������� Hyperlink ���3��������� �������footnote reference �������������� ���������� ��������������� ��������� ������������������������ ������������������������� �������vp������������������3���������� �������Heading 1 Char��������������� ������������������3 8���� ����������� �������3 8���� ����������� ������������������������ �������vp��������������� =������������ ��������� ������������������������ ������������������������ ���3�����������������Bullet1������������������������ ������������������������ ��������������=���������� ��������������=���������� ��������������� ��������� ��������������� ��������� ��������������� ��������� ������������������������ ��������������<���������� ��������������� ��������� ��������������� �������� ���������������������������������������"��������1.DELETE��������������� ��������������������������������� BNFitalic ��������������� ��������� ������������� �������Keyword �������������� �������������� ����������� ������� BNFkeyword ��������������;��������������������������������3.FIX ����������������������� Superscript ��������������������Code��������������� ��������2.DRAFT6 ��������������|� ��������� ������������������������ ������������������������ ��������������� ��������� ����������������������� ��������������� ��������� ��������������| ���������� ��������������|� �����������������������| ������������������������| ���������������������������������� ��������������� ��������� ��������������| ���������� ��������������|� ��������� ��������������=� ��������� ��������������<���������� ��������������=� ��������� ��������������� ������������������Z�����Zd���������������Zd������Zd� �����Zd�����������������������d�����������d����������������Z�������Z������������������������;������������������������ ��Zd������Zd������Zd������Zd�����Zd�������Thin����Medium����Double����Thick�@���� Very Thin���� Blue Line���� Blue thick����� Blue thin����ThinGray����� .75 Weight�����1.5 pt����Weight Four Double���Weight Three Double����Weight Two Double����Weight One Double���� Weight Four��� Weight Three���� Weight Two���� Weight One��������������������� ���������0�33  �33  �33  �33  �Format A�������������d��� AbRoutine��������������H� Mapping Table����� ��������a �;8 � Lines/Title� �����������H  �H  �H  �H  �H  �Format B�33$��MҁMҁ���� �����������H �v̀ �v̀ �v̀ �v̀ �Wide���MҁMҁ� �����������H �L- � = �ȴ �v3b�3333��MҁMҁ���� �����������H �v̀ �v̀ �v̀ �v̀ �WideFN�33$ff�MҁMҁ������ �����������S �S �S �S �S � TextColumn�3333ff�MҁMҁ������ ����������O33 �O33 �O33 �O33 �O33 � TextColumnFN� �����������������������mPU ��� �Clear�33$ff�MM���������� ����������̀�̀�̀� TabularList�������������H � Mapping Table� $ff�MM����������������mPU �3 � Ruled_formal�$����������H�Z�Z�Z�Table 1�$������������ WideTable�$� ����������H �Z �Z �Z �Z � Default_Table� ���� �������������������P" �$@  ��  �dx@  �z؀  �cmdref� ���������������������YP ��� � Clear/Title� �����������s� �` �Lines��������������d�Q �?�Y�� AbRoutine��������������d��� AbRoutine����� ���������d�̀�̀�̀� AbRoutine�� �z��>����������������H����6����-����?������ @�� ������������������H����z�� ����!*������h����h����h����B����_�� N��+0������������������?����_�� ��13������ev����ev����C����Q������ p��4C������H����������?����)�� W��<B������l����u����H����}w��H�� GR������Z����y��������0'HK������̀�̀�9H����-=OW������T����T����T�����Y�$�� �������������������$Cz�����������������������$Sz���������������� ��!�"�$qz������������#���$��%��&��'��$z��,����������(���)��*��+��,��$z������������-���.��/��0��1��$z������������2���3��4��5��6��$z������ ������7���8��9��:��;��$z������ ������< ���= ��> ��? ��@ ��$z������ ������A ���B ��C ��D ��E ��$z������ ������F ���G ��H ��I ��J ��$ z��,���� ������K ���L ��M ��N ��O ��$9z������ ������P ���Q ��R ��S ��T ��$Iz������ ������U���V��W��X��Y��$Yz��,����������Z���[��\��]��^��$bz��,����#�����_���`��a��b��c��$��z������#������d���e��f��g��h��$��z������#������i���j��k��l��m��$��z������#������n���o��p��q��r��$��z������#������s���t��u��v��w��$��z������#������x���y��z��{��|��$��z������#������}���~���������$��z������#�����������������$��z������#����������� �� �� ��$��z������#������ ��� ��������$��z�������#����������������$B���� �����#������������$R��������#��������������$b��������#�������������$r��������#��������� ��!��$�������� #������"���#��$��$���������#������% ���& ��' ��$$�� �����"&�������(!���)!�*!�+!�$4z������!#&�������,"���-"��."��/"��$Dz��,����"$&������0#���1#��2#��3#��$pz������#%&������4$���5$��6$��7$��$��z��,����$&&������8%���9%��:%��;%��$��z������%'&������<&���=&��>&��?&��$��z��,����&(&������@'���A'��B'��C'��$��z������')&������D(���E(��F(��G(��$��z��,����(*&������H)���I)��J)��K)��$$��z������)�&������L*���M*��N*��O*��$:���� �����,&�������P+���Q+�R+�$J��_������+-&�������S,���T,��U,��$Z��_������,.&������V-���W-��X-��$j��_������-/&������Y.���Z.��[.��$z��_������.0&������\/���]/��^/��$��_������/�&������_0���`0��a0��$$�� �����2)�������b1���c1�d1�e1�$4_������13)�������f2���g2��h2��i2��$D_������2�)������j3���k3��l3��m3��$Z�� �����5)�������n4���o4�p4�$j������46)�������q5���r5��s5��$z������57)������t6���u6��v6��$��������68)������w7���x7��y7��$��������79)������z8���{8��|8��$��������8:)������}9���~9��9��$��������9;)�������:���:��:��$��������:C)������;���;��;��$h�� �����= ������� <���<�<�$C)������<> �������=���=��=��$S)������=? ������>���>��>��$i)������>@ ������?���?��?��${)������?A ������@���@��@��$)������@B ������A���A��A��$)������A� ������B��� B��!B��$��������;�)������C���C��C��33���� EJX������@D���AD��33���� FDX������E���E��33���� IEX������F���F��s}w�����aR�������G���8G��33e���� �IX�������'H���H��33z���� HFX������I���I��33���� DKX������J��� J��33 ���� J�X������!K���"K��s}w����aMR�������>L���?L��s}w����LYR�������]M���^M��s/}w����YhR�������_N���N��Us9���� �PO�������;O���(O��)O��U93���� OQO�������*P���+P��,P��U9���� PSO������-Q���.Q��/Q��s}w)����X�R������R���1R��U9)���� QTO������3S���4S��5S��U9���� SUO������6T���7T��8T��U"9���� TVO������9U���:U��;U��UA9)���� UWO������<V���=V��>V��Uj93���� V�O������?W���@W��AW��sm}w����hRR������$X���%X��s}w)����MNR�������Y���Y��s}w)����GLR�������oa���`a��sN}w����NXR�������bh���ch����Comment����� �F:� �F=��I��I��I ��I ��FK��FN� �Fu�!" �Fx�#$ �F�%& �F��cA�+*�Z;�.-�['�01�d7�65�] �98�]t�<;�]�?>�`(�� ����d� �Black�������T!�White����dd���A�Red���dd�����Green���d�d��� �Blue���d�����Cyan�����d���Magenta����d���� �Yellow���FF������ Dark Green�����������RGB 255,255,255������d����RGB 000,000,000������22����RGB 127,127,127������Header/Footer $1Header/Footer $1Header/Footer $2Header/Footer $2IndexIndexCommentCommentSubjectSubjectAuthorAuthorGlossaryGlossaryEquationEquation Hypertext Hypertext  Cross-Ref Cross-Ref Conditional TextConditional TextPositionFMPrivatePositionFMPrivateRangeEndFMPrivateRangeEndFMPrivate HTML Macro HTML Macro�����W.Times New Roman.R.400�� FrameRoman� W.Arial.R.700�� FrameRoman� W.Arial.I.700�� FrameRoman���� FrameRomanW.Times New Roman.R.700�� FrameRoman�W.Courier.R.400�� FrameRoman�W.Courier New.R.400�� FrameRoman�W.Helvetica.R.700�� FrameRoman� W.Arial.I.400�� FrameRoman�W.Helvetica.R.400�� FrameRoman�W.Helvetica.I.400�� FrameRoman���� FrameRoman� W.Arial.R.400�� FrameRoman�W.Times New Roman.I.700�� FrameRoman���� FrameRoman���� FrameRoman�W.Times New Roman.I.400�� FrameRoman���� FrameRomanW.Courier.R.700�� FrameRoman���� FrameRomanW.Courier New.R.700�� FrameRoman���� FrameRomanhCourierArialTimes New Roman Courier New{ Helvetica: Arial,Bold;TimesNewRomanPSMT<TimesNewRomanPS-BoldMT Regular Regular BoldRegularObliqueItalic��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xapmeta xmlns:x='adobe:ns:meta/' x:xaptk='XMP toolkit 2.8.1-28, framework 1.5'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:CreatorTool='FrameMaker 7.0'></rdf:Description> <rdf:Description about='' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:CreateDate='2003-10-13T19:26:00.0Z' xap:ModifyDate='2003-12-02T17:45:03.0Z' xap:MetadataDate='2003-12-02T17:45:03.0Z'></rdf:Description> <rdf:Description about='' xmlns:dc='http://purl.org/dc/elements/1.1/'><dc:creator><rdf:Seq><rdf:li>Accellera</rdf:li></rdf:Seq></dc:creator><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>SystemVerilog 3.1/draft 1</rdf:li></rdf:Alt></dc:title><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>PRELIMINARY draft of SystemVerilog 3.1, SUBJECT TO CHANGE</rdf:li></rdf:Alt></dc:description></rdf:Description> </rdf:RDF> </x:xapmeta> <?xpacket end='w'?>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������S!b33OlkaC05Sa ]=/=h7ɗY5#؊TWq'櫄qELrQ^}YM(9OwɈK,Dpϰo':RqŒ5#@ɻߞvü3r=EmP Ԕ+蔎}\I͹̨'koRgR�GC(+^&Uٸgwd3pIFYԠm�u@ֺ^}X_ʶy1Qu 㺗JZ&_/4Ik {?E f7[9z&mi멏@LsQUjU:N9Cq@0;Iw 3"] �bzT~xFy:B"׽d-%l-S+GU!2ʛ`TbĖ-Pepjk zݐv6Xq& ;!M-KhP$*^(!!&-R|`0Ӂu2q3pq]俴]Z*j]uwh)W.������