当前位置:网站首页>Interprétation du code source uvm, notes d'examen du Code uvm - 1.2

Interprétation du code source uvm, notes d'examen du Code uvm - 1.2

2021-10-14 06:23:27 Mangopapa

uvm-1.2Apprentissage des sources


Catalogue des articles


Préface

   J'ai été plutôt libre récemment. ,Enfin, il est possible de regarder systématiquementuvmLe code source., Regarde et prends des notes. .Normalement.uvm-1.2Plus de, Cet article vise également à: uvm-1.2Source en coursreview.


uvm-1.2/src/ Fichiers de haut niveau

README.txt

  Voici quatre déclarations conjointes sur les droits d'auteur, Puis il y a ce qui suit .

* Comment installerUVMSac

   1. Créer un nouveau dossier au bon endroit,mkdir uvm1.2
   2. Dans le dossier,cd uvm1.2
   3. Décompresser dans le dossier courant ,gunzip –c tar.gz | tar xvf –
   4. Définir les variables d'environnement$UVM_HOME Pointer vers ce dossier ,setenv UVM_HOME /uvm1.2
   5. Autressystem verilog Problèmes d'adaptation des versions ...

* Comment utiliserUVM

   1. Conditions préalables:① Oui.IEEE1800StandardSVSimulateur;② Compatible avecgmakeDemake Pour mettre en œuvre MakefileCas d'utilisation de;③ C Compilateur pour compiler DPICode
   2. En ligne de commande de compilation +include+ 、$UVM_HOMEPrends ça.UVMCheminincludeEntrez
   3. Doit être compilé dès le début uvm.sv
   4. Insv codeImporteruvmSac,import uvm_pkg:: *;
   5. `include “uvm_macros.svh”Pour utiliseruvmMacros;
   6. Si nécessaire, Encore à compiler /uvm-1.2/dpi/uvm_dpi.ccOu préciserUVM DPIBibliothèques partagées

* Comment exécuter un cas de test

   1. cd example
   2. Mise en œuvremake –f Makefile.{ius|vcs|questa},Selon le type d'émulateur que vous utilisez

LICENSE.txt

   Ce n'est pas nécessaire. , Il n'y a pas de clé secrète dans le texte ,C'est une explication de la clé secrète.

release-notes.txt

   Procès - verbal de publication ,.Les points et les gouttes de l'itération de version sont enregistrés,Si ça vous intéresse, regardez..

uvm_checksum.txt

   uvmChecksum, Utilisation spécifique à étudier , C'est une supposition. licence Utilisation concomitante ?Ou pour vérifier la régularité de la programmation de l'utilisateur?

uvm.sv

   C'est le fichier qui doit être placé au début de la compilation, Dans ce document include uvm_pkg.sv,SidefineC'estVCS,Encorevcs/snps_reg.svh includeEntrez

uvm_pkg.sv

  uvm_pkg C'est ici qu'elle est encapsulée. ,package Les options obligatoires suivantes sont encapsulées :dpi/base/dap/tlm1/tlm2/comps/seq/reg,À utiliserdirectcEtvcs Pour les fichiers dans le Répertoire ,Besoindefine Spécifier une macro .direct/vcsRôle spécifique décrit ci - dessous.
   Dans ce document 、packageExtérieurincludeC'estuvm_macros.svh,Pour qu'il n'y ait pas d'autre endroit où.

uvm_macros.svh

  uvm_macros.svh Il contient tout UVMMacro - définition pour.Le rôle des macros、 Les avantages et les inconvénients ne sont pas présentés . Ce document ne met pas $UVM_HOME/src/macros/En bassvh includeEntrez, D'autres macros sont définies ,Par exemple,UVM_USE_STRING_QUEUE_STREAMING_PACK、uvm_typename(X)、uvm_delay(TIME)Etverdi、vcs Macros liées au contrôle .

uvm_vmm_pkg.sv

  Redirectionvmm messageÀuvm message、Voilà.vmm env J'ai refait une couche. wrapÀuvm envAttendez..

uvm_asm.sv

  UVM-AMSCertaines des normes établies par le Groupe de travail sont reprises dans ce document,C'est quelque chose utilisé pour modéliser des systèmes analogiques et numériques.AMSLe nom complet estanalog/mixed-signal extension for the universal verification methodology,Dédié à la modélisation de signaux analogiques et hybrides.UVM-AMS Liens d'introduction .C'est très riche.,Voici une brève liste de:① Système mathématique - Constante mathématique définie PI、Fonction trigonométrique、L'opération mathématique de Gander、S'il te plaît.besselValeur(DPI-CRéalisation),realAvecint Conversion mutuelle des types ;② Corrélation analogique - Tension définie 、Courant、 Type d'énumération du temps de fréquence ,Et le facteur d'échelle d'une unit é donnée peut être obtenu,Paramètres/ Obtenir la tension 、Courant、Fréquence、Seuil、Fenêtre、checkerAttendez..


macros

  C'est vrai,uvmTout ce qui concerne les macros est là.

uvm_callback_defines.svh

  uvm_callback Macros associées :

·uvm_register_cb - Appelezuvm_callbacks Classe à enregistrer callback
·uvm_set_super_type - Appelezuvm_derived_callbacks Pour définir le super Type
·uvm_do_obj_callbacks - Sans explication, Non.
·uvm_do_callbacks - Macro d'appel `uvm_do_obj_callbacksRéalisationcallback
·uvm_do_obj_callbacks_exit_on
·uvm_do_callbacks_exit_on - Appelez` uvm_do_obj_callbacks_exit_on

uvm_deprecated_defines.svh

   Les macros suivantes ne sont pas recommandées :

·m_uvm_register_sequence
·uvm_sequence_utils
·uvm_sequence_utils_begin
·uvm_sequence_utils_end
·uvm_declare_sequence_lib
·uvm_update_sequence_lib
·uvm_update_sequence_lib_and_item
·uvm_sequencer_utils
·uvm_sequencer_utils_begin
·uvm_sequencer_utils_end
·uvm_sequencer_param_utils
·uvm_sequencer_ param_utils_begin
·uvm_sequencer_ param_utils_end
·uvm_package
·uvm_end_package
·uvm_sequence_library_package

uvm_global_defines.svh

  UVM Macro globale ,Principalement:3- Oui.,UVM_MAX_STREAMBITS(4096)、UVM_PACKER_MAX_BYTES(4096) Et timeout Exit default UVM_DEFAULT_TIMEOUT(9200s)

uvm_message_defines.svh

  uvm Imprimer les macros liées aux informations ,Fréquent`uvm_info/warning/error/fatalTout est défini ici,Par appeluvm_report_info/warning/error/fatal Impression par fonction égale . Jugement avant impression ,Seuls ceux qui remplissent les conditions du seuil de redondance seront imprimés.Seulement`uvm_info La redondance doit être réglée manuellement ,`uvm_warning/error/fatal La redondance est UVM_NONE,Aucun réglage nécessaire, Pour fermer l'impression associée , Peut être utilisé dans les options de simulation sim_opts Fermez - le. action(+uvm_set_action=…UVM_NO_ACTION).Si certaines informations imprimées ne sont pas pratiques àcode Modification directe de la redondance ,Peut passer+uvm_set_verbosity Option pour surcharger sa redondance d'impression .

  uvm_info_context、uvm_warning_context、uvm_error_context、uvm_fatal_context Le rôle de ces quatre macros uvm_info、uvm_warning、uvm_error、uvm_fatalLe même effet, Juste un paramètre de plus , Objet à spécifier ,Exécute la fonction dépendante de l'objet spécifié(uvm_report_enable
