CO | P6_流水线CPU功能扩展
提供一些博客
P6学习总结 | AugetyVolte’s Blog (augetyvolta.github.io)这个学长的博客里有很多课上拓展的题,可以做参考
企鹅的课上
T1 fdiv
Fast DIV
| 31……26 | 25……21 | 20……16 | 15…11 | 10…6 | 5……0 |
|---|---|---|---|---|---|
| op 000000 |
rs | rt | 0 00000 |
0 00000 |
fdiv 101100 |
题目描述:
乘除槽阻塞周期为3,其他与有符号除法相同
操作:
$$
\begin{align}
&HI\ ←\ GPR[rs]\ %\ GPR[rt] \
&LO\ ←\ GPR[rs]\ \ /\ GPR[rt]\
\end{align}
$$
T2 bslt
| 31……26 | 25……21 | 20……16 | 15…11 | 10…6 | 5……0 |
|---|---|---|---|---|---|
| op 000000 |
rs | rt | rd | 0 00000 |
boall 111011 |
题目描述:
操作:
$$
\begin{flalign}
&\qquad temp ← GPR[rs]+GPR[rt]\
&\qquad if\quad unsigned(temp)<0x00006000 \quad then\
&\qquad \qquad GPR[rd] ← PC+8\
&\qquad \qquad PC ← temp_{31…2}||0^2\
&\qquad endif
\end{flalign}
$$
T3 lsas
| 31……26 | 25……21 | 20……16 | 15……0 |
|---|---|---|---|
| op 111110 |
base | rt | offset |
题目描述:
操作:
$$
\begin{flalign}
&vaddr ← GPR[base] + sign_extend(offset) \
&paddr ← vaddr&0xfffffffc \
&Word ← memory[paddr] \
&number ← Word_{31}-Word_{30}+Word_{29}-Word_{28}+…+Word_{1}-Word_{0}+16\
&GPR[number>>1]←Word
\end{flalign}
$$
第一次课上
T1
| 31……26 | 25……21 | 20……16 | 15…11 | 10…6 | 5……0 |
|---|---|---|---|---|---|
| op 000000 |
rs | rt | 0 00000 |
111010 |
题目描述:
用有符号数计算;cnt=5
操作:
$$
\begin{align}
&HI\ ←\ HI\ +\ GPR[rs]\ \ /\ GPR[rt] \
&LO\ ←\ LO\ +\ GPR[rs]\ %\ GPR[rt]\
\end{align}
$$
实现:
`MDU_div : begin |
T2 boall
| 31……26 | 25……21 | 20……16 | 15…11 | 10…6 | 5……0 |
|---|---|---|---|---|---|
| op 000000 |
rs | rt | rd | 0 00000 |
boall 111011 |
题目描述:
GPR[rt]的二进制表示中,没有连续的四个1
操作:
$$
\begin{flalign}
&I:\
&\qquad link ← PC+8\
&\qquad cond ← True\
&\qquad for\quad i=3…31\quad begin\
&\qquad \qquad cond=cond\quad and\quad (GPR[rt]_{i…i-3}\neq4’b1111)\
&\qquad end\
&I+1:\
&\qquad if\quad cond \quad then\
&\qquad \qquad GPR[rd] ← link\
&\qquad \qquad PC ← GPR[rs]\
&\qquad else\
&\qquad \qquad NullifyCurrentInstruction()\
&\qquad endif
\end{flalign}
$$
integer i; |
T3 lwd
| 31……26 | 25……21 | 20……16 | 15……0 |
|---|---|---|---|
| op 111110 |
base | rt | offset |
题目描述:
若访存结果为奇数,存入rt寄存器,若访存结果为偶数,则存入base
操作:
$$
\begin{flalign}
&paddr ← GPR[base] + sign_extend(offset) \
&memWord ← memory[paddr] \
&Condition ← memWord[0]\
&if\quad Condition\quad then\
&\qquad grfIndex←rt\
&else\
&\qquad grfIndex←base\
&endif\
&GPR[grfIndex]←memWord
\end{flalign}
$$
第二次课上
T1 fdiv
课上题一开始有bug所以换了个题,居然刚好换了上上周的题,是我室友写过的题
Fast DIV
| 31……26 | 25……21 | 20……16 | 15…11 | 10…6 | 5……0 |
|---|---|---|---|---|---|
| op 000000 |
rs | rt | 0 00000 |
0 00000 |
fdiv 101100 |
题目描述:
乘除槽阻塞周期为3,其他与有符号除法相同
操作:
$$
\begin{align}
&HI\ ←\ GPR[rs]\ %\ GPR[rt] \
&LO\ ←\ GPR[rs]\ \ /\ GPR[rt]\
\end{align}
$$
T2 jabs
Jump ABSolute value
| 31……26 | 25……21 | 20……16 | 15……0 |
|---|---|---|---|
| op 101100 |
rs | rt | offset |
题目描述:
采用一种新的计算偏移量方式对于跳转偏移进行计算
操作:
$$
\begin{flalign}
&I:\
&\qquad new_offset ← sign_extend(offset||0^2) +(abs(GPR[rs]-GPR[rt])[29:0]||0^2)\
&\qquad addr ← PC+4+new_offset\
&I+1:\
&\qquad PC ← addr\
\end{flalign}
$$
其他:
求绝对值时,我们认为寄存器内容为有符号数
//写一下我的abs(GPR[rs]-GPR[rt])实现 |
T3 lwm
Load Word depend on Memory
| 31……26 | 25……21 | 20……16 | 15……0 |
|---|---|---|---|
| op 101100 |
base | rt | offset |
题目描述:
将要写入的寄存器编号改为访存结果减GPR[rt]的值的后5位
操作:
$$
\begin{flalign}
&vaddr ← GPR[base] + sign_extend(offset) \
&paddr ← vaddr_{31…2}||0^2\
&memWord ← memory[paddr]-GPR[rt] \
&grfindex ← memWord[4:0]\
&GPR[grfindex] ← memory[paddr]
\end{flalign}
$$
这个题需要注意的是,在M级使用了
GPR[rt]的值,不是rt的值,也就是说这个值需要用和sw一样的操作得到,我们需要做的操作是在D_Contoller里使D_rt_Tuse=2



