尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

计算机组成原理第5章CPU课后习题:微操作、控制器与流水线精讲

计算机组成原理第5章CPU课后习题:微操作、控制器与流水线精讲 这本书的课后习题第5章是公认的分水岭。前面几章还能靠背概念混过去到了第5章画数据通路、算时序、推微操作序列、判流水线相关一个都躲不掉稍微一含糊就整道题连锁崩盘。我前后带过几届学弟学妹过《计算机组成原理》这门课也自己啃过“微课版”这本教材不止一遍答疑记录攒了厚厚一沓翻下来问题最集中的就是第5章——也就是中央处理器这一块。很多同学私信我说前面存储系统、指令系统还能看懂一翻到CPU就直接懵了课后题更是无从下手。所以我打算把第5章课后习题按题型系统整理一遍不是只给答案而是把每类题背后的原理、推导过程、易错点全部摊开讲。你看完之后不管手上的题号怎么变题型怎么绕都能自己顺下来。这篇文章适合正在赶作业、准备期末、或者准备考研复试要重刷组成原理的同学小白也能看懂我会尽量用生活化的比喻把抽象概念讲透。1. 第5章到底考什么先搞清楚章节骨架再谈做题1.1 微课版第5章的定位和知识地图翻开微课版这本教材第5章的标题基本就是“中央处理器”。这一章在整门课里的地位很特殊前面第3章讲的存储系统、第4章讲的指令系统其实都是在给第5章铺垫——CPU是那个“把所有零件串起来干活的总指挥”。你可以把它想象成一个餐厅后厨指令系统是菜谱存储系统是冰箱和储物架而CPU就是那个同时负责接单、取料、炒菜、装盘的主厨数据通路是他的手和灶台控制器是他的大脑。第5章主要包含五块内容CPU的功能与基本结构、指令周期、数据通路与微操作、控制器又分硬布线和微程序两种实现、以及指令流水线。这五块不是孤立的它们是一条线串下来的——先讲CPU要干什么功能再讲干一件事要花多久指令周期然后讲具体怎么动手数据通路和微操作接着讲谁指挥动手控制器最后讲怎么干得更快流水线。理解了这条主线你做题的时候就能判断每道题卡在链条的哪一环。我给学弟学妹的建议是做第5章题目之前务必先自己动手把教材上的那张“CPU内部结构框图”默画一遍标清楚AC、MQ、PC、IR、MAR、MDR这些寄存器和ALU之间的连线。为什么这么做因为第5章至少一半的题目本质都是在问“某个数据从哪个寄存器出发经过哪些部件最后落到哪里”框图不清楚全是空谈。1.2 三类高频题型和分值分布按我整理的答疑记录来看第5章课后题大致能归成三类每类的解题套路完全不同分值权重也不一样。我把它们整理成一张表你对照自己的教材题号就能对上号。题型类别典型考法解题核心分值占比估算时序与周期类计算指令执行时间、画时序图分清三种周期关系约25%微操作与控制类写微操作序列、算控制存储器容量寄存器传输语言、微指令编码约40%流水线类判相关、算加速比与吞吐率冒险判定、时空图约35%第一类偏计算靠公式和细心就能拿满第二类是重灾区很多同学在微操作序列上栽跟头其实规律性极强第三类流水线是近几年的热门也是热词里反复出现的“数据相关、结构相关”必须吃透。提示别一上来就逐题做。先把上面三类分开集中做同一类题做完一类再换下一类。同类型题目的套路一旦形成肌肉记忆考试时反应速度会快很多。1.3 做题前必须钉死的三个前置概念在动手之前有三个概念必须先钉死否则后面全是坑。第一个是寄存器传输语言的书写规范。教材里描述微操作时用的是PC → MAR、M(MAR) → MDR这种箭头记法箭头方向、括号含义括号表示“取其中的内容”一定要分清楚。MAR → M(MAR)和M(MAR) → MDR是两回事前者是往存储器写地址后者是从存储器读数据。第二个是主存与CPU的交互时序。很多题目会问“取指阶段需要几个机器周期”答案取决于数据通路的组织方式。如果采用单总线结构取一条指令至少要经过“PC送MAR、读主存到MDR、MDR送IR、PC自增”这几个节拍通常需要2到3个机器周期。第三个是控制信号的有效逻辑。有些教材标注的是高电平有效有些用带圈表示低电平有效。做控制器题时如果不注意这个最后写出来的控制信号全是反的。这三条看着简单但我见过太多人就是在这上面丢分。概念不清就做题等于闭着眼睛开车。2. 指令周期与执行流程类习题把时序走一遍就不会错2.1 指令周期、机器周期、时钟周期的三级关系这类题的第一步永远是分清三个“周期”。我用一个生活化的类比把执行一条指令想象成做一顿饭。时钟周期也叫节拍是你手腕上一次摆动的节奏是最小单位机器周期也叫CPU周期是完成一个阶段动作比如“切菜”的时间通常包含若干个时钟周期指令周期是做完一整道菜的时间包含取指、译码、执行等若干个机器周期。三者是层层包含的关系指令周期 机器周期 时钟周期。教材里常给的一个经典数据是一个机器周期包含4个时钟周期一个指令周期包含2到4个机器周期具体看指令类型。为什么机器周期要用4个时钟周期因为主存的一次读写大约需要这么长时间来稳定信号这个数不是随便定的是和存储器芯片的存取速度匹配的。做题时最容易错的地方是题目给的是“主频为X GHz”然后问“执行一条指令需要多少纳秒”。这时候要先算时钟周期 1/主频再乘以时钟周期总数。我遇到过很多同学直接把主频拿来当周期用结果差了整整一个数量级。2.2 典型题目和答案拆解我构造一道第5章最常见的题你对照自己书上的题看套路是否一致。题目某CPU主频为500 MHz机器周期包含4个时钟周期。某指令的指令周期包含3个机器周期其中取指周期2个机器周期执行周期1个机器周期。求执行这条指令需要多少纳秒解题过程先求时钟周期T 1 / (500 × 10⁶) 2 ns。一个机器周期 4 × 2 8 ns。指令周期 3 × 8 24 ns。答案就是24纳秒。这道题看似简单但陷阱在于“取指周期2个机器周期”这个描述。有的题目会写得含糊说“取指需要访问两次主存”你要能自己换算成机器周期。取指为什么要访问两次因为第一次从主存读出指令送到MDR第二次……其实标准单总线结构取指是一次访存但有些组织方式下PC自增和读指令分属两个机器周期这个要结合教材的框图判断。变式题如果等长的指令都执行100条问总时间那就是24 × 100 2400 ns即2.4微秒。这类题还会和小数位结合问“执行1000条需要多少毫秒”注意单位换算链ns → μs → ms 是每级1000倍。注意单位换算是这类题的隐形杀手。主频用Hz、时间用ns中间隔着10⁹主频用MHz和ns正好是倒数关系1 MHz对应1000 ns。养成写单位、写换算过程的习惯别跳步。2.3 时序图画法拿分的关键动作如果题目要求画时序图那一定要按节拍一格一格画横轴是时间节拍纵轴列出各部件或信号线。取指阶段标出“PC → MAR”读主存阶段标出“M → MDR”送指令标出“MDR → IR”。每个信号占几个节拍要标清楚别画成一团。我个人的习惯是先在草稿上列出所有微操作按先后顺序排好再往格子里填。顺序错了图就全反了。还有一种常见要求是“画出取指周期的微操作流程图”这个在第3节会详细讲。3. 数据通路与微操作写出正确的寄存器传输序列3.1 微操作序列的书写逻辑这是第5章的核心考点也是丢分最多的地方。所谓微操作就是控制部件发出的、能在一个时钟节拍内完成的最小操作。多条微操作按顺序排在一起就构成了一条指令的执行序列。写微操作序列的黄金法则是每一步只能有一个数据源和一个数据目的且不能同时占用同一组总线。这就是为什么单总线结构下很多操作要拆成好几步。比如要把PC的内容经过MDR送进IR单总线上没法一步到位必须先 PC → MAR再读主存再 M(MAR) → MDR再 MDR → IR一步步来。为什么要有这个限制因为总线是共享的同一时刻只能有一个部件往里送数据也只能有一个部件从里取数据。这就像一根管道同一时刻只能水流一个方向、服务一对端点。理解了这条物理限制你就明白为什么教材里的微操作总是拆得很碎。3.2 取指周期的标准微操作序列取指周期的微操作序列几乎是必考题这里给你一个标准模板对照教材可能有小差异但主干一致(PC) → MAR M(MAR) → MDR (MDR) → IR (PC) 1 → PC第一条把PC里的指令地址送给地址寄存器第二条启动读操作从主存取出指令内容送到数据寄存器第三条把指令送到指令寄存器第四条PC自增指向下一条指令。这里有个细节常被问第三条和第四条能不能换顺序答案是可以因为它们操作的是不同部件IR和PC互不干扰。但如果题目问的是“最紧凑的排法”那通常把 (PC)1 → PC 和 M(MAR) → MDR 并行安排因为PC自增和从主存取数用的部件不同可以同时进行。这就是微操作并行性的考点。3.3 间接寻址与执行周期的微操作间接寻址的题目也很典型。当指令采用间接寻址时取指结束后拿到的不是操作数而是操作数的地址。这时要多走一轮访存(IR)的地址字段 → MAR M(MAR) → MDR (MDR) → IR的地址字段形成有效地址这个过程叫“间址周期”。很多同学在这里搞混——为什么又要访问一次主存因为间接寻址的特点就是“地址的地址”指令里给的是指针得顺着指针再取一次才拿到真正的操作数地址。执行周期的微操作则完全取决于指令类型。加法指令ADD的典型序列是(IR)的地址字段 → MAR M(MAR) → MDR取操作数 (MDR) (AC) → AC累加这里要注意如果该机器有MQ乘商寄存器参与乘除法的微操作会更复杂通常是“累加器清零、被乘数送MQ、循环加/移位”这一套。做这类题时先把指令的操作语义想清楚再拆成一步步微操作大概率不会错。心得写微操作序列时我习惯在每一步后面标注它占用的部件比如“→ MAR占用总线、MAR”。这样排下来一眼就能看出哪两步冲突、哪些能并行检查起来特别快。这个小习惯帮我在考试里省了不少时间。4. 微程序控制与硬布线控制控制存储器容量怎么算4.1 微指令格式与编码方式控制器有两种实现方式硬布线也叫组合逻辑控制和微程序控制。第5章的题型里微程序控制的计算题出现频率很高因为它需要算数、需要理解编码综合性更强。微程序控制的核心思想是把每条机器指令的执行过程翻译成一段存放在控制存储器里的微程序微指令一条条读出来对应的控制信号就依次发出。这样就不需要设计复杂的组合逻辑电路用“读表”的方式实现控制灵活性高。微指令的格式分两部分操作控制字段和顺序控制字段。前者决定这一拍发出哪些控制信号后者决定下一条微指令的地址。操作控制字段的编码方式又分三种直接编码一位对应一个信号速度最快但位数最多、字段直接编码把互斥的信号编成一组节省位数但慢一点、字段间接编码更省但更复杂。教材里常考的是直接编码和字段直接编码。4.2 控制存储器容量计算题这是我等下要重点讲的必考题型。控制存储器的容量 微指令条数 × 微指令字长。微指令条数由微程序的总条数决定微指令字长等于操作控制字段位数加顺序控制字段位数。典型题目某机采用微程序控制共有机器指令20条每条指令对应平均5条微指令另有一个公共取指微程序含4条微指令微指令采用直接编码方式。若控制信号共40个微指令采用断定方式顺序控制字段8位求控制存储器容量至少多少位解题过程微指令总条数 20 × 5 4 104 条取指微程序公共只算一次这正是微程序控制“公共取指共享”的优势所在也是常考的点。直接编码下操作控制字段位数 控制信号数 40 位。加上顺序控制字段8位微指令字长 48 位。控制存储器容量 104 × 48 4992 位。这道题的关键点有两个。第一个是“公共取指微程序不重复计算”很多人会把每条指令都加一次取指导致总数虚高。第二个是“直接编码下操作控制字段位数就是控制信号总数”如果题目改成字段直接编码那就要把40个信号分成若干互斥组每组用log₂(组信号数)位位数会明显下降。换成字段直接编码的版本假如40个信号分成10组每组平均4个信号那么每组需要 ⌈log₂4⌉ 2 位10组共20位。微指令字长 20 8 28 位。容量 104 × 28 2912 位。对比直接编码省了将近40%的空间但代价是译码电路更复杂、速度略慢。这道对比题经常作为综合题出现在期末卷上。4.3 微地址的确定方式别在细节上翻车微指令执行完下一条去哪这个“微地址确定方式”也是考点。常见三种计数器方式顺序执行遇到转移修改、断定方式由下地址字段直接给、多路转移。教材里最常考的是断定方式因为它的下地址字段位数好算。有一类题会问“若采用计数器方式下地址字段需要多少位”。这时候要看微程序是否支持无条件转移和条件转移如果支持要留出转移地址字段通常不能只靠计数器自增。我当年就在这小坑上翻过车——把断定方式和计数器方式的下地址字段位数搞混了。记住断定方式需要完整的下地址字段位数等于微指令地址位数计数器方式则可能只需要少量标志位。5. 流水线三大相关数据相关、结构相关、控制相关怎么判5.1 三类相关的本质与判定方法流水线是第5章的后半段重点也是热词里反复冒出来的内容。指令流水线的思路就是把一条指令的执行拆成取指、译码、执行、访存、写回五个阶段让多条指令错开时间重叠执行。但重叠就有冲突冲突主要分三类。结构相关也叫资源相关是因为多条指令争抢同一个硬件部件产生的。比如第i条指令在第4拍要访存第i3条指令在同一拍要取指而机器只有一个存储器就会撞车。解决办法是让指令和数据分开存储哈佛结构或者加停顿。数据相关是因为后面的指令要用前面指令还没算出来的结果。典型例子ADD R1, R2后面紧跟SUB R4, R1SUB要用R1但ADD还没写回。数据相关又细分为写后读、读后写、写后写但最常见的是写后读。控制相关是因为分支指令改变了执行顺序导致后面已经预取进来的指令作废。比如JMP之后紧跟的几条指令其实是要跳过去的不相关。判定相关的方法是把每条指令拆成阶段占用时间画成时空图看有没有两格重叠在同一个部件上结构相关或者后面指令的某个阶段和前面指令的写回阶段冲突数据相关。我个人的习惯是先标出每条的读写寄存器一眼就能看出数据相关。5.2 流水线性能计算加速比与吞吐率这块的公式必须记住。设流水线有k段每段执行时间相等为Δt则非流水线执行n条指令时间 n × k × Δt流水线执行n条指令时间 (k n - 1) × Δt加速比 S (n × k) / (k n - 1)吞吐率 TP n / [(k n - 1) × Δt]当n趋于无穷时最大吞吐率 TPmax 1 / Δt为什么公式里是 n k - 1因为第一条指令填满流水线需要k拍之后每拍就能流出一条新的指令总共n条就是 k (n-1) 拍。这个推导用“装水”来理解最直观k级流水线就像k级台阶的水渠第一杯水要一级一级流到底花k个单位时间之后每过1个单位时间就有一杯水流出n杯水总共花 k n - 1 个时间单位。典型题目5段流水线每段耗时2 ns连续执行100条指令求加速比和吞吐率。答案非流水线 100 × 5 × 2 1000 ns流水线 (5 100 - 1) × 2 208 ns加速比 1000 / 208 ≈ 4.81吞吐率 100 / 208 ≈ 0.48 条/ns即4.8 × 10⁸ 条/秒。注意加速比的渐近值是k5但100条时只有4.81指令数越多越接近5。这也是为什么流水线对长程序更友好。这类题还会问“要想加速比达到4.5至少执行多少条指令”这就是解不等式。避坑流水线时空图的横轴是时间拍纵轴是指令。画的时候注意第i条指令的各阶段是斜着往右下排的不是水平排。当初我把每条指令画成横着展开结果看相关的时候全看错位置白画半天。6. 加法器进位链组间串行进位与并行进位6.1 进位概念的三种层次热词里出现了“组间串行进位”这块内容虽然常被归到运算器章节但在第5章ALC算术逻辑部件相关的综合题里经常被拉出来一起考所以必须讲清楚。进位链有几种组织形式从慢到快、从省到贵依次是串行进位逐位传递最慢、组内并行、组间串行组内用并行进位逻辑快速产生组与组之间还是一位位传、组内并行、组间并行也叫全并行最快但电路最复杂。串行进位的问题是每一个全加器都要等低位的进位到了才能算n位加法器就要等n级门延迟位数越多越慢。组内并行组间串行是个折中把n位分成若干组每组内部用超前进位逻辑一次算出组之间再用串行波传。这样延迟降到了“组内并行延迟 组间传递延迟”。6.2 进位延迟计算题典型题目某加法器为16位分4组每组4位采用组内并行、组间串行进位方式。设一位进位门的延迟为t超前进位逻辑延迟为2t。求最长进位传递延迟。解题过程组内由超前进位一次产生延迟2t。组间是串行从最低组传到最高组要经过3次组间传递4组之间传递3次每次传递算一个进位门延迟t所以组间延迟 3t。总延迟 2t 3t 5t。对比全串行的16位延迟16t和全并行的方案延迟约2t但要大量逻辑门5t是一个很划算的折中。这道题的得分点在于分清“组内”和“组间”分别用了哪种方式、延迟怎么叠加。很多同学直接把16位算成16t忘了组内是并行产生的一下就丢了分。这里还有个隐藏考点为什么要分组因为超前进位逻辑的门数随位数增长很快全16位并行实现的电路规模太大、扇入太高工程上不现实。分组就是把复杂度控制在一个可接受的范围内这是典型的“空间换时间再折中”的工程思维。7. 常见问题与排查技巧实录7.1 高频错误速查表整理完题型我把大家在第5章最容易踩的坑汇总成一张表做题前扫一眼能避免大半失误。错误类型具体表现正确做法周期混淆把主频当周期用时钟周期 1/主频先换算再计算单位错乱MHz与ns换算错误记住1 MHz ↔ 1000 ns微操作冲突同一拍写了两个数据源单总线同一时刻只能一对端点通信取指重复每条指令都补计算一次取指微程序公共取指程序只算一次编码位数直接编码和字段编码位数搞混直接编码位数信号数字段编码要取对数流水线公式用n×Δt而漏掉k-1记住 k n - 1相关判定把资源冲突和数据相关混为一谈结构相关看部件占用数据相关看读写寄存器7.2 三个独家排查技巧第一个技巧是倒推法验算微操作序列。写完之后从最后一个寄存器状态倒着推看能不能回到初始状态如果推不回去说明中间某步写反了或者漏了。这个方法我用了很多年特别管用。第二个技巧是给流水线指令标读写集。每条指令在草稿上列出它读哪些寄存器、写哪些寄存器然后两两比较如果后面指令读的寄存器正好在前面指令的写集合里就是数据相关。这个办法比画时空图快适合考试时快速判断。第三个技巧是单位先统一再计算。把所有时间量的单位先统一成ns把所有频率统一成Hz或MHz再代入公式。我见过太多错误其实是计算过程没错、单位错了。这一步花不了几秒但能救命。7.3 复习节奏和刷题建议最后说说复习节奏。第5章内容多、绕一口气全刷完容易崩。我的建议是分三天第一天啃指令周期和数据通路把微操作序列写到闭着眼能默写第二天攻控制器和微程序容量计算把直接编码和字段编码两种算各做5道第三天集中刷流水线重点练相关判定和性能计算。刷题时不要只对答案。每道错题都要问自己“是概念没懂还是算错了还是看图看错了”分类记录。我当年把错题按这三类分开记两周后重做概念类的题基本全对了剩下的就是计算细心问题。顺便提一句如果你所在学校用的是不同版本的教材题号肯定对不上但题型是通的。第5章翻来覆去就这几个套路你把上面三类题型吃透换哪本书都能应付。我给你的这些题都是按“最典型的形态”构造的你对照自己书上的题找对应类别的来做就行。真正考试的时候拼的不是做过多少原题而是看到一个陌生题能不能瞬间归到某一类、然后调出对应的解法。这个能力只能靠分类刷题练出来。
返回列表