& uvm_report_*),Par exempleuvm_info_context(“main_phase”,”run main phase”, UVM_LOW, tb_top),Mise en œuvretb_topÀ l'intérieur.uvm_report_enable Et
uvm_report_infoFonctions, Au lieu d'arriver uvm_pool Central .

  En plusuvm_message_begin、uvm_message_end、uvm_message_context_begin、uvm_message_context_end, Son but est: uvm libraryPour usage interne, Aucune spécification n'a été établie , Ni ouvert au monde extérieur. .

  Et ça correspond à,Etuvm_info_begin、uvm_info_end、uvm_warning_begin、uvm_warning_end、uvm_error_begin、uvm_error_end、uvm_fatal_begin、uvm_fatal_end、uvm_info_context_begin、uvm_info_context_end、uvm_warning_context_begin、uvm_warning_context_end、uvm_error_context_begin、uvm_error_context_end、uvm_fatal_context_begin、uvm_fatal_context_end, Ils ne sont pas non plus recommandés .

  uvm messageLe mécanisme permet aux utilisateurs de personnaliser l'information,Adoptionuvm_message_add_int、uvm_message_add_string、uvm_message_add_tag、uvm_message_add_objectRéaliser la personnalisation. Je n'ai jamais utilisé ça. , Devinez. , Ça va aller. uvm_info_begin/endPour utiliser.

   Macro lors de la simulation UVM_REPORT_DISABLE_FILE_LINE、UVM_REPORT_DISABLE_FILE、UVM_REPORT_DISABLE_LINEPour sélectionner le contrôle pour désactiver l'information du fichier d'impression et(Ou) Informations sur le numéro de ligne .

uvm_object_defines.svh

  Ça marche.uvm__utils Macro enregistrée component/onject,Pour utiliseruvm factory Mechanism in check_fields、copy、compare、pack、unpack、record、print、setint Facilités offertes par , Je vous suggère de regarder de plus près. ,C'est intéressant.,Parce qu'il y a trop de macros, il n'y a pas de discussion. Toutes les macros pertinentes sont énumérées ici. .

 uvm_field_utils_begin(T)
 uvm_field_utils_end,end+endfunction
 uvm_object_utils(T), Est l'encapsulation des deux macros suivantes
  uvm_object_utils_begin
  uvm_object_utils_end
 uvm_object_utils_begin(T) , Est l'encapsulation des quatre macros suivantes
  m_uvm_object_registry_internal(T,T)
  m_uvm_object_create_func(T)
  m_uvm_get_type_name_func(T)
  uvm_field_utils_begin(T)
 uvm_object_utils_end
 uvm_object_param_utils(T)
 uvm_object_param_utils_begin(T)
 uvm_component_utils(T)
 uvm_component_param_utils(T)
 uvm_component_utils_begin(T)
 uvm_component_param_utils_begin(T)
 uvm_component_utils_end
 uvm_field_int(ARG,FLAG)
 uvm_field_real(ARG,FLAG)
 uvm_field_enum(T,ARG,FLAG)
 uvm_field_object(ARG,FLAG)
 uvm_field_event(ARG,FLAG)
 uvm_field_string(ARG,FLAG)
 uvm_field_array_enum(ARG,FLAG)
 uvm_field_array_int(ARG,FLAG)
 uvm_field_sarray_int(ARG,FLAG)
 uvm_field_sarray_enum(ARG,FLAG)
 uvm_field_array_object(ARG,FLAG)
 uvm_field_sarray_object(ARG,FLAG)
 uvm_field_array_string(ARG,FLAG)
 uvm_field_sarray_string(ARG,FLAG)
 uvm_field_queue_enum(ARG,FLAG)
 uvm_field_queue_int(ARG,FLAG)
 uvm_field_queue_object(ARG,FLAG)
 uvm_field_queue_string(ARG,FLAG)
 uvm_field_aa_int_string(ARG, FLAG)
 uvm_field_aa_string_string(ARG, FLAG)
 uvm_field_aa_object_string(ARG, FLAG)
 uvm_field_aa_int_int(ARG, FLAG)
 uvm_field_aa_int_int(ARG, FLAG)
 uvm_field_aa_int_int_unsigned(ARG, FLAG)
 uvm_field_aa_int_integer(ARG, FLAG)
 uvm_field_aa_int_integer_unsigned(ARG, FLAG)
 uvm_field_aa_int_byte(ARG, FLAG)
 uvm_field_aa_int_byte_unsigned(ARG, FLAG)
 uvm_field_aa_int_shortint(ARG, FLAG)
 uvm_field_aa_int_shortint_unsigned(ARG, FLAG)
 uvm_field_aa_int_longint(ARG, FLAG)
 uvm_field_aa_int_longint_unsigned(ARG, FLAG)
 uvm_field_aa_int_key(KEY, ARG, FLAG)
 uvm_field_aa_string_int(ARG, FLAG)
 uvm_field_aa_object_int(ARG, FLAG)

  La macro ci - dessus définit la macro appelée à

 m_uvm_object_create_func(T)
 m_uvm_get_type_name_func(T)
 m_uvm_object_registry_internal(T, S)
 m_uvm_object_registry_param(T)
 m_uvm_component_registry_internal(T, S)
 m_uvm_ component_registry_param(T)
 M_UVM_QUEUE_RESIZE
 M_UVM_ARRAY_RESIZE
 M_UVM_SARRAY_RESIZE
 M_UVM_FIELD_QDA_INT
 M_UVM_FIELD_QDA_OBJECT
 M_UVM_FIELD_QDA_STRING
 M_FIELD_QDA_ENUM
 m_uvm_print_int
 m_uvm_record_int
 m_uvm_record_string
 m_uvm_record_object
 m_uvm_record_qda_int
 m_uvm_record_qda_enum
 m_uvm_record_qda_object
 m_uvm_record_qda_string
 M_UVM_FIELD_DATA_AA_generic
 M_UVM_FIELD_DATA_AA_int_key
 M_UVM_FIELD_DATA_AA_int_string
 M_UVM_FIELD_DATA_AA_enum_key
 M_UVM_FIELD_DATA_AA_object_string
 M_UVM_FIELD_DATA_AA_object_int
 M_UVM_FIELD_DATA_AA_string_string
 M_UVM_FIELD_SET_AA_TYPE
 M_UVM_FIELD_SET_AA_OBJECT_TYPE
 M_UVM_FIELD_SET_AA_INT_TYPE
 M_UVM_FIELD_SET_AA_INT_ENUMTYPE

   En plus des macros mentionnées ci - dessus , Et quelques macros errantes ,Peut être appelé en écrivant le Code

 uvm_new_func,Réalisationfunction new,Mais...nameEtparent Ça ne passe pas.
 uvm_record_attribute
 uvm_record_int
 uvm_record_string
 uvm_record_time
 uvm_record_real
 uvm_record_field
 uvm_pack_int
 uvm_pack_string
 uvm_pack_real
 uvm_pack_array
 uvm_pack_queue
 uvm_pack_sarray
 uvm_pack_enum
 uvm_pack_enumN
 uvm_pack_intN
 uvm_pack_sarrayN
 uvm_pack_arrayN
 uvm_pack_queueN
 uvm_unpack_queue
 uvm_unpack_array
 uvm_unpack_sarary
 uvm_unpack_real
 uvm_unpack_string
 uvm_unpack_enum
 uvm_unpack_int
 uvm_unpack_queueN
 uvm_unpack_arrayN
 uvm_unpack_sararyN
 uvm_unpack_enum
 uvm_unpack_int

uvm_phase_defines.svh

  La description du document est très claire, Dans ce fichier defineOui.uvm_root.svh- Oui., Pour créer tout simplement phase. Ces macros ne peuvent être créées que uvmIntégréphase, Parce qu'en fait, uvm_componentViens., Personnalisation non prise en charge phase.Si vous avez besoin d'une mise en œuvre plus complexephase,Les utilisateurs peuvent accéder àuvm_task/topdown/bottomup_phase Nouvelle classe dérivée de la classe de base , Puis affinez - le. exec_taskOuexec_funcC'est bon.

  m_uvm_task_phaseImplémente une extension directe deuvm_task_phaseLa classe de,Pour plus de détailsbase/uvm_task_phase.svhInterprétation de.

  m_uvm_bottomup_phaseImplémente une extension directe deuvm_bottomup_phaseLa classe de,m_uvm_topdown_phaseImplémente une extension directe deuvm_topdown_phaseLa classe de, C'est plus simple. ,C'est fait.newEtget_type_nameDeux fonctions. Sauf que les parents sont différents. , La seule différence entre les deux ,C'est ça.m_uvm_topdown_phase Cette macro est instantanée phaseQuand,Le type estlocalDe,bottomup Non spécifié local.

  Inm_uvm_bottomup_phaseEtm_uvm_updown_phase Une couche de plus sur la Fondation ,C'est bon.uvm_buildin_task_phase、uvm_buildin_topdown_phase、uvm_buildin_bottomup_phase, Seuls les trois paramètres PHASE Un paramètre est une variable ,COMP=uvm_component,PREFIX=uvm_. Pas facile à utiliser , Continue de lâcher prise. ,Et voilà.uvm_user_task_phase、uvm_user_topdown_phase、uvm_user_bottomup_phase,PHASE、COMP、PREFIXLes trois paramètres sont spécifiés par l'utilisateur.

