跳转到内容

2024—2025 学年第二学期《计算机组成与系统结构》A 卷答案与解析

本答案按照课程 PPT、课程题库及试卷给出的数据通路约定整理。
数学公式使用 LaTeX;涉及微指令编码时,微指令第 1 位位于最左侧。


已知:

x=0.01111,y=+0.11001x=-0.01111,\qquad y=+0.11001

数值位为 5 位,使用双符号位变形补码。

xx 为负数。先写出正数:

+0.01111+0.01111

求补:

00.01111
按位取反:11.10000
末位加 1:11.10001

所以:

[x]=11.10001[x]_{\text{补}}=11.10001

yy 为正数:

[y]=00.11001[y]_{\text{补}}=00.11001 [x]+[y]=11.10001+00.11001=00.01010\begin{aligned} [x]_{\text{补}}+[y]_{\text{补}} &=11.10001+00.11001\\ &=00.01010 \end{aligned}

双符号位为 00,没有溢出。

因此:

x+y=+0.01010\boxed{x+y=+0.01010}

也可以写为:

x+y=+0.0101\boxed{x+y=+0.0101}

十进制验证:

1532+2532=1032=516-\frac{15}{32}+\frac{25}{32} =\frac{10}{32} =\frac{5}{16}

补码减法转化为:

xy=x+(y)x-y=x+(-y)

y=0.11001-y=-0.11001 的变形补码为:

+y:00.11001
取反:11.00110
加 1:11.00111

所以:

[y]=11.00111[-y]_{\text{补}}=11.00111

计算:

[x]+[y]=11.10001+11.00111=10.11000\begin{aligned} [x]_{\text{补}}+[-y]_{\text{补}} &=11.10001+11.00111\\ &=10.11000 \end{aligned}

双符号位为 10,表示负溢出,也叫下溢。

真值验证:

xy=15322532=4032=1.25x-y=-\frac{15}{32}-\frac{25}{32} =-\frac{40}{32} =-1.25

定点小数的表示范围为:

1x125-1\leq x\leq1-2^{-5}

1.25-1.25 超出表示范围。

答案:

[xy]=10.11000\boxed{[x-y]_{\text{补}}=10.11000} xy 发生下溢(负溢)\boxed{x-y\text{ 发生下溢(负溢)}}

已知:

X=+1116=+0.1011X=+\frac{11}{16}=+0.1011 Y=716=0.0111Y=-\frac{7}{16}=-0.0111

符号位 1 位,数值位 4 位。

[X]=0.1011[X]_{\text{补}}=0.1011

YY 为负数:

+0.0111
取反:1.1000
加 1:1.1001

所以:

[Y]=1.1001[Y]_{\text{补}}=1.1001

乘积符号位为两个操作数符号位异或:

SZ=SXSYS_Z=S_X\oplus S_Y SZ=01=1S_Z=0\oplus1=1

所以乘积为负数。

带求补器的补码阵列乘法器先把数值部分转换成绝对值:

X=X=1011X'=|X|=1011 Y=Y=0111Y'=|Y|=0111
1011
× 0111
--------
1011
1011
1011
0000
--------
01001101

所以绝对值乘积为:

X×Y=0.01001101|X\times Y|=0.01001101

由于结果为负数,需要对数值结果求补:

01001101
按位取反:10110010
末位加 1:10110011

所以:

[X×Y]=1.10110011[X\times Y]_{\text{补}}=1.10110011

其二进制真值为:

X×Y=0.01001101X\times Y=-0.01001101

十进制验证:

1116×(716)=77256\frac{11}{16}\times\left(-\frac{7}{16}\right) =-\frac{77}{256}

最终答案:

[X×Y]=1.10110011\boxed{[X\times Y]_{\text{补}}=1.10110011} X×Y=0.01001101\boxed{X\times Y=-0.01001101}

已知:

  • CPU 地址总线为 20 位,地址空间为 1MB1MB
  • 数据总线为 8 位;
  • ROM 芯片容量为 128K×8128K\times8 位;
  • RAM 区域共 256KB256KB
  • SRAM 芯片规格为 128K×4128K\times4 位;
  • 采用 74LS138 译码器进行片选。

单片 SRAM 的数据宽度只有 4 位,而 CPU 数据总线为 8 位,所以两片 SRAM 必须并联扩展位数:

RAM1:连接 D0~D3
RAM2:连接 D4~D7

两片共同组成:

128K×8 位128K\times8\text{ 位}

这称为一组 RAM。

RAM 区域总容量为 256KB256KB,所以需要两组:

256KB128KB=2 组\frac{256KB}{128KB}=2\text{ 组}

