Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
9b79e03f
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,发现更多精彩内容 >>
提交
9b79e03f
编写于
1月 22, 2021
作者:
B
BigWhiteDog
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
load omit conficted bytes check
when stores in flight
上级
11f61932
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
17 addition
and
1 deletion
+17
-1
src/test/scala/cache/L1DTest/CoreAgent.scala
src/test/scala/cache/L1DTest/CoreAgent.scala
+13
-1
src/test/scala/cache/TLCTest/TLCAgent.scala
src/test/scala/cache/TLCTest/TLCAgent.scala
+4
-0
未找到文件。
src/test/scala/cache/L1DTest/CoreAgent.scala
浏览文件 @
9b79e03f
...
...
@@ -6,6 +6,7 @@ import chipsalliance.rocketchip.config.Parameters
import
scala.collection.mutable
import
scala.collection.mutable.
{
ArrayBuffer
,
ListBuffer
}
//!!! for coreAgent, load resp must be fired before store resp
class
CoreAgent
(
ID
:
Int
,
name
:
String
,
addrStateMap
:
mutable.Map
[
BigInt
,
AddrState
],
serialList
:
ArrayBuffer
[(
Int
,
TLCTrans
)]
,
scoreboard
:
mutable.Map
[
BigInt
,
ScoreboardData
],
portNum
:
Int
=
2
)
(
implicit
p
:
Parameters
)
extends
TLCAgent
(
ID
,
name
,
addrStateMap
,
serialList
,
scoreboard
)
with
LitMemOp
{
...
...
@@ -68,7 +69,18 @@ class CoreAgent(ID: Int, name: String, addrStateMap: mutable.Map[BigInt, AddrSta
val
loadAddr
=
loadT
.
req
.
get
.
addr
loadT
.
pairLoadResp
(
resp
)
if
(!
resp
.
miss
)
{
insertMaskedWordRead
(
loadAddr
,
resp
.
data
,
loadT
.
req
.
get
.
mask
)
//search store list for addr conflict
val
alignLoadAddr
=
addrAlignBlock
(
loadAddr
)
val
conflictMask
=
storeIdMap
.
foldLeft
(
BigInt
(
0
))((
b
,
kv
)
=>
if
(
kv
.
_2
.
req
.
get
.
addr
==
alignLoadAddr
)
{
b
|
kv
.
_2
.
req
.
get
.
mask
}
else
b
)
val
conflictWordMask
=
maskOutOfWord
(
conflictMask
,
wordInBlock
(
loadAddr
))
val
newMask
=
(
loadT
.
req
.
get
.
mask
|
conflictWordMask
)
^
conflictWordMask
insertMaskedWordRead
(
loadAddr
,
resp
.
data
,
newMask
)
outerLoad
-=
loadT
}
else
if
(
resp
.
replay
)
{
...
...
src/test/scala/cache/TLCTest/TLCAgent.scala
浏览文件 @
9b79e03f
...
...
@@ -226,6 +226,10 @@ class TLCAgent(ID: Int, name: String = "", addrStateMap: mutable.Map[BigInt, Add
oldMask
|
(
inMask
<<
(
cnt
*
wordBytes
))
}
def
maskOutOfWord
(
mask
:
BigInt
,
cnt
:
Int
)
:
BigInt
=
{
mask
>>
(
cnt
*
wordBytes
)
}
def
beatInBlock
(
addr
:
BigInt
)
:
Int
=
{
((
addr
&
offsetMask
)
>>
beatAddrBits
).
toInt
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录