Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
25cb35b6
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 搜索 >>
未验证
提交
25cb35b6
编写于
1月 28, 2022
作者:
J
Jiawei Lin
提交者:
GitHub
1月 28, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Adjusted reset signals (#1441)
* Adjusted reset signals * Support reset tree
上级
00240ba6
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
77 addition
and
33 deletion
+77
-33
huancun
huancun
+1
-1
src/main/scala/top/Configs.scala
src/main/scala/top/Configs.scala
+4
-2
src/main/scala/top/Top.scala
src/main/scala/top/Top.scala
+2
-6
src/main/scala/utils/ResetGen.scala
src/main/scala/utils/ResetGen.scala
+23
-0
src/main/scala/xiangshan/XSCore.scala
src/main/scala/xiangshan/XSCore.scala
+30
-13
src/main/scala/xiangshan/XSTile.scala
src/main/scala/xiangshan/XSTile.scala
+17
-11
未找到文件。
huancun
@
3df11606
比较
f985e61b
...
3df11606
Subproject commit
f985e61b162ed4d0ed61f56dae2dc0cf8c79b7d2
Subproject commit
3df11606fa9243308802b829a0ea6434eb51fd61
src/main/scala/top/Configs.scala
浏览文件 @
25cb35b6
...
...
@@ -231,7 +231,8 @@ class WithNKBL2
enablePerf
=
true
,
sramDepthDiv
=
2
,
tagECC
=
Some
(
"secded"
),
dataECC
=
Some
(
"secded"
)
dataECC
=
Some
(
"secded"
),
simulation
=
!
site
(
DebugOptionsKey
).
FPGAPlatform
)),
L2NBanks
=
banks
))
...
...
@@ -264,7 +265,8 @@ class WithNKBL3(n: Int, ways: Int = 8, inclusive: Boolean = true, banks: Int = 1
sramClkDivBy2
=
true
,
sramDepthDiv
=
4
,
tagECC
=
Some
(
"secded"
),
dataECC
=
Some
(
"secded"
)
dataECC
=
Some
(
"secded"
),
simulation
=
!
site
(
DebugOptionsKey
).
FPGAPlatform
))
)
})
...
...
src/main/scala/top/Top.scala
浏览文件 @
25cb35b6
...
...
@@ -191,12 +191,8 @@ class XSTop()(implicit p: Parameters) extends BaseXSSoc() with HasSoCParameter
withClockAndReset
(
io
.
clock
.
asClock
,
io
.
reset
)
{
// Modules are reset one by one
// reset ----> SYNC --> {L3 Cache, Cores}
// |
// v
// misc
val
l3cacheMod
=
if
(
l3cacheOpt
.
isDefined
)
Seq
(
l3cacheOpt
.
get
.
module
)
else
Seq
()
val
resetChain
=
Seq
(
l3cacheMod
++
core_with_l2
.
map
(
_
.
module
))
// reset ----> SYNC --> {SoCMisc, L3 Cache, Cores}
val
resetChain
=
Seq
(
Seq
(
misc
.
module
)
++
l3cacheOpt
.
map
(
_
.
module
)
++
core_with_l2
.
map
(
_
.
module
))
ResetGen
(
resetChain
,
io
.
reset
,
!
debugOpts
.
FPGAPlatform
)
}
...
...
src/main/scala/utils/ResetGen.scala
浏览文件 @
25cb35b6
...
...
@@ -27,7 +27,30 @@ class ResetGen extends Module {
io
.
out
:=
RegNext
(
RegNext
(
reset
.
asBool
))
}
trait
ResetNode
case
class
ModuleNode
(
mod
:
MultiIOModule
)
extends
ResetNode
case
class
ResetGenNode
(
children
:
Seq
[
ResetNode
])
extends
ResetNode
object
ResetGen
{
def
apply
(
resetTree
:
ResetNode
,
reset
:
Bool
,
sim
:
Boolean
)
:
Unit
=
{
if
(!
sim
)
{
resetTree
match
{
case
ModuleNode
(
mod
)
=>
mod
.
reset
:=
reset
case
ResetGenNode
(
children
)
=>
val
next_rst
=
Wire
(
Bool
())
withReset
(
reset
){
val
resetGen
=
Module
(
new
ResetGen
)
next_rst
:=
resetGen
.
io
.
out
}
children
.
foreach
(
child
=>
apply
(
child
,
next_rst
,
sim
))
}
}
}
def
apply
(
resetChain
:
Seq
[
Seq
[
MultiIOModule
]],
reset
:
Bool
,
sim
:
Boolean
)
:
Seq
[
Bool
]
=
{
val
resetReg
=
Wire
(
Vec
(
resetChain
.
length
+
1
,
Bool
()))
resetReg
.
foreach
(
_
:=
reset
)
...
...
src/main/scala/xiangshan/XSCore.scala
浏览文件 @
25cb35b6
...
...
@@ -23,6 +23,7 @@ import chisel3.util._
import
freechips.rocketchip.diplomacy.
{
BundleBridgeSource
,
LazyModule
,
LazyModuleImp
}
import
freechips.rocketchip.interrupts.
{
IntSinkNode
,
IntSinkPortSimple
}
import
freechips.rocketchip.tile.HasFPUParameters
import
freechips.rocketchip.tilelink.TLBuffer
import
system.HasSoCParameter
import
utils._
import
xiangshan.backend._
...
...
@@ -138,8 +139,11 @@ abstract class XSCoreBase()(implicit p: config.Parameters) extends LazyModule
// outer facing nodes
val
frontend
=
LazyModule
(
new
Frontend
())
val
ptw
=
LazyModule
(
new
PTWWrapper
())
val
ptw_to_l2_buffer
=
LazyModule
(
new
TLBuffer
)
val
csrOut
=
BundleBridgeSource
(
Some
(()
=>
new
DistributedCSRIO
()))
ptw_to_l2_buffer
.
node
:=
ptw
.
node
val
wbArbiter
=
LazyModule
(
new
WbArbiterWrapper
(
exuConfigs
,
NRIntWritePorts
,
NRFpWritePorts
))
val
intWbPorts
=
wbArbiter
.
intWbPorts
val
fpWbPorts
=
wbArbiter
.
fpWbPorts
...
...
@@ -251,6 +255,7 @@ class XSCoreImp(outer: XSCoreBase) extends LazyModuleImp(outer)
val
wb2Ctrl
=
outer
.
wb2Ctrl
.
module
val
memBlock
=
outer
.
memBlock
.
module
val
ptw
=
outer
.
ptw
.
module
val
ptw_to_l2_buffer
=
outer
.
ptw_to_l2_buffer
.
module
val
exuBlocks
=
outer
.
exuBlocks
.
map
(
_
.
module
)
ctrlBlock
.
io
.
hartId
:=
io
.
hartId
...
...
@@ -397,18 +402,30 @@ class XSCoreImp(outer: XSCoreBase) extends LazyModuleImp(outer)
io
.
l2_pf_enable
:=
csrioIn
.
customCtrl
.
l2_pf_enable
// Modules are reset one by one
// reset --> SYNC ----> SYNC ------> SYNC -----> SYNC -----> SYNC ---
// | | | | |
// v v v v v
// PTW {MemBlock, dtlb} ExuBlocks CtrlBlock {Frontend, itlb}
val
resetChain
=
Seq
(
Seq
(
memBlock
,
dtlbRepeater1
,
dtlbRepeater2
),
Seq
(
exuBlocks
.
head
),
// Note: arbiters don't actually have reset ports
exuBlocks
.
tail
++
Seq
(
outer
.
wbArbiter
.
module
),
Seq
(
ctrlBlock
),
Seq
(
ptw
),
Seq
(
frontend
,
itlbRepeater1
,
itlbRepeater2
)
val
resetTree
=
ResetGenNode
(
Seq
(
ModuleNode
(
memBlock
),
ModuleNode
(
dtlbRepeater1
),
ResetGenNode
(
Seq
(
ModuleNode
(
itlbRepeater2
),
ModuleNode
(
ptw
),
ModuleNode
(
dtlbRepeater2
),
ModuleNode
(
ptw_to_l2_buffer
),
)),
ResetGenNode
(
Seq
(
ModuleNode
(
exuBlocks
.
head
),
ResetGenNode
(
exuBlocks
.
tail
.
map
(
m
=>
ModuleNode
(
m
))
:+
ModuleNode
(
outer
.
wbArbiter
.
module
)
),
ResetGenNode
(
Seq
(
ModuleNode
(
ctrlBlock
),
ResetGenNode
(
Seq
(
ModuleNode
(
frontend
),
ModuleNode
(
itlbRepeater1
)
))
))
))
)
)
ResetGen
(
resetChain
,
reset
.
asBool
,
!
debugOpts
.
FPGAPlatform
)
ResetGen
(
resetTree
,
reset
.
asBool
,
!
debugOpts
.
FPGAPlatform
)
}
src/main/scala/xiangshan/XSTile.scala
浏览文件 @
25cb35b6
...
...
@@ -94,22 +94,27 @@ class XSTile()(implicit p: Parameters) extends LazyModule
val
beu_int_source
=
misc
.
beu
.
intNode
val
core_reset_sink
=
BundleBridgeSink
(
Some
(()
=>
Bool
()))
if
(
coreParams
.
dcacheParametersOpt
.
nonEmpty
)
{
misc
.
l1d_logger
:=
TLBuffer
.
chainNode
(
1
,
Some
(
"L1D_to_L2_buffer"
))
:=
core
.
memBlock
.
dcache
.
clientNode
val
l1d_to_l2_bufferOpt
=
coreParams
.
dcacheParametersOpt
.
map
{
_
=>
val
buffer
=
LazyModule
(
new
TLBuffer
)
misc
.
l1d_logger
:=
buffer
.
node
:=
core
.
memBlock
.
dcache
.
clientNode
buffer
}
val
l1i_to_l2_buffer
=
LazyModule
(
new
TLBuffer
)
misc
.
busPMU
:=
TLLogger
(
s
"L2_L1I_${coreParams.HartId}"
,
!
debugOpts
.
FPGAPlatform
)
:=
TLBuffer
.
chainNode
(
1
,
Some
(
"L1I_to_L2_buffer"
))
:=
l1i_to_l2_buffer
.
node
:=
core
.
frontend
.
icache
.
clientNode
if
(!
coreParams
.
softPTW
)
{
val
ptw_to_l2_bufferOpt
=
if
(!
coreParams
.
softPTW
)
{
val
buffer
=
LazyModule
(
new
TLBuffer
)
misc
.
busPMU
:=
TLLogger
(
s
"L2_PTW_${coreParams.HartId}"
,
!
debugOpts
.
FPGAPlatform
)
:=
TLBuffer
.
chainNode
(
3
,
Some
(
"PTW_to_L2_buffer"
))
:=
core
.
ptw
.
node
}
buffer
.
node
:=
core
.
ptw_to_l2_buffer
.
node
Some
(
buffer
)
}
else
None
l2cache
match
{
case
Some
(
l2
)
=>
misc
.
l2_binder
.
get
:*=
l2
.
node
:*=
TLBuffer
()
:*=
misc
.
l1_xbar
...
...
@@ -150,9 +155,10 @@ class XSTile()(implicit p: Parameters) extends LazyModule
// |
// v
// reset ----> OR_SYNC --> {Misc, L2 Cache, Cores}
val
l2cacheMod
=
if
(
l2cache
.
isDefined
)
Seq
(
l2cache
.
get
.
module
)
else
Seq
()
val
resetChain
=
Seq
(
Seq
(
misc
.
module
,
core
.
module
)
++
l2cacheMod
Seq
(
misc
.
module
,
core
.
module
,
l1i_to_l2_buffer
.
module
)
++
l2cache
.
map
(
_
.
module
)
++
l1d_to_l2_bufferOpt
.
map
(
_
.
module
)
++
ptw_to_l2_bufferOpt
.
map
(
_
.
module
)
)
ResetGen
(
resetChain
,
reset
.
asBool
||
core_soft_rst
,
!
debugOpts
.
FPGAPlatform
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录