Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
f4bf731b
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,发现更多精彩内容 >>
提交
f4bf731b
编写于
6月 25, 2020
作者:
Z
zoujr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
06/25 zoujr
Ibuffer.scala replace printf to XSDebug
上级
76f36e4b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
44 deletion
+21
-44
src/main/scala/xiangshan/frontend/Ibuffer.scala
src/main/scala/xiangshan/frontend/Ibuffer.scala
+21
-44
未找到文件。
src/main/scala/xiangshan/frontend/Ibuffer.scala
浏览文件 @
f4bf731b
...
...
@@ -13,15 +13,11 @@ class Ibuffer extends XSModule {
val
out
=
Vec
(
DecodeWidth
,
DecoupledIO
(
new
CtrlFlow
))
})
val
debug
=
false
if
(
debug
){
// printf("\n------New Cycle------\n")
when
(
io
.
in
.
valid
)
{
printf
(
"cache data:\n"
)
for
(
i
<-
0
until
FetchWidth
)
{
printf
(
"%b\n"
,
io
.
in
.
bits
.
instrs
(
i
))
}
printf
(
"\n"
)
val
debug
=
true
.
B
when
(
io
.
in
.
valid
)
{
XSDebug
(
debug
,
"cache data\n"
)
for
(
i
<-
0
until
FetchWidth
)
{
XSDebug
(
debug
,
"%b\n"
,
io
.
in
.
bits
.
instrs
(
i
))
}
}
...
...
@@ -51,9 +47,7 @@ class Ibuffer extends XSModule {
// enque
when
(
enqValid
)
{
if
(
debug
)
{
printf
(
"\n*****Enque start*****\n"
)
}
XSInfo
(
debug
,
"Enque start\n"
)
var
enq_idx
=
0.
U
(
log2Up
(
FetchWidth
*
2
+
1
).
W
)
for
(
i
<-
0
until
FetchWidth
)
{
...
...
@@ -66,10 +60,8 @@ class Ibuffer extends XSModule {
ibuf_pc
(
tail_ptr
+
enq_idx
+
1.
U
)
:=
io
.
in
.
bits
.
pc
+
enq_idx
+
enq_idx
+
2.
U
ibuf_valid
(
tail_ptr
+
enq_idx
+
1.
U
)
:=
true
.
B
if
(
debug
)
{
printf
(
"%b\n"
,
io
.
in
.
bits
.
instrs
(
i
)(
15
,
0
))
printf
(
"%b\n"
,
io
.
in
.
bits
.
instrs
(
i
)(
31
,
16
))
}
XSDebug
(
debug
,
"Enque: %b\n"
,
io
.
in
.
bits
.
instrs
(
i
)(
15
,
0
))
XSDebug
(
debug
,
"Enque: %b\n"
,
io
.
in
.
bits
.
instrs
(
i
)(
31
,
16
))
}
enq_idx
=
enq_idx
+
io
.
in
.
bits
.
mask
(
i
)
+
io
.
in
.
bits
.
mask
(
i
)
}
...
...
@@ -77,17 +69,12 @@ class Ibuffer extends XSModule {
tail_ptr
:=
tail_ptr
+
enq_idx
last_enq
:=
true
.
B
if
(
debug
)
{
printf
(
"tail_ptr: %d\n"
,
tail_ptr
+
enq_idx
)
}
XSInfo
(
debug
,
"Enque finished, tail_ptr=%d\n"
,
tail_ptr
+
enq_idx
)
}
// deque
when
(
deqValid
)
{
if
(
debug
)
{
printf
(
"\n*****Deque start*****\n"
)
printf
(
"Last head_ptr: %d, tail_ptr: %d\n"
,
head_ptr
,
tail_ptr
)
}
XSInfo
(
debug
,
"Deque start\n"
)
var
deq_idx
=
0.
U
(
log2Up
(
DecodeWidth
*
2
+
1
).
W
)
for
(
i
<-
0
until
DecodeWidth
)
{
...
...
@@ -96,10 +83,8 @@ class Ibuffer extends XSModule {
// is RVC
io
.
out
(
i
).
bits
.
instr
:=
Cat
(
0.
U
(
16.
W
),
ibuf
(
head_ptr
+
deq_idx
))
io
.
out
(
i
).
bits
.
pc
:=
ibuf_pc
(
head_ptr
+
deq_idx
)
if
(
debug
)
{
printf
(
"RCV: %b "
,
Cat
(
0.
U
(
16.
W
),
ibuf
(
head_ptr
+
deq_idx
)))
printf
(
"PC: %d\n"
,
ibuf_pc
(
head_ptr
+
deq_idx
))
}
XSDebug
(
debug
,
"%b[RVC]\nPC=%d\n"
,
Cat
(
0.
U
(
16.
W
),
ibuf
(
head_ptr
+
deq_idx
)),
ibuf_pc
(
head_ptr
+
deq_idx
))
io
.
out
(
i
).
bits
.
isRVC
:=
true
.
B
io
.
out
(
i
).
valid
:=
true
.
B
ibuf_valid
(
head_ptr
+
deq_idx
)
:=
false
.
B
...
...
@@ -107,10 +92,8 @@ class Ibuffer extends XSModule {
// isn't RVC
io
.
out
(
i
).
bits
.
instr
:=
Cat
(
ibuf
(
head_ptr
+
deq_idx
+
1.
U
),
ibuf
(
head_ptr
+
deq_idx
))
io
.
out
(
i
).
bits
.
pc
:=
ibuf_pc
(
head_ptr
+
deq_idx
)
if
(
debug
)
{
printf
(
"NOT RVC: %b "
,
Cat
(
ibuf
(
head_ptr
+
deq_idx
+
1.
U
),
ibuf
(
head_ptr
+
deq_idx
)))
printf
(
"PC: %d\n"
,
ibuf_pc
(
head_ptr
+
deq_idx
))
}
XSDebug
(
debug
,
"%b[NORVC]\nPC=%d\n"
,
Cat
(
ibuf
(
head_ptr
+
deq_idx
+
1.
U
),
ibuf
(
head_ptr
+
deq_idx
)),
ibuf_pc
(
head_ptr
+
deq_idx
))
io
.
out
(
i
).
bits
.
isRVC
:=
false
.
B
io
.
out
(
i
).
valid
:=
true
.
B
ibuf_valid
(
head_ptr
+
deq_idx
)
:=
false
.
B
...
...
@@ -118,17 +101,14 @@ class Ibuffer extends XSModule {
}.
otherwise
{
// half inst keep in buffer
io
.
out
(
i
).
bits
.
instr
:=
0.
U
(
32.
W
)
if
(
debug
)
{
printf
(
"This is half inst\n"
)
}
XSWarn
(
debug
,
"This is half inst\n"
)
io
.
out
(
i
).
bits
.
pc
:=
0.
U
(
VAddrBits
.
W
)
io
.
out
(
i
).
bits
.
isRVC
:=
false
.
B
io
.
out
(
i
).
valid
:=
false
.
B
}
}.
otherwise
{
if
(
debug
)
{
printf
(
"This output is not ready, or buffer is empty\n"
)
}
XSWarn
(
debug
,
"This output is not ready, or buffer is empty\n"
)
io
.
out
(
i
).
bits
.
instr
:=
0.
U
io
.
out
(
i
).
bits
.
pc
:=
0.
U
...
...
@@ -136,10 +116,6 @@ class Ibuffer extends XSModule {
io
.
out
(
i
).
valid
:=
false
.
B
}
if
(
debug
)
{
printf
(
"deq_idx: %d\n"
,
deq_idx
)
}
// When can't deque, deq_idx+0
// when RVC deque, deq_idx+1
// when not RVC deque, deq_idx+2
...
...
@@ -150,9 +126,9 @@ class Ibuffer extends XSModule {
(
io
.
out
(
i
).
ready
&&
ibuf_valid
(
head_ptr
+
deq_idx
)
&&
!(
ibuf
(
head_ptr
+
deq_idx
)(
1
,
0
)
=/=
"b11"
.
U
)
&&
ibuf_valid
(
head_ptr
+
deq_idx
+
1.
U
))
}
head_ptr
:=
head_ptr
+
deq_idx
if
(
debug
)
{
printf
(
"head_ptr: %d\n"
,
head_ptr
+
deq_idx
)
}
XSInfo
(
debug
,
"Deque finished\n"
)
XSInfo
(
debug
,
"head_prt=%d, tail_ptr=%d\n"
,
head_ptr
+
deq_idx
,
tail_ptr
)
last_enq
:=
false
.
B
}.
otherwise
{
for
(
i
<-
0
until
DecodeWidth
)
{
...
...
@@ -165,6 +141,7 @@ class Ibuffer extends XSModule {
// flush
when
(
io
.
flush
)
{
XSInfo
(
debug
,
"Flush signal received, clear buffer\n"
)
for
(
i
<-
0
until
IBufSize
)
{
ibuf_valid
(
i
)
:=
false
.
B
head_ptr
:=
0.
U
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录