uvm_printer_defines.svh

  Offre une gamme deprinting Macros associées ,Va voir par toi - même..

uvm_reg_defines.svh

  Définiuvm Largeur du BIT d'adresse du Registre UVM_REG_ADDR_WIDTH(64)、 Largeur du BIT de données UVM_REG_DATA_WIDTH(64)、ByteLargeur du BITUVM_REG_BYTENABLE_WIDTH((64-1)/8+1)、coverage
model set Nombre maximum de bits UVM_REG_CVR_WIDTH(32).

uvm_sequence_defines.svh

  uvm sequence Les macros sont là. .Je m'en souviens.uvm_sequenceUtilisé dansuvm_do、uvm_do_on、uvm_do_with、uvm_send Des macros comme ça. ,Juste là., Simple listé ici :

  • uvm_create, Inm_sequencer Créer spécifié sur sequenceOuitem
  • uvm_create_on,Avecuvm_createMême effet, L'utilisateur peut spécifier sequencerCréationsequenceOuitem
  • uvm_do,Par défautm_sequencerEnvoyertransaction,La priorité par défaut est-1.Si danssequenceAllez.create, Cette macro correspond aux étapes suivantes :
    ① uvm_create(sub_seq)
    ② sub_seq.randomize()
    ③ this.pre_start()
    ④ this.pre_do(0)
    ⑤ this.mid_do(sub_seq)
    ⑥ sub_seq.body()
    ⑦ this.post_do(sub_seq)
    ⑧ sub_seq.post_start()

    Si danssequence itemAllez.create, Cette macro correspond aux étapes suivantes :
    ① sequencer.wait_for_grant(prior)
    ② this.pre_do(0)
    ③ item.randomize()
    ④ this.mid_do(item)
    ⑤ sequencer.send_request(item)
    ⑥ sequencer.wait_for_item_done()
    ⑦ this.post_do(item)
  • uvm_do_pri,Avecuvm_doMême effet, L'utilisateur peut spécifier sequencePriorité d'exécution pour
  • uvm_do_on,Avecuvm_doMême effet, L'utilisateur peut spécifier sequencerCréationsequenceOuitem
  • uvm_do_on_pri,Avecuvm_doMême effet, L'utilisateur peut spécifier sequencerCréationsequence Et désignation sequencePriorité d'exécution pour
  • uvm_do_with,Avecuvm_doMême effet, Vous pouvez spécifier les contraintes
  • uvm_do_on_with,Avecuvm_do_onMême effet, L'utilisateur peut spécifier sequencerCréationsequence
  • uvm_do_pri_with,Avecuvm_do_withMême effet, L'utilisateur peut spécifier sequence Priorité d'exécution
  • uvm_do_on_pri_with,Avecuvm_do_pri_withMême effet, L'utilisateur peut spécifier sequencerCréationsequence.En fait...,Tous lesuvm_doLes macros associées sont appelées directement ou indirectementuvm_do_on_pri_withCette macro,J'ai juste fixé quelques paramètres.
  • uvm_send,EnvoyersequenceOuitem,Appeléuvm_sequence_pri,Priorité-1
  • uvm_send_pri,EnvoyersequenceOuitem, Priorité spécifiée par l'utilisateur ;Déterminer si oui ou nonsequence,Si ce n'est pas le cas,,start_itemEt puisfinish_item;Si oui,Alors commence.sequence.En serviceuvm_send*Avant,D'abord.uvm_create
  • uvm_rand_send
  • uvm_rand_send_pri
  • uvm_rand_send_with
  • uvm_rand_send_pri_with,Tous lesuvm_rand_send*Les macros associées sont toutes appelées directement ou indirectement à partir deuvm_rand_send_pri_with. Son talon uvm_do* La différence entre les macros de série est uvm_send À l'avance uvm_create. Son talon uvm_send* La différence entre les macros de série est ,uvm_rand_send*Oui.sequence/itemPorter un jugement,Sisequence/ietm NULL ou Échec aléatoire ,Le journaluvm_warning.
  • uvm_create_seq,Suivez - moi.uvm_create_onEffet similaire,uvm_create_seq(seq,
    sqr)équivalent àuvm_create_on(seq,
    sqr.consumer_seqr),consumer_seqr Besoin de l'utilisateur sequencerDéfinition moyenne.
  • uvm_do_seq,Ibid.
  • uvm_do_seq_with,Ibid.
  • uvm_add_to_seq_lib,Ajout statiquesequenceÀsequence lib
  • uvm_sequence_library_utils
  • uvm_declare_p_sequencer,Déclarationp_sequencer Et force à m_sequencerType

uvm_tlm_defines.svh

  tlm imp Macro de la famille de déclarations d'interface :

  • uvm_blocking_put_imp_decl,Déclarez unblocking_put_imgCatégorie,Deuvm_port_baseEn expansion,A réalisé unputDetask,task putAucune valeur de retour
  • uvm_nonblocking_put_imp_decl,Déclarez unnonblocking_put_imgCatégorie,Deuvm_port_baseEn expansion,A réalisé untry_putEtcan_putDetask,try_put_*Retour réussi1,Échec retourné0
  • uvm_put_imp_decl,Déclarez unput_imgCatégorie,C'est fait.put、try_putEtcan_put
  • uvm_blocking_get_imp_decl,Déclarez unblocking_get_imgCatégorie,Deuvm_port_baseEn expansion,A réalisé ungetDetask,task getAucune valeur de retour
  • uvm_nonblocking_get_imp_decl,Déclarez unnonblocking_get_imgCatégorie,Deuvm_port_baseEn expansion,A réalisé untry_getEtcan_getDetask,try_get_*Retour réussi1,Échec retourné0
  • uvm_get_imp_decl,Déclarez unget_imgCatégorie,C'est fait.get、try_getEtcan_get
  • uvm_blocking_peek_img_decl,Suivez - moi.get_impLa différence est que,peek Est l'acquisition active
  • uvm_nonblocking_peek_img_decl
  • uvm_peek_img_decl
  • uvm_blocking_get_peek_img_decl,get_img+peek_img
  • uvm_nonblocking_get_peek_img_decl
  • uvm_get_peek_img_decl
  • uvm_blocking_master_imp_decl,C'est parti.blocking_put+get+peek_imgLa fonction de,master
  • uvm_nonblocking_master_imp_decl,C'est parti.nonblocking_put+get+peek_imgLa fonction de
  • uvm_master_imp_decl,C'est parti.uvm_blocking_master_imp_declEtuvm_nonblocking_master_imp_declLa fonction de
  • uvm_blocking_slave_imp_decl,C'est parti.blocking_put+get+peek_imgLa fonction de,slave,AvecmasterLa différence entre, Premièrement, les noms sont différents. ,Deux.maskC'est différent,C'estmaskInUVM_MS_IMP_COMMON La macro a été assignée à m_if_mask(C'est vrai,slave Ça marche aussi ici. UVM_MS_IMP_COMMON)
  • uvm_nonblocking_slave_imp_decl,C'est parti.nonblocking_put+get+peek_imgLa fonction de
  • uvm_slave_imp_decl,C'est parti.uvm_blocking_slave_imp_declEtuvm_nonblocking_slave_imp_declLa fonction de
  • uvm_blocking_transport_imp_decl, Réalisation de la première étape transport On y va. ,transportéquivalent àput+get, Les paramètres pertinents sont également doubles , Je ne dirai rien d'autre.
  • uvm_nonblocking_transport_imp_decl
  • uvm_non_blocking_transport_imp_decl,Appelezuvm_nonblocking_transport_imp_decl
  • uvm_transport_imp_decl, Tu sais ce que c'est?
  • uvm_analysis_imp_decl,S'il y en a unuvm_analysis_impC'est bien.,Il n'y a pas de quoi s'inquiéter,Ça marcheuvm_analysis_imp_declPour réaliser
  • Sauftlm Macro externe de la famille de déclarations d'interface , Il a également déclaré UVM_SEQ_ITEM_PULL_IMPEt diversmaskValeur initiale de.