共需 SRAM 芯片:

2×2=4 片2\times2=4\text{ 片}

每个芯片的片内地址线为:

A16A0A_{16}\sim A_0

共 17 位,可寻址:

217=128K2^{17}=128K

高位地址:

A19A18A17A_{19}A_{18}A_{17}

输入 74LS138。每个译码输出对应一个 128KB128KB 地址区间。

各译码区间为:

译码输出A19A18A17A_{19}A_{18}A_{17}地址范围
Y0\overline{Y_0}00000000H~1FFFFH
Y1\overline{Y_1}00120000H~3FFFFH
Y2\overline{Y_2}01040000H~5FFFFH
Y3\overline{Y_3}01160000H~7FFFFH
Y4\overline{Y_4}10080000H~9FFFFH

根据图中连接:

  • ROM 接 Y0\overline{Y_0}
  • 第一组 RAM 接 Y3\overline{Y_3}
  • 第二组 RAM 接 Y4\overline{Y_4}

ROM 容量为 128KB128KB,起始地址为:

00000H00000H

末地址为:

00000H+20000H1=1FFFFH00000H+20000H-1=1FFFFH

答案:

ROM00000H1FFFFH\boxed{ROM:00000H\sim1FFFFH}

第一组 RAM:

60000H7FFFFH\boxed{60000H\sim7FFFFH}

第二组 RAM:

80000H9FFFFH\boxed{80000H\sim9FFFFH}

完整答案:

存储区域地址范围
ROM00000H~1FFFFH
第一组 RAM60000H~7FFFFH
第二组 RAM80000H~9FFFFH

已知:

  • 主存容量为 16M16M 字;
  • Cache 容量为 128K128K 字;
  • 每块为 256 字;
  • 按字编址;
  • 采用 8 路组相联。

主存共有:

16M=22416M=2^{24}

个字,所以主存地址为 24 位。

每块有:

256=28256=2^8

个字,所以块内偏移字段为 8 位。

Cache 块数:

128K256=21728=29=512\frac{128K}{256} =\frac{2^{17}}{2^8} =2^9 =512

采用 8 路组相联,每组 8 块,因此 Cache 组数为:

5128=64=26\frac{512}{8}=64=2^6

组索引字段为 6 位。

标记字段:

2468=1024-6-8=10

主存地址划分:

┌──────────┬────────────┬──────────────┐
│ Tag 10位 │ 组索引 6位 │ 块内偏移 8位 │
└──────────┴────────────┴──────────────┘

(2)求两个地址的 Cache 组号和 Tag

Section titled “(2)求两个地址的 Cache 组号和 Tag”

计算方法:

块内偏移=Amod28\text{块内偏移}=A\bmod2^8 组号=(A>>8)mod26\text{组号}=(A>>8)\bmod2^6 Tag=A>>14\text{Tag}=A>>14

写成字段:

11C110H
= 0001000111 | 000001 | 00010000
Tag 组号 块内偏移

所以:

组号=01H\text{组号}=01H Tag=047H\text{Tag}=047H

写成字段:

3A4BF0H
= 0011101001 | 001011 | 11110000
Tag 组号 块内偏移

所以:

组号=0BH\text{组号}=0BH Tag=0E9H\text{Tag}=0E9H

答案:

主存地址Cache 组号Tag
11C110H01H047H
3A4BF0H0BH0E9H

因为 Cache 初始为空,两次访问均不命中,需要把对应主存块装入相应组中的任一空闲行。


指令格式:

┌────────┬────────┬──────────┐
│ OP 6位 │ MOD 2位│ D 8位 │
└────────┴────────┴──────────┘

寻址方式:

MOD寻址方式有效地址
00相对寻址EA=PC+SignExt(D)EA=PC+\operatorname{SignExt}(D)
01基址寻址EA=RB+SignExt(D)EA=R_B+\operatorname{SignExt}(D)
10直接寻址EA=DEA=D
11变址寻址EA=RX+SignExt(D)EA=R_X+\operatorname{SignExt}(D)

已知:

(RX)=2023H(R_X)=2023H (RB)=5507H(R_B)=5507H PC=2000HPC=2000H

二进制字段:

111101 | 00 | 10000000
OP MOD D
MOD=00MOD=00

采用相对寻址。D=80HD=80H 是 8 位补码:

80H=128=0080H80H=-128=-0080H

所以:

EA=2000H0080H=1F80HEA=2000H-0080H=1F80H

答案:

EA=1F80H\boxed{EA=1F80H}
001110 | 10 | 01110110
MOD=10MOD=10

采用直接寻址:

