欢迎大家来到IT世界,在知识的湖畔探索吧!
ALU指令的执行过程
32-bits(4-bytes)ADD指令格式如下:
需要硬件做如下的事情:
- 提取(FETCH):在当前周期读入32位指令,由程序计数器PC指定。
- 解码(DECODE):解码指令中的[31:26] 位的操作码(ADD、SUB、XOR、…等), [25:21]位指定的目的寄存器,[20:16] 、[15:11] 位分别指定的源操作数所在的寄存器、 ;用于数据路径的控制信号。
- 读取(READ)操作数:从寄存器文件中的寄存器、 读取操作数
- 执行(EXECUTE)操作:进行相应的操作,并为程序计数器PC计算下一个值。
- 写入(WRITE-BACK):将操作结果写回寄存器文件中的寄存器。
系统的时钟信号连接寄存器文件和PC寄存器,在时钟的上升沿将写入在执行阶段计算的新值。因此时钟上升沿标志着当前指令的执行结束,并且使下一条指令执行的开始。
时钟周期,即时钟上升沿之间的间隔时间需要足够长以适应上述5个步骤的逻辑的累计传播延迟。
由于每个时钟周期执行一条指令,因此时钟频率告诉我们执行指令的速率。举个例子,若时钟周期是10ns,则时钟频率为100Mhz,我们的Beta的最大性能就是100MIPS。
指令的获取和解码(Instruction Fetch/Decode)
使用程序计数器 来提取下一条指令。这里有一个草图,显示了提取和解码步骤所需要的硬件。
- 使用PC作为指令内存的地址,PC的值就是当前指令的地址
- 使用了2路MUX,用信号Reset控制,提过了复位机制。当RESET=1,初始化PC的值,当RESET=0,产生新的PC。
- PCPC+4,将PC加4,在下一个时钟周期的上升沿,其值进入PC寄存器,作为下一条指令的地址。
- 从指令内存读取指令:直接使用指令中的一些域(寄存器代码,16-bit常数);使用[31:26]产生控制信号。
下面就让我们逐步实现所有ALU指令的数据路径的逻辑电路。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/102387.html