uvm_undefineall.svh

   Ce document est utilisé pour libérer uvm Ku lui - même defineMacros, Pour qu'une seule compilation puisse loadà plusieursscopeMoyenne.( Excusez - moi. , Je ne vois pas ce que ça veut dire. , Original joint :This
can be used to load uvm into multiple scopes using a single compilation.)

uvm_version_defines.svh

  uvm Macros liées aux informations de version


base


uvm_globals.svh

uvm_globals Introduction

uvm_object_globals.svh

uvm_object_globals Introduction

uvm_object.svh

uvm_object Introduction

uvm_event.svh

uvm_event Introduction

uvm_event_callback.svh

uvm_event_callback Introduction

uvm_barrier.svh

uvm_barrier Introduction

uvm_coreservice.svh

uvm_coreservice Introduction

uvm_cmdline_processor.svh

uvm_cmdline_processor Introduction

uvm_resource.svh

uvm_resource Introduction

uvm_resource_db.svh

uvm_resource_db Introduction

uvm_resource_specializations.svh

uvm_resource_specializations Introduction

uvm_packer.svh

uvm_packer Introduction

uvm_queue.svh

uvm_queue Introduction

uvm_spell_chkr.svh

uvm_spell_chkr Introduction

uvm_pool.svh

uvm_pool Introduction

uvm_links.svh

uvm_links Introduction

uvm_comparer.svh

uvm_comparer Introduction

uvm_misc.svh

uvm_misc Introduction

uvm_heartbeat.svh

uvm_heartbeat Introduction

uvm_registry.svh

uvm_registry Introduction

uvm_recorder.svh

uvm_recorder Introduction

uvm_report_server .svh

uvm_report_server Introduction


comps

   Toutes les extensions directes de uvm_componentDeclassMoyenne,Sauf queuvm_root/uvm_port_component_baseInbaseTable des matières、uvm_reg_predictorInregTable des matières、uvm_sequencer_baseInseqTable des matières、uvm_tlm_req_rsp_channel/uvm_tlm_fifo_baseIntlm1Table des matières、uvm_dhier_componentInverdi Table des matières vmm Hors classe pertinente ,Autresagent/driver/monitorAttendez que la plupart des choses courantes reviennent ici.

uvm_comps.svh

  Fichier d 'en - tête,Vous trouverez ci - après les autres documents qui figurent dans ce documentincludeEntrez,TotalincludeC'est13Fichiers,C'est - à - dire13 Directement à uvm_componentDeclass.

uvm_env.svh

  uvm_env,uvm environment,Paruvm_componentEn expansion, C'est une classe imaginaire. ,Tous lesenv Devrait être étendu à partir de uvm_env.uvm_envInuvm_component Pas trop d'extensions sur la base ,Deux choses ont été faites:

  1. Créer et initialiseruvm_env
  2. Réalisationget_type_nameRetour de la fonctiontype_name

uvm_agent.svh

  uvm_agent, Extension directe à uvm_component, C'est une classe imaginaire. , Tous personnalisés par l'utilisateur agent Devrait être étendu à partir de uvm_agent.agent Il y en a habituellement en dessous. 3Petit.component:sequencer、driverEtmonitor.uvm_agent Variables d'énumération suivantes is_active,La valeur par défaut estUVM_ACTIVE.UVM_ACTIVEHeure,3Petit.component Tout sera inclus. ,Généralement utilisédutEntrée;UVM_PASSIVE Alors seulement uvm_monitorCelui - là,En généraldutSortie de.
uvm_agentC'est fait.4Une chose.:

  1. Créer et initialiseruvm_agent,new
  2. Réalisationget_type_nameRetour de la fonctiontype_name
  3. Réalisationget_is_activeFonctions,Retouris_activeValeur de.Par défautUVM_ACTIVEOui.,Mais l'utilisateur peut l'écraser.
  4. Réalisationbuild_phase. C'est surtout ici. uvm_resource_pool Lire uvm_agentDeis_activeValeur. C'est très complet. , Compte tenu de la personnalisation par l'utilisateur is_activeLe type eststring、uvm_bitstream_t、uvm_integral_t、unsigned、intAttendez.,Faire des conversions de type pour ces cas.

uvm_driver.svh

  uvm_driver Extension directe à uvm_component, Est une classe paramétrique ,Il y a deux paramètres,PourREQ=uvm_sequence_itemEtRSP=REQ. Tous personnalisés par l'utilisateur driver Devrait être étendu à partir de uvm_driver.uvm_driver Ce n'est pas une classe imaginaire. ,C'est - à - dire,Vous ne pouvez pas surcharger les fonctions et les tâches entrantes dans une sous - classe.
uvm_driverDans la réalisation de3- Oui.port:

  1. seq_item_port- Oui.uvm_seq_item_pull_portType,Il y a deux paramètresREQEtRSP,Tous dérivés deuvm_driverDedriver C'est normal. seq_item_portOui.sequencerDemandeitems; seq_item_portPeut également être utilisé pour répondre àsequencer.
  2. seq_item_prod_if- Oui.uvm_seq_item_pull_portType, Agir comme interface ou pont , Il y aura un seq_item_portÀseq_item_prod_if;
  3. rsp_port- Oui.uvm_analysis_portType,Il n'y a qu'un seul paramètreRSP,Usage généralrsp_port Pour répondre à sequencer, Au lieu de ce qui est mentionné ci - dessus seq_item_port.driver Quel type est utilisé? portConnexionsequencerDépend desequencer Quel type est utilisé export, Les deux doivent correspondre .
    uvm_driverC'est fait.2Une chose.:
  4. Créer et initialiseruvm_driver,new Création de valeurs de fonction seq_item_portEtrsp_port,seq_item_port Le pointeur. seq_item_prod_if.
  5. Réalisationget_type_nameRetour de la fonctiontype_name

uvm_push_driver.svh

  uvm_push_driver, Regarde ton visage aussi. uvm_driverParents proches.Suivez - moi.uvm_driverLa différence est,uvm_driver Réception active transaction,Etuvm_push_driver C'est la réception passive. transaction,Depush On peut deviner le mot. , Pas besoin d'être proactif. pushC'est.uvm_push_driverDe“Passif” Cela se reflète dans le fait qu'il ne demande pas activement transaction,Attends.sequencer Envoie - le. .Tu te souviens?uvm_driverIl y en a un.seq_item_port- Non.?uvm_push_driverPas ça.,Au lieu de çauvm_blocking_put_impTypereq_export,Tu vois?,- Oui.export.uvm_push_driverC'est nécessaire.uvm_push_sequencer Jumeler avec ,Ce n'est pas une famille qui n'entre pas., Appuyez ici pour ne pas en parler. .
  uvm_push_driverC'est fait.5Une chose.:

  1. Créer et initialiseruvm_push_driver,new Création de valeurs de fonction req_exportEtrsp_port.
  2. Réalisationget_type_nameRetour de la fonctiontype_name
  3. Réalisationcheck_port_connectionsDétection des fonctionsportConnexion,Sireq_exportDesizeNon.1 Le journal. uvm_fatal
  4. putFonctions,Appelezpush_driverMoyennepush,Le journaluvm_fatal
  5. end_of_elaboration_phase Appel automatique check_port_connectionsDétectionportConnexion, Mettre hors de conformité port La connexion est bloquée dans task phaseAvant

uvm_monitor.svh

  uvm_monitor,Paruvm_componentEn expansion, C'est une classe imaginaire. , Tous personnalisés par l'utilisateur monitor Devrait être étendu à partir de uvm_monitor.uvm_monitorInuvm_component Pas trop d'extensions sur la base ,Deux choses ont été faites:

  1. Créer et initialiseruvm_monitor
  2. Réalisationget_type_nameRetour de la fonctiontype_name

uvm_test.svh

  uvm_test,Paruvm_componentEn expansion, C'est une classe imaginaire. ,Tous lestestcase Doit être étendu directement ou indirectement à partir de uvm_test,C'est tout.,Pour implémenter la spécification sur la ligne de commandeUVM_TESTNAMEMise en œuvreuvm_root::run_test.uvm_testInuvm_component Pas trop d'extensions sur la base ,Deux choses ont été faites:

  1. Créer et initialiseruvm_test
  2. Réalisationget_type_nameRetour de la fonctiontype_name

