Rocket

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

 

简单介绍TLDebugModuleInner中HALTSUM寄存器的实现。

 

 

1. numHaltedStatus

 

为了记录每个核心的暂停状态,需要的宽度为32位的窗口数:

 

numHaltedStatus = (nComponents + 31) / 32

= (nComponents - 1 + 32) / 32

= (nComponents - 1) / 32 + 1

 

当前实现最多只支持1024个核心,所以numHaltedStatus的最大值为32.

 

2. haltedStatus

 

单个元素为32位宽度的向量,每个元素表示32个核心的暂停状态:

 

3. haltedSummary

 

计算每32个核心中是否有核心暂停,即暂停摘要信息:

 

4. HALTSUM1RdData

 

HALTSUM1RdData是读取HALTSUM1寄存器时使用的数据源。

 

HALTSUM1以hartsel高10位选择一个窗口,低5位选择一个比特,该比特代表最低5位表示的32个核心中是否有核心暂停。

因为当前实现只支持1024个核心,所以高10位实际上可以认为一直是0。也就是不需要再对haltedSumary做截取,而可以直接作为HALTSUM1使用:

 

5. selectedHaltedStatus

 

根据hartsel的值,从haltedStatus中选择一个32位窗口使用:

 

6. HALTSUM0RdData

 

HALTSUM0RdData是读取HALTSUM0寄存器时使用的数据源。

 

HALTSUM0以hartsel的高15位选择一个窗口,低5位选择一个比特,每个比特代表一个核心是否暂停。

 

这里选择的窗口就是selectedHaltedStatus:

 

7. HALTSUM2/HALTSUM3

 

不支持:

             

 

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