计算机组成和设计 - 建立数据通路

279 阅读6分钟

建立数据通路

数据通路单元

在RISCV实现中,数据通路单元包括指令存储器,数据存储器,寄存器堆,ALU和加法器。

程序计数器

包含当前程序正在执行的指令地址的寄存器

指令存储器用于存储程序的指令,并根据给定地址提供指令。程序计数器用于保存当前指令的地址。 最后还需要一个加法器来增加PC的值以获得下一条指令的地址。这个加法器是一个组合逻辑电路。

存取指令需要两个状态单元,两个状态单元分别是指令存储器和程序计数器。因为数据通路不会写入指令,所以指令存储器只提供读访问。 因此将其视为组合逻辑,任何时刻的输出都反映了输入地址内容的变化,而不需要都控制信号。在加载程序时需要写入指令存储器。 程序计数器是一个64位寄存器,他在每个时钟周期结束都会被写入,不要要控制信号。

加法器是一个ALU,计算两个64位输入的加法并输出结果。

要执行任意一条指令,首先要从存储器中取出指令。为准备执行下一条指令,必须增加程序计数器的值,使其指向下一条指令,即向后移动4个字节。取出指令并增加PC以获得下一条指令的地址。

R型指令,这类指令读取两个寄存器,对它们的内容执行ALU操作,再将结果写回寄存器。这些指令称为R型指令或算术逻辑指令。因为他们执行算术或逻辑运算。这类指令包括add sub and or指令。

处理器的32个通用寄存器位于寄存器堆的结构中。寄存器堆是寄存器的集合。其中的寄存器可以通过指定的寄存器号来进行读写。寄存器堆包含了计算机的寄存器状态。

寄存器堆: 包含一系列寄存器的状态单元,可通过所提供的寄存器号进行读写。

输入寄存器的位宽为5位,用于指定32个寄存器中的一个,而数据输入总线和两个数据输出总线均为64位宽。

RISCV的存取指令,一般形式为1dx1,offsetx2或sdx1,offsetx2。这类指令通过将基址寄存器x2与指令中包含的12位有符号偏移量相加。得到存储器地址。

对于存储指令,从就寄存器x1中读出要存储的数据。如果是载入指令,从存储器读出数据写入指定的寄存器x1。

此外还需要一个单元将指令中的12位偏移量符号扩展位64位有符号数,以及一个执行读写操作的数据存储单元。数据存储单元在存储指令时被写入,所以它有读写控制信号,地址输入和写入存储器的数据输入。

符号扩展:

为增加数据的长度,将原数据的最高位复制到新数据多出来的高位。

实现存储指令和载入指令还需要两个单元: 数据存储单元和立即数生成单元。数据存储单元是一个状态单元,他有地址世俗如和写数据输出,以及读取结果的单个输出。读写控制信号相互独立。立即数生成单元有一个32位指令的输入,如果是载入,存储和分支成立的分支指令,它将指令中的一个12位字段扩展为64位结果输出。假定数据存储单元的写是边沿触发的。

beq指令有三个操作数,其中两个寄存器用于比较是否相等,另一个是12位偏移量,用于计算相对于分支指令所在地址的分支木鸟地址,指令格式是beq x1,x2,offset。

为实现beq,需要将PC值与符号扩展后的指令偏移量相加以得到分支目标地址。

分支目标地址:分支指令中指定的地址,如果分支发送,该地址称为新的程序计数器的值。在RISCV体系结构中,分支目标地址为该指令的偏移量字段与分支指令所在地址的和。

指令系统体系结构规定了计算分支目标地址的基址是分支指令所在地址。

指令系统体系结构还说明了计算分支目标地址时,将偏移量左移1位,这样偏移量的有效范围就扩大到2倍。

在计算目标地址的同时,必须确定时顺序执行的下一条指令,还是执行分支目标地址处的指令。当分支条件为真时,分支目标地址成为新的PC,我们就说分支发生。

因此,分支指令的数据通路需要执行两个操作:计算分支目标地址和检测分支条件。 为计算分支目标地址,分支指令数据通路包含一个立即数生成单元和一个加法器。为执行比较。

分支指令数据通路通过ALU检测分支条件是否成立,并使用单独的加法器将PC和符号扩展左移一位,相加。得到分支目标地址。

分支指令将指令中的12位偏移量左移一位与PC相加。移位通过简单的给偏移量后面加一个0实现.

建立一个数据通路

需要一个指令存储器和一个与之分开的数据存储器。

例题: 建立数据通路。

算术逻辑指令使用ALU时,输入ALU的数据来自两个寄存器。存储类指令也使用ALU进行地址计算,但是第二个输入是对指令中12位偏移量进行符号扩展后的值。

存入目标寄存器的值来来及ALU和存储器(载入指令)。

位存储类指令和算术逻辑指令的操作部分建立数据通路,只能使用寄存器堆和一个ALU,并添加必要的多路选择器。

这里描述的单周期数据通路必须有独立的指令存储器和数据存储器。

处理器在一个周期只能操作每个部件一次,而在一个周期内不可能对一个(单端口)存储器进行两次存取。