uvm_scoreboard.svh

  uvm_scoreboard Extension directe de uvm_component, Classe imaginaire , Tous personnalisés par l'utilisateur scoreboard Doit être étendu directement ou indirectement à partir de uvm_scoreboard.scoreboard Le tableau de bord uvm_component Pas trop d'extensions sur la base ,Deux choses ont été faites:
3. Créer et initialiseruvm_scoreboard
4. Réalisationget_type_nameRetour de la fonctiontype_name

uvm_random_stimulus.svh

  uvm_random_stimulus Directement dérivé de uvm_component, Classe non imaginaire , Classes paramétriques ,Le type de paramètre estuvm_transaction.La fonction principale de cette classe est,Avant d'atteindre le nombre maximum de comptes ou d'être appelé à s'arrêter,Génération aléatoiretransactionEt à traversblocking_put_portSortez!. En appelant stop_stimulus_generation Arrêter la simulation .newEtget_type_nameC'est bon.,Tous..

uvm_in_order_comparator.svh

   Contient une classe de base uvm_in_order_comparator Et ses deux classes dérivées uvm_in_order_class_comparator、uvm_in_order_build_in_comparator. La classe de base est générale component, Non dérivé .

uvm_algorithmic_comparator.svh

  Suivez - moi.uvm_in_order_comparatorComparé à,C'estuvm_algorithmic_comparatorPlus haut.,Prise en charge de la comparaison de deux types différents d'objets/Catégorie/Autres types de.

uvm_policies.svh

  uvm_policies.svh Il y en a beaucoup dans ce dossier. class(Généralitéscomponent, Non extensible de uvm_component),Pour réaliser des opérations polymorphes avec des types intégrés différents des types de classe de base:

   1. uvm_build_in_comp,Comparer deux types intégrés et retourner les résultats de la comparaison
   2. uvm_build_in_converter, Chaîne de retour du pointeur entrant
   3. uvm_build_in_clone,Comme son nom l'indique,cloneSaisissez la valeur et retournez comme valeur de retour
   4. uvm_class_comp,Comparer deux types intégrés et retourner les résultats de la comparaison.a.compare(b), Objet requis aAuto - approvisionnementcompareMéthodes.
   5. uvm_class_converter, Chaîne de retour du pointeur entrant .t.convert2string(), Objet requis tAuto - approvisionnementconvert2stringMéthodes
   6. uvm_class_clone,Comme son nom l'indique,cloneSaisissez l'objet et retournez comme valeur de retour.from.clone(), Objet requis fromAuto - approvisionnementcloneMéthodes.


seq

uvm_seq.svh

  Fichier d 'en - tête,Prends ça.uvm sequence Documents connexes inclus .En outre,typedefC'estuvm_sequenceTypeuvm_default_sequence_type,uvm_sequencer、uvm_driver、uvm_sequencer_param_baseEt ainsi de suite..

