Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
6c8433d9
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,发现更多精彩内容 >>
提交
6c8433d9
编写于
11月 23, 2020
作者:
L
Lingrui98
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tage: use regs for hi&lo
上级
8baeaa1d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
11 deletion
+41
-11
src/main/scala/xiangshan/frontend/Tage.scala
src/main/scala/xiangshan/frontend/Tage.scala
+41
-11
未找到文件。
src/main/scala/xiangshan/frontend/Tage.scala
浏览文件 @
6c8433d9
...
...
@@ -132,8 +132,34 @@ class TageTable(val nRows: Int, val histLen: Int, val tagLen: Int, val uBitPerio
val
idxLatch
=
RegEnable
(
idx
,
enable
=
io
.
req
.
valid
)
val
tagLatch
=
RegEnable
(
tag
,
enable
=
io
.
req
.
valid
)
val
hi_us
=
List
.
fill
(
TageBanks
)(
Module
(
new
SRAMTemplate
(
Bool
(),
set
=
nRows
,
shouldReset
=
false
,
holdRead
=
true
,
singlePort
=
false
)))
val
lo_us
=
List
.
fill
(
TageBanks
)(
Module
(
new
SRAMTemplate
(
Bool
(),
set
=
nRows
,
shouldReset
=
false
,
holdRead
=
true
,
singlePort
=
false
)))
class
HL_Bank
(
val
nRows
:
Int
=
nRows
)
extends
TageModule
{
val
io
=
IO
(
new
Bundle
{
val
r
=
new
Bundle
{
val
req
=
Flipped
(
ValidIO
(
new
Bundle
{
val
setIdx
=
UInt
(
log2Ceil
(
nRows
).
W
)
}))
val
resp
=
new
Bundle
{
val
data
=
Output
(
Bool
())
}
}
val
w
=
new
Bundle
{
val
req
=
Flipped
(
ValidIO
(
new
Bundle
{
val
setIdx
=
UInt
(
log2Ceil
(
nRows
).
W
)
val
data
=
Bool
()
}))
}
})
val
mem
=
Mem
(
nRows
,
Bool
())
// 1-cycle latency just as SyncReadMem
io
.
r
.
resp
.
data
:=
RegEnable
(
mem
.
read
(
io
.
r
.
req
.
bits
.
setIdx
),
enable
=
io
.
r
.
req
.
valid
)
when
(
io
.
w
.
req
.
valid
)
{
mem
.
write
(
io
.
w
.
req
.
bits
.
setIdx
,
io
.
w
.
req
.
bits
.
data
)
}
}
val
hi_us
=
List
.
fill
(
TageBanks
)(
Module
(
new
HL_Bank
(
nRows
)))
val
lo_us
=
List
.
fill
(
TageBanks
)(
Module
(
new
HL_Bank
(
nRows
)))
val
table
=
List
.
fill
(
TageBanks
)(
Module
(
new
SRAMTemplate
(
new
TageEntry
,
set
=
nRows
,
shouldReset
=
false
,
holdRead
=
true
,
singlePort
=
false
)))
val
hi_us_r
=
WireInit
(
0.
U
.
asTypeOf
(
Vec
(
TageBanks
,
Bool
())))
...
...
@@ -148,18 +174,22 @@ class TageTable(val nRows: Int, val histLen: Int, val tagLen: Int, val uBitPerio
val
realMask
=
circularShiftLeft
(
io
.
req
.
bits
.
mask
,
TageBanks
,
baseBank
)
val
maskLatch
=
RegEnable
(
io
.
req
.
bits
.
mask
,
enable
=
io
.
req
.
valid
)
(
0
until
TageBanks
).
map
(
b
=>
{
Seq
(
hi_us
,
lo_us
,
table
).
map
(
t
=>
{
t
(
b
).
reset
:=
reset
.
asBool
t
(
b
).
io
.
r
.
req
.
valid
:=
io
.
req
.
valid
&&
realMask
(
b
)
t
(
b
).
io
.
r
.
req
.
bits
.
setIdx
:=
idx
}
)
hi_us
(
b
).
io
.
r
.
req
.
valid
:=
io
.
req
.
valid
&&
realMask
(
b
)
hi_us
(
b
).
io
.
r
.
req
.
bits
.
setIdx
:=
idx
lo_us
(
b
).
io
.
r
.
req
.
valid
:=
io
.
req
.
valid
&&
realMask
(
b
)
lo_us
(
b
).
io
.
r
.
req
.
bits
.
setIdx
:=
idx
table
(
b
).
reset
:=
reset
.
asBool
table
(
b
).
io
.
r
.
req
.
valid
:=
io
.
req
.
valid
&&
realMask
(
b
)
table
(
b
).
io
.
r
.
req
.
bits
.
setIdx
:=
idx
hi_us_r
(
b
)
:=
hi_us
(
b
).
io
.
r
.
resp
.
data
(
0
)
lo_us_r
(
b
)
:=
lo_us
(
b
).
io
.
r
.
resp
.
data
(
0
)
hi_us_r
(
b
)
:=
hi_us
(
b
).
io
.
r
.
resp
.
data
lo_us_r
(
b
)
:=
lo_us
(
b
).
io
.
r
.
resp
.
data
table_r
(
b
)
:=
table
(
b
).
io
.
r
.
resp
.
data
(
0
)
}
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录