首页 > 其他 > 详细

Rocket - tile - FPU

时间:2020-07-12 09:21:03      阅读:61      评论:0      收藏:0      [点我收藏+]

https://mp.weixin.qq.com/s/uy1U107isVojezdcyvhH9Q

 

简单介绍FPU相关的代码概要。目前主要处理较高层次上的模块关系,暂时不涉及具体模块逻辑的实现。

 

技术分享图片

 

1. FPUParams/FPConstants

 

定义FPU相关的参数和常量:

技术分享图片

暂时不涉及具体参数的含义。

 

2. HasFPUCtrlSigs

 

这是一个特征(trait),定义了解码FPU指令产生的相关信号:

技术分享图片

 

3. FPUCtrlSigs

 

HasFPUCtrlSigs本身不可以实例化,FPUCtrlSigs作为类引入(mix-in)了HasFPUCtrlSigs,从而可以实例化,进而产生相关的解码信号:

技术分享图片

 

4. FPUDecoder

 

FPUDecoder是FPU指令的解码器:

技术分享图片

 

1) io

 

定义解码器的输入输出端口:

技术分享图片

其中:

a. inst:输入的32位指令;

b. sigs:输出的解码信号;

c. 需要注意的是,这里并没有使用IO(...)包裹。也就是说,虽然名字为io,却并不会为之做模块IO相关的处理;

 

2) default

 

默认的解码信号值:

技术分享图片

 

3) f

 

定义float相关的指令的解码信号值:

技术分享图片

List中信号的顺序,与HasFPUCtrlSigs中定义的信号顺序一致。

 

4) d

 

定义double相关指令的解码信号值:

技术分享图片

List中信号的顺序,与HasFPUCtrlSigs中定义的信号顺序一致。

 

5) insns

 

根据fLen是32位还是64位来确定是否支持double相关的指令:

技术分享图片

 

6) decoder

 

decoder是解码出来的信号:

技术分享图片

 

7) sigs

 

技术分享图片

其中:

a. s是io.sigs的引用,就是写代码的时候简单一些,并不存在逻辑结构上的连接;

b. sigs是把s中的信号成员按顺序逐个取出组成列表;

c. 然后与decoder也就是解码出来的信号,按顺序逐个连接到一起;

d. 从而使得解码信号从io.sigs中输出;

 

5. FPUCoreIO

 

定义FPU与核心之间的接口:

技术分享图片

 

6. FPUIO

 

定义FP请求和响应结果:

技术分享图片

其中:

a. FPInput是请求输入:

技术分享图片

b. FPResult是响应结果输出:

技术分享图片

 

7. FType

 

定义浮点类型相关的参数及方法:

技术分享图片

 

object FType中定义浮点类型相关的常量:

技术分享图片

 

8. HasFPUParameters

 

定义FPU相关参数:

技术分享图片

 

9. FPUModule

 

定义浮点模块的抽象父类,引入了浮点模块相关的参数,简化子类实现:

技术分享图片

 

10. FPToInt/IntToFP/FPToFP

 

定义浮点转整型、整型转浮点、浮点转浮点功能模块:

技术分享图片

 

11. MulAddRecFNPipe/FPUFMAPipe

 

定义两个流水线用于计算:

技术分享图片

 

12. FPU

 

把多个模块组合到一起,实现FPU的功能:

技术分享图片             

Rocket - tile - FPU

原文:https://www.cnblogs.com/wjcdx/p/13287006.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!