Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mips-pipeline
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸大学计算机学院
教师群组
赵鹏翀-zpc
mips-pipeline
提交
8494cb7b
提交
8494cb7b
9月 27, 2018
创建
作者:
李川
提交者:
宋海霞
9月 27, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加代码注释
上级
58f916b2
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
34 行增加
和
38 行删除
+34
-38
mips-pipeline.dlproj
mips-pipeline.dlproj
+1
-1
mips.dlsche
mips.dlsche
+0
-0
mips.dlsche.svg
mips.dlsche.svg
+0
-0
rom.asm
rom.asm
+8
-10
rom.dbg
rom.dbg
+0
-0
rom.lst
rom.lst
+25
-27
rom.rxm
rom.rxm
+0
-0
没有找到文件。
mips-pipeline.dlproj
浏览文件 @
8494cb7b
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project
id=
"
ac9de382-e5f9-49cb-8327-308b2d60f811
"
name=
"mips-pipeline"
version=
"1"
>
<project
id=
"
70a17000-92ec-42bc-affe-544ca7817454
"
name=
"mips-pipeline"
version=
"1"
>
<files>
<files>
<filefolder
id=
"c0a181af-d67c-4dd0-9275-aa277475c77c"
name=
"子模块"
>
<filefolder
id=
"c0a181af-d67c-4dd0-9275-aa277475c77c"
name=
"子模块"
>
...
...
mips.dlsche
浏览文件 @
8494cb7b
没有这种文件类型的预览
mips.dlsche.svg
浏览文件 @
8494cb7b
这个 源代码变更 因为 太大 而不能显示。 你可以
浏览blob
。
rom.asm
浏览文件 @
8494cb7b
.
text
.
text
addi
$
r0
,
$
r0
,
1
;r0 = r0 + 1
addi
$
r0
,
$
r0
,
1
;r0 = r0 + 1
addi
$
r1
,
$
r1
,
2
;r1 = r1 + 2
addi
$
r1
,
$
r1
,
2
;r1 = r1 + 2
addi
$
r3
,
$
r3
,
3
;r3 = r3 + 3
addi
$
r3
,
$
r3
,
3
;r3 = r3 + 3
SHIFT
:
SHIFT
:
sllv
$
r1
,
$
r1
,
$
r0
;r1 = r1 << r0
sllv
$
r1
,
$
r1
,
$
r0
;r1 = r1 << r0
,写后读数据冲突(Read After Write, RAW),r1寄存器的值尚未写回,sllv指令就读取r1的值进行运算,导致计算错误
add
$
r3
,
$
r3
,
$
r1
;r3 = r3 + r1
add
$
r3
,
$
r3
,
$
r1
;r3 = r3 + r1
slt
$
r2
,
$
r1
,
$
r0
;r2 = r1 < r0 ? 1 : 0;
slt
$
r2
,
$
r1
,
$
r0
;r2 = r1 < r0 ? 1 : 0;
beq
$
r2
,
$
r2
,
NEXT
;if r2 == r2, goto NEXT
beq
$
r2
,
$
r2
,
NEXT
;if r2 == r2, goto NEXT
,控制冲突,取指令时还未确定下一条指令应取地址。
sub
$
r1
,
$
r1
,
$
r0
;r1 = r1 - r0
sub
$
r1
,
$
r1
,
$
r0
;r1 = r1 - r0
NEXT
:
NEXT
:
lw
$
r0
,
0
(
$
r1
)
;r0 = memory[r1+0]
lw
$
r0
,
0
(
$
r1
)
;r0 = memory[r1+0]
sw
$
r3
,
0
(
$
r1
)
;memory[r1+0] = r3
add
$
r1
,
$
r1
,
$
r0
;r1 = r1 + r0,lw指令导致数据冲突,lw指令还没将r0写回,add指令就使用r0寄存器的值进行运算,导致错误
bne
$
r1
,
$
r2
,
END
;if r1 != r2, goto END,控制冲突,取指令时还未确定下一条指令应取地址。
add
$
r1
,
$
r1
,
$
r0
;r1 = r1 + r0
bne
$
r1
,
$
r2
,
END
;if r1 != r2, goto END
END
:
END
:
jump
F1
;goto SHIFT
jump
F1
;goto SHIFT
,控制冲突,取指令时还未确定下一条指令应取地址。
sllv
$
r3
,
$
r0
,
$
r1
;r3 = r0 << r1
sllv
$
r3
,
$
r0
,
$
r1
;r3 = r0 << r1
F1
:
F1
:
sub
$
r2
,
$
r2
,
$
r3
;r2 = r2 - r3
sub
$
r2
,
$
r2
,
$
r3
;r2 = r2 - r3
bgt
$
r3
,
$
r2
,
F2
;if r3 > r2, goto F2
bgt
$
r3
,
$
r2
,
F2
;if r3 > r2, goto F2
,控制冲突,取指令时还未确定下一条指令应取地址。
add
$
r2
,
$
r2
,
$
r3
;r2 = r2 + r3
add
$
r2
,
$
r2
,
$
r3
;r2 = r2 + r3
F2
:
F2
:
...
@@ -34,7 +32,7 @@ ori $r1, $r1, 3 ;r1 = r1 | 3
...
@@ -34,7 +32,7 @@ ori $r1, $r1, 3 ;r1 = r1 | 3
srav
$
r3
,
$
r3
,
$
r1
;r3 = r3 >> r1, 算术右移
srav
$
r3
,
$
r3
,
$
r1
;r3 = r3 >> r1, 算术右移
andi
$
r1
,
$
r2
,
4
;r1 = r2 & 4
andi
$
r1
,
$
r2
,
4
;r1 = r2 & 4
jump
SHIFT
;goto SHIFT
jump
SHIFT
;goto SHIFT
,控制冲突,取指令时还未确定下一条指令应取地址。
...
...
rom.dbg
浏览文件 @
8494cb7b
没有这种文件类型的预览
rom.lst
浏览文件 @
8494cb7b
0001 .text
0001 .text
0002
0002
0003 00 50 01 addi $r0, $r0, 1 ;r0 = r0 + 1
0003 00 50 01 addi $r0, $r0, 1 ;r0 = r0 + 1
0004 02 55 02 addi $r1, $r1, 2 ;r1 = r1 + 2
0004 02 55 02 addi $r1, $r1, 2 ;r1 = r1 + 2
0005 04 5F 03 addi $r3, $r3, 3 ;r3 = r3 + 3
0005 04 5F 03 addi $r3, $r3, 3 ;r3 = r3 + 3
0006
0006
0007
0007
0008 SHIFT:
0008 SHIFT:
0009 06 04 44 sllv $r1, $r1, $r0 ;r1 = r1 << r0
0009 06 04 44 sllv $r1, $r1, $r0 ;r1 = r1 << r0
,写后读数据冲突(Read After Write, RAW),r1寄存器的值尚未写回,sllv指令就读取r1的值进行运算,导致计算错误
0010 08 0D C2 add $r3, $r3, $r1 ;r3 = r3 + r1
0010 08 0D C2 add $r3, $r3, $r1 ;r3 = r3 + r1
0011
0011
0012 0A 04 87 slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0;
0012 0A 04 87 slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0;
0013 0C 8A 01 beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT
0013 0C 8A 01 beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT
,控制冲突,取指令时还未确定下一条指令应取地址。
0014 0E 04 43 sub $r1, $r1, $r0 ;r1 = r1 - r0
0014 0E 04 43 sub $r1, $r1, $r0 ;r1 = r1 - r0
0015
0015
0016 NEXT:
0016 NEXT:
0017 10 64 00 lw $r0, 0($r1) ;r0 = memory[r1+0]
0017 10 64 00 lw $r0, 0($r1) ;r0 = memory[r1+0]
0018 12
77 00 sw $r3, 0($r1) ;memory[r1+0] = r3
0018 12
04 42 add $r1, $r1, $r0 ;r1 = r1 + r0,lw指令导致数据冲突,lw指令还没将r0写回,add指令就使用r0寄存器的值进行运算,导致错误
0019
0019
14 96 00 bne $r1, $r2, END ;if r1 != r2, goto END,控制冲突,取指令时还未确定下一条指令应取地址。
0020
14 04 42 add $r1, $r1, $r0 ;r1 = r1 + r0
0020
0021
16 96 00 bne $r1, $r2, END ;if r1 != r2, goto END
0021
END:
0022
0022
16 B0 0D jump F1 ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
0023
END:
0023
18 01 C4 sllv $r3, $r0, $r1 ;r3 = r0 << r1
0024
18 B0 0E jump F1 ;goto SHIFT
0024
0025
1A 01 C4 sllv $r3, $r0, $r1 ;r3 = r0 << r1
0025
F1:
0026
0026
1A 0B 83 sub $r2, $r2, $r3 ;r2 = r2 - r3
0027
F1:
0027
1C AE 01 bgt $r3, $r2, F2 ;if r3 > r2, goto F2 ,控制冲突,取指令时还未确定下一条指令应取地址。
0028 1
C 0B 83 sub $r2, $r2, $r3 ;r2 = r2 - r3
0028 1
E 0B 82 add $r2, $r2, $r3 ;r2 = r2 + r3
0029
1E AE 01 bgt $r3, $r2, F2 ;if r3 > r2, goto F2
0029
0030
20 0B 82 add $r2, $r2, $r3 ;r2 = r2 + r3
0030
F2:
0031
0031
20 35 03 ori $r1, $r1, 3 ;r1 = r1 | 3
0032
F2:
0032
22 0D C6 srav $r3, $r3, $r1 ;r3 = r3 >> r1, 算术右移
0033 2
2 35 03 ori $r1, $r1, 3 ;r1 = r1 | 3
0033 2
4 49 04 andi $r1, $r2, 4 ;r1 = r2 & 4
0034
24 0D C6 srav $r3, $r3, $r1 ;r3 = r3 >> r1,
0034
0035 26
49 04 andi $r1, $r2, 4 ;r1 = r2 & 4
0035 26
B0 03 jump SHIFT ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
0036
0036
0037 28 B0 03 jump SHIFT ;goto SHIFT
0037
0038
0038
0039
0039
0040
0040
0041
0042
rom.rxm
浏览文件 @
8494cb7b
没有这种文件类型的预览
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论