uvm_sequence_item.svh

  uvm_sequenve_itemDirectement à partir deuvm_transaction Dérivé ,uvm_transactionDeuvm_object Dérivé .uvm_sequence_item Cette classe se lit comme suit: .

  • Variable membre,
    - m_sequence_id,sequence id,local intType,Par défaut-1
    - m_use_sequence_info,sequence Bit de drapeau occupé ,protected bitType
    - m_depth,sequence depthInformation,protected intType,Par défaut-1
    - m_sequencer, Envoyer ceci sequenceDesequencer
    - m_parent_sequence,parent sequence
    - print_sequence_info,Imprimersequence Message flag bit
    - issued1,issued2
  • Méthodes(function/task)
    - new,Créationuvm_sequence_item
    - get_type_name,Renvoie la chaîne“uvm_sequence_item”
    - get_full_name, Pas d'explication. ,Etget_nameValeur de(leaf_name) Splice oh
    - get_root_sequence,Accèsroot sequence(Non.parent sequenceC'estroot
    sequenceC'est bon.)
    - get_root_sequence_name,Accèsroot sequence name
    - get_sequence_path,Accèssequence path, Méthodes de mise en œuvre et get_root_sequence_nameSimilaire,La différence est queget_sequence_pathNotez les différents noeuds du processus de recherche,Split intopath
    - set_sequence_id,Paramètresm_sequence_idValeur de
    - get_sequence_id,Retourm_sequence_idValeur de
    - set_id_info,ParamètresitemDeid, Le type de paramètre d'entrée est uvm_sequence_item,item NULL fatal,Règle non vide:①AccèsitemDeidEt assigner une valeur àm_transanction_id(Voiruvm_transaction.svh)
    ②AccèsitemDesequence idEt assigner une valeur àm_sequence_id
    - set_depth,Paramètresm_depthValeur de
    - get_depth,Retourm_depthValeur
    - set_use_sequence_info,Paramètresm_use_sequence_infoValeur de
    - get_use_sequence_info,Retourm_use_sequence_infoValeur de
    - set_parent_sequence,Paramètresm_parent_sequence,Désignationparenr sequence
    - get_parent_sequence,Accèsm_parent_sequence
    - m_set_p_sequencer,Méthode interne,Retour à null
    - set_sequencer,Paramètresm_sequencer, Spécifie d'envoyer ceci sequenceDesequencer
    - get_sequencer,Accèsm_sequencer, Obtenir envoyer ceci sequenceDesequencer
    - set_item_context,Pour le momentsequence_itemDésignationparent sequenceEtsequencer,depthValeur+1,Réaffectationseed
    - is_item,itemRetour1,sequenceRetour0. Il n'y a qu'une seule ligne dans le Code. return(1),Il va mettreuvm_sequence_base- Oui.is_itemFonctionreturn 0Écrasez - le..
    - uvm_report_info、uvm_ report_warning、uvm_ report_error、uvm_
    report_fatal、do_printEt les questions connexesuvm_get_report_object、uvm_report_enable、uvm_report.sequenceOuitem Utilisé lors de l'impression des informations sequencer,Si ce n'est pas indiquésequencerEt si, Appelle directement global reporter.(TODO.J'ai le temps d'expliquer ça plus en détail, Je vais regarder le Code. )

uvm_sequence_base.svh

  uvm_sequence_baseDirectement à partir deuvm_sequence_item Dérivé , Cette catégorie est la suivante: .

– Variable membre

-   m_sequence_state,uvm_sequence_stateOui.9- Oui.stateVoir détailsuvm_object_globals.svhDansuvm_sequence_state Description des variables énumérées 
-   m_next_transaction_id,Par défaut1
-   m_priority,
-   m_wait_for_grant_semaphore,
-   m_sqr_seq_ids,
-   children_array,
-   response_queue,
-   response_queue_depth,
-   response_queue_error_report_disable
-   do_not_randomize
-   m_sequence_process,En courssequenceProcessus
-   m_use_response_handler,
-   type_name,
-   is_rel_default,
-   wait_rel_default,

– Méthodes(function/task)

-   new,Créer et initialiseruvm_sequence_base,m_sequence_state=UVM_CREATE,wait_for_grant_semaphore=0,m_init_phase_daps(1)
-   is_item,itemRetour1,sequenceRetour0,Retour par défaut0( Parce que c'est actuellement sequence)
-   get_sequence_state,Retoursequence state,return m_sequence_state
-   wait_for_sequence_state, Paramètre d'entrée non state_mask, Attendez. sequence
    stateOui.state_maskJusqu'à
-   get_tr_handle,Accèstransaction
    handler,Chaquerecorder Sont uniques id,Pour0Indique quetransaction A été libéré ,Voir détailsuvm_recoreder.svh
-   start, Bien connu seq.start(seq, sqr) C'est ici que ça a été fait. .Letask A fait ce qui suit dans l'ordre :
    -   set_item_context
    -   Jugementsequence stateOui NonUVM_CREATE、UVM_STOPPED、UVM_FINISHEDMoyenne, En cas de non - disponibilité uvm fatal
    -   Siparent sequenceSi ce n'est pas vide,sequence.children_arrayUn
    -   SisequencePriorité inférieure à-1,Le journalfatal, Cette priorité déborde. 
    -   SisequencePriorité inférieure à0(Pour-1),parent  sequence NULL Priority default 100, Utiliser si non vide parent  sequence Priorité actuelle sequencePriorité
    -   Vider le courantsequenceDeresponse queue, Assurez - vous d'avoir quitté la dernière course 
    -   SisequencerNon vide,Accèsstream、handler、m_tr_recoder
    -   Paramètressequence idPour-1,Assurez - vous quesequence Exécution interrompue 
    -   Sim_sequencerNon vide,Inscriptionsequence
    -   Souleverobjection Et verrouillé uvm_get_to_lock_dap,Et puispre_start、pre_body、pre_do、mid_do、body、post_do、post_body、post_start Sur une série d'arrangements opérationnels ,Enfindrop
        objection
    -   Nettoyage du site,end_tr、m_sequence_exiting、children_array.deketeAttendez.
-   body, L'utilisateur doit écrire lui - même body Pour couvrir uvm_sequence_baseÀ l'intérieur.body,Sinon, le journaluvm_warning
-   set_starting_phase,Sans explication
-   get_starting_phase,Sans explication
-   set_automatic_phase_objection
-   get_automatic_phase_objection
-   m_safe_raise_staring_phase
-   m_safe_drop_staring_phase
-   set_priority,ParamètressequencePriorité
-   get_priority,AccèssequencePriorité
-   is_relevant,Par défautis_relevantLa valeur est:1,L'utilisateur doit surcharger la fonction lorsqu'elle est utilisée, Cette fonction est utilisée pour sequencerArbitrage,is_relevantPour0Heuresequencer N'appelle pas ça. sequence
-   wait_for_relevant,Quand toutsequencePas du tout.relevantHeure,Attendez.relevant- Oui.
-   lock,Verrouillez.sequencer,En particulier:sequencer On en reparlera. 
-   grab,Préemptionsequencer, Mettez - vous en ligne. ,Quelock Fort. 
-   unlock,Déverrouiller
-   ungrab, Supprimer la préemption 
-   is_blocked,Retoursequencer blockStatut,SilockOugrabC'est,Retour0,Sinon, retournez à1
-   has_lock,sequencer lock Retour en arrière 1,Sinon, retournez à0
-   kill,Tuez - les!sequence,drop objection
-   do_kill, m_kill,Tuez tout.children sequenceProcessus
-   create_item, start_item, finish_item, Voir mot comme mot 
-   wait_for_grant, Voir mot comme mot , En attente de libération 
-   send_request, Voir mot comme mot ,Envoyer la demande,En généralwait_for_gantAprès
-   wait_for_item_done,Attendez.itemEnvoi terminé
-   use_response_handler, Voir mot comme mot 
-   get_use_response_handler,Accèsm_use_response_handlerValeur
-   response_handler,Retour à null
-   set_response_queue_error_report_disable
-   get_response_queue_error_report_disable
-   set_response_queue_depth
-   get_response_queue_depth
-   clear_response_queue
-   put_base_response
-   put_response
-   get_base_response
-   constraint pick_sequence
-   num_sequeces,RetoursequenceNombre
-   get_seq_kind,RetoursuquenceType
-   get_sequence, Obtenir le type spécifié sequence
-   do_sequence_kind, Démarrer le type spécifié sequence
-   get_sequence_by_name, Obtenir le nom spécifié sequence
-   create_and_start_sequence_by_name,Créer et démarrersequence
-   m_get_sqr_sequence_id,Obtenir la désignationsequencerDesequence  id,Peut être spécifiéget L'argent? update
-   m_set_sqr_sequence_id,Définir la désignationsequencerDesequence id
<br><br>

uvm_sequence.svh

  uvm_sequenceDirectement à partir deuvm_sequence_itemEn expansion, Est une classe paramétrique , Les deux paramètres sont: uvm_sequence_itemTypeREQEtRSP.

– Variable membre

-   uvm_sequence_itemTypeREQ
-   uvm_sequence_itemTypeRSP
-   uvm_sequencer_param_baseTypeparam_sequencer

– Méthodes(function/task)

-   new,Créer et initialiseruvm_sequence
-   send_request,Voilà.sequencerEnvoyer la demande,DemandesequencerEnvoyeritem,Peut être réglérerandomize
    bit 1, Randomiser avant d'envoyer item
-   get_current_item, Renvoie le courant item,Sim_sequencer Aux classes paramétrées param_seqyencerLa conversion a échoué,Le journalfatal
-   get_response,Obtenir la désignationtransactionDeresponse
-   put_response,AssignerRSPParamètresresponse
-   do_print,AppelezprinterDeprint_object,ImprimerREQEtRSP<br><br>

uvm_sequence_builtin.svh

  uvm_sequence_buildin Il y a deux classes ,①uvm_random_sequence,②uvm_exhaustice_sequence,③uvm_simple_sequence, Pour prédéfini sequence,Deuvm_sequenceEn expansion. Pas d'explication détaillée. .

uvm_sequence_library.svh

  Contient deux classes,uvm_sequence_libraryEtcfg,Deuvm_sequenceEn expansion.

  uvm_sequence_library Peut contenir beaucoup sequence,Peut être créé selon des règles spécifiées ou au hasard/Démarragesequence. On verra ça plus tard. .

uvm_sequencer_base.svh

  uvm_sequencer_base Directement dérivé de uvm_component.

-Variable membre

-   arb_sequence_q[$];
-   arb_completed[int];
-   lock_list[$];
-   reg_sequences[int];
-   m_sequencer_id;
-   m_lock_arb_size;
-   m_arb_size;
-   m_wait_for_item_sequence_id,
-   m_wait_for_item_transaction_id;	
-   m_wait_relevant_count = 0 ;
-   m_max_zero_time_wait_relevant_count = 10;
-   m_last_wait_relevant_time = 0 ;
-   m_arbitration = UVM_SEQ_ARB_FIFO;
-   g_request_id;
-   g_sequence_id = 1;
-   g_sequencer_id = 1;
-   m_default_sequences[uvm_phase],sequenceProcessus

– Méthodes(function/task)

-   new,Créer et initialiseruvm_sequencer_base
-   is_child,Si ouichild sequence,Renvoie1,Sinon, retournez à0
-   user_priority_arbitration,Uniquement poursequencerDeUVM_SEQ_ARB_USERMode
-   execute_item, Exécuter spécifié item
-   start_phase_sequence,À l'heure actuellephaseDémarrage inférieursequece
-   stop_phase_sequence,À l'heure actuellephaseArrêt inférieursequence
-   wait_for_grant,sequence En attente de libération 
-   wait_for_item_done,Attendez.itemTransmission terminée
-   is_blocked,RetourblockStatut,block Si tu restes, reviens. 1,Sinon, retournez à0
-   has_lock,Si actuellementsequencerIl y a une serrure,Retour1,Sinon, retournez à0
-   lock,sequenceVerrouillage
-   unclock,Déverrouiller
-   grab,sequencePréemption
-   ungrab, Supprimer la préemption 
-   stop_sequence,Arrêter le courantsequence
-   is_grabed,Si actuellementsequencerParlockOugrab,Tous retournés1,Sinon, retournez à0
-   current_grabber,Retoursequencer Par qui? lock/grabOn y est.
-   has_do_available,En courssequencerPour envoyersequence,S'il y aready On revient. 1,Sinon, retournez à0.
-   set_arbitration,Paramètressequencer Mode d'arbitrage , Inclure les modes suivants :
    -   UVM_SEQ_ARB_FIFO,Mode par défaut,Premier entré premier sorti,FIFO
    -   UVM_SEQ_ARB_WEIGHTED, Arbitrage fondé sur le poids , Sélection aléatoire avec le même poids 
    -   UVM_SEQ_ARB_RANDOM,Sélection aléatoire
    -   UVM_SEQ_ARB_STRICT_FIFO, Priorité la plus élevée selon FIFOMode
    -   UVM_SEQ_ARB_STRICT_RANDOM,La plus haute priorité est donnée au hasard
    -   UVM_SEQ_ARB_USER, Mode personnalisé par l'utilisateur 
-   get_arbitration, Obtenir le mode d'arbitrage actuel 
-   wait_for_sequences,sequenceAttendez.item ready
-   send_request,Voilà.sequencerEnvoyer la demande,Demandeitem
-    Autres constructions function/task, Pas de liste. , Ça fait mal. 



uvm_sequencer_param_base.svh

  uvm_sequencer_param_base Extension directe de uvm_sequencer_base, Classes paramétriques ,Le paramètre estuvm_sequence_itemTypeREQ
& RSP.Suivez - moi.uvm_sequencer_baseComparé à,param_base Le contenu suivant est principalement ajouté: .

– Variable membre

-   rsp_export,uvm_analysis_exportType

– Méthodes

-   get_current_item,Accèssequencer Actuellement en cours sequence item
-   get_num_reqs_sent,Retoursequencer Nombre de demandes envoyées 
-   set_num_last_reqs,Fixer la limite supérieure du nombre d'enregistrements demandés dans le passé,Par défaut1,Soutien maximal1024, Au - delà, il y aura une alarme. 
-   get_num_last_reqs,Obtenir le nombre maximum de sauvegardes demandées dans le passé
-   last_req, Retour à la dernière demande item
-   get_num_rsps_received,Obtenir le courantsequencer Nombre de demandes reçues 
-   set_num_last_rsps,Paramètresresponse Enregistrer la quantité maximale ,Par défaut1,Max réglable à1024
-   get_num_last_rsps,Accèsresponse Enregistrer la quantité maximale 
-   last_rsp, Retour à la dernière fois response item
-   connect_phase,Prends ça.rsp_exportAvecsqr_rsp_analysis_fifo.analysis_exportConnecté	
-   build_phase,En courssequencerLe pointeur pointe verssqr_rsp_analysis_fifo.sequencer_ptr
-   Autres méthodes intégrées qui ne sont pas recommandées pour une utilisation directe, Pas de liste. 



uvm_sequencer.svh

  uvm_sequencer Extension directe de uvm_sequencer_param_base,Au lieu deuvm_sequencer_base, Classes paramétriques ,Le paramètre estuvm_sequence_itemTypeREQ
& RSP.

  uvm_sequencerInuvm_sequencer_param_baseSur la base de, Les principales méthodes mises en œuvre sont les suivantes: ,C'est aussi quelques - unes des façons dont nous avons plus de contacts quotidiens:

-   get_next_item,Demande suivanteitem
-   try_next_item
-   item_done
-   put
-   get
-   peek
-   item_done_trigger
-   item_done_get_trigger_data



uvm_push_sequencer.svh

  uvm_push_sequencer Extension directe de uvm_sequencer_param_base, Classes paramétriques ,Le paramètre estuvm_sequence_itemTypeREQ &RSP.Il suituvm_sequencerLa différence est que,uvm_push_sequencerC'est fait.run_phase,Inrun_phaseRichie.getEncore.put, Actif ,Pas besoin dedriverMoyenneget_next_itemC'est.

uvm_sequencer_analysis_fifo.svh

  uvm_sequencer_analysis_fifoDeuvm_tlm_fifoHérité, Est une classe paramétrique ,Le paramètre estuvm_sequence_itemTypeRSP. Dans cette classe, l'accent est mis sur la réécriture tlm_fifoDewriteFonctions,Appelezuvm_sequencer_baseDeanalysis_writeÉcris..


direct

  Synopsys Quelque chose à la maison. ,NonUVMCritères.Deux fichiers,Un.include uvm_seed.svh,Deux.uvm_seed.svhCe fichierDPI-CAppelezCRéalisationuvmAlgorithme de hachage unidirectionnel et création aléatoireseed.Rien d'autre.

uvm_direct.svh

uvm_seed.vh


dap

  dapLe nom complet estdata access policy,C'est - à - dire:uvm Politique d'accès aux données pour . Supprimer le fichier conteneur uvm_dap.svhAu - delà, Quatre classes sont mises en œuvre : ① uvm_set_get_dap_base;② uvm_simple_lock_dap; ③ uvm_get_to_lock_dap; ④ uvm_set_before_get_dap. Il est facile de voir à partir du nom ,uvm_set_get_dap_baseC'est la classe de base, Directement à partir de uvm_object Extension , Est une classe paramétrique (Paramètrestype T=int),En plus3Tous ont été étendus à partir de cette classe de base.

uvm_dap.svh

   Fichier d'en - tête ou fichier conteneur , Mettez les quatre autres fichiers includeEntrez.

uvm_set_get_dap_base.svh

  uvm_set_get_dap_base Est une classe paramétrique ,Deuvm_object Directement étendu . Cette classe fournit UVM Quatre interfaces d'accès aux données :set、try_set、getEttry_get.set/getOui.resource( Comment traduire le chinois ?Pool?)Interneset/get Opérations d'accès aux données pour , Si l'opération échoue, elle sera signalée. error;try_set/try_get C'est évident. ,Opération retournée avec succès1, L'opération échoue sans erreur , Mais il reviendra. 0.

uvm_simple_lock_dap.svh

  class uvm_simple_lock_dapDeuvm_set_get_tap_baseEn expansion,En termes simples, l'accès aux données est verrouillé(lock). Cette serrure est relativement simple ,Adoption1bitDonnéesm_locked Pour contrôler si set/getDonnées.m_lockedPar défaut0,C'est - à - dire:unlocked,En appelant une fonctionlock( )Etunlock( )Changementm_locked La valeur de est verrouillée et déverrouillée .Fonctionsis_locked( )Retourm_lockedValeur.

  unlockDans l'état,Effectuer les donnéesset Les données sont mises à jour normalement ,lockedDans l'étatsetC'est annoncé.uvm_error;lockedHeure,try_set Mise à jour normale des données et retour 1,unlockedLes données ne peuvent pas être mises à jour et retournées0, Mais pas de rapport. uvm_error/warning Attendre n'importe quel message .

  Par rapport àset,Peu importe.lockedToujoursunlocked,get、try_getToutes les opérations obtiendront les valeurs de données correctes,Ettry_get Retour de l'horloge 1.

  Parce quecopy/pack Violation d'une opération similaire lock Risques potentiels de la Stratégie ,uvm_simple_locked_dapNon pris en chargedo_copy、do_pack、do_unpackFonctionnement,Lorsque ces fonctions sont appeléesuvm_error.do_printOpérations n'impliquant pas la lecture et l'écriture de données,Alors...do_print( )Oui..

  Et une fonction,convert2string,Cette fonction est utilisée pour imprimer les données etlocked/unlockedStatut.

uvm_set_before_get_dap.svh

  uvm_set_before_get_dapDeuvm_set_get_tap_baseEn expansion,Dans les donnéesgetAssurez - vous que les données sontset Au moins une fois. .Cette classe a un sens important,Dans plusieurscomponent Transfert d'informations partagées ,Même si cette information n'est pas encore prête,C'est comme ça.ready Un substituant s'est produit avant .

  La méthode de mise en œuvre spécifique est la suivante:,Inset/try_set Bit d'indication en fonctionnement m_setPosition1,getJugement temporelm_setStatut,Pour1 Signifie au moins set/try_setOui.1Une fois, Sinon, non. set/try_setOui..Non.setOui.,get Rapport d'opération uvm_error Mais il retournera quand même au bon endroit. value,try_getSeulement siset Mettre à jour les valeurs des données plus tard ,Et revenir à1,Non.set Aucune valeur de données n'a été obtenue et retournée 0.

  Non pris en chargedo_copy、do_pack、do_unpack,Soutiendo_print,Fonctionsconvert2string Afficher les données et SET/UNSETStatut.

uvm_get_to_lock_dap.svh

  uvm_get_to_lock_dapDeuvm_set_get_tap_baseEn expansion, L'une des principales utilisations de cette catégorie est de protéger starting_phase & auto_objection, On en reparlera plus tard. .

  Dans cette catégorie,get/try_getAvantsetIl n'y a aucun problème avec le fonctionnement,Inget/try_get Verrouiller les données après l'opération ,m_locked=1,Encore une foisset Rapport d'opération uvm_error.getAprèstry_setPas d'erreur,set Échec et retour 0.

  Non pris en chargedo_copy、do_pack、do_unpack,Soutiendo_print,Fonctionsconvert2string Afficher les données et LOCKED/UNLOCKEDStatut.


include

  SynopsysLe registre de lecture et d'écriture à la maison utilise plusieurs fichiers, Non publié ,Non, pas du tout.UVMPartie de la norme,snps_reg_units.hType de données non signé redéfiniuint8, uint16, uint32 & uint64, En plus, il est pur. CEtuvmCDeux fichiers qui implémentent la lecture et l'écriture du registre, Ils sont séparés. pureCEtuvmCSous le dossier, Les noms des fichiers sont snps_reg_rw_api.h

snps_reg_uints.h

pureC

snps_reg_rw_api.h

  API,PureC Mise en œuvre de la lecture et de l'écriture des registres

uvmC

snps_reg_rw_api.h

  API,uvmC Mise en œuvre de la lecture et de l'écriture des registres .


dpi

uvm_dpi.cc

  Fichier d 'en - tête,includeC'est<stdio.h>, uvm_dpi.h, uvm_commen.c, uvm_regex.cc, uvm_hdl.cc, uvm_svcmd_dpi.cc, Seulement après la définition “__cplusplus”Ça marche quand..Le compilateur peut compiler le fichier directement, Ou compiler le fichier séparément includePlusieurs documents,Facile à utiliser.

uvm_dpi.h

  include UVMMoyenneC/C++ Fichiers d'en - tête utilisés ,Y compris:<stdio.h>, <malloc.h>, <string.h>, <regex.h>, <limits.h>, <stdlib.h>Etveriuser.hEtsvdpi.h.Il y en a d'autresUVM DPI Constantes utilisées dans la mise en œuvre interne (M_UVM_INFO/WARNING/ERROR/FATAL, M_UVM_NONE/LOW/MEDIUM/HIGH/FULL/DEBUG) Et méthodes (m_uvm_report_dpi & int_str_max),Non ouvert au public.

uvm_dpi.svh

  UVM DPI Fichier de haut niveau du sous - programme ,includeC'estuvm_hdl.svh, uvm_svcmd_dpi.svh,Etuvm_regex.svh. Si l'outil est livré avec lui - même DPI, Peut ajouter des macros UVM_NO_DPI Éteins ça. DPI.

uvm_common.c

  UVM DPI Mise en œuvre de la méthode générale ,Y compris:m__uvm_report_dpi, m_uvm_report_dpiEtint_str_max.

uvm_hdl.c

  SelondefinedMacros,Décide queinclude Quelle maison? uvm_hdl.c.Les relations correspondantes sont les suivantes::VCS/VCSMX -> uvm_hdl_vcs.c,QUESTA -> uvm_hdl_questa.c,INCA/NCSC -> uvm_hdl_inca.c,Si aucune définition pertinente n'est donnée, une erreur sera signalée.

uvm_hdl.svh

  DéfinitionHDLLargeur maximale du vecteur de bits pour l'accès à la porte arrière,Non.define UVM_HDL_MAX_WIDTH Par défaut. 1024bit,Dans le cas contraire, la valeur auto - définie prévaudra.uvmAccès par la porte arrière plusieurs méthodes sont disponibles iciimportEntrez(DPI-C),Ces méthodes sont couramment utiliséesuvm_hdl_check_path, uvm_hdl_deposit, uvm_hdl_force, uvm_hdl_force_time, uvm_hdl_release_and_read, uvm_hdl_release, uvm_hdl_read, uvm_hdl_read_string, uvm_memory_load.SidefineC'estUVM_HDL_NO_DPI, L'utilisation de la méthode ci - dessus est signalée uvm_fatalDe.
   Parmi les méthodes ci - dessus , La probabilité d'utilisation est plus faible uvm_hdl_force_time,Il y a3Paramètres,Un.hierarchyChemin,Deux.dataValeur,Maisforce Temps de rétention . La valeur de temps par défaut est 0,Si cette valeur temporelle n'est pas spécifiée,Est adoptéuvm_hdl_deposit Affectation de la méthode .
uvm_memory_load Et rarement utilisé ,Il y a7 Paramètres d'entrée ,Pour une utilisation spécifique, voiruvm_hdl_vcs.c.

uvm_hdl_inca.c

  incaLa maisonuvm backdoorAccès àhdlDeC codeRéalisation, Pas vraiment. , Si vous êtes intéressé, regardez par vous - même. .

uvm_hdl_questa.c

  questaLa maisonuvm backdoorAccès àhdlDeC codeRéalisation, Pas vraiment. , Si vous êtes intéressé, regardez par vous - même. .

uvm_hdl_vcs.c

  vcsLa maisonuvm backdoorAccès àhdlDeC codeRéalisation, Pas vraiment. , Si vous êtes intéressé, regardez par vous - même. . C'est très détaillé. .

uvm_regex.svh

  import 3 Chaîne correspondante DPI-C,Respectivement.uvm_re_match, uvm_dump_re_cache, uvm_glob_to_re.Si définiUVM_REGEX_NO_DPIEt si,AdoptésvRéalisationuvm_re_match,Mais les deux autres ne se sont pas matérialisés, C'est une macro. function.

uvm_regex.cc

  Comme indiqué ci - dessus3- Oui.DPI-CDeCMise en œuvre de la fonction.
  uvm_re_match Non, pas plus. ,uvm Correspondance des chaînes pour ,Deux paramètres, L'une est l'expression ,L'autre est une chaîne avec une correspondance,Suivez - moi.pythonDere.match()Utilisation similaire.
uvm_glob_ro_re,Convertir une expression globale en une expression régulière standard? Je ne vois pas ce que ça veut dire. ,Mais regarde.codeÇa veut dire,Cette fonction est principalement utilisée pour remplacer des caractères spéciaux,Par exemple,*-> .*,+ -> .+,.-> \., ? -> ., [ -> \\[, ] -> \\], ( -> \\(, ) -> \\).
  uvm_dump_re_cacheDecacheMoyennedump Ensemble d'expressions générales .

uvm_svcmd_dpi.svh

  importC'est3- Oui.DPI-C,Respectivement:uvm_dpi_get_next_arc_c, uvm_dpi_get_tool_name_c, uvm_dpi_get_tool_version_c,Et a réalisé3- Oui.sv function( C'est un appel direct. DPI), C'est - à - dire DPI Nom supprimé “_c”Suffixe, Pour distinguer svEtC.
   Autres que ceux mentionnés au paragraphe précédent 3- Oui.DPI-CExtérieur,Oui.import En plus. 3- Oui.,uvm_dpi_reg_comp, uvm_dpi_regexec, uvm_dpi_regfree. La réalisation est décrite ci - dessous. .cAllez..
  SidefineC'estUVM_CMDLINE_NO_DPI, Appelé ci - dessus DPI Renvoie null /NULLOu“?”.

uvm_svcmd_dpi.c

  uvm_dpi_get_next_arc_c, uvm_dpi_get_tool_name_c, uvm_dpi_get_tool_version_c, uvm_dpi_reg_comp, uvm_dpi_regexec, uvm_dpi_regfreeDeC codeRéalisation.

  • uvm_dpi_get_next_arc_c,dpiLire le paramètre suivant de la ligne de commande;
  • uvm_dpi_get_tool_name_c, Obtenir des informations sur le nom de l'outil ;
  • uvm_dpi_get_tool_version_c, Obtenir des informations sur la version de l'outil ;
  • uvm_dpi_reg_comp,Compiler des expressions régulières;
  • uvm_dpi_regexec, Exécuter une expression régulière ,Commencer à correspondre;
  • uvm_dpi_regfree, Libérer l'expression régulière .


deprecated

  Comme son nom l'indique, Non recommandé ,Tout ce qui apparaît sous ce dossierfile、type、class、function Tout n'est pas recommandé .

readme.important

  Explique pourquoi l'utilisation de.Parce que le contenu sous ce dossier est pour l'implémentation interne,Non, pas du tout.uvmCritères, Non documenté ,FuturuvmIl est possible de supprimer ce contenu dans la version,Même s'il y a des changements, ils peuvent ne pas être pertinentsnotice.

uvm_resource_converter.svh

   Les éléments suivants sont inclus dans le présent document: class Non recommandé :

  1. m_uvm_resource_converter
  2. m_uvm_resource_converters
  3. m_uvm_resource_default_convert
  4. m_uvm_resource_convert2string_converter
  5. m_uvm_resource_sprint_converter


Résumé

版权声明
本文为[Mangopapa]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013211639695a.html

随机推荐