Rocket

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的功能:

             

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