标签:
本章内容是处理器体系结构,重点掌握ISA,并能举一反三;本章带着大家设计并实现了一个结合CISC和RISC思想的处理器Y86,一个类IA32体系的处理器;ISA在编译器编写者和处理器设计者之间提供了一个抽象。
流水线部分4.4-4.5供学有余力的同学自学
对于Y86,当遇到这些异常的时候,我们就简单地让处理器停止执行指令。在更完整的的设计中,处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。就像在第8章中讲述的,异常处理程序可以被配置成不同的结果,例如,放弃程序或者调用一个用户自定义的信号处理程序。
程序中以“.”开头的词是汇编器命令。
图4-11多路复用器根据输入控制信号的值,从一组不同的数据信号中选出一个,在这个单个位的多路复用器中,两个数据信号是输入位a和b,控制信号是输入位s,当s为1时,输出等于a:而当s为0时,输出等于b。在这个电路中,我们可以看出两个AND门决定了是否将它们相对应的数据输入传送到OR门。
HCL表达式很清楚地表明了组合逻辑电路和C语言中逻辑表达式的对应之处。它们都是用布尔操作来对输入进行计算的函数。值得注意的是,这两种表达计算的方法之间有以下区别:
因为组合电路是由一系列的逻辑门组成,它的属性是输出会持续地响应输入的变化。如果电路的输入变化了,在一定的延时之后,输出也会相应的变化。相比之下,C表达式只会在程序执行过程中被遇到时才进行求值。
C的逻辑表达式允许参数是任意整数,0表示FALSE,其他任何值都表示TRUE。而逻辑门只对位值0和1进行操作.
C的逻辑表达式有个属性就是它们可能只被部分求值。如果―个AND或OR操作的结果只用对第一个参数求值就能确定,那么就不会对第二个参数求值了。
在处理器设计中,很多时候都需要将一个信号与许多可能匹配的信号做比较,以此来检测正在处理的某个指令代码是否属于某一类指令代码。
为了产生时序电路,我们必须引入按位存储信息的设备。存储设备都是由同一个时钟控制,时钟是一个周期性信号,决定什么时候要把新值加载到设备中。考虑两类存储器设备:
1.时钟寄存器(简称寄存器)存储单个位或字。时钟信号控制寄存器加载输入值。
2.随机访问存储器(简称存储器)存储多个字,用地址来选择该读或该写哪个字。随机访问存储器的例子包括:1)处理器的虚拟存储器系统,硬件和操作系统软件结合起来使处理器可以在一个很大的地址空间内访问任意的字;2)寄存器文件,在此,寄存器标识符作为地址。在IA32或Y86处理器中,寄存器文件有8个程序寄存器。
大多数时候,寄存器都保持在稳定状态(用×表示)产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播这时,产生了一个新的寄存器输入(用y表示)但只要时钟是低电位的,寄存器的输出就仍然保持不变。当时钟变成高电位的时候,输入信号就加载到寄存器中,成为下一个状态y直到下一个时钟上升沿,这个状态就一直是寄存器的新输出。关键是寄存器是作为电路不同部分中的组合逻辑之间的屏障。每当每个时钟到达上升沿时,值才会从寄存器的输入传送至输出。
通常,处理一条指令包括很多操作。将它们组织成某个特殊的阶段序列,即使指令的动作差异很大,但所有的指令都遵循统一的序列。每一步的具体操作取决于正在执行的指令。创建这样的框架,我们便能设计一个充分利用硬件的处理器。简略描述:
取指
译码
执行
访存
写回
更新PC
我们面临的一个挑战是将每条不同指令所需要的计算放入到上述那个通用框架中。我们会使用图4-17中所示的代码来描述不同Y86指令的处理。表中的这种格式很容易映射到硬件,表中的每一行都描述了一个信号或存储状态的分配。阅读时可以把它看成是从上至下的顺序求值。当我们将这些计算映射到硬件时,会发现其实并不需要严格按照顺序来执行这些求值。
硬件单元与各个处理阶段相关联:
SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器,随机访问存储器(寄存器文件、指令存储器和数据存储器)。组合逻辑不需要任何时序或控制。对于较小的存储器来说(例如寄存器文件)这是一个合理的假设,而对于较大的电路来说,可以用特殊的时钟电路来模拟这个效果。由于指令存储器只用来读指令,因此我们可以将这个单元看成是组合逻辑。
寄存器文件有四个端口,它支持同时进行两个读(在端口A和B上)和两个写(在端口E和M)。每个端口都有一个地址连接和―个数据连接,地址连接是一个寄存器ID,而数据连接是一组32根线路,既可以作为寄存器文件的输出字,也可以作为它的输入字。如果某个地址端口上的值为特殊标识符0xF,则表明不需要访问寄存器。
4.1 4.2 4.5 4.6 4.8 4.10 4.11 4.12 4.16 4.17 4.19 4.21 4.24
以习题驱动,再看书,有问题及时在答疑论坛问
1 课程QQ群中,或官网下载Y86模拟器,验证教材上不少于三人HCL代码
2.构建YIS环境:
cd ~/Code/shiyanlou_cs413
wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
tar -xvf sim.tar
cd sim
sudo apt-get install tk
sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
make
3.YIS手册下载
4.YIS测试:
cd y86-code
进入测试代码,教材p239页代码为asuml.ys,可以通过
make asuml.yo
进行汇编,asuml.yo就是汇编后的结果,见教材p238。
make all
可以汇编运行所有代码结果。
标签:
原文地址:http://www.cnblogs.com/heiguirenxi/p/4889505.html