4.1~4.4节不做具体总结
这几个小节只记录以下我难以理解的点。当时没理解好的。
不做总结是因为,这几节的内容重度依赖特定的例子。
它就是需要一个例子去阐释的,不好做总结,还有就是各小节相互依赖递进,书上的内容足够的好了。如果有遗忘还是回头看书比较合适。
4.2节逻辑设计的一般方法
组合逻辑:
组合逻辑就是数字逻辑电路的与门还有就是或门组合而成的一个逻辑单元。这个单元没有内置的存储区,所以相同的输入经过相同的逻辑运算就会得出相同的结果。如果有内置的存储的空间,那么存储的空间里的值可能会影响我们的计算结果。
状态单元:
这个单元没有组合逻辑,但是可以存储一个状态(或者说一个值)那么这个元素内部包含一个存储的空间。
状态单元有两个输入(数据的输入和时钟控制输入),和一个输出。
时钟控制输入时控制输入状态单元的数据什么时候可以被写入。
时钟策略
计算机不可存在不可预测性:
例如:
组合逻辑单元从状态单元读取数据的时候,状态单元正在写数据,那么组合逻辑单元就可能读到的数据是新的或者是旧的或者是新旧混合的.这就是不可预测性.
时钟策略就是用来解决这个问题的,规范好逻辑单元什么时候从状态单元读到数据,状态单元什么时候可以写入数据.
边沿触发器
就是在一个时钟周期内,当初一个寄存器的内容,再经过组合逻辑得出结果写入寄存器。这个操作要再一个时间周期内完成,不对因为竞争而导致不确定的数据。因为一个时钟周期只能执行一条指令。
4.5流水线
流水线就是使得指令重叠执行,提高数据链路内的硬件资源的利用率。
一条指令的执行分为五步(以本书为例):
1.从指令存储器中取指令
2.翻译指令(主控制器),并且读寄存器(寄存器文件)。
3.运算器执行操作
4.从数据存储器中读取操作数(load指令,store指令,如果有需要)
5.将运算器运算结果写回寄存器中(如果有需要)
当前一条指令N执行完了第一步,此时pc寄存器和指令存储器处于空闲状态,那么就可以让第N+1调指令执行取值操作,此时并不影响第N条指令执行第二部。这就是流水线,后一条执行执行前一条执行留下的空闲的数据链路中的硬件资源。
流水线并不是直接提高cpu的性能,而是通过提高cpu的吞吐率来提高cpu的执行性能。通过执行指令间中,同时,但是访问不同资源硬件,进行并行操作。
例如有五条执行指令:
第一条:执行第五步
第二条:执行第四步
第三条:执行第三步
第四条:执行第二部
第五条:执行第五步
这样不同执行虽然同时执行,但是并不互相影响.这就是并行思想的利用例子。
流水线冒险
就是在流水线执行中,会出现的问题。
-
结构冒险:
就是所第N条指令所需要数据通路中的硬件资源没有得到释放,即还被第N-1条指令所使用,导致第N条指令无法执行,这就是结构冒险。 例如: 如果数据存储器和指令存储器集成到一个存储器中,那么当同一周期内有一条指令在执行第四步,那么执行的 指令就不能执行第一步,这就导致了结构冒险。
-
数据冒险:
执行指令所需要的数据还未准备好,就是说第N条指令的计算数据依赖前面的指令,但是那个指令还没执行到第五步,把数据存入寄存器中去,导致第N条指令无法在该预定是时间内执行。 解决方法就是设置旁路,那第N条依赖的指令,在执行完第三步就直接将结果的一个备份传送到该指令的运算器中的一端。
-
控制冒险:
就是流水线指令中有一条跳转执行,这条指令下面的指令并不是我们想要执行的指令. 解决方法就是流水线阻塞:当执行的指令是分支指令时,阻塞流水线,直到分支指令得到下一条指令后才解除阻塞状态。