Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
75bed0b8
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
11 个月 前同步成功
通知
1183
Star
3914
Fork
526
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
XiangShan
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
75bed0b8
编写于
11月 27, 2020
作者:
L
Lingrui98
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ifu: modify mask computing functions, first step of refactoring
THIS COMMIT DOES NOT WORK!
上级
669b61ef
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
18 addition
and
3 deletion
+18
-3
src/main/scala/xiangshan/frontend/IFU.scala
src/main/scala/xiangshan/frontend/IFU.scala
+18
-3
未找到文件。
src/main/scala/xiangshan/frontend/IFU.scala
浏览文件 @
75bed0b8
...
...
@@ -9,10 +9,25 @@ import xiangshan.cache._
trait
HasIFUConst
{
this:
XSModule
=>
val
resetVector
=
0x80000000
L
//TODO: set reset vec
val
groupAlign
=
log2Up
(
FetchWidth
*
4
*
2
)
def
groupPC
(
pc
:
UInt
)
:
UInt
=
Cat
(
pc
(
VAddrBits
-
1
,
groupAlign
),
0.
U
(
groupAlign
.
W
))
def
align
(
pc
:
UInt
,
bytes
:
Int
)
:
UInt
=
Cat
(
pc
(
VAddrBits
-
1
,
log2Ceil
(
bytes
)),
0.
U
(
log2Ceil
(
bytes
).
W
))
val
groupBytes
=
FetchWidth
*
4
*
2
// correspond to cache line size
val
groupOffsetBits
=
log2Ceil
(
groupBytes
)
val
nBanks
=
4
val
bankBytes
=
PredictWidth
val
bankWidth
=
bankBytes
/
2
val
bankOffsetBits
=
log2Ceil
(
bankBytes
)
// (0, nBanks-1)
def
bankInGroup
(
pc
:
UInt
)
=
pc
(
groupOffsetBits
-
1
,
bankOffsetBits
)
def
isInLastBank
(
pc
:
UInt
)
=
bankInGroup
(
pc
)
===
(
nBanks
-
1
).
U
// (0, bankBytes/2-1)
def
offsetInBank
(
pc
:
UInt
)
=
pc
(
bankOffsetBits
-
1
,
1
)
def
bankAligned
(
pc
:
UInt
)
=
align
(
pc
,
bankBytes
)
def
groupAligned
(
pc
:
UInt
)
=
align
(
pc
,
groupBytes
)
// each 1 bit in mask stands for 2 Bytes
def
mask
(
pc
:
UInt
)
:
UInt
=
(
Fill
(
PredictWidth
*
2
,
1.
U
(
1.
W
))
>>
pc
(
groupAlign
-
1
,
1
))(
PredictWidth
-
1
,
0
)
// 8 bits, in which only the first 7 bits could be 0
def
maskFirstHalf
(
pc
:
UInt
)
:
UInt
=
((~(
0.
U
(
bankWidth
.
W
)))
>>
offsetInBank
(
pc
))(
bankWidth
-
1
,
0
)
def
maskLastHalf
(
pc
:
UInt
)
:
UInt
=
Mux
(
isInLastBank
,
0.
U
(
bankWidth
.
W
),
~
0.
U
(
bankWidth
.
W
))
def
mask
(
pc
:
UInt
)
:
UInt
=
Cat
(
maskFirstHalf
(
pc
),
maskLastHalf
(
pc
))
def
snpc
(
pc
:
UInt
)
:
UInt
=
pc
+
(
PopCount
(
mask
(
pc
))
<<
1
)
val
IFUDebug
=
true
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录