EA=D=76HEA=D=76H

写成 16 位地址:

EA=0076H\boxed{EA=0076H}
011010 | 11 | 10010010
MOD=11MOD=11

采用变址寻址。

D=92HD=92H 作为 8 位补码:

92H=110=006EH92H=-110=-006EH

符号扩展后:

SignExt(92H)=FF92H\operatorname{SignExt}(92H)=FF92H

所以:

EA=2023H+FF92H=1FB5HEA=2023H+FF92H=1FB5H

答案:

EA=1FB5H\boxed{EA=1FB5H}
001101 | 01 | 01100000
MOD=01MOD=01

采用基址寻址:

EA=5507H+0060H=5567HEA=5507H+0060H=5567H

答案:

EA=5567H\boxed{EA=5567H}
100000 | 11 | 00100000
MOD=11MOD=11

采用变址寻址:

EA=2023H+0020H=2043HEA=2023H+0020H=2043H

答案:

EA=2043H\boxed{EA=2043H}

根据数据流和控制信号:

编号部件
程序计数器 PC
地址寄存器 AR
主存储器 MEM
算术逻辑单元 ALU
通用寄存器组 Regs

答案:

PC,AR,MEM,ALU,Regs\boxed{①PC,\quad②AR,\quad③MEM,\quad④ALU,\quad⑤Regs}

取指周期同时完成两件事:

  1. 根据 PC 给出的地址取出指令;
  2. 修改 PC,使其指向下一条指令。
PCARPC\rightarrow AR PCXPC\rightarrow X

控制信号:

PCout,ARin,Xin
X+4ZX+4\rightarrow Z

控制信号:

+4
ZPCZ\rightarrow PC M[AR]DRM[AR]\rightarrow DR

控制信号:

Zout,PCin,Read,DREin
DRIRDR\rightarrow IR

控制信号:

DRout,IRin

完整取指数据通路:

取指令:
PC → AR → MEM → DR → IR
修改 PC:
PC → X → ALU(+4) → Z → PC

指令:

sub rd, rs, rt

RTL 功能:

R[rd]R[rs]R[rt]R[rd]\leftarrow R[rs]-R[rt]

(1)执行周期的操作与控制信号

Section titled “(1)执行周期的操作与控制信号”
节拍操作高电平控制信号
T1R[rs]XR[rs]\rightarrow XRout,Xin
T2XR[rt]ZX-R[rt]\rightarrow ZRout,Rs/Rt,SUB
T3ZR[rd]Z\rightarrow R[rd]Zout,RegDst,Rin

所以题目空格:

① R[rs]X\boxed{①\ R[rs]\rightarrow X} ② Rout, Rs/Rt, SUB\boxed{②\ Rout,\ Rs/Rt,\ SUB}

微指令共 29 位:

操作控制字段:1~22 位
判别测试字段:23~24 位
下址字段:25~29 位

控制信号位序如下:

控制信号控制信号
1PCout12Xin
2DRout13Rin
3Rout14IRin
4IR(A)out15PSWin
5Zout16Rs/Rt
6IR(I)out17RegDst
7DREout18ADD
8PCin19+4
9ARin20SUB
10DREin21Read
11DRin22Write
23PIRP_{IR}24PequalP_{equal}

有效控制信号:

Rout,Xin

即第 3 位和第 12 位为 1。

下一条微指令位于 26 单元:

26=(11010)226=(11010)_2

29 位编码:

00100000000100000000000011010

左侧补 3 个 0,按 32 位转换为十六进制:

0000 0100 0000 0010 0000 0000 0001 1010

所以:

25 单元:0402001AH\boxed{25\text{ 单元:}0402001AH}

有效控制信号:

Rout,Rs/Rt,SUB

即第 3、16、20 位为 1。

下一条微指令位于 27 单元:

27=(11011)227=(11011)_2

29 位编码:

00100000000000010001000011011

补零转换:

0000 0100 0000 0000 0010 0010 0001 1011

所以:

26 单元:0400221BH\boxed{26\text{ 单元:}0400221BH}

有效控制信号:

Zout,Rin,RegDst

即第 5、13、17 位为 1。

执行结束后需要根据 IR 中的操作码进入下一条机器指令对应的微程序,因此令:

PIR=1P_{IR}=1

下址字段置 0。

29 位编码:

00001000000010001000001000000

补零转换:

0000 0001 0000 0001 0001 0000 0100 0000

所以:

27 单元:01011040H\boxed{27\text{ 单元:}01011040H}
控存地址二进制微指令十六进制
25001000000001000000000000110100402001AH
26001000000000000100010000110110400221BH
270000100000001000100000100000001011040H

