Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
82d49555
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,发现更多精彩内容 >>
提交
82d49555
编写于
9月 21, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
noop,MDU: merge mulw into XLEN-bit multiplier
上级
37ccfcd4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
11 deletion
+7
-11
src/main/scala/noop/fu/MDU.scala
src/main/scala/noop/fu/MDU.scala
+7
-11
未找到文件。
src/main/scala/noop/fu/MDU.scala
浏览文件 @
82d49555
...
...
@@ -148,7 +148,6 @@ class MDU extends NOOPModule {
val
mul
=
Module
(
new
Multiplier
(
XLEN
+
1
))
val
div
=
Module
(
new
Divider
(
64
))
val
mul32
=
Module
(
new
Multiplier
(
32
))
val
div32
=
Module
(
new
Divider
(
32
))
List
(
mul
.
io
,
div
.
io
).
map
{
case
x
=>
x
.
in
.
bits
(
0
)
:=
src1
...
...
@@ -168,7 +167,7 @@ class MDU extends NOOPModule {
mul
.
io
.
in
.
bits
(
0
)
:=
LookupTree
(
func
(
1
,
0
),
mulInputFuncTable
.
map
(
p
=>
(
p
.
_1
(
1
,
0
),
p
.
_2
.
_1
(
src1
))))
mul
.
io
.
in
.
bits
(
1
)
:=
LookupTree
(
func
(
1
,
0
),
mulInputFuncTable
.
map
(
p
=>
(
p
.
_1
(
1
,
0
),
p
.
_2
.
_2
(
src2
))))
List
(
mul32
.
io
,
div32
.
io
).
map
{
case
x
=>
List
(
div32
.
io
).
map
{
case
x
=>
x
.
in
.
bits
(
0
)
:=
src1
(
31
,
0
)
x
.
in
.
bits
(
1
)
:=
src2
(
31
,
0
)
x
.
sign
:=
MDUOpType
.
isSign
(
func
)
...
...
@@ -176,31 +175,28 @@ class MDU extends NOOPModule {
}
val
isDiv
=
MDUOpType
.
isDiv
(
func
)
val
isW
=
MDUOpType
.
isW
(
func
)
mul
.
io
.
in
.
valid
:=
io
.
in
.
valid
&&
!
isDiv
&&
!
isW
mul
.
io
.
in
.
valid
:=
io
.
in
.
valid
&&
!
isDiv
div
.
io
.
in
.
valid
:=
io
.
in
.
valid
&&
isDiv
&&
!
isW
mul32
.
io
.
in
.
valid
:=
io
.
in
.
valid
&&
!
isDiv
&&
isW
div32
.
io
.
in
.
valid
:=
io
.
in
.
valid
&&
isDiv
&&
isW
io
.
out
.
bits
:=
LookupTree
(
func
,
List
(
MDUOpType
.
mul
->
mul
.
io
.
out
.
bits
(
XLEN
-
1
,
0
),
MDUOpType
.
mulh
->
mul
.
io
.
out
.
bits
(
2
*
XLEN
-
1
,
XLEN
),
MDUOpType
.
mulhu
->
mul
.
io
.
out
.
bits
(
2
*
XLEN
-
1
,
XLEN
),
MDUOpType
.
mulhsu
->
mul
.
io
.
out
.
bits
(
2
*
XLEN
-
1
,
XLEN
),
val
mulRes
=
Mux
(
func
(
1
,
0
)
===
MDUOpType
.
mul
(
1
,
0
),
mul
.
io
.
out
.
bits
(
XLEN
-
1
,
0
),
mul
.
io
.
out
.
bits
(
2
*
XLEN
-
1
,
XLEN
))
val
divRes
=
LookupTree
(
func
,
List
(
MDUOpType
.
div
->
div
.
io
.
out
.
bits
(
XLEN
-
1
,
0
),
MDUOpType
.
divu
->
div
.
io
.
out
.
bits
(
XLEN
-
1
,
0
),
MDUOpType
.
rem
->
div
.
io
.
out
.
bits
(
2
*
XLEN
-
1
,
XLEN
),
MDUOpType
.
remu
->
div
.
io
.
out
.
bits
(
2
*
XLEN
-
1
,
XLEN
),
MDUOpType
.
mulw
->
SignExt
(
mul32
.
io
.
out
.
bits
(
31
,
0
),
XLEN
),
MDUOpType
.
divw
->
SignExt
(
div32
.
io
.
out
.
bits
(
31
,
0
),
XLEN
),
MDUOpType
.
divuw
->
SignExt
(
div32
.
io
.
out
.
bits
(
31
,
0
),
XLEN
),
MDUOpType
.
remw
->
SignExt
(
div32
.
io
.
out
.
bits
(
63
,
32
),
XLEN
),
MDUOpType
.
remuw
->
SignExt
(
div32
.
io
.
out
.
bits
(
63
,
32
),
XLEN
)
))
val
res
=
Mux
(
isDiv
,
divRes
,
mulRes
)
io
.
out
.
bits
:=
Mux
(
isW
,
SignExt
(
res
(
31
,
0
),
64
),
res
)
val
isDivReg
=
Mux
(
io
.
in
.
fire
(),
isDiv
,
RegNext
(
isDiv
))
io
.
in
.
ready
:=
Mux
(
isDiv
,
div
.
io
.
in
.
ready
,
mul
.
io
.
in
.
ready
)
io
.
out
.
valid
:=
Mux
(
isDivReg
,
div
.
io
.
out
.
valid
||
div32
.
io
.
out
.
valid
,
mul
.
io
.
out
.
valid
||
mul32
.
io
.
out
.
valid
)
io
.
out
.
valid
:=
Mux
(
isDivReg
,
div
.
io
.
out
.
valid
||
div32
.
io
.
out
.
valid
,
mul
.
io
.
out
.
valid
)
BoringUtils
.
addSource
(
mul
.
io
.
out
.
fire
(),
"perfCntCondMmulInstr"
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录