MIPS指令流水線
1.MIPS指令流水線邏輯架構(gòu),是在CPU架構(gòu)基礎(chǔ)上追加流水寄存器色洞。
2.流水線寫回?cái)?shù)據(jù)通路
常用的MPIS指令
MIPS是一種基于精簡指令集(Reduced Instruction Set Computing馆匿,RISC)的計(jì)算機(jī)處理器體系結(jié)構(gòu),它具有簡單占遥、清晰和高效等特點(diǎn)喊儡。下面介紹一些常用的MIPS指令:
1. add:該指令用于將兩個(gè)寄存器中的數(shù)據(jù)進(jìn)行加法運(yùn)算,并將結(jié)果存儲(chǔ)到指定的目的寄存器中窜锯。
示例:add $t0, $s1, $s2? ; 將$s1和$s2的值相加张肾,并將結(jié)果存到$t0中
2. addi:該指令用于將一個(gè)寄存器中的值與一個(gè)立即數(shù)進(jìn)行加法運(yùn)算,并將結(jié)果存儲(chǔ)到指定的目的寄存器中锚扎。
示例:addi $t0, $s1, 10? ; 將$s1的值加上10吞瞪,并將結(jié)果存到$t0中
3. sw:該指令用于將一個(gè)寄存器中的值存儲(chǔ)到指定的內(nèi)存地址中。
示例:sw $t0, 100($s0) ; 將$t0的值存儲(chǔ)到$s0+100的內(nèi)存地址中
4. lw:該指令用于將指定內(nèi)存地址中的值加載到一個(gè)寄存器中驾孔。
示例:lw $t0, 100($s0) ; 將$s0+100的內(nèi)存地址中的值加載到$t0中
5. beq:該指令用于比較兩個(gè)寄存器中的值芍秆,如果相等則跳轉(zhuǎn)到指定的地址惯疙。
示例:beq $t0, $t1, label ; 如果$t0等于$t1,則跳轉(zhuǎn)到名為label的標(biāo)簽處
6.and指令也是MIPS指令中的一種妖啥,用于進(jìn)行按位與運(yùn)算霉颠。該指令的語法如下:
and $d, $s, $t
其中,$d為目的寄存器荆虱,$s和$t分別為源寄存器蒿偎。and指令將對(duì)$s和$t寄存器中的值進(jìn)行按位與操作,并將結(jié)果存儲(chǔ)到$d寄存器中怀读。
示例:and $t0, $s1, $s2 ; 將$s1和$s2寄存器中的值進(jìn)行按位與操作诉位,并將結(jié)果存儲(chǔ)到$t0寄存器中。
7.sub指令也是MIPS指令中的一種菜枷,用于進(jìn)行減法運(yùn)算苍糠。該指令的語法如下:
sub $d, $s, $t
其中,$d為目的寄存器啤誊,$s和$t分別為源寄存器岳瞭。sub指令將對(duì)$s和$t寄存器中的值進(jìn)行減法操作,并將結(jié)果存儲(chǔ)到$d寄存器中蚊锹。
示例:sub $t0, $s1, $s2 ; 將$s1和$s2寄存器中的值進(jìn)行減法操作瞳筏,并將結(jié)果存儲(chǔ)到$t0寄存器中。
對(duì)于每個(gè)指令的流水也有一個(gè)基本的了解牡昆,前提是指令的功能和用法要摸透乏矾。
流水線沖突
1.結(jié)構(gòu)沖突:例如在僅有一個(gè)存儲(chǔ)器的情況下,lw在訪存階段與其他指令的讀指令階段沖突迁杨。(MPIS寄存器堆的讀寫窗口是完全獨(dú)立的)
2.控制沖突:add addi beq 在beq未執(zhí)行之前不知道是否跳轉(zhuǎn),若跳轉(zhuǎn)add addi就白整了凄硼,浪費(fèi)了周期
解決方法:有個(gè)動(dòng)態(tài)分支預(yù)測(cè)技術(shù)
合理利用分支選擇信號(hào)
3.數(shù)據(jù)沖突:
例如還沒寫入铅协,就減上了(軟件的解決方法是加幾條空指令,硬件是插入氣泡法)
使用重定向解決數(shù)據(jù)沖突
1.重定向的原理:如果EX和WB存在數(shù)據(jù)相關(guān)摊沉,那么用于EX執(zhí)行計(jì)算的狐史,不能使用前面流水寄存器的值,而應(yīng)選擇WB的結(jié)果
2.當(dāng)發(fā)生load-use沖突時(shí)说墨,不能使用(第一條指令是取數(shù)指令骏全,且第2條指令與第一條指令存在相關(guān))