Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
79ecc7ea
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
9 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
提交
79ecc7ea
编写于
7月 17, 2021
作者:
L
Lingrui98
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[WIP] ftq: fit to flexible num redirect
上级
83aefafe
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
14 deletion
+18
-14
src/main/scala/xiangshan/decoupled-frontend/NewFtq.scala
src/main/scala/xiangshan/decoupled-frontend/NewFtq.scala
+18
-14
未找到文件。
src/main/scala/xiangshan/decoupled-frontend/NewFtq.scala
浏览文件 @
79ecc7ea
...
...
@@ -143,17 +143,21 @@ class FtqToIfuIO(implicit p: Parameters) extends XSBundle {
val
redirect
=
Valid
(
new
Redirect
)
}
class
FtqToCtrlIO
(
implicit
p
:
Parameters
)
extends
XSBundle
{
val
pc_reads
=
Vec
(
1
+
6
+
1
+
1
,
Flipped
(
new
FtqRead
(
UInt
(
VAddrBits
.
W
))))
trait
HasBackendRedirectInfo
extends
HasXSParameter
{
def
numRedirect
=
exuParameters
.
JmpCnt
+
exuParameters
.
AluCnt
+
1
}
class
FtqToCtrlIO
(
implicit
p
:
Parameters
)
extends
XSBundle
with
HasBackendRedirectInfo
{
val
pc_reads
=
Vec
(
1
+
numRedirect
+
1
+
1
,
Flipped
(
new
FtqRead
(
UInt
(
VAddrBits
.
W
))))
val
target_read
=
Flipped
(
new
FtqRead
(
UInt
(
VAddrBits
.
W
)))
val
cfi_reads
=
Vec
(
6
,
Flipped
(
new
FtqRead
(
new
CfiInfoToCtrl
)))
val
cfi_reads
=
Vec
(
numRedirect
,
Flipped
(
new
FtqRead
(
new
CfiInfoToCtrl
)))
def
getJumpPcRead
=
pc_reads
.
head
def
getRedirectPcRead
=
VecInit
(
pc_reads
.
tail
.
dropRight
(
2
))
def
getMemPredPcRead
=
pc_reads
.
dropRight
(
1
).
last
def
getRoqFlushPcRead
=
pc_reads
.
last
}
class
Ftq
(
implicit
p
:
Parameters
)
extends
XSModule
with
HasCircularQueuePtrHelper
{
class
Ftq
(
implicit
p
:
Parameters
)
extends
XSModule
with
HasCircularQueuePtrHelper
with
HasBackendRedirectInfo
{
val
io
=
IO
(
new
Bundle
{
val
fromBpu
=
Flipped
(
new
BpuToFtqIO
)
val
fromIfu
=
Flipped
(
new
IfuToFtqIO
)
...
...
@@ -185,14 +189,14 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
io
.
fromBpu
.
resp
.
ready
:=
validEntries
<
FtqSize
.
U
val
enq_fire
=
io
.
fromBpu
.
resp
.
fire
()
&&
!
backendFlush
&&
!
ifuFlush
val
ftq_pc_mem
=
Module
(
new
SyncDataModuleTemplate
(
new
Ftq_RF_Components
,
FtqSize
,
1
0
,
1
))
val
ftq_pc_mem
=
Module
(
new
SyncDataModuleTemplate
(
new
Ftq_RF_Components
,
FtqSize
,
1
+
numRedirect
+
2
+
1
,
1
))
ftq_pc_mem
.
io
.
wen
(
0
)
:=
enq_fire
ftq_pc_mem
.
io
.
waddr
(
0
)
:=
bpuPtr
.
value
ftq_pc_mem
.
io
.
wdata
(
0
).
startAddr
:=
io
.
fromBpu
.
resp
.
bits
.
pc
ftq_pc_mem
.
io
.
wdata
(
0
).
fallThruAddr
:=
io
.
fromBpu
.
resp
.
bits
.
ftb_entry
.
pftAddr
ftq_pc_mem
.
io
.
wdata
(
0
).
isNextMask
:=
VecInit
((
0
until
16
).
map
(
i
=>
(
io
.
fromBpu
.
resp
.
bits
.
pc
(
4
,
1
)
+&
i
.
U
)(
4
).
asBool
()))
val
ftq_hist_mem
=
Module
(
new
SyncDataModuleTemplate
(
new
GlobalHistory
,
FtqSize
,
7
,
1
))
val
ftq_hist_mem
=
Module
(
new
SyncDataModuleTemplate
(
new
GlobalHistory
,
FtqSize
,
numRedirect
+
1
,
1
))
ftq_hist_mem
.
io
.
wen
(
0
)
:=
enq_fire
ftq_hist_mem
.
io
.
waddr
(
0
)
:=
bpuPtr
.
value
ftq_hist_mem
.
io
.
wdata
(
0
)
:=
io
.
fromBpu
.
resp
.
bits
.
ghist
...
...
@@ -254,7 +258,7 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
val
pdWb
=
io
.
fromIfu
.
pdWb
val
ifu_wb_valid
=
pdWb
.
valid
// 0: commit, 1: cfiRead, 2-9: ftqRead, 10: ifuRead
val
ftq_pd_mem
=
Module
(
new
SyncDataModuleTemplate
(
new
Ftq_pd_Entry
,
FtqSize
,
7
,
1
))
val
ftq_pd_mem
=
Module
(
new
SyncDataModuleTemplate
(
new
Ftq_pd_Entry
,
FtqSize
,
numRedirect
+
1
,
1
))
ftq_pd_mem
.
io
.
wen
(
0
)
:=
ifu_wb_valid
ftq_pd_mem
.
io
.
waddr
(
0
)
:=
pdWb
.
bits
.
ftqIdx
.
value
val
pds
=
pdWb
.
bits
.
pd
...
...
@@ -291,7 +295,7 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
}
// read pc and target
ftq_pc_mem
.
io
.
raddr
(
9
)
:=
ifuPtr
.
value
ftq_pc_mem
.
io
.
raddr
.
last
:=
ifuPtr
.
value
pred_target_sram
.
io
.
raddr
(
0
)
:=
ifuPtr
.
value
pred_target_sram
.
io
.
ren
(
0
)
:=
to_buf_fire
...
...
@@ -300,8 +304,8 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
ifu_req_buf
.
bits
.
ftqOffset
:=
cfiIndex_vec
(
ifuPtr
.
value
)
}
when
(
RegNext
(
to_buf_fire
))
{
ifu_req_buf
.
bits
.
startAddr
:=
ftq_pc_mem
.
io
.
rdata
(
9
)
.
startAddr
ifu_req_buf
.
bits
.
fallThruAddr
:=
ftq_pc_mem
.
io
.
rdata
(
9
)
.
fallThruAddr
ifu_req_buf
.
bits
.
startAddr
:=
ftq_pc_mem
.
io
.
rdata
.
last
.
startAddr
ifu_req_buf
.
bits
.
fallThruAddr
:=
ftq_pc_mem
.
io
.
rdata
.
last
.
fallThruAddr
ifu_req_buf
.
bits
.
target
:=
pred_target_sram
.
io
.
rdata
(
0
)
}
...
...
@@ -310,10 +314,10 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
io
.
toIfu
.
req
.
bits
.
ftqIdx
:=
ifu_req_buf
.
bits
.
ftqIdx
io
.
toIfu
.
req
.
bits
.
ftqOffset
:=
ifu_req_buf
.
bits
.
ftqOffset
io
.
toIfu
.
req
.
bits
.
startAddr
:=
Mux
(
last_cycle_to_buf_fire
,
ftq_pc_mem
.
io
.
rdata
(
9
)
.
startAddr
,
ftq_pc_mem
.
io
.
rdata
.
last
.
startAddr
,
ifu_req_buf
.
bits
.
startAddr
)
io
.
toIfu
.
req
.
bits
.
fallThruAddr
:=
Mux
(
last_cycle_to_buf_fire
,
ftq_pc_mem
.
io
.
rdata
(
9
)
.
fallThruAddr
,
ftq_pc_mem
.
io
.
rdata
.
last
.
fallThruAddr
,
ifu_req_buf
.
bits
.
fallThruAddr
)
io
.
toIfu
.
req
.
bits
.
target
:=
Mux
(
last_cycle_to_buf_fire
,
pred_target_sram
.
io
.
rdata
(
0
),
...
...
@@ -371,8 +375,8 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
// TODO: assign redirect rdata to ifuRedirectToBpu
ftq_hist_mem
.
io
.
raddr
(
6
)
:=
fromIfuRedirect
.
bits
.
ftqIdx
.
value
ftq_pd_mem
.
io
.
raddr
(
6
)
:=
fromIfuRedirect
.
bits
.
ftqIdx
.
value
ftq_hist_mem
.
io
.
raddr
.
last
:=
fromIfuRedirect
.
bits
.
ftqIdx
.
value
ftq_pd_mem
.
io
.
raddr
.
last
:=
fromIfuRedirect
.
bits
.
ftqIdx
.
value
// *********************************************************************
// **************************** wb from exu ****************************
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录