Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
efc6a777
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
10 个月 前同步成功
通知
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 搜索 >>
提交
efc6a777
编写于
8月 17, 2020
作者:
L
linjiawei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix axi device bug
上级
24b11ca3
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
20 addition
and
23 deletion
+20
-23
src/main/scala/device/AXI4DummySD.scala
src/main/scala/device/AXI4DummySD.scala
+1
-1
src/main/scala/device/AXI4Flash.scala
src/main/scala/device/AXI4Flash.scala
+1
-1
src/main/scala/device/AXI4RAM.scala
src/main/scala/device/AXI4RAM.scala
+1
-1
src/main/scala/device/AXI4SlaveModule.scala
src/main/scala/device/AXI4SlaveModule.scala
+16
-19
src/main/scala/device/AXI4UART.scala
src/main/scala/device/AXI4UART.scala
+1
-1
未找到文件。
src/main/scala/device/AXI4DummySD.scala
浏览文件 @
efc6a777
...
...
@@ -133,6 +133,6 @@ class AXI4DummySD
RegMap
.
generate
(
mapping
,
getOffset
(
raddr
),
rdata
,
getOffset
(
waddr
),
in
.
w
.
fire
(),
in
.
w
.
bits
.
data
,
MaskExpand
(
strb
))
in
.
r
.
bits
.
data
:=
RegEnable
(
RegNext
(
Fill
(
2
,
rdata
(
31
,
0
))),
ren
)
in
.
r
.
bits
.
data
:=
Fill
(
2
,
rdata
(
31
,
0
)
)
}
}
src/main/scala/device/AXI4Flash.scala
浏览文件 @
efc6a777
...
...
@@ -29,6 +29,6 @@ class AXI4Flash
RegMap
.
generate
(
mapping
,
getOffset
(
raddr
),
rdata
,
getOffset
(
waddr
),
in
.
w
.
fire
(),
in
.
w
.
bits
.
data
,
MaskExpand
(
in
.
w
.
bits
.
strb
))
in
.
r
.
bits
.
data
:=
RegEnable
(
RegNext
(
Fill
(
2
,
rdata
(
31
,
0
))),
ren
)
in
.
r
.
bits
.
data
:=
Fill
(
2
,
rdata
(
31
,
0
)
)
}
}
src/main/scala/device/AXI4RAM.scala
浏览文件 @
efc6a777
...
...
@@ -63,6 +63,6 @@ class AXI4RAM
Cat
(
mem
.
read
(
rIdx
).
reverse
)
}
in
.
r
.
bits
.
data
:=
RegEnable
(
rdata
,
ren
)
in
.
r
.
bits
.
data
:=
rdata
}
}
src/main/scala/device/AXI4SlaveModule.scala
浏览文件 @
efc6a777
...
...
@@ -65,6 +65,12 @@ class AXI4SlaveModuleImp[T<:Data](outer: AXI4SlaveModule[T])
XSDebug
(
p
"[r] id: ${in.r.bits.id} data: ${Hexadecimal(in.r.bits.data)}\n"
)
}
when
(
in
.
aw
.
fire
()){
assert
(
in
.
aw
.
bits
.
burst
===
AXI4Parameters
.
BURST_INCR
,
"only support busrt ince!"
)
}
when
(
in
.
ar
.
fire
()){
assert
(
in
.
ar
.
bits
.
burst
===
AXI4Parameters
.
BURST_INCR
,
"only support busrt ince!"
)
}
private
val
s_idle
::
s_rdata
::
s_wdata
::
s_wresp
::
Nil
=
Enum
(
4
)
...
...
@@ -102,21 +108,12 @@ class AXI4SlaveModuleImp[T<:Data](outer: AXI4SlaveModule[T])
def
genWdata
(
originData
:
UInt
)
=
(
originData
&
(~
fullMask
).
asUInt
())
|
(
in
.
w
.
bits
.
data
&
fullMask
)
val
raddr
=
Wire
(
UInt
())
val
ren
=
Wire
(
Bool
())
val
(
readBeatCnt
,
rLast
)
=
{
val
c
=
Counter
(
256
)
val
beatCnt
=
Counter
(
256
)
val
len
=
HoldUnless
(
in
.
ar
.
bits
.
len
,
in
.
ar
.
fire
())
val
burst
=
HoldUnless
(
in
.
ar
.
bits
.
burst
,
in
.
ar
.
fire
())
val
wrapAddr
=
in
.
ar
.
bits
.
addr
&
(~(
in
.
ar
.
bits
.
len
<<
in
.
ar
.
bits
.
size
)).
asUInt
()
raddr
:=
HoldUnless
(
wrapAddr
,
in
.
ar
.
fire
())
raddr
:=
HoldUnless
(
in
.
ar
.
bits
.
addr
,
in
.
ar
.
fire
())
in
.
r
.
bits
.
last
:=
(
c
.
value
===
len
)
when
(
ren
)
{
beatCnt
.
inc
()
when
(
burst
===
AXI4Parameters
.
BURST_WRAP
&&
beatCnt
.
value
===
len
)
{
beatCnt
.
value
:=
0.
U
}
}
when
(
in
.
r
.
fire
())
{
c
.
inc
()
when
(
in
.
r
.
bits
.
last
)
{
...
...
@@ -124,19 +121,19 @@ class AXI4SlaveModuleImp[T<:Data](outer: AXI4SlaveModule[T])
}
}
when
(
in
.
ar
.
fire
())
{
beatCnt
.
value
:=
(
in
.
ar
.
bits
.
addr
>>
in
.
ar
.
bits
.
size
).
asUInt
()
&
in
.
ar
.
bits
.
len
when
(
in
.
ar
.
bits
.
len
=/=
0.
U
&&
in
.
ar
.
bits
.
burst
===
AXI4Parameters
.
BURST_WRAP
)
{
assert
(
in
.
ar
.
bits
.
len
===
1.
U
||
in
.
ar
.
bits
.
len
===
3.
U
||
in
.
ar
.
bits
.
len
===
7.
U
||
in
.
ar
.
bits
.
len
===
15.
U
)
}
assert
(
in
.
ar
.
bits
.
len
===
0.
U
||
in
.
ar
.
bits
.
len
===
1.
U
||
in
.
ar
.
bits
.
len
===
3.
U
||
in
.
ar
.
bits
.
len
===
7.
U
||
in
.
ar
.
bits
.
len
===
15.
U
)
}
(
beatCnt
.
value
,
in
.
r
.
bits
.
last
)
(
c
.
value
,
in
.
r
.
bits
.
last
)
}
val
r_busy
=
BoolStopWatch
(
in
.
ar
.
fire
(),
in
.
r
.
fire
()
&&
rLast
,
startHighPriority
=
true
)
in
.
ar
.
ready
:=
state
===
s_idle
in
.
r
.
bits
.
resp
:=
AXI4Parameters
.
RESP_OKAY
ren
:=
RegNext
(
in
.
ar
.
fire
())
||
(
in
.
r
.
fire
()
&&
!
rLast
)
in
.
r
.
valid
:=
state
===
s_rdata
...
...
src/main/scala/device/AXI4UART.scala
浏览文件 @
efc6a777
...
...
@@ -33,7 +33,7 @@ class AXI4UART
io
.
extra
.
get
.
out
.
valid
:=
(
waddr
(
3
,
0
)
===
4.
U
&&
in
.
w
.
fire
())
io
.
extra
.
get
.
out
.
ch
:=
in
.
w
.
bits
.
data
(
7
,
0
)
io
.
extra
.
get
.
in
.
valid
:=
(
raddr
(
3
,
0
)
===
0.
U
&&
ren
)
io
.
extra
.
get
.
in
.
valid
:=
(
raddr
(
3
,
0
)
===
0.
U
&&
in
.
r
.
fire
()
)
val
mapping
=
Map
(
RegMap
(
0x0
,
io
.
extra
.
get
.
in
.
ch
,
RegMap
.
Unwritable
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录