十六进制结果采用“29 位微指令左侧补 3 个 0”的写法。阅卷时最好先写二进制字段,再写十六进制,能够避免位序约定造成误会。


流水线由 5 个功能段组成:

S1 → S2 → S3 → S4 → S5

每段延迟均为 Δt\Delta t,需要计算:

F=i=110AiF=\sum_{i=1}^{10}A_i

共需要:

101=910-1=9

次加法。

为了缩短总时间,不能简单地从左到右串行相加,而应采用树形分组。

第一层:

B1=A1+A2B_1=A_1+A_2 B2=A3+A4B_2=A_3+A_4 B3=A5+A6B_3=A_5+A_6 B4=A7+A8B_4=A_7+A_8 B5=A9+A10B_5=A_9+A_{10}

第二、三层可安排为:

C1=B1+B2C_1=B_1+B_2 C2=B3+B4C_2=B_3+B_4 C3=C1+B5C_3=C_1+B_5

最后:

F=C3+C2F=C_3+C_2

各加法任务启动时间:

任务运算启动时钟
B1B_1A1+A2A_1+A_21
B2B_2A3+A4A_3+A_42
B3B_3A5+A6A_5+A_63
B4B_4A7+A8A_7+A_84
B5B_5A9+A10A_9+A_{10}5
C1C_1B1+B2B_1+B_27
C2C_2B3+B4B_3+B_49
C3C_3C1+B5C_1+B_512
FFC3+C2C_3+C_217

时空图:

时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
S1 B1 B2 B3 B4 B5 C1 C2 C3 F
S2 B1 B2 B3 B4 B5 C1 C2 C3 F
S3 B1 B2 B3 B4 B5 C1 C2 C3 F
S4 B1 B2 B3 B4 B5 C1 C2 C3 F
S5 B1 B2 B3 B4 B5 C1 C2 C3 F

最后一个任务在第 21 拍完成,所以:

Tp=21ΔtT_p=21\Delta t

流水线共完成 9 个加法任务:

TP=921ΔtTP=\frac{9}{21\Delta t}

约分:

TP=37Δt\boxed{TP=\frac{3}{7\Delta t}}

不使用流水线时,每次加法需要经过 5 个功能段:

Ts=9×5Δt=45ΔtT_s=9\times5\Delta t=45\Delta t

所以:

Sp=TsTp=45212.14S_p=\frac{T_s}{T_p} =\frac{45}{21} \approx2.14

答案:

Sp2.14\boxed{S_p\approx2.14}

流水线有 5 个功能段:

η=Ts5Tp\eta= \frac{T_s}{5T_p} η=455×21=3742.9%\eta= \frac{45}{5\times21} =\frac{3}{7} \approx42.9\%

答案:

η42.9%\boxed{\eta\approx42.9\%}

共有 32 个处理器,处理器编号使用 5 位二进制表示。

第 19 号处理器:

19=(10011)219=(10011)_2

CubeiCube_i 将第 ii 位取反,其余位不变。最低位为第 0 位。

对第 3 位取反:

Cube3(10011)=11011Cube_3(10011)=11011 (11011)2=27(11011)_2=27

答案:

27\boxed{27} PM2+i(x)=(x+2i)mod32PM2_{+i}(x)=(x+2^i)\bmod32

所以:

PM2+2(19)=(19+22)mod32=23PM2_{+2}(19) =(19+2^2)\bmod32 =23

答案:

23\boxed{23}

全混洗相当于把 5 位编号循环左移一位:

Shuffle(P4P3P2P1P0)=P3P2P1P0P4Shuffle(P_4P_3P_2P_1P_0) =P_3P_2P_1P_0P_4

所以:

Shuffle(10011)=00111Shuffle(10011)=00111 (00111)2=7(00111)_2=7

答案:

7\boxed{7}

Butterfly 交换最高位和最低位:

Butterfly(P4P3P2P1P0)=P0P3P2P1P4Butterfly(P_4P_3P_2P_1P_0) =P_0P_3P_2P_1P_4

19 的最高位和最低位均为 1,因此交换后不变:

Butterfly(10011)=10011Butterfly(10011)=10011

答案:

19\boxed{19}

(5)Shuffle(Cube0(PM21))Shuffle(Cube_0(PM2_{-1}))

Section titled “(5)Shuffle(Cube0(PM2−1))Shuffle(Cube_0(PM2_{-1}))Shuffle(Cube0​(PM2−1​))”

先执行:

PM21(19)=(1921)mod32=17PM2_{-1}(19) =(19-2^1)\bmod32 =17 17=(10001)217=(10001)_2

