Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
f36655eb
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,发现更多精彩内容 >>
提交
f36655eb
编写于
7月 13, 2020
作者:
Z
zhanglinjuan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
btb: add read and write bypass
上级
2445e0c0
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
25 addition
and
5 deletion
+25
-5
src/main/scala/xiangshan/frontend/BPU.scala
src/main/scala/xiangshan/frontend/BPU.scala
+9
-5
src/main/scala/xiangshan/frontend/btb.scala
src/main/scala/xiangshan/frontend/btb.scala
+16
-0
未找到文件。
src/main/scala/xiangshan/frontend/BPU.scala
浏览文件 @
f36655eb
...
...
@@ -210,8 +210,10 @@ class BPUStage2 extends XSModule {
val
inLatch
=
RegInit
(
0.
U
.
asTypeOf
(
io
.
in
.
bits
))
when
(
io
.
in
.
fire
())
{
inLatch
:=
io
.
in
.
bits
}
val
validLatch
=
RegInit
(
false
.
B
)
when
(
io
.
in
.
fire
())
{
validLatch
:=
!
io
.
flush
when
(
io
.
flush
)
{
validLatch
:=
false
.
B
}.
elsewhen
(
io
.
in
.
fire
())
{
validLatch
:=
true
.
B
}.
elsewhen
(
io
.
out
.
fire
())
{
validLatch
:=
false
.
B
}
...
...
@@ -249,12 +251,14 @@ class BPUStage3 extends XSModule {
val
inLatch
=
RegInit
(
0.
U
.
asTypeOf
(
io
.
in
.
bits
))
val
validLatch
=
RegInit
(
false
.
B
)
when
(
io
.
in
.
fire
())
{
inLatch
:=
io
.
in
.
bits
}
when
(
io
.
in
.
fire
())
{
validLatch
:=
!
io
.
flush
when
(
io
.
flush
)
{
validLatch
:=
false
.
B
}.
elsewhen
(
io
.
in
.
fire
())
{
validLatch
:=
true
.
B
}.
elsewhen
(
io
.
out
.
valid
)
{
validLatch
:=
false
.
B
}
io
.
out
.
valid
:=
validLatch
&&
io
.
predecode
.
valid
&&
!
flushS3
io
.
out
.
valid
:=
validLatch
&&
io
.
predecode
.
valid
&&
!
flushS3
&&
!
io
.
flush
io
.
in
.
ready
:=
!
validLatch
||
io
.
out
.
valid
// RAS
...
...
src/main/scala/xiangshan/frontend/btb.scala
浏览文件 @
f36655eb
...
...
@@ -201,6 +201,8 @@ class BTB extends XSModule {
btbData
(
w
)(
b
).
io
.
w
.
req
.
bits
.
setIdx
:=
updateBankIdx
btbData
(
w
)(
b
).
io
.
w
.
req
.
bits
.
waymask
.
map
(
_
:=
updateWaymask
)
btbData
(
w
)(
b
).
io
.
w
.
req
.
bits
.
data
:=
btbDataWrite
XSDebug
(
btbWriteValid
,
"write btb: setIdx=%x meta.tag=%x updateWaymask=%d target=%x _type=%b predCtr=%b\n"
,
updateBankIdx
,
btbMetaWrite
.
tag
,
updateWaymask
,
btbDataWrite
.
target
,
btbDataWrite
.
_type
,
btbDataWrite
.
pred
)
}.
otherwise
{
btbMeta
(
w
)(
b
).
io
.
w
.
req
.
valid
:=
false
.
B
btbMeta
(
w
)(
b
).
io
.
w
.
req
.
bits
.
setIdx
:=
DontCare
...
...
@@ -213,6 +215,20 @@ class BTB extends XSModule {
}
}
// write and read bypass
for
(
w
<-
0
until
BtbWays
)
{
for
(
b
<-
0
until
BtbBanks
)
{
when
(
RegNext
(
updateBank
)
===
btbAddr
.
getBank
(
io
.
in
.
pcLatch
)
&&
RegNext
(
updateBankIdx
)
===
btbAddr
.
getBankIdx
(
io
.
in
.
pcLatch
))
{
when
(
RegNext
(
btbWriteValid
&&
io
.
in
.
pc
.
valid
)
&&
w
.
U
===
RegNext
(
u
.
writeWay
)
&&
b
.
U
===
RegNext
(
updateBank
))
{
metaRead
(
u
.
writeWay
)
:=
RegNext
(
btbMetaWrite
)
(
0
until
FetchWidth
).
map
(
i
=>
dataRead
(
RegNext
(
u
.
writeWay
))(
i
.
U
)
:=
Mux
(
RegNext
(
updateWaymask
(
i
)),
RegNext
(
btbDataWrite
),
btbData
(
w
)(
b
).
io
.
r
.
resp
.
data
(
i
)))
XSDebug
(
true
.
B
,
"BTB write & read bypass hit!\n"
)
}
}
}
}
io
.
out
.
hit
:=
hit
io
.
out
.
taken
:=
isTaken
io
.
out
.
takenIdx
:=
takenIdx
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录