Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
0341d9bd
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
0341d9bd
编写于
8月 15, 2020
作者:
L
linjiawei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rewrite AXI4Ram
上级
1db30e61
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
36 deletion
+50
-36
src/main/scala/device/AXI4RAM.scala
src/main/scala/device/AXI4RAM.scala
+50
-36
未找到文件。
src/main/scala/device/AXI4RAM.scala
浏览文件 @
0341d9bd
package
device
import
chipsalliance.rocketchip.config.Parameters
import
chisel3._
import
chisel3.util._
import
chisel3.util.experimental.loadMemoryFromFile
import
freechips.rocketchip.diplomacy.
{
AddressSet
,
LazyModule
,
LazyModuleImp
,
RegionType
}
import
xiangshan.HasXSParameter
import
noop.HasNOOPParameter
import
bus.axi4._
import
utils._
class
RAMHelper
(
memByte
:
Int
)
extends
BlackBox
with
HasNOOPParameter
{
class
RAMHelper
(
memByte
:
BigInt
)
extends
BlackBox
with
HasXSParameter
{
val
io
=
IO
(
new
Bundle
{
val
clk
=
Input
(
Clock
())
val
rIdx
=
Input
(
UInt
(
DataBits
.
W
))
...
...
@@ -20,35 +18,51 @@ class RAMHelper(memByte: Int) extends BlackBox with HasNOOPParameter {
})
}
class
AXI4RAM
[
T
<:
AXI4Lite
](
_type
:
T
=
new
AXI4
,
memByte
:
Int
,
useBlackBox
:
Boolean
=
false
)
extends
AXI4SlaveModule
(
_type
)
with
HasNOOPParameter
{
val
offsetBits
=
log2Up
(
memByte
)
val
offsetMask
=
(
1
<<
offsetBits
)
-
1
def
index
(
addr
:
UInt
)
=
(
addr
&
offsetMask
.
U
)
>>
log2Ceil
(
DataBytes
)
def
inRange
(
idx
:
UInt
)
=
idx
<
(
memByte
/
8
).
U
val
wIdx
=
index
(
waddr
)
+
writeBeatCnt
val
rIdx
=
index
(
raddr
)
+
readBeatCnt
val
wen
=
in
.
w
.
fire
()
&&
inRange
(
wIdx
)
val
rdata
=
if
(
useBlackBox
)
{
val
mem
=
Module
(
new
RAMHelper
(
memByte
))
mem
.
io
.
clk
:=
clock
mem
.
io
.
rIdx
:=
rIdx
mem
.
io
.
wIdx
:=
wIdx
mem
.
io
.
wdata
:=
in
.
w
.
bits
.
data
mem
.
io
.
wmask
:=
fullMask
mem
.
io
.
wen
:=
wen
mem
.
io
.
rdata
}
else
{
val
mem
=
Mem
(
memByte
/
DataBytes
,
Vec
(
DataBytes
,
UInt
(
8.
W
)))
val
wdata
=
VecInit
.
tabulate
(
DataBytes
)
{
i
=>
in
.
w
.
bits
.
data
(
8
*(
i
+
1
)-
1
,
8
*
i
)
}
when
(
wen
)
{
mem
.
write
(
wIdx
,
wdata
,
in
.
w
.
bits
.
strb
.
asBools
)
}
Cat
(
mem
.
read
(
rIdx
).
reverse
)
}
class
AXI4RAM
(
address
:
AddressSet
,
useBlackBox
:
Boolean
=
false
,
executable
:
Boolean
=
true
,
beatBytes
:
Int
=
8
,
burstLen
:
Int
=
16
)(
implicit
p
:
Parameters
)
extends
AXI4SlaveModule
(
address
,
executable
,
beatBytes
,
burstLen
)
{
override
lazy
val
module
=
new
AXI4SlaveModuleImp
(
this
){
val
offsetMask
=
address
.
mask
.
toInt
val
memByte
=
offsetMask
+
1
val
offsetBits
=
log2Up
(
memByte
)
def
index
(
addr
:
UInt
)
=
((
addr
&
offsetMask
.
U
)
>>
log2Ceil
(
beatBytes
)).
asUInt
()
in
.
r
.
bits
.
data
:=
RegEnable
(
rdata
,
ren
)
def
inRange
(
idx
:
UInt
)
=
idx
<
(
memByte
/
8
).
U
val
wIdx
=
index
(
waddr
)
+
writeBeatCnt
val
rIdx
=
index
(
raddr
)
+
readBeatCnt
val
wen
=
in
.
w
.
fire
()
&&
inRange
(
wIdx
)
val
rdata
=
if
(
useBlackBox
)
{
val
mem
=
Module
(
new
RAMHelper
(
memByte
))
mem
.
io
.
clk
:=
clock
mem
.
io
.
rIdx
:=
rIdx
mem
.
io
.
wIdx
:=
wIdx
mem
.
io
.
wdata
:=
in
.
w
.
bits
.
data
mem
.
io
.
wmask
:=
fullMask
mem
.
io
.
wen
:=
wen
mem
.
io
.
rdata
}
else
{
val
mem
=
Mem
(
memByte
/
beatBytes
,
Vec
(
beatBytes
,
UInt
(
8.
W
)))
val
wdata
=
VecInit
.
tabulate
(
beatBytes
)
{
i
=>
in
.
w
.
bits
.
data
(
8
*
(
i
+
1
)
-
1
,
8
*
i
)
}
when
(
wen
)
{
mem
.
write
(
wIdx
,
wdata
,
in
.
w
.
bits
.
strb
.
asBools
())
}
Cat
(
mem
.
read
(
rIdx
).
reverse
)
}
in
.
r
.
bits
.
data
:=
RegEnable
(
rdata
,
ren
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录