再执行 Cube0Cube_0,把最低位取反:

Cube0(10001)=10000Cube_0(10001)=10000

最后执行 Shuffle:

Shuffle(10000)=00001Shuffle(10000)=00001 (00001)2=1(00001)_2=1

答案:

1\boxed{1}

汇总:

互连函数相连处理器
Cube3Cube_327
PM2+2PM2_{+2}23
Shuffle7
Butterfly19
Shuffle(Cube0(PM21))Shuffle(Cube_0(PM2_{-1}))1

计算:

S=i=18aibiS=\sum_{i=1}^{8}a_i b_i

已知:

  • 一次乘法需要 4 拍;
  • 一次加法需要 2 拍;
  • SIMD 和 MIMD 中相邻处理器传数需要 1 拍;
  • SIMD 有 8 个 PE,采用双向线性环;
  • MIMD 有 8 个处理机,任意两个处理机之间有直接通路。

8 项点积需要:

  • 8 次乘法;
  • 7 次加法。

全部串行执行:

TSISD=8×4+7×2T_{\text{SISD}} =8\times4+7\times2 TSISD=32+14=46T_{\text{SISD}}=32+14=46

答案:

46 拍\boxed{46\text{ 拍}}

(2)具有一个加法器和乘法器的并行流水 SISD

Section titled “(2)具有一个加法器和乘法器的并行流水 SISD”

乘法器和加法器可以并行工作。

乘法器连续完成 8 次乘法:

8×4=328\times4=32

拍。

前面的加法可以与后续乘法重叠,最后一次加法必须等待最后一个乘积产生后再完成,因此总时间为:

T并行SISD=8×4+2=34T_{\text{并行SISD}} =8\times4+2 =34

答案:

34 拍\boxed{34\text{ 拍}}

每个 PE 负责一项乘法,8 个 PE 同时执行:

T=4T_{\text{乘}}=4

拍。

接下来对 8 个乘积进行树形归约。

因为:

8=238=2^3

需要 3 级加法:

T=3×2=6T_{\text{加}}=3\times2=6

拍。

在双向环上归约时,关键路径的传送距离可安排为:

1, 1, 21,\ 1,\ 2

所以通信时间:

T通信=1+1+2=4T_{\text{通信}}=1+1+2=4

拍。

总时间:

TSIMD=4+6+4=14T_{\text{SIMD}} =4+6+4 =14

答案:

14 拍\boxed{14\text{ 拍}}

(4)8 个处理机的 MIMD 全连接系统

Section titled “(4)8 个处理机的 MIMD 全连接系统”

8 个处理机同时完成 8 次乘法:

T=4T_{\text{乘}}=4

拍。

树形归约需要 3 级,每级包含一次直接传送和一次加法:

T归约=3×(1+2)=9T_{\text{归约}} =3\times(1+2) =9

拍。

总时间:

TMIMD=4+9=13T_{\text{MIMD}} =4+9 =13

答案:

13 拍\boxed{13\text{ 拍}}
计算机系统最短时间
串行 SISD46 拍
加法器、乘法器可并行的 SISD34 拍
8 个 PE 的 SIMD 双向环14 拍
8 个处理机的 MIMD 全连接13 拍

题号答案
1(1)x+y=+0.01010x+y=+0.01010,无溢出
1(2)补码结果 10.11000,下溢(负溢)
2[X×Y]=1.10110011[X\times Y]_{\text{补}}=1.10110011,真值 0.01001101-0.01001101
3(1)ROM:00000H~1FFFFH
3(2)RAM 第一组:60000H~7FFFFH;第二组:80000H~9FFFFH
4(1)Tag 10 位,组索引 6 位,块内偏移 8 位
4(2)11C110H→组01H,Tag 047H3A4BF0H→组0BH,Tag 0E9H
题号答案
11F80H,0076H,1FB5H,5567H,2043H
2(1)①PC,②AR,③MEM,④ALU,⑤Regs
2(2)PCARMEMDRIRPC\to AR\to MEM\to DR\to IRPCXALU(+4)ZPCPC\to X\to ALU(+4)\to Z\to PC
3(1)R[rs]XR[rs]\to X;② Rout、Rs/Rt、SUB
3(2)25:0402001AH26:0400221BH27:01011040H
题号答案
1TP=3/(7Δt)TP=3/(7\Delta t)Sp2.14S_p\approx2.14η42.9%\eta\approx42.9\%
227,23,7,19,1
3串行 SISD 46 拍;并行流水 SISD 34 拍;SIMD 14 拍;MIMD 13 拍