Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
fce198d6
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
fce198d6
编写于
12月 09, 2020
作者:
L
Lingrui98
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ifu: collect target at each stage
上级
eb44bcea
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
22 deletion
+29
-22
src/main/scala/xiangshan/frontend/IFU.scala
src/main/scala/xiangshan/frontend/IFU.scala
+29
-22
未找到文件。
src/main/scala/xiangshan/frontend/IFU.scala
浏览文件 @
fce198d6
...
...
@@ -36,7 +36,7 @@ trait HasIFUConst extends HasXSParameter {
def
mask
(
pc
:
UInt
,
inLoop
:
Bool
=
false
.
B
)
:
UInt
=
Reverse
(
Cat
(
maskFirstHalf
(
pc
),
maskLastHalf
(
pc
,
inLoop
)))
def
snpc
(
pc
:
UInt
,
inLoop
:
Bool
=
false
.
B
)
:
UInt
=
pc
+
(
PopCount
(
mask
(
pc
,
inLoop
))
<<
1
)
val
enableGhistRepair
=
fals
e
val
enableGhistRepair
=
tru
e
val
IFUDebug
=
true
}
...
...
@@ -251,20 +251,24 @@ class IFU extends XSModule with HasIFUConst
// GHInfo from last pred does not corresponds with this packet
if3_ghInfoNotIdenticalRedirect
)
val
if3_target
=
WireInit
(
snpc
(
if3_pc
))
/* when (prevHalfMetRedirect) {
if1_npc := if3_prevHalfInstr.target
}.else */
when
(
if3_prevHalfNotMetRedirect
)
{
if3_target
:=
if3_prevHalfInstr
.
pc
+
2.
U
}.
elsewhen
(
if3_predTakenRedirect
)
{
if3_target
:=
if3_bp
.
target
}.
elsewhen
(
if3_predNotTakenRedirect
)
{
if3_target
:=
snpc
(
if3_pc
)
}.
elsewhen
(
if3_ghInfoNotIdenticalRedirect
)
{
if3_target
:=
Mux
(
if3_bp
.
taken
,
if3_bp
.
target
,
snpc
(
if3_pc
))
}
when
(
if3_redirect
)
{
/* when (prevHalfMetRedirect) {
if1_npc := if3_prevHalfInstr.target
}.else */
when
(
if3_prevHalfNotMetRedirect
)
{
if1_npc
:=
if3_prevHalfInstr
.
pc
+
2.
U
}.
elsewhen
(
if3_predTakenRedirect
)
{
if1_npc
:=
if3_bp
.
target
}.
elsewhen
(
if3_predNotTakenRedirect
)
{
if1_npc
:=
snpc
(
if3_pc
)
}.
elsewhen
(
if3_ghInfoNotIdenticalRedirect
)
{
if1_npc
:=
Mux
(
if3_bp
.
taken
,
if3_bp
.
target
,
snpc
(
if3_pc
))
}
if1_npc
:=
if3_target
val
if3_newPtr
=
if3_GHInfo
.
newPtr
()
updatePtr
:=
true
.
B
newPtr
:=
if3_newPtr
...
...
@@ -366,16 +370,19 @@ class IFU extends XSModule with HasIFUConst
if4_ghInfoNotIdenticalRedirect
)
val
if4_target
=
WireInit
(
if4_snpc
)
when
(
if4_prevHalfNextNotMet
)
{
if4_target
:=
prevHalfInstrReq
.
pc
+
2.
U
}.
elsewhen
(
if4_predTakenRedirect
)
{
if4_target
:=
if4_bp
.
target
}.
elsewhen
(
if4_predNotTakenRedirect
)
{
if4_target
:=
if4_snpc
}.
elsewhen
(
if4_ghInfoNotIdenticalRedirect
)
{
if4_target
:=
Mux
(
if4_bp
.
taken
,
if4_bp
.
target
,
if4_snpc
)
}
when
(
if4_redirect
)
{
when
(
if4_prevHalfNextNotMet
)
{
if1_npc
:=
prevHalfInstrReq
.
pc
+
2.
U
}.
elsewhen
(
if4_predTakenRedirect
)
{
if1_npc
:=
if4_bp
.
target
}.
elsewhen
(
if4_predNotTakenRedirect
)
{
if1_npc
:=
if4_snpc
}.
elsewhen
(
if4_ghInfoNotIdenticalRedirect
)
{
if1_npc
:=
Mux
(
if4_bp
.
taken
,
if4_bp
.
target
,
if4_snpc
)
}
if1_npc
:=
if4_target
val
if4_newPtr
=
if4_GHInfo
.
newPtr
()
updatePtr
:=
true
.
B
newPtr
:=
if4_newPtr
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录