uvm_compare

preface:   uvm中有几个独立的类如uvm_comparer, uvm_printer, uvm_packer这几个都是独立的类,这些类相当于一个工具类,提供了一些工具函数如比较,打印,组包等。我们可以改写这几个独立的root类,对函数定义提供自己的实现(利用多态性)。比如比较字符串的方法这些,提供自己的实现。在uvm中把这样的类叫做policy类。也就是说可以提供自己的实现策略。这几个类的实现把过程和目的实现了解耦。uvm_recorder也是一个policy类,但是该类有个主先uvm_objectcontent:1.在uvm的uvm-1.0p1\src\base\uvm_object_globals.svh中定义了一些全局的policy类;  uvm_recorder uvm_default_recorder = new();//全局策略记录器  uvm_comparer uvm_default_comparer = new();//全局策略比较器  uvm_packer uvm_default_packer = new();//全局策略压缩器  uvm_printer uvm_default_printer = uvm_default_table_printer;//全局策略打印器  uvm_line_printer uvm_default_line_printer  = new();//全局策略单行打印器  uvm_tree_printer uvm_default_tree_printer  = new();//全局策略tree style打印器  uvm_table_printer uvm_default_table_printer = new();//全局策略表打印器2.vm_recursion_policy_enum policy = UVM_DEFAULT_POLICY;比较的递归策略,分为浅比较,深比较,和应用比较。 UVM_DEEP, UVM_REFERENCE, or UVM_SHALLOW,这个跟c++中的copy构造函数相似的,浅比较就是对一些指针变量的内容不考虑,深比较就是对指针变量指向的内容也考虑,引用比较估计是说对引用的内容也比较3.int unsigned show_max = 1;输出不匹配的最大消息数量4. string miscompares = “”;比较重要的量,存储一次比较失败的字符串,每次比较开始清空。5. result记录了某次比较成员比较失败的次数。如果result>=show_max会停止比较打印比较失败的信息6. uvm中的compare是一个把两个对象中的成员按比较策略逐个比较的过程,不同于vmm中简单比较数据的过程,uvm_stack_scope类都是为这个目的服务的。7.  bit check_type = 1;控制在compare_object的时候是否比较类型uvm_object::get_type_name8.   bit physical = 1; bit abstract = 1;这两个是do_compare函数中来作为比较策略的一个控制器,没有见过使用这两个控制变量的do_compare的实现。从字面上分析一个是把两个object做物理意义上的比较,比如看句柄是否相等,里边的物理内容是否相同等;而abstract只是比较这两个object中的内容是否相同,比较级别要高些。9.  virtual function bit compare_field_int (string name,
                                          logic[63:0] lhs,
                                          logic[63:0] rhs,
                                          int size,
                                          uvm_radix_enum radix=UVM_NORADIX);   本函数比较lhs和rhs中的低size位,lh和rhs为对应变量的名字,成功返回1,失败则把比较结果按radix=UVM_NORADIX方式记录并打印出来。10.function void print_msg (string msg);本函数记录比较失败的arg的次数(result),如果次数超过show_max则不记录,否则把比较失败的信息记录在miscompares供以后打印出来。11.function bit compare_field_real (string name,
                                          real lhs,
                                          real rhs);   类似9比较两个real12.function bit compare_string (string name,
                                       string lhs,
                                       string rhs);   类似9比较两个string13.function bit compare_field (string name,
                                      uvm_bitstream_t lhs,
                                      uvm_bitstream_t rhs,
                                      int size,
                                      uvm_radix_enum radix=UVM_NORADIX);  类似9比较两个uvm_bitstream_t,1024位的logic类型14.function bit compare_object (string name,
                                       uvm_object lhs,
                                       uvm_object rhs);  类似9比较两个uvm_object,该方法会调用uvm_object::compare和print_msg_object,而print_msg_object与print_msg类似。15.function void print_msg_object(uvm_object lhs, uvm_object rhs);比较两个uvm_object,与print_msg 的实现类似16. function void print_rollup(uvm_object rhs, uvm_object lhs);   在depth==0的前提下打印result和show_max的报告,根据sev打印rhs&lhs.get_name(), lhs&rhs.get_inst_id()的值,打印所有"MISCMP"的值。就是打印最后的comparer的总结报告。17.  int depth                = 0;   //current depth of objects
  uvm_copy_map compare_map = new; //mapping of rhs to lhs objects
  uvm_scope_stack scope    = new;  最后comparer中还包含了这几个散碎的成员,由于并不在compare中操作,因为分成从略。  depth 估计就是控制比较深度的,compare_map 最要是在uvm_object中做compare的时候需要记录下各个object见的映射关系用,具体分析将在那个地方分析; scope也是这样的目的。 location:C:\Documents and Settings\zhliu\Desktop\uvm-1.0p1\src\base\uvm_comparer.svh

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值