提交 a5e307c5 创建 作者: 赵鹏翀's avatar 赵鹏翀

Initial commit

上级
*.cir
*.xml
*.bak
/.vs
\ No newline at end of file
添加文件
差异被折叠。
添加文件
差异被折叠。
差异被折叠。
# 说明
16 位 MIPS 理想五级流水线微处理器
# 原理图
![raw svg](mips.dlsche.svg)
\ No newline at end of file
添加文件
差异被折叠。
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
添加文件
差异被折叠。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project id="70a17000-92ec-42bc-affe-544ca7817454" name="mips-pipeline" version="1">
<files>
<filefolder id="c0a181af-d67c-4dd0-9275-aa277475c77c" name="子模块">
<file relativepath="2mux1.dlsche"/>
<file relativepath="alu.dlsche"/>
<file relativepath="control.dlsche"/>
<file relativepath="8signto16.dlsche"/>
<file relativepath="reg.dlsche"/>
<file relativepath="regdst_mux.dlsche"/>
<file relativepath="3mux1.dlsche"/>
<file relativepath="pc_next.dlsche"/>
<file relativepath="al.dlsche"/>
<file relativepath="pc_monitor.dlsche"/>
<file relativepath="add.dlsche"/>
</filefolder>
<filefolder id="2156f6c8-84d5-409f-859c-fddce752753a" name="存储器映射文件">
<file relativepath="rom.rxm"/>
</filefolder>
<filefolder id="3463ada9-1cc7-4838-ab12-f98af0a12bf2" name="源程序文件">
<file relativepath="rom.asm"/>
<file relativepath="rom.bat"/>
</filefolder>
<file relativepath="mips.dlsche"/>
<file relativepath="README.md"/>
</files>
</project>
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
添加文件
差异被折叠。
差异被折叠。
添加文件
差异被折叠。
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
差异被折叠。
.text
addi $r0, $r0, 1 ;r0 = r0 + 1
addi $r1, $r1, 2 ;r1 = r1 + 2
addi $r3, $r3, 3 ;r3 = r3 + 3
SHIFT:
sllv $r1, $r1, $r0 ;r1 = r1 << r0,写后读数据冲突(Read After Write, RAW),r1寄存器的值尚未写回,sllv指令就读取r1的值进行运算,导致计算错误
add $r3, $r3, $r1 ;r3 = r3 + r1
slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0;
beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT,控制冲突,取指令时还未确定下一条指令应取地址。
sub $r1, $r1, $r0 ;r1 = r1 - r0
NEXT:
lw $r0, 0($r1) ;r0 = memory[r1+0]
add $r1, $r1, $r0 ;r1 = r1 + r0,lw指令导致数据冲突,lw指令还没将r0写回,add指令就使用r0寄存器的值进行运算,导致错误
bne $r1, $r2, END ;if r1 != r2, goto END,控制冲突,取指令时还未确定下一条指令应取地址。
END:
jump F1 ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
sllv $r3, $r0, $r1 ;r3 = r0 << r1
F1:
sub $r2, $r2, $r3 ;r2 = r2 - r3
bgt $r3, $r2, F2 ;if r3 > r2, goto F2 ,控制冲突,取指令时还未确定下一条指令应取地址。
add $r2, $r2, $r3 ;r2 = r2 + r3
F2:
ori $r1, $r1, 3 ;r1 = r1 | 3
srav $r3, $r3, $r1 ;r3 = r3 >> r1, 算术右移
andi $r1, $r2, 4 ;r1 = r2 & 4
jump SHIFT ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
@echo off
mipsasm.exe rom.asm -o rom.rxm -l rom.lst -g rom.dbg
pause
添加文件
0001 .text
0002
0003 00 50 01 addi $r0, $r0, 1 ;r0 = r0 + 1
0004 02 55 02 addi $r1, $r1, 2 ;r1 = r1 + 2
0005 04 5F 03 addi $r3, $r3, 3 ;r3 = r3 + 3
0006
0007
0008 SHIFT:
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
0011
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,控制冲突,取指令时还未确定下一条指令应取地址。
0014 0E 04 43 sub $r1, $r1, $r0 ;r1 = r1 - r0
0015
0016 NEXT:
0017 10 64 00 lw $r0, 0($r1) ;r0 = memory[r1+0]
0018 12 04 42 add $r1, $r1, $r0 ;r1 = r1 + r0,lw指令导致数据冲突,lw指令还没将r0写回,add指令就使用r0寄存器的值进行运算,导致错误
0019 14 96 00 bne $r1, $r2, END ;if r1 != r2, goto END,控制冲突,取指令时还未确定下一条指令应取地址。
0020
0021 END:
0022 16 B0 0D jump F1 ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
0023 18 01 C4 sllv $r3, $r0, $r1 ;r3 = r0 << r1
0024
0025 F1:
0026 1A 0B 83 sub $r2, $r2, $r3 ;r2 = r2 - r3
0027 1C AE 01 bgt $r3, $r2, F2 ;if r3 > r2, goto F2 ,控制冲突,取指令时还未确定下一条指令应取地址。
0028 1E 0B 82 add $r2, $r2, $r3 ;r2 = r2 + r3
0029
0030 F2:
0031 20 35 03 ori $r1, $r1, 3 ;r1 = r1 | 3
0032 22 0D C6 srav $r3, $r3, $r1 ;r3 = r3 >> r1, 算术右移
0033 24 49 04 andi $r1, $r2, 4 ;r1 = r2 & 4
0034
0035 26 B0 03 jump SHIFT ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
0036
0037
0038
0039
0040
添加文件
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论