https://mp.weixin.qq.com/s/zWW00D0fb8h7_TotGD9YoQ
 
介绍DefaultConfig类的组成。
 
 
1. DefaultConfig
 
DefaultConfig是Config的子类。其定义位于system/Config.scala:
 
他直接使用Config的第一个(primary)构造方法。在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
 
PS. 作为对比,找一个使用第二个(secondary)构造方法的子类:
 
在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
注意光标位置的不同。
 
DefaultConfig 由WithNBigCores和BaseConfig连接组成。++使用的是Parameters类中定义的方法,他把两个Parameters对象组合成为一个ChainParameters对象:
 
 
2. WithNBigCores
 
表示大核的个数及每个核的配置。
 
1) 配置项存储在PartialParameters中,需要动态匹配才能获取到;
2) 只包含一个配置项,其key为RocketTilesKey,继承在Field:
3) 配置项的值是一个RocketTileParams链表。我们把最后一行稍微改一下:
把光标定位到_ret上,使用Alt+Enter快捷键看Intellij IDEA有没有操作提示:
Enter键选择“Add type annotation to value definition”:
可以看到返回值类型为Seq[RocketTileParams]。这是一个小技巧。
 
4) 其中使用site(SystemBusKey)获取系统总线的配置值。
 
 
3. BaseConfig
 
其定义形式与DefaultConfig一致,多个Config组合成为一个BaseConfig。
 
 
4. 构造过程
 
整理一下DefaultConfig实例化的过程。
 
new DefaultConfig
1) 首先会调用其父类的构造方法;若要调用其父类的构造方法,则需要为之准备参数:
也就是创建Parameters p, p = new WithNBigCores(1) ++ new BaseConfig
 
2) 分别实例化WithNBigCores和BaseConfig;
 
3) 把WithNBigCores和BaseConfig的实例使用方法++组合到一起;
 
4) 调用Config的构造方法,产生DefaultConfig的实例;
 
最终构造的结果如下图:
其中,BaseConfig中只保留了最前面的两项配置。
 
 
5. 查找过程
 
假设有一个DefaultConfig的实例dftCfgInst,dftCfgInst(RocketTilesKey)的查找过程如下:
 
1) dftCfgInst(RocketTilesKey)调用的是View中的方法:
 
2) View.apply(pname)调用View.apply(pname, this);
 
3) View.apply(pname, this)调用find(pname, site);注意这里的site为this,也就是dftCfgInst对象本身;
 
4) find(pname, site)在Parameters中实现为:
所以调用chain(site, new TerminalView, pname),其中site为dftCfgInst;
 
5) chain(site, new TerminalView, pname)在Config中实现为:
委托给p的chain方法。
 
6) 这里dftCfgInst的p为ChainParameters,其chain方法定义为:
委托给x的chain方法;
 
7) 这里的x为WithNBigCores,是一个Config对象。如前所述,其chain委托给p.chain。这里的p为PartialParameters;
 
8) PartialParameters的实现如下:
在这里可以找到RocketTilesKey,也就是g.isDefaultAt(pname)返回真。
 
整理成表格如下:
 

转载于:https://www.cnblogs.com/wjcdx/p/10327359.html

Rocket - config - DefaultConfig相关推荐

  1. Rocket之加速器

    文章目录 RoCC简介 riscv-tools pk 加速器 fpga-zynq 测试 测试样例 测试结果 参考文献 RoCC简介 Rocket Custom Coprocessor riscv-to ...

  2. 基于px2rpx-loader,探讨一下loader的封装思想

    本文以px2rpx-loader的源码为学习对象,了解其工作机制以及loader封装的思想. 1.前言 最近在了解mpvue框架的时候,对于其能够实现一套代码兼容web和微信小程序(以下简称小程序)的 ...

  3. xmpp协议抓包_开源网络抓包与分析框架学习-Packetbeat篇

    开源简介 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使 ...

  4. c3p0数据库连接池+mysql数据库基本使用方法

           一般我们在项目中操作数据库时,都是每次需要操作数据库就建立一个连接,操作完成后释放连接.因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒), 连接就会被自动释放掉. ...

  5. 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27

    当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27 前言 TypeScript is a typed superset of JavaScript that compiles to pla ...

  6. 原生node写一个静态资源服务器

    myanywhere 用原生node做一个简易阉割版的anywhere静态资源服务器,以提升对node与http的理解. 相关知识 es6及es7语法 http的相关网络知识 响应头 缓存相关 压缩相 ...

  7. 在线直播源码评论弹幕是如何“练”成的?

    在线直播源码评论弹幕是如何"练"成的? 提起弹幕(dànmù),大家都会想到「视频弹幕」.视频弹幕是指网友们在观看视频的同时参与评论,即所谓"即时反馈", 评论 ...

  8. NodeJS 创建静态资源服务器

    最近,学习了一下 NodeJS 自己研究了一个静态资源服务器写的不好,希望高手多多指教 目录结构 文件详解 .gitignore 文件 这个文件主要是我们将本地项目上传到 GitHub 上时,忽略的文 ...

  9. 【笔记-node】《imooc-nodejs入门到企业web开发中的应用》

    目录 课程名 备注 入门必学 nodejs入门到企业web开发中的应用 框架与工具 node.js+koa2+mysql打造前后端分离精品项目<旧岛> 项目实战 20190317-2020 ...

最新文章

  1. 梯度下降回归SGDRegressor、岭回归(Ridge)和套索(Lasso)回归、套索最小角回归、ElasticNet回归、正交匹配追踪回归
  2. oracle中怎么查看存储过程的源码
  3. python访问memcached
  4. 我用Python爬虫挣钱的那些事
  5. 引入静态变量_Common Lisp变量的一些事情
  6. ASP.NET服务器控件刷新后仍旧保持滚动位置
  7. 赛锐信息:PM模块的几点看法
  8. C#如何让Listbox支持多选
  9. 在Mac OS X下编译 boost|building boost library under mac os x
  10. 机器学习傻瓜的深入研究
  11. WIN10不显示sql2005服务器,win10系统安装sql2005 sql服务无法启动的解决方法
  12. VBA 如何多条件查询汇总
  13. PyCharm常用配置和常用插件
  14. CPU频率和单位换算
  15. 计算机中1kb等于多少字节,在计算机中1kb等于多少字节
  16. 一些常用网站的总结与分享
  17. 如何下载哔哩哔哩(bilibili)网页端视频
  18. ssh_exchange_identification read Connection reset by peer
  19. 免授权采集海天注塑机采集伊之密注塑机监控住友注塑机参数采集
  20. 优秀网页翻译:高精度 10MHz GPS 驯服钟 (GPSDO) - Part 5

热门文章

  1. Jquery常用方法合集,超实用
  2. 1.24 Java周末总结 ①乘法数据的溢出 ②测试random随机数几率是否相等 ③判断字符串是否为纯数字...
  3. Android 升级JDK及配置问题。
  4. Myeclipse7.X和8.X汉化
  5. liunx trac 插件使用之GanttCalendarPlugin
  6. #!/usr/bin/env python作用
  7. ROS学习笔记一(ROS的catkin工作空间)
  8. IOS第五天(2:用户登录,回车的监听(代理模式UITextFieldDelegate)) 和关闭键盘
  9. 【javascript】简单原型链、借用构造函数
  10. 【语言处理与Python】4.7算法设计