Uvm_subscriber. The document covers the UVM 1. Uvm_subscriber

 
 The document covers the UVM 1Uvm_subscriber  uvm_subscriber creates an analysis_export with the correct parameterized type and links it to the write() function

The paper shows simplified, non‐UVM, analysis port implementations to clarify how 1 Answer. However, generally coverage is being sampled in uvm_subscriber and the reason is that, different designs may require different type of coverage bins and hence it is easy to plug that component and make your core code. The. Recommended: The suffix alone should be the full name (removing leading underscore) if it is not ambiguous. in order to be concise. For example: +UVM_TESTNAME=random_test. Then us declare a handle with name txn and this handler of type packet_c. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Accellera believes standards are an important ingredient to foster innovation and continues to encourage industry innovation based on its standards. 1 features from the base classes to the. UVM example code. Note that. An export is a waypoint; it can only be connected to another export or imp . tcat@uvm. {"payload":{"allShortcutsEnabled":false,"fileTree":{"tb/agents/apb_mstr_agent":{"items":[{"name":"apb_agent_pkg. The uvm_object or sequence overriding is similar to the uvm_component overriding factory mechanism that returns the derived object handle using a base class handle. The compare method returns 1 if comparison matches for the current object when it is compared with the R. {"payload":{"allShortcutsEnabled":false,"fileTree":{"distrib/src/comps":{"items":[{"name":"uvm_agent. sv","path":"tb/agents/apb_mstr_agent/apb_agent_pkg. October 30: Last Day to Withdraw. SFX is the suffix for the new class type. Fields in a register represent specific bits or groups of bits that have distinct functionalities, access permissions, reset values, and other attributes. md. sv" endclass `include "clkndata_cover_inc_after. Since C does not know about the bit type of SystemVerilog, we replaced. 1 library. 1. Below is the definition for seq2, which inturn calls seq3 multiple times using the different variations of `uvm_send_*. 2 Class Reference, but is not the only way. get_inst_coverage (), t. This. svh","path":"distrib/src/tlm1/uvm_analysis_port. Coverage subscriber construction during the build phase for uvm_components, or during the construction using the new() method for uvm_objects shall be conditional on the class variable coverage_enable. medical, dental, behavioral health, etc. government says 10 properties in Prince George should be forfeited for their alleged use in a years-long drug trafficking operation. Using start_item/finish_item methods. d","contentType":"file"},{"name":"uvm. . User should extend uvm_driver class to define driver component. When the driver unpacks the data it received from the sequencer, and drives DUT signals, it also. Last Updated: February 21, 2015. preview shows page 101 - 104 out of 183 pages. Now we've got all we need to run first the code generator and then the simulation. You should implement the pure virtual function void write (T t); which inherits from uvm_subscriber class in your checker_subscriber class. sv(61) @ 0: uvm_test_top. Uvm components, uvm env and uvm test are the three main building blocks of a testbench in uvm based verification. example of a jelly-bean generator. virtual class uvm_subscriber # (type T= int) extends uvm_component; typedef uvm_subscriber # (T) this_type. Multi Subscribers with Multiports. There is an example in the UVM 1. con [consumer] PORT B: Received value = c UVM_INFO testbench. TLM Analysis TesetBench Components are, Implementing analysis port in comp_a. Accellera’s recently released UVM may change the future of verification, as verification methodology seems to be consolidated in this UVM. virtual task start ( uvm_sequencer_base sequencer, uvm_sequence_base parent_sequence = null, int this_priority = -1; bit call_pre_post = 1; Arguments Descriptionmodule uvm_first_ex; import uvm_pkg::*; `include "uvm_macros. uvm_subscriber #( type T = int ) extends uvm_component This class provides an analysis export for receiving transactions from a connected analysis export. {"payload":{"allShortcutsEnabled":false,"fileTree":{"distrib/src/comps":{"items":[{"name":"uvm_agent. Let’s call the record in our jelly bean scoreboard. uvm_object has many common functions like print, copy and compare that are available to all its child classes and can be used out of the box if UVM automation macros are used inside the class definition. The only limitation is that a uvm_subscriber component can only receive one type of transactions using the built-in. The typedef (the first line) of the jelly_bean_sb_subscriber provides a forward declaration for the. For example, the instance of foo_agent_c is foo_agent. uvm_subscriber主要作为coverage的收集方式之一. . UVM中内建了uvm_subscriber类,可以被当作观察者或者订阅者使用。 一般用在构建功能覆盖率的收集。伪代码如下: 订阅者订阅monitor中收集到的transaction,覆盖率模块,参考模型,scoreboard都是订阅者。A Scoreboard is a checker element that keeps a tally on the input stimulus, and the expected output. I replaced those uvm_analysis_imp handles with uvm_subscriber components, each of which contain an analysis_export. uvm_subscriber and subsequently the monitors use this Observer Design Pattern. d","contentType":"file"},{"name":"uvm. Immediate assertion can be used directly inside class based UVM components like uvm_test, scoreboard and monitors. The jelly-bean verification platform uses two kinds of configuration objects, jelly_bean_agent_config and jelly_bean_env_config. Since concurrent. T ransaction L evel M odeling, is a modeling style for building highly abstract models of components and systems. T ransaction L evel M odeling, is a modeling style for building highly abstract models of components and systems. 1d, an abstract uvm_event_base class does not exist. Analysis Export. sv" We would like to show you a description here but the site won’t allow us. 20 hours ago · VICTORIA - The B. response_transaction to allow the scoreboard component to . svh","contentType":"file"},{"name":"axi_agent_config. rst","contentType":"file. Connect the driver seq_item_port to sequencer seq_item_export for communication between driver and sequencer. `uvm_do (Item/Seq) This macro takes seq_item or sequence as argument. When a write operation is performed to the design, the. Overview. d","path":"src/uvm/comps/package. To prevent spam and Account deactivation, confirm the below information{"payload":{"allShortcutsEnabled":false,"fileTree":{"15_Talking_Objects/02_With_Analysis_Port":{"items":[{"name":"average. 3c and 10. subscriber是消费,用户的意思. con [consumer] PORT. svh at master · raysalemi/uvmprimerSelf-checking in UVM class based simulation is mainly achieved by various checkers residing in monitors and scoreboards, along with SVA. The inspect if all the valid combinations of inputs/stimulus were exercised. ☐当 UVM 组件之间需要实现一对多的连接时,使用 analysis ports 和 analysis exports(或者是 uvm_subscriber 的对象)。 在许多情况下,analysis ports 和 analysis exports 优于常规的 ports 和 export,因为 analysis ports 支持向多个组件(所谓的 uvm_subscriber)广播 transaction,并允许 ports. I want to write concurrent assertion which starts after some register write is performed on the DUT from UVM testbench. So, you message won't get printed. The pure virtual function get_type_handle () allows you to get a unique handle that represents the derived type. convert2string ()), UVM_MEDIUM) 283 endfunction 284 endclass Figure 1 Coverage Collector . SystemVerilog’s functional coverage constructs allow you to quantify the completeness of your stimulus by recording the values that have occurred on your signals. sv(22) @ 0: uvm_test_top. 2. Consider an. UVM provides the default recorder implementation called uvm_text_recorder. {"payload":{"allShortcutsEnabled":false,"fileTree":{"docs/_static/uvm-1. 1. UVM 为简化观察者模式的实现提供了两个类:· . svh","path":"21_UVM_Transactions/tb_classes/add_test. This is blocking statement. In our case, we can use it from the testbench to save the virtual interfaces and use them when the. /easier_uvm_gen. The uvm_tlm_if_base class is the base class of uvm_port_base class, which in turn is the base class of uvm_analysis_imp class (line 22). Analysis. Subscriber Exclusive:Airbnb listing is for 'Bull Moose Lodge': VT considers laws for short-term rentals. May 9, 2015 Keisuke Shimizu. 1 Answer. A environment class can also be. argument object. What is UVM ? UVM stands for U niversal V erification M ethodology. Minimal example with driver; Minimal example with coverage in a subscriber as well as driver and monitor. d","contentType":"file"},{"name":"uvm. {"payload":{"allShortcutsEnabled":false,"fileTree":{"src/uvm/comps":{"items":[{"name":"package. As you mentioned, the jelly_bean_sb_subscriber and the jelly_bean_scoreboard each need a handle to the other. It usually receives transaction level objects captured from the interfaces of a DUT via TLM Analysis Ports. 1) You could connect two uvm_analysis_ports to the uvm_analysis_imp of the FIFO, but in this case, whoever called write() first puts a transaction to the FIFO. The driver is a parameterized class with the type of request and response sequence. svh","path":"distrib/src/comps/uvm_agent. A sequencer generates data transactions as class objects and sends it to the Driver for execution. Example 5 ‐ Partial uvm_subscriber code 18. So, you message won't get printed. IN - UVM Tutorial. For example, a configuration class object can be built to have. sv(30) @ 0: uvm_test_top. Let’s discuss the macro-based approach in UVM sequence macro and existing methods approach in the uvm_sequence_base class methods section. virtual class uvm_subscriber # (type T=int) extends uvm_component; // must implement. UVM is built on top of the SystemVerilog language and provides a framework for creating modular, reusable testbench components that can be easily integrated. Pages 183 ; Ratings 100% (1) 1 out of 1 people found this document helpful; This preview shows page 101 - 104 out of 183 pages. The sequence_item(s) are provided by one uvm_sequence objects. subscribers are coverage subscribers and transaction recording subscribers. 1. The uvm_subscriber is derived from uvm_component and adds up the analysis_export port in the class. For additional information on using UVM, see the UVM User’s. Using UVM in SystemC is a tutorial paper that presents the benefits and challenges of applying the Universal Verification Methodology (UVM) to SystemC-based verification environments. This paper will describe two fundamental OVM/UVM scoreboard architectures. sv. The easiest way to create a subscriber list is in a spreadsheet. One could code this manually, and one does to have multiple analysis_export objects in a single subscriber, such as a scoreboard. Since C does not know about the bit type of SystemVerilog, we replaced. Using do_print. The variable is_active can be set either at environment level or via a. Macro. UVM experts can easily spend hours debugging analysis port issues if they are unaware of important considerations related to analysis port paths. 6. This class provides an analysis export for receiving transactions from a connected analysis export. 비교, check 하려는 transaction들의 도착 순서 ( in-order or out-of-order )도 항상 고려해야 한다. My RAM has 512 address spaces. A UVM monitor is derived from uvm_monitor base class and should have the following functions : Collect bus or signal information through a virtual interface. If you want to use the fifo path, you need to create and connect a generic port in the driver class. For example, if foo_agent_c is the only agent within the foo package, then it should simply be. Created 8 years ago. The new() function has two arguments as string name and uvm_component parent. UVM에서 제공하는 단순한 uvm_in_order_class_comparator 를 사용하여 간단하게. sv. If you've received email with the subject, "Dear Valued UVM. svh","path":"distrib/src/comps/uvm_agent. subscriber是消费,用户的意思 uvm_subscriber主要作为coverage的收集方式之一 uvm_subscriber的代码非常简单,继承于uvm_component,再加上一个analysis export而已。 其代码如下: virtual class uvm_subscribThe UVM configuration database accessed by the class uvm_config_db is a great way to pass different objects between multiple testbench components. When a write operation is performed to the design, the. Universal Verification Methodology UVM Introduction The Accellera Universal Verification Methodology (UVM) is a standard verification methodology that includes a set of class libraries for the development of a verification environment. Academic Calendars. UVM will never ask you to enter your UVM Net-ID and password on a non-UVM web page -- even if it looks like a UVM page, and even if it's on a reputable site, such as Google Docs, 123contactform. subscriber is the actual method that is invoked. We would like to show you a description here but the site won’t allow us. Rather than. It allows for generic containers of objects to be created, similar to a void pointer in the C programming language. Stay up to date with the Siemens Software news you need the most. These macros are used to start sequences and sequence items on default sequencer, m_sequencer. The driver receives the item and drives it to the DUT through a virtual interface. It is recommended to extend uvm_sequencer base class since it contains all of the functionality required to allow a sequence to communicate with a driver. Putting the origins aside, uvm_resource_db provides a easy way to share resources between various classes. pyuvm uses cocotb to interact with the simulator and schedule simulation events. EMPWGSimilar to the UVM event, UVM provides another way to achieve synchronization with the UVM Barrier. d","path":"src/uvm/comps/package. The open structure, extensive automation, and standard transaction-level interfaces of UVM make it suitable for building functional verification environments ranging from simple block-level tests to the most complex coverage-driven testbenches. This is because, uvm_subscriber is tied to a transaction type, whereas uvm_scoreboard is not. svh","path":"src/tutorial_32/agent. pyuvm does not need uvm_subscriber. UVM employs a layered, object-oriented approach to testbench development. As you mentioned, the jelly_bean_sb_subscriber and the jelly_bean_scoreboard each need a handle to the other. We would like to show you a description here but the site won’t allow us. Overview. sv(47) @ 0: uvm_test_top. But I already have the write function for the analysis port defined with _imp. UVM TLM. pyuvm implements the most often-used parts of the UVM while taking advantage of the fact that Python does not have strict typing and does not require parameterized classes. 通用验证方法学 (英語: Universal Verification Methodology, UVM )是一个以 SystemVerilog 类库 为主体的 验证平台 开发框架,验证工程师可以利用其可重用组件构建具有标准化层次结构和接口的 功能验证 环境。. uvm_env is extended from uvm_component and does not contain any extra functionality. It is an abstract class with no data members or functions. ion_cal tback. comp_b [component_b] Inside write_port_b method. In short, uvm_object class is the parent class for other fundamental UVM classes, such as uvm_sequence_item (for transactions) and uvm_component (for testbench components). For clarity, we defined the same enums as defined in SystemVerilog (lines 5 and 6). As the name suggests, it subscribes to the broadcaster i. We would like to show you a description here but the site won’t allow us. Declare driver, sequencer and monitor instance, 3. But I already have the write function for the analysis port defined with _imp. It is then registered in factory by calling standard UVM macro `uvm_component_utils. Audience Question: Q: What is the difference between UVM_object and. class child_seq extends uvm_sequence # (seq_item); generic_sequencer p_seqr; virtual task body (); // Get Sequence Item from Parent Sequencer. We would like to show you a description here but the site won’t allow us. It is usually called in the initial block from the top-level testbench module. It receives transactions from the monitor using the analysis export for checking purposes. Using do_record. uvm_component クラス定義 virtual class uvm_component extends uvm_report_object 生成メソッド new ( string name, uvm_component parent ) 階層メソッド get_parent get_full_name get_children, get_child, get_next_child, get_first_child get_num_children, has_child function uvm_component lookup ( string name ) function intLifeline is the FCC's program to help make communications services more affordable for low-income consumers. Readme Description. Learn how a UVM driver communicates with a UVM sequencer through this driver-sequencer handshake mechanism example. Subtypes of this class must define the write method to process the incoming transactions. Graceful termination of the run() phase often requires the use of UVM built-in termination commands, such as global_stop_request(), and others described in this paper. Easier UVM Paper and Poster. The SystemVerilog UVM provides the uvm_subscriber class as a convenience class. `uvm_analysis_imp_decl(SFX) Define the class uvm_analysis_impSFX for providing an analysis implementation. sv and add a few lines to the template files. The record function of uvm_object calls the do_record. 2 Answers. 19 // Author's intent: If you use this AXI verification code and find or fix bugsA tag already exists with the provided branch name. They subscribe to a broadcaster and receive objects whenever an item is broadcasted via. 4. It usually receives transaction level objects captured from the interfaces of a DUT via TLM Analysis Ports. sv. It is an abstract class with no data members or functions. {"payload":{"allShortcutsEnabled":false,"fileTree":{"src/uvm/comps":{"items":[{"name":"package. Richard Pursehouse Richard Pursehouse. {"payload":{"allShortcutsEnabled":false,"fileTree":{"tb/agents/apb_mstr_agent":{"items":[{"name":"apb_agent_pkg. 1 Class Reference is a comprehensive document that describes the classes, methods, macros, and callbacks that constitute the UVM 1. We would like to show you a description here but the site won’t allow us. User classes derived directly from uvm_void inherit none of the UVM functionality, but. On calling `uvm_do () the above-defined 6 steps will be executed. I am using UVM to test very simple interface and now facing with “corner-case” issue. dcat@uvm. 2 days ago · Diplomacy. The UVM configuration database accessed by the class uvm_config_db is a great way to pass different objects between multiple testbench components. UVM中内建了uvm_subscriber类,可以被当作观察者或者订阅者使用。 一般用在构建功能覆盖率的收集。伪代码如下: 订阅者订阅monitor中收集到的transaction,覆盖率模块,参考模型,scoreboard都是订阅者。A Scoreboard is a checker element that keeps a tally on the input stimulus, and the expected output. UVM also allows backdoor accesses which uses a simulator database to directly access the signals within the DUT. this works even when you object do not derive from ovm_object. The uvm_component are static and physical components that exist throughout the simulation. Already have an account? UVM example code. The first architecture is a standalone scoreboard component with two UVM analysis implementation{"payload":{"allShortcutsEnabled":false,"fileTree":{"src/uvm/comps":{"items":[{"name":"package. A environment class can also be. {"payload":{"allShortcutsEnabled":false,"fileTree":{"tb/UVM/tb_classes":{"items":[{"name":"async_fifo_base_test. The problem is you left your scoreboard analysis export hanging, but it needs to be connected to an imp port. When the register is created, the build_coverage should be called. argument object. uvm_subscriber的代码非常简单,继承于uvm_component,再加上一个analysis export而已。. svh","contentType":"file"},{"name. I've tried changing my consumer to a uvm_subscriber with same result. In the build_phase (), sequencer and driver are created only if the agent is configured to be active. {"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":"README. It is recommended to extend uvm_sequencer base class since it contains all of the functionality required to allow a sequence to communicate with a driver. 1. sv. The analysis_export of the jelly-bean-functional-coverage subscriber (jb_fc_sub) is an object of the uvm_analysis_imp class specialized with the jelly_bean_transaction type. {"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":"README. 2/src/comps":{"items":[{"name":"uvm_agent. When the component (my_monitor) calls analysis_port. They subscribe to a broadcaster and receive objects whenever an item is broadcasted via the connected analysis port. UVM Tutorial for Candy Lovers – 1. // Step 1: Declare a new class that derives from "uvm_test" // my_test is user-given name for this class that has been derived from "uvm_test" class my_test extends uvm_test; // [Recommended] Makes this test more re. 要使用UVM的观察者模式,我们需要. Although this is the preferred way for driver-sequencer communications, UVM also gives us an alternative for a more complex implementation. 其代码如下:. logic [7:0] lcdCmd; uvm_analysis_port # (logic) sendPrt; task run_phase. sv","path":"tb/agents/apb_mstr_agent/apb_agent_pkg. Sending bus signal using analysis port. Rather than focusing on AXI, OCP, or other system buses in existence. UVM Tutorial for Candy Lovers – 8. In this scheme, data is represented as transactions (class objects that contain random, protocol specific information) which flow in and out of different components via special ports called TLM interfaces. UVM is based on Open Verification Methodology (OVM) and Verification Methodology Manual (VVM). set_report_verbosity_level_hier. d","contentType":"file"},{"name":"uvm. t system verilog version of uvm. Message Logging. Description `uvm_register_cb(T, CB) Registers the user-defined callback which is extended from uvm_callback. Collected data can be used for protocol checking and coverage. This class is particularly useful when designing a coverage. What does UVM stand for? A Practical Guide to Adopting the Universal Verification Methodology (UVM – Hannibal Height – Google Books With. 通用验证方法学. log","path":"LOG_FILE. For testbench hierarchy, base class components are. View Slide. We would like to show you a description here but the site won’t allow us. 1) In uvm_scoreboard, we can define & initialize analysis_export to implement write function. Stack Exchange Network. Change Your Major. class test extends uvm_test; bit flag; task run_phase (uvm_phase phase); //call register write task , data is chosen in a random fashion write (addr,data); flag = 1; // flag gives the time when the register is written. The examples are gradually increasing in complexity, providing a gradual learning process. Also, we can instantiate as many covergroups as we may need. Macro. . UVM automation macros can. The uvm_event class is directly derived from the uvm_object class. 0 Ports, Exports and Imps; uvm_tlm_analysis_fifo; uvm_tlm_extension; uvm_tlm_fifo; uvm_tlm_generic_payload; uvm_tlm_if; uvm_tlm_time; uvm_text_tr_database; uvm_text_tr_stream;. v. This is part of the code: class outputMonitor extends uvm_monitor; . svh","contentType":"file"},{"name. Add a comment. You need a uvm_sequencer with seq_item_export to connect to the driver's seq_item_port. UVM Basics. you create a proxy using the uvm_subscriber(or similar). Usually, the REQ and RSP sequence item has the same class type. Others live in Vermont, but don't live in the houses they use as short-term rentals and. py","contentType":"file"},{"name. e. An appropriate `uvm_field_* macro is required to use based on the data type of class properties. 2) Since the write() is a function, you cannot. It is to do with verbosity. The UVM base class library is a set of template files that the user extends to build a UVM testbenchuvm_subscriber. Instead, you need to derive from uvm_component , install a uvm_analysis_imp (an imp not an export ) and write a write function. UVMを使用したクラスファイル群は「Verilog Header」として表. These sequence items or transactions are broadcasted to other components like the UVM scoreboard, coverage collector, etc. The generated subscriber component would now look like this, leaving you to define the actual content of the class in the include files: class clkndata_coverage extends uvm_subscriber #(data_tx); `uvm_component(clkndata_coverage) `include "clkndata_cover_inc_inside. SystemVerilog has lots of limitations when it comes to inheritance and covergroups. covergroup CVG; //Applied input-frequency bins: FREQ_cvg: coverpoint TX_PKT. sv), using only the. So, the whole flow is as follows. This will trigger up the UVM testbench. {"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":"LOG_FILE. Verification of register behavior can include testing different access scenarios, checking field values after resets, verifying register side-effects, and more. A private religious school is suing the state of Vermont after being banned from taking part in all athletics run by the state because it forfeited a game against an. Write operations deposit a value onto the signal and read operations sample the current value from the register signal. con [consumer] Port A: Received value = 0 UVM_INFO testbench. ius","path":"Part_1/uvm_core_utilities/run/Makefile. Now let’s create the multiple jelly beans of the same flavor. . // instance, and ~parent~ is the handle to the hierarchical parent, if any. subscr [subscriber_comp. Please help better understand the ports. 2 Answers. svh","contentType":"file. The imp port then forwards the calls to the component that instantiates it. ). md","contentType":"file"},{"name":"design. It receives transactions from the monitor using the analysis export for checking purposes. The base class is parameterized by the request and response item types that can be handled by the. In the build_phase (), sequencer and driver are created only if the agent is configured to be active. uvm_subscriber creates an. Thing is Adder should produce output at rising edge of clock. {"payload":{"allShortcutsEnabled":false,"fileTree":{"src/uvm/comps":{"items":[{"name":"package. svh","path":"docs/_static/uvm-1. // my_env is user-given name for this class that has been derived from "uvm_env" class my_env extends uvm_env; // [Recommended] Makes this driver more re-usable `uvm_component_utils (my_env) // This is standard code for all. This is a simple coverage collector for transitions on the RW signal. Making such a connection "subscribes" this component to any transactions emitted by the connected analysis port. Ecology. UVM TLM 2. 1) In uvm_scoreboard, we can define & initialize analysis_export to implement write function. It has the following features: Hierarchy: Supports a hierarchical structure, where each component can have child components, forming a tree-like structure and. These are some of the most commonly used methods in uvm_reg_field. )The uvm_*_export classes are used to connect the uvm_*_imp of enclosed component to the enclosing component. uvm_subscriber: Subscribes to activities of other components: Read more about UVM Component! Register Layer. The following. 2 Class Reference is independent of any specific design processes and is complete for the construction ofTypically, coverage collectors are UVM subscribers that are connected to monitors. Note that config_db should be. For example:The threshold of the scoreboard became UVM_MEDIUM, while the threshold of the functional coverage subscriber remains UVM_LOW. An agent is written by extending UVM_agent, 2. uvm_scoreboard 를 extend하고 application별로 compare동작은 user가 만들어야 한다. {"payload":{"allShortcutsEnabled":false,"fileTree":{"Part_1/uvm_core_utilities/run":{"items":[{"name":"Makefile. Note that you had spawned seq2 towards the end of seq1. write(t). A: Subscribers receive transactions from monitors (sent over an "analysis_port"). This post will provide a simple tutorial on this new verification methodology. Sequences can do operations on sequence items, or kick-off new sub-subsequences: Execute using the start () method of a sequence or `uvm_do macros. 1、声明 analysis port 变量, 然后定义待传输数据的类型.