计算机体系结构 国科大胡伟武 课后习题期末题库重点选集解析Ⅰ(2-3章)
第2章 计算机系统结构基础
第一题 MIPS
1.在3台不同指令系统的计算机上运行同一程序P时,A机需要执行
答案:
A为10MIPS,B为20MIPS,C为40MIPS。三台机器实际性能相同。题目问的是运行程序P时的性能。
解析:
首先,我们需要计算每台机器在运行程序P时的实际速度,以MIPS(百万指令每秒)为单位。
MIPS的计算公式为:
对于A机:
-
指令数:
-
执行时间:10秒
-
MIPS值:
对于B机:
-
指令数:
-
执行时间:10秒
-
MIPS值:
对于C机:
-
指令数:
-
执行时间:10秒
-
MIPS值:
比较性能:
虽然C机的MIPS值最高,为40 MIPS,但所有机器运行程序P的实际执行时间都是10秒。因此,在运行程序P时,三台机器的实际性能是相同的。
原因分析:
-
MIPS的局限性:MIPS值仅反映了机器执行指令的速度,但不考虑每条指令的功能强度和指令集的差异。不同的机器可能需要执行不同数量的指令来完成同一任务。
-
程序执行时间:真正衡量程序性能的是执行时间。尽管C机的MIPS值最高,但由于它需要执行更多的指令(
条),最终执行时间与其他机器相同。
结论:
在运行程序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。
- 总功耗
:
步骤2:估算在1.1V下的静态功耗
已知在时钟不翻转、1.05V时,电流为0.5A。
-
静态功耗在1.05V时为:
假设漏电流与电压的平方成正比(一般情况下,漏电流对电压的依赖可以近似为指数关系,但为了简化计算,我们采用平方关系)。
-
计算电压比例因子:
因此,静态功耗在1.1V时为:
步骤3:计算在1.1V、1GHz时的动态功耗
- 动态功耗
:
步骤4:确定动态功耗与频率的关系
动态功耗与频率成正比,即:
步骤5:计算在500MHz时的动态功耗
-
计算频率比例因子:
-
因此,动态功耗在500MHz时为:
步骤6:计算在500MHz时的总功耗
- 总功耗
:
总结:
-
静态功耗的计算:利用时钟不翻转时的电流,假设漏电流与电压平方成正比,计算出在目标电压下的静态功耗。
-
动态功耗的计算:通过总功耗减去静态功耗得到动态功耗,利用动态功耗与频率成正比的关系,计算出不同频率下的动态功耗。
-
总功耗的计算:将静态功耗和动态功耗相加,得到在特定频率下的总功耗。
第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 + (尾数位对应的值)
尾数位对应的值:
因此,
步骤4:计算实际值
由于指数很小,结果是一个接近于零的正数:
答案:
0x07FF0000 表示的十进制数约为
(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:计算实际值
答案:
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:计算实际值
注意到我们的尾数计算有误,实际上,第51位对应2−12{-1},第48位对应2−42。但题目中第51位是0
,第50位是1
,所以尾数实际上是:
因此,M=1+0.3125=1.3125M = 1 + 0.3125 = 1.3125
重新计算实际值:
答案:
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
- 尾数位对应的值:
计算实际值:
答案:
0x8008000000000000 表示的十进制数约为
(3) 将十进制数转换为单精度浮点数:
(a) -100.0
步骤1:确定符号位
- 符号位 (S):
1
(负数)
步骤2:将数字转换为二进制
- 100.0 的二进制表示为
1100100.0
- 规范化为:
步骤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
- 规范化为:
步骤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
- 规范化为:
步骤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
- 规范化为:
步骤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 ≈
- 0xBE400000 = -0.1875
- 0xFF800000 = 负无穷大
- 0x07FF0000 ≈
- 双精度数转换为十进制数:
- 0x4035000000000000 = 21.0
- 0x8008000000000000 ≈
- 十进制数转换为单精度浮点数:
- -100.0 = 0xC2C80000
- 0.25 = 0x3E800000
- 十进制数转换为双精度浮点数:
- 1024.0 = 0x4090000000000000
- 0.25 = 0x3FD0000000000000
第三题 晶体管级电路图
3.画出
题目解析
题目要求画出表达式 e=(a&b)∣(c&d)e = (a & b) | (c & d) 的晶体管级电路图,同时通过图片已经提供了解释和解答。
逻辑表达式简化:
-
原表达式:
-
化为非门实现:
-
根据逻辑电路设计原理,逻辑运算可以通过 CMOS 的 P 管(逻辑高电平)和 N 管(逻辑低电平)搭建,其中:
- 与门:通过 N 管串联实现。
- 或门:通过 P 管并联实现。
- 非门:通过单级 CMOS 反相器实现。
电路图分解
- 第一部分:
和- a&ba & b:通过 N 管串联 和 P 管并联 实现。
- c&dc & d:同样通过 N 管串联 和 P 管并联 实现。
- 第二部分:
和- 将第一部分的输出通过 CMOS 反相器,实现逻辑非操作。
- 第三部分:
- 对第二部分的两个非门输出,通过 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):
- 反相器自身的延迟,与负载无关。
- 本题中给出
。
- 负载延迟(Load Delay):
- 由于驱动负载电容产生的延迟。
- 负载延迟可以通过以下公式计算:
- 其中 k 是单位负载延迟(每 pF 延迟),本题中
。
已知条件:
- 反相器的输入电容:
。 - 平均每个负载连线电容:
。 - 本征延迟:
。 - 翻转延迟单位:
。 。
计算负载延迟:
反相器驱动 4 个相同反相器时,总的负载电容为:
代入已知值:
负载延迟为:
计算 FO4 总延迟:
总延迟为:
代入已知值:
总结:
- 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 触发器,求出以下三个参数:
- 建立时间
- 保持时间
- 时钟到 Q 的延迟
基本参数说明:
- 反相器延迟:
- 传输门延迟:
- 从栅到漏/源的延迟:
- 从漏到源的延迟:
- 从栅到漏/源的延迟:
- 时钟信号传播延迟:
(假设时延一致)
解析过程:
1. 建立时间
建立时间定义为时钟信号到达
数据从D 端传到触发器内部1N1 节点,需要经过路径:
-
D → N0 → N1 的延迟:
-
N1 → N2 → N1 的延迟(环路内状态改变):
此外,还需考虑时钟信号传播到传输门控制端的延迟:
取最小值:
同时加上传输门的栅到漏/源延迟:
综合计算建立时间:
2. 保持时间
保持时间定义为时钟信号到达 CKCK 之后,数据 DD 必须保持稳定的最小时间。
关键在于时钟信号到达时,传输门 N0N0 需要完全关闭,保证数据 DD 不再进入节点 N1N1。
-
时钟信号传播到传输门控制端的延迟:
取最大值:
-
加上传输门的栅到漏/源延迟:
-
数据 D→N0→N1D → N0 → N1 的路径延迟:
综合计算保持时间:
3. 时钟到 Q 的延迟
时钟到 Q 的延迟定义为时钟下降沿到来后,Q 输出端反映触发器状态的时间。
数据从 N2 → N3 → N4 → Q 传递,并需要考虑时钟控制传输门的延迟。
-
N2 → N3 → N4 → Q 的延迟:
-
时钟信号传播到传输门控制端的延迟:
取最大值:
-
加上传输门的栅到漏/源延迟:
综合计算时钟到 Q 的延迟:
最终答案:
- 建立时间:
- 保持时间:
- 时钟到 Q 的延迟:
参考文献
本文作者:孤飞
本文链接:https://www.cnblogs.com/ranxi169/p/18561259
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步