第2章 计算机系统结构基础
第一题
1.在3台不同指令系统的计算机上运行同一程序P时,A机需要执行\(1.0×10^8\)条指令,B机需要执行\(2.0×10^8\)条指令,C机需要执行\(4.0×10^8\)条指令,但实际执行时间都是\(10s\)。请分别计算这3台机器在运行程序P时的实际速度,以MIPS为单位。这3台计算机在运行程序P时,哪一台性能最高?为什么?
答案:
A为10MIPS,B为20MIPS,C为40MIPS。三台机器实际性能相同。题目问的是运行程序P时的性能。
解析:
首先,我们需要计算每台机器在运行程序P时的实际速度,以MIPS(百万指令每秒)为单位。
MIPS的计算公式为:
\[\text{MIPS} = \frac{\text{指令数}}{\text{执行时间(秒)} \times 10^6} \]对于A机:
-
指令数:\(1.0 \times 10^8\)
-
执行时间:10秒
-
MIPS值:
\[\text{MIPS}_A = \frac{1.0 \times 10^8}{10 \times 10^6} = 10 \, \text{MIPS} \]
对于B机:
-
指令数:\(2.0 \times 10^8\)
-
执行时间:10秒
-
MIPS值:
\[\text{MIPS}_B = \frac{2.0 \times 10^8}{10 \times 10^6} = 20 \, \text{MIPS} \]
对于C机:
-
指令数:\(4.0 \times 10^8\)
-
执行时间:10秒
-
MIPS值:
\[\text{MIPS}_C = \frac{4.0 \times 10^8}{10 \times 10^6} = 40 \, \text{MIPS} \]
比较性能:
虽然C机的MIPS值最高,为40 MIPS,但所有机器运行程序P的实际执行时间都是10秒。因此,在运行程序P时,三台机器的实际性能是相同的。
原因分析:
-
MIPS的局限性:MIPS值仅反映了机器执行指令的速度,但不考虑每条指令的功能强度和指令集的差异。不同的机器可能需要执行不同数量的指令来完成同一任务。
-
程序执行时间:真正衡量程序性能的是执行时间。尽管C机的MIPS值最高,但由于它需要执行更多的指令(\(4.0 \times 10^8\)条),最终执行时间与其他机器相同。
结论:
在运行程序P时,三台机器的性能是相同的。因为它们完成相同任务所需的时间一致,即10秒。
第五题
5.对某处理器进行功耗测试,得到如下数据:时钟不翻转,电压1.05V时,电流为500mA;时钟频率为1GHz,电压1.1V时,电流为2500mA。请计算在1.1V下,此处理器的静态功耗以及500MHz下的总功耗。
答案:
- 在1.1V下,处理器的静态功耗约为0.576W。
- 在500MHz时,处理器的总功耗约为1.663W。
解析:
要计算处理器在1.1V下的静态功耗以及500MHz时的总功耗,我们需要分解总功耗为静态功耗和动态功耗,并利用已知数据进行推导。
步骤1:计算在1.1V、1GHz时的总功耗
已知在1.1V、1GHz时,电流为2.5A。
- 总功耗$ P_{\text{total_1GHz}} $:\[P_{\text{total\_1GHz}} = V \times I = 1.1\,\text{V} \times 2.5\,\text{A} = 2.75\,\text{W} \]
步骤2:估算在1.1V下的静态功耗
已知在时钟不翻转、1.05V时,电流为0.5A。
-
静态功耗在1.05V时为:
\[P_{\text{static\_1.05V}} = V \times I = 1.05\,\text{V} \times 0.5\,\text{A} = 0.525\,\text{W} \]假设漏电流与电压的平方成正比(一般情况下,漏电流对电压的依赖可以近似为指数关系,但为了简化计算,我们采用平方关系)。
-
计算电压比例因子:
\[\left( \frac{1.1}{1.05} \right)^2 = \left(1.0476\right)^2 \approx 1.0975 \]因此,静态功耗在1.1V时为:
\[P_{\text{static\_1.1V}} = P_{\text{static\_1.05V}} \times 1.0975 = 0.525\,\text{W} \times 1.0975 \approx 0.576\,\text{W} \]
步骤3:计算在1.1V、1GHz时的动态功耗
- 动态功耗$ P_{\text{dynamic_1GHz}} $:\[P_{\text{dynamic\_1GHz}} = P_{\text{total\_1GHz}} - P_{\text{static\_1.1V}} = 2.75\,\text{W} - 0.576\,\text{W} = 2.174\,\text{W} \]
步骤4:确定动态功耗与频率的关系
动态功耗与频率成正比,即:
\[P_{\text{dynamic}} \propto f \]步骤5:计算在500MHz时的动态功耗
-
计算频率比例因子:
\[\frac{500\,\text{MHz}}{1\,\text{GHz}} = \frac{0.5\,\text{GHz}}{1\,\text{GHz}} = 0.5 \] -
因此,动态功耗在500MHz时为:
\[P_{\text{dynamic\_500MHz}} = P_{\text{dynamic\_1GHz}} \times 0.5 = 2.174\,\text{W} \times 0.5 = 1.087\,\text{W} \]
步骤6:计算在500MHz时的总功耗
- 总功耗$ P_{\text{total_500MHz}} $:\[P_{\text{total\_500MHz}} = P_{\text{static\_1.1V}} + P_{\text{dynamic\_500MHz}} = 0.576\,\text{W} + 1.087\,\text{W} = 1.663\,\text{W} \]
总结:
-
静态功耗的计算:利用时钟不翻转时的电流,假设漏电流与电压平方成正比,计算出在目标电压下的静态功耗。
-
动态功耗的计算:通过总功耗减去静态功耗得到动态功耗,利用动态功耗与频率成正比的关系,计算出不同频率下的动态功耗。
-
总功耗的计算:将静态功耗和动态功耗相加,得到在特定频率下的总功耗。
第3章 二进制与逻辑电路
第二题
2.按照以下要求将浮点数表示出来。
(1)把单精度数转化为十进制数:0x7ff0000,0xbe400000,0xff800000。
(2)把双精度数转化为十进制数:0x4035000000000000,0x8008000000000000。
(3)把十进制数转化为单精度数:-100.0,0.25。
(4)把十进制数转化为双精度数:1024.0,0.25。
参考答案:
解析:
本题要求在IEEE 754标准下进行浮点数和十进制数之间的转换。我们将分别解决每个小题,并详细解释每个步骤。
(1) 将单精度浮点数转换为十进制数:
(a) 0x07FF0000
步骤1:将十六进制数转换为二进制数
0x07FF0000 转换为二进制:
0 7 F F 0 0 0 0
0000 0111 1111 1111 0000 0000 0000 0000
步骤2:提取符号位、指数位和尾数位
- 符号位 (S):第31位,
0
(正数) - 指数位 (E):第30位到第23位,
00001111
,转换为十进制是15
- 尾数位 (F):第22位到第0位,
11110000000000000000000
步骤3:计算阶码和尾数
- 阶码 (e):
E - 127 = 15 - 127 = -112
- 尾数 (M):
1 + (尾数位对应的值)
尾数位对应的值:
\[\text{Fraction} = 2^{-1} + 2^{-2} + 2^{-3} + 2^{-4} = 0.5 + 0.25 + 0.125 + 0.0625 = 0.9375 \]因此,\(M = 1 + 0.9375 = 1.9375\)
步骤4:计算实际值
\[\text{Value} = (-1)^S \times M \times 2^e = 1 \times 1.9375 \times 2^{-112} \]由于指数很小,结果是一个接近于零的正数:
\[\text{Value} \approx 1.9375 \times 2^{-112} \approx 3.73 \times 10^{-34} \]答案:
0x07FF0000 表示的十进制数约为 \(3.73×10−343.73 \times 10^{-34}\)。
(b) 0xBE400000
步骤1:将十六进制数转换为二进制数
B E 4 0 0 0 0 0
1011 1110 0100 0000 0000 0000 0000 0000
步骤2:提取符号位、指数位和尾数位
- 符号位 (S):
1
(负数) - 指数位 (E):
01111100
,十进制为124
- 尾数位 (F):
10000000000000000000000
步骤3:计算阶码和尾数
- 阶码 (e):
124 - 127 = -3
- 尾数位对应的值:
因此,M=1+0.5=1.5M = 1 + 0.5 = 1.5
步骤4:计算实际值
\[\text{Value} = (-1)^1 \times 1.5 \times 2^{-3} = -1.5 \times 0.125 = -0.1875 \]答案:
0xBE400000 表示的十进制数为 -0.1875。
(c) 0xFF800000
步骤1:将十六进制数转换为二进制数
F F 8 0 0 0 0 0
1111 1111 1000 0000 0000 0000 0000 0000
步骤2:提取符号位、指数位和尾数位
- 符号位 (S):
1
(负数) - 指数位 (E):
11111111
(全为1) - 尾数位 (F):
10000000000000000000000
(尾数位非零)
步骤3:判断特殊值
在IEEE 754标准中,当指数位全为1且尾数位为零时,表示无穷大;如果尾数位非零,则表示 NaN(非数字)。
由于尾数位非零,因此:
答案:
0xFF800000 表示的值为 负无穷大。
(2) 将双精度浮点数转换为十进制数:
(a) 0x4035000000000000
步骤1:将十六进制数转换为二进制数
4 0 3 5 0 0 0 0 0 0 0 0 0 0 0 0
0100 0000 0011 0101 0000 ...(后面全为0)
步骤2:提取符号位、指数位和尾数位
- 符号位 (S):
0
(正数) - 指数位 (E):
1000000011
,十进制为1027
- 尾数位 (F):
010100000...
(只有第51位和第48位为1,其余为0)
步骤3:计算阶码和尾数
- 阶码 (e):
1027 - 1023 = 4
- 尾数位对应的值:
因此,M=1+0.0703125=1.0703125M = 1 + 0.0703125 = 1.0703125
步骤4:计算实际值
\[\text{Value} = 1 \times 1.0703125 \times 2^4 = 1.0703125 \times 16 = 17.125 \]注意到我们的尾数计算有误,实际上,第51位对应2−12{-1},第48位对应2−42。但题目中第51位是0
,第50位是1
,所以尾数实际上是:
因此,M=1+0.3125=1.3125M = 1 + 0.3125 = 1.3125
重新计算实际值:
\[\text{Value} = 1 \times 1.3125 \times 16 = 21 \]答案:
0x4035000000000000 表示的十进制数为 21.0。
(b) 0x8008000000000000
步骤1:将十六进制数转换为二进制数
8 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0
1000 0000 0000 1000 0000 ...(后面全为0)
步骤2:提取符号位、指数位和尾数位
- 符号位 (S):
1
(负数) - 指数位 (E):
00000000000
(全为0) - 尾数位 (F):第51位为
1
,其余为0
步骤3:计算实际值
由于指数位为0且尾数位非零,这是一个非规范化数(次正规数)。
- 阶码 (e):
1 - 1023 = -1022
- 尾数位对应的值:
计算实际值:
\[\text{Value} = -1 \times 0.000244140625 \times 2^{-1022} \approx -1.1125369292536007 \times 10^{-308} \]答案:
0x8008000000000000 表示的十进制数约为 \(−1.1125369×10−308-1.1125369 \times 10^{-308}\)。
(3) 将十进制数转换为单精度浮点数:
(a) -100.0
步骤1:确定符号位
- 符号位 (S):
1
(负数)
步骤2:将数字转换为二进制
- 100.0 的二进制表示为
1100100.0
- 规范化为:\(1.100100 \times 2^{6}\)
步骤3:计算指数位
- 阶码 (e):
6
- 指数位 (E):
e + 127 = 6 + 127 = 133
- 指数位二进制表示:
10000101
步骤4:计算尾数位
- 尾数位 (F):
10010000000000000000000
(将小数部分填充至23位)
步骤5:组合位串并转换为十六进制
位串:
S | E | F
1 | 10000101 | 10010000000000000000000
转换为十六进制:
1 10000101 10010000000000000000000
= C2C80000
答案:
-100.0 的单精度浮点表示为 0xC2C80000。
(b) 0.25
步骤1:确定符号位
- 符号位 (S):
0
(正数)
步骤2:将数字转换为二进制
- 0.25 的二进制表示为
0.01
- 规范化为:\(1.0 \times 2^{-2}\)
步骤3:计算指数位
- 阶码 (e):
-2
- 指数位 (E):
-2 + 127 = 125
- 指数位二进制表示:
01111101
步骤4:尾数位
- 尾数位 (F):
00000000000000000000000
(因为小数部分为0)
步骤5:组合位串并转换为十六进制
位串:
S | E | F
0 | 01111101 | 00000000000000000000000
转换为十六进制:
0 01111101 00000000000000000000000
= 3E800000
答案:
0.25 的单精度浮点表示为 0x3E800000。
(4) 将十进制数转换为双精度浮点数:
(a) 1024.0
步骤1:确定符号位
- 符号位 (S):
0
(正数)
步骤2:将数字转换为二进制
- 1024.0 的二进制表示为
10000000000.0
- 规范化为:\(1.0 \times 2^{10}\)
步骤3:计算指数位
- 阶码 (e):
10
- 指数位 (E):
10 + 1023 = 1033
- 指数位二进制表示:
10000001001
步骤4:尾数位
- 尾数位 (F):
000...0
(共52位,全为0)
步骤5:组合位串并转换为十六进制
位串:
S | E | F
0 | 10000001001 | 000...0(共52位)
转换为十六进制:
0 10000001001 000...0
= 4090000000000000
答案:
1024.0 的双精度浮点表示为 0x4090000000000000。
(b) 0.25
步骤1:确定符号位
- 符号位 (S):
0
(正数)
步骤2:将数字转换为二进制
- 0.25 的二进制表示为
0.01
- 规范化为:\(1.0 \times 2^{-2}\)
步骤3:计算指数位
- 阶码 (e):
-2
- 指数位 (E):
-2 + 1023 = 1021
- 指数位二进制表示:
01111111101
步骤4:尾数位
- 尾数位 (F):
000...0
(共52位,全为0)
步骤5:组合位串并转换为十六进制
位串:
S | E | F
0 | 01111111101 | 000...0(共52位)
转换为十六进制:
0 01111111101 000...0
= 3FD0000000000000
答案:
0.25 的双精度浮点表示为 0x3FD0000000000000。
总结:
- 单精度数转换为十进制数:
- 0x07FF0000 ≈ \(3.73×10−343.73 \times 10^{-34}\)
- 0xBE400000 = -0.1875
- 0xFF800000 = 负无穷大
- 双精度数转换为十进制数:
- 0x4035000000000000 = 21.0
- 0x8008000000000000 ≈ \(-1.1125369 \times 10^{-308}\)
- 十进制数转换为单精度浮点数:
- -100.0 = 0xC2C80000
- 0.25 = 0x3E800000
- 十进制数转换为双精度浮点数:
- 1024.0 = 0x4090000000000000
- 0.25 = 0x3FD0000000000000
第三题
3.画出\(e=a\&b|c\&d\)的晶体管级电路图
题目解析
题目要求画出表达式 e=(a&b)∣(c&d)e = (a & b) | (c & d) 的晶体管级电路图,同时通过图片已经提供了解释和解答。
逻辑表达式简化:
-
原表达式:
\(e = (a \& b) | (c \& d)\)
-
化为非门实现:
\(e = \sim (\sim (a \& b) \& \sim (c \& d))\)
-
根据逻辑电路设计原理,逻辑运算可以通过 CMOS 的 P 管(逻辑高电平)和 N 管(逻辑低电平)搭建,其中:
- 与门:通过 N 管串联实现。
- 或门:通过 P 管并联实现。
- 非门:通过单级 CMOS 反相器实现。
电路图分解
- 第一部分:\((a \& b)\) 和 \((c \& d)\)
- a&ba & b:通过 N 管串联 和 P 管并联 实现。
- c&dc & d:同样通过 N 管串联 和 P 管并联 实现。
- 第二部分:\(\sim (a \& b)\) 和 \(\sim (c \& d)\)
- 将第一部分的输出通过 CMOS 反相器,实现逻辑非操作。
- 第三部分:\(\sim (\sim (a \& b) \& \sim (c \& d))\)
- 对第二部分的两个非门输出,通过 N 管串联 和 P 管并联 实现逻辑与操作。
- 最后通过一个 CMOS 反相器对结果再次取反,得到最终输出。
注意点
- 逻辑设计原则:
- N 管负责接地,处理低电平。
- P 管负责接电源,处理高电平。
- 不能颠倒,否则电路无法正常工作。
- 电路实现注意:
- 两级与非门电路使用 CMOS 的串并联结构来实现。
- 电路需要保证输出端的驱动能力,因此必须在最后一级加反相器进行缓冲和逻辑调整。
- 课本上方案:
- 第一级实现 (a&b)(a & b) 和 (c&d)(c & d) 的逻辑非。
- 第二级实现整体逻辑非的输出。
- 最后通过反相器得到最终结果。
总结
- e = (a & b) | (c & d) 的逻辑通过两级与非门电路加反相器实现。
- 电路图按照 CMOS 原理设计,其中 N 管和 P 管搭配确保逻辑功能和可靠性。
- 注意串联和并联结构的功能和连接要求。
第四题
4.计算一个FO4
的延迟,假设反相器的输入电容为0.0036pF,平均每个负载连线电容为0.0044pF,翻转延迟为0.023ns,每pF延迟为4.5ns。
参考答案:
题目解析:
题目要求计算一个 FO4 的延迟,给出了反相器输入电容、负载连线电容、翻转延迟和其他相关参数。参考答案中已经给出了公式和部分推导过程,以下是详细解析。
FO4 延迟的定义:
FO4(Fan-Out of 4)是数字电路中衡量逻辑延迟的重要参数之一,指的是一个反相器驱动 4 个相同反相器时的延迟。其延迟由以下两部分组成:
- 本征延迟(Intrinsic Delay):
- 反相器自身的延迟,与负载无关。
- 本题中给出 \(本征延迟=0.023 ns\text{本征延迟} = 0.023 \, \text{ns}\)。
- 负载延迟(Load Delay):
- 由于驱动负载电容产生的延迟。
- 负载延迟可以通过以下公式计算: \(负载延迟=k⋅负载电容⋅C\text{负载延迟} = k \cdot \text{负载电容} \cdot C\)
- 其中 k 是单位负载延迟(每 pF 延迟),本题中 \(k=4.5 ns/pFk = 4.5 \, \text{ns/pF}\)。
已知条件:
- 反相器的输入电容:\(Cin=0.0036 pFC_{\text{in}} = 0.0036 \, \text{pF}\)。
- 平均每个负载连线电容:\(Cwire=0.0044 pFC_{\text{wire}} = 0.0044 \, \text{pF}\)。
- 本征延迟:\(τintrinsic=0.023 ns\tau_{\text{intrinsic}} = 0.023 \, \text{ns}\)。
- 翻转延迟单位:\(k=4.5 ns/pFk = 4.5 \, \text{ns/pF}\)。
- \(Fan-out = 4\)。
计算负载延迟:
反相器驱动 4 个相同反相器时,总的负载电容为:
\[Ctotal=4⋅(Cin+Cwire)C_{\text{total}} = 4 \cdot (C_{\text{in}} + C_{\text{wire}}) \]代入已知值:
\[Ctotal=4⋅(0.0036+0.0044)=4⋅0.008=0.032 pFC_{\text{total}} = 4 \cdot (0.0036 + 0.0044) = 4 \cdot 0.008 = 0.032 \, \text{pF} \]负载延迟为:
\[τload=k⋅Ctotal=4.5⋅0.032=0.144 ns\tau_{\text{load}} = k \cdot C_{\text{total}} = 4.5 \cdot 0.032 = 0.144 \, \text{ns} \]计算 FO4 总延迟:
总延迟为:
\[τFO4=τintrinsic+τload\tau_{\text{FO4}} = \tau_{\text{intrinsic}} + \tau_{\text{load}} \]代入已知值:
\[τFO4=0.023+0.144=0.167 ns\tau_{\text{FO4}} = 0.023 + 0.144 = 0.167 \, \text{ns} \]总结:
- FO4 延迟 = 0.167 ns
- 本题计算方法与参考答案一致,明确了 FO4 延迟的两部分来源,即本征延迟和负载延迟。
- 如果题目中对 FO4 的定义发生变化(如驱动多个反相器或调整负载计算方式),需根据定义修正公式。
第五题
5.分析附图3.1的CMOS EDFF触发器(边沿触发的CMOS D触发器)的建立时间、保持时间和CLK→Q延迟。假设反相器的延迟为1ns,传输门从源到漏(或从漏到源)的延迟为0.5ns,传输门从栅到漏(或源)的延迟为0.75ns,不考虑由于latch的fight对反相器延迟的影响。
参考答案:
题目解析:
分析图 3.1 的 CMOS EDFF 边沿触发 D 触发器,求出以下三个参数:
- 建立时间 \(T_{\text{setup}}\)
- 保持时间\(T_{\text{hold}}\)
- 时钟到 Q 的延迟\(T_{\text{CK→Q}}\)
基本参数说明:
- 反相器延迟: \(1 ns\)
- 传输门延迟:
- 从栅到漏/源的延迟:\(0.75 ns\)
- 从漏到源的延迟:\(0.5 ns\)
- 时钟信号传播延迟:
- \(T_{\text{CK→C}} = 2 \, \text{ns}\)
- \(T_{\text{CK→CN}} = 2 \, \text{ns}\)(假设时延一致)
解析过程:
1. 建立时间 \(T_{\text{setup}}\)
建立时间定义为时钟信号到达 \(CK\) 之前,触发器内部状态必须完成改变并稳定的时间。
数据从D 端传到触发器内部1N1 节点,需要经过路径:
-
D → N0 → N1 的延迟:
\[1 ns (反相器)+0.5 ns (传输门)=1.5 ns \] -
N1 → N2 → N1 的延迟(环路内状态改变):
\[1 ns+1 ns=2 ns \]
此外,还需考虑时钟信号传播到传输门控制端的延迟:
取最小值:\(min(T_{CK→C},T_{CK→CN)}=min(2,2)=2 ns\)
同时加上传输门的栅到漏/源延迟:\(0.75 ns\)
综合计算建立时间:
\[T_{setup}=1.5 ns+2 ns+2 ns+0.75 ns−2 ns=0.75 ns \]2. 保持时间 \(T_{\text{hold}}\)
保持时间定义为时钟信号到达 CKCK 之后,数据 DD 必须保持稳定的最小时间。
关键在于时钟信号到达时,传输门 N0N0 需要完全关闭,保证数据 DD 不再进入节点 N1N1。
-
时钟信号传播到传输门控制端的延迟:
取最大值:\(\max(T_{\text{CK→C}}, T_{\text{CK→CN}}) = \max(2, 2) = 2 \, \text{ns}\)
-
加上传输门的栅到漏/源延迟:\(0.75 ns\)
-
数据 D→N0→N1D → N0 → N1 的路径延迟:\(1 ns+0.5 ns=1.5 ns\)
综合计算保持时间:
\[T_{\text{hold}} = 2 \, \text{ns} + 0.75 \, \text{ns} - 1.5 \, \text{ns} = 1.25 \, \text{ns} \]3. 时钟到 Q 的延迟\(T_{\text{CK→Q}}\)
时钟到 Q 的延迟定义为时钟下降沿到来后,Q 输出端反映触发器状态的时间。
数据从 N2 → N3 → N4 → Q 传递,并需要考虑时钟控制传输门的延迟。
-
N2 → N3 → N4 → Q 的延迟:
\[0.5 ns+1 ns+1 ns=2.5 \text{ns} \] -
时钟信号传播到传输门控制端的延迟:
取最大值:\(\max(T_{\text{CK→C}}, T_{\text{CK→CN}}) = 2 \, \text{ns}\)
-
加上传输门的栅到漏/源延迟:\(0.75 \, \text{ns}\)
综合计算时钟到 Q 的延迟:
\[T_{\text{CK→Q}} = 2 \, \text{ns} + 0.75 \, \text{ns} + 2.5 \, \text{ns} = 5.25 \, \text{ns} \]最终答案:
- 建立时间:\(T_{\text{setup}} = 0.75 \, \text{ns}\)
- 保持时间:\(T_{\text{hold}} = 1.25 \, \text{ns}\)
- 时钟到 Q 的延迟:\(T_{\text{CK→Q}} = 5.25 \, \text{ns}\)
参考文献
[1] 国科大胡伟武老师计算机体系结构课后答案(最新版) from CSDN.
标签:10,text,times,胡伟武,课后,步骤,习题,ns,延迟 From: https://www.cnblogs.com/ranxi169/p/18561259