UVM class 类的继承派生关系

简介: UVM class 类的继承派生关系

为了搞清楚uvm中各个类的继承关系,随手用python写了个脚本到uvm-1.2文件夹中去抓,代码如下,可能有bug。

#! /usr/bin/python
import re, sys, commands
tmp = commands.getoutput("grep -rh -A 5 \"class \" " + sys.argv[1] + " --include=\"*.sv*\"").split('\n')
for line in tmp:
    if '//' in line or '--' in line or len(line) < 2 or 'endclass' in line:
        tmp.remove(line)
tmp2 = []
for i in range(len(tmp)):
    if 'class ' in tmp[i]:
        new_line = tmp[i]
        if ';' in tmp[i]:
            tmp2.append(tmp[i])    
        else:
          for j in range(10):
               if (i+1) < len(tmp):
                    i = i+1
               new_line += tmp[i]
               if ';' in tmp[i]:
                    tmp2.append(new_line)
                    break
tmp3 = []
for line in tmp2:
  if 'extends' in line:
      res = re.match('\s*(virtual\s)*class\s+(\S+).*extends\s+(\S+).*', line)
      if res:
          tmp3.append(res.group(2) + ' extends ' + res.group(3))
    else:
      res = re.match('\s*(virtual\s)*class\s+(\S+).*', line)
      if res:
          tmp3.append(res.group(2))
tmp4 = {}.fromkeys(tmp3).keys()
for i in range(len(tmp4)):
  tmp4[i] = re.sub('#\S+', '', tmp4[i])
  tmp4[i] = re.sub(';', '', tmp4[i])
tmp5 = []
for i in range(len(tmp4)):
    if 'extends' not in tmp4[i]:
      hier = tmp4[i]
    else:
      res = re.match('(.*) extends (.*)', tmp4[i])
        son = res.group(1)
      father = res.group(2)
      hier = father + '.' + son
        while True:
          if father is not '':
              son = father
          else:
              break
          for j in range(len(tmp4)):
              res = re.match(son + ' extends ' + '(.*)', tmp4[j])
              if res:
                  hier = res.group(1) + '.' + hier
                  father = res.group(1)
                  break
              else:
                  father = ''
    tmp5.append(hier)
tmp6 = sorted(set(tmp5))
fp = open('uvm_family.csv', 'w')
for line in tmp6:
  fp.write(line + '\n')
    print line
fp.close()



  如果只更关心uvm_void的派生类,再筛选一下:

fp = open('uvm_void_family.csv', 'w')
for line in tmp6:
    if 'uvm_void' in line:
        fp.write(line + '\n')
fp.close()



处理结果大致如下:


20201125115835552.png



有兴趣再处理一下的话,就是这样啦 ↓


20201125120008316.png


又或者是这样(用vimdot画的图,感兴趣看下DOT语言介绍) ↓


20201127142633492.png


目录
相关文章
|
测试技术 Shell 开发者
UVM与验证环境一文通
UVM与验证环境一文通
1295 0
|
6月前
|
存储 缓存 开发工具
Git stash命令的详细使用说明及案例分析。
通过上述案例,我们看到stash命令能够在不丢失进度的情况下,帮助开发者临时切换开发上下文,这在处理多个任务或紧急bug时特别有用。正确使用Git stash可以大大提高开发的灵活性和效率。
2104 0
|
11月前
|
监控 安全 Ubuntu
Ubuntu(22.04)云主机SSH安全加固
通过上述步骤,你可以有效地加固Ubuntu 22.04云主机的SSH安全性。这些措施不仅能防止常见的攻击,还能提升整体服务器的安全性和稳定性。建议在实施这些安全加固措施后,定期检查系统日志和更新安全策略,以应对不断变化的安全威胁。
751 14
|
存储 Java
|
网络协议 虚拟化 网络架构
VMware的三种连接模式
在学习网安的过程中,我们需要通过实战来模拟来练习我们的技术能力,而我们私人进行测试容易吃牢饭,不仅如此我们在学习过程中会使用到很多的操作系统,我们也不可能去买多台电脑来去使用,不太现实,我们为了避免这种情况,我们需要通过虚拟机来安装不同的系统来使用.本篇文章是对于虚拟机的三种链接方法进行详细的介绍,我对使用VMware虚拟机过程中在连接过程中遇了一些问题后,觉得需要对这方面的知识进行学习和总结,也是在学习中,之前的我对于实际操作的部分很熟练,但是对于理论方面的知识其实不是很了解,现在也是对我短板的一个弥补吧,收获满满.
|
SQL 前端开发 数据安全/隐私保护
若依框架---权限管理设计
若依框架---权限管理设计
1455 0
|
存储 前端开发 Linux
(上)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
(上)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
|
芯片
PCIe 均衡技术介绍(电气物理篇)
PCIe 均衡技术介绍(电气物理篇)
10405 0
PCIe 均衡技术介绍(电气物理篇)
|
编译器
【UVM避坑】记录 UVM / SV 使用过程中遇到的琐碎问题
【UVM避坑】记录 UVM / SV 使用过程中遇到的琐碎问题
2467 0
【UVM避坑】记录 UVM / SV 使用过程中遇到的琐碎问题

热门文章

最新文章