PDF精选 - 千万精品文档,你想要的都能搜到,下载即用。

计算机体系结构实验_1.pdf

ヽ|.Candy°,35 页 386.657 KB下载文档
计算机体系结构实验_1.pdf计算机体系结构实验_1.pdf计算机体系结构实验_1.pdf计算机体系结构实验_1.pdf计算机体系结构实验_1.pdf计算机体系结构实验_1.pdf
当前文档共35页 2.88
下载后继续阅读

计算机体系结构实验_1.pdf

ARM16 16位RISC计算机设计 复旦大学 计算机学院 陈利锋 2014年4月28日 ARM16简介 • ARM16是一种简单的16位RISC CPU。它有8个16位通用寄 存器,大多数指令采用三级流水线(非流水实验时可简化为 二级),访问存储器的指令需增加一拍。 • 它的指令系统可支持最多三个操作数,对存贮器类指令,可 有寄存器间接、变址等寻址方式;对寄存器类指令,可有寄 存器、立即数等寻址方式;对跳转类指令,可有相对、寄存 器间接等寻址方式。 • 它的寻址范围为64KB(16位地址总线),数据总线为16位 ,存贮器可采用字节或字编址。在字节编址时,偶地址为低 位字节,奇地址为高位字节。读出时,16位一起读出;写 入时,WRL为写低位,WRH为写高位。在字编址时, 16位 一起读出或写入。后者实现比较简单,本实验可采用此方法 。这时应设置实验仪的总线接口为全16位方式。在这种方式 中,PC增量应该每次加1。该结构不允许字节形式的存贮器 访问,即每次存贮器访问必须以16位为单位。 2016/9/4 2 ARM16指令系统 ARM16的寄存器 • ARM16有8个16位通用寄存器,名称为R0-R7。 • ARM16有一个16位程序计数器(PC)。还可有一个16 位的堆栈指针SP和链接寄存器LR,在执行跳转链接指令 (相当于转子指令)时,LR用于存放PC值。 • 它有一个条件码寄存器,可包括进位位(CY)、负标志 (N)、零标志(Z)、溢出标志(V)等。 寻址方式 • ARM16的数据寻址方式只有立即数和偏移寻址两种。 寄存器间接寻址可通过把0放入偏移域来实现。 • 对于转移指令,其目的地址采用PC相对寻址方式。 2016/9/4 3 指令举例 本16位RISC的指令系统仿造ARM的THUMB指令系统。它采用Load和 store访问存储器,运算仅使用寄存器。下面分类给出几条指令的实例 : ① 取数存数指令 • LDR Rd,[Rn,# imm5] ((Rn)+imm5) → Rd • STR Rd,[Rn,# imm5] (Rd) → (Rn)+imm5 ② 立即数操作指令 • MOVH Rd,# data8 data8,(Rd)L → Rd • MOVL Rd,# data8 (Rd)H,data8 → Rd • LSLI Rd,Rn,#data5 (Rn)左移data5位→ Rd ③ 运算指令 • ADD Rd,Rn,Rm (Rn) + (Rm) → Rd • SUB Rd,Rn,Rm (Rn) - (Rm) → Rd ④ 跳转指令 • B rel12 (PC)+rel12 → PC • BC rel12 (PC)+rel12 → PC 2016/9/4 4 指令的编码举例 LDR STR RL,[Rm,#imm5] MOVL MOVH Rd,#data8 15 1312 11 10 6 5 3 2 0 001 L 0 imm5 Rn Rd L=0,LD L=1,ST 15 13 12 11 10 8 7 0 data 8 011 L Rd L=0,MOVL;L=1,MOVH ADD SUB BJ BC Rd,Rn,Rm rel12 rel12 15 10 9 8 6 5 3 2 0 000000 A Rm Rn Rd 15 14 13 12 11 110C 0 rel12 C=0,BJ指令 C=1,BC指令 2016/9/4 5 地址总线AB ADRG +1 ADR MUXL SMD MUXD MUXPC MUXSP SMPC SMSPPPP WRR R0 SML …… L R7 WLR MUXA R WSP S P P C MUXM SMM WPC -1 PRST 时序信号 SMA MUXB PLA SMB T RESET M U SH SHTP IMM SIMM X S SMS A B ALU DTG 控制信号 DOUT SAL IR IRE DNG WRE 2016/9/4 DIN CCR MRD,MWR,CTRL1 数据总线DB (WRL) (WRH) 6 上图中R0~R7、PC、SP、LR及相应的多路开关组成 寄存器模块,ALU、桶形移位器(SH)、立即数发 生器IMM、条件码寄存器(CCR)及相应的多路开关 组成ALU模块。 指令寄存器IR、两级PLA和时序信号组成控制器模块 。 整个CPU模块由寄存器、ALU、控制器模块和地址、 数据总线接口组成。 2016/9/4 7 1. 寄存器模块 MUXA选择R0~R7、LR、SP、PC中一个输出,加至ALU的A输入 。(SMA=0~7选择R0~R7;8、9、10分别LR、SP、PC。) MUXB选择R0~R7、LR、SP、PC、DIN、IR中一个输出,加至 ALU的B输入,其中DIN为存贮器输出,用于存贮器取数操作; IR为指令寄存器输出,用于立即数。(SMB=0~7选择R0~R7;8 、9、10、11、12分别为IR、SP、PC、DIN、IR。) R0~R7、LR、SP、PC的输入来自ALU的输出,其中SP、PC也可 来自ADOUT的输出(含加1选择多路开关)。WRR=0~7为允许写 入R0~R7;其它值为禁止写入,WLR、WSP、WPC为各自的写入 允许信号。图上没指出这些寄存器的时钟信号,它们应接至 主时钟(MCLK)。由它的后沿在写入允许时完成写入操作。 为了方便取指令和堆栈操作,PC和SP也可直接输出,加至 ADOUT的输入选择多路开关。 2016/9/4 8 2. ALU模块 • 16位的ALU有A、B两路输入,A路输入直接加至ALU ,B路输入通过桶形移位器和立即数选择电路加至 ALU。桶形移位器可按控制值(来自指令码或寄存器 的值(A路输入))进行左移、右移(移入为零)。 立即数选择电路可选择立即数的位数,多余位可置为 全0或符号扩展。 • ALU可完成指令和寻址方式所要求的各种运算功能, 如加、减、带进位加、带借位减、逻辑与、逻辑或, 取反、取负、A输出、B输出等各种功能,由SAL选择 。 • 条件码寄存器可包括进位位(CY)、负标志(N) 、零标志(Z)、溢出标志(V)等。它们的写入允许 信号分别为CCK、NCK、ZCK、VCK等(时钟应接主 时钟)。 2016/9/4 9 3. 控制模块 • 它的主体为16位的指令寄存器IR(它的写入允许信号 为IRE,时钟应接主时钟),通过第一级译码电路译 出指令操作码,再通过第二级译码电路得出各种微操 作信号,以控制CPU完成所需的各种操作。 • 时序电路控制指令的节拍。对无流水线的RISC CPU ,第一拍(T0)为取指令,第二拍(T1)为执行内部 寄存器操作,第三拍(T2)执行外部存储器操作(可 选)。 2016/9/4 10 4. CPU总体模块 • CPU由寄存器模块、ALU模块、控制模块和地址、数据总线接口电 路等组成。寄存器模块的两路输出加至ALU的A、B两路输入,ALU 的输出加至寄存器的输入和地址寄存器多路开关的一路输入。而地 址寄存器多路开关的另外两路输入接至PC和SP的输出。地址寄存器 的输出接至16位的外部地址总线。外部16位数据总线的输入可锁存 至控制模块的指令寄存器或数据输入寄存器DIN再加至寄存器模块。 而寄存器模块的B路输出通过三态门加至数据总线。为完成PC和SP 加1的操作,在地址寄存器的输出有+1模块,可由多路开关选择加1 运算。而为完成SP减1的操作,在SP的输出有-1模块,可由多路开 关选择完成减1运算。 • ADRG为ADR的锁存信号,它为1时允许输入加至输出,由1变0 时锁存。DTG为DOUT的锁存信号,DNG为DIN的锁存信号。 • 外部存储器数据总线和地址总线均为16位,MRD为存储器( 32K*16)读出信号,MWR为写信号。CRD、CWR为CPU的读写控 制信号。它们按地址范围分别产生MRD、MWR、IOR、IOW等信号 (在地址最高位A15=1时为访问I/O口)。 2016/9/4 11 指令执行流程 • RISC一般采用流水线技术,虽然一条指令需3至9个周 期,但每个周期可完成一条指令的执行。为了方便学 习CPU的设计方法,下面将先不采用流水线技术,而 是逐个周期串行执行指令。 • 对本例的简单RISC,时钟速度较慢,我们可不考虑集 成电路的延迟,以存储器和寄存器操作来划分时序。 这样,对非存储器换作指令,一般只需二拍(T0、T1 );对存储器操作为三拍(T0、T1、T2)。 指令 取指令 • 2016/9/4 节拍 操作 微操作信号 T0 (PC)→ADR;(ADR)→AB;(M)→IR RD (PC)+1→PC ADRG、WPC、IRE有效 SMD选PC、SML选+1 12 LDR Rd,[Rn,#imm5] • T1 (Rn)+imm5→ADR ; ADRG, SMA选Rn,SMB选IR SIMM选5位, SAL , 移位控制选IR的imm5 。T2 (ADR)→AB,(M)→DIN→Rd ; DNG,CRD, WRR选Rd STR Rd,[Rn,imm5] 。T1 (Rn)+imm5→ADR ; 同上 • T2 (ADR)→AB (Rd)→DOUT→M ; DTG、WRE、CWR ,SMB选Rd MOVH Rd,#data8 • T1 data8(RdL) →Rd; WRR 选Rd,SMA选Rd,SMB选IR,SAL选Bh&Al MOVL Rd,#data8 • T1 (RdH)data8 →Rd; 同上,SAL选Ah&Bl ADD Rd,Rn,Rm • T1 (Rn)+(Rm)→Rd ; WRR选Rd,SMA选Rn, SMB选Rm, SAL选加 SUB Rd,Rn,Rm • T1 (Rn)—(Rm)→Rd ; 同上,SAL选减 BJ rel12 。T1 (PC)+rel12→PC ; SMA选PC,SMB选IR, SIMM选12位符号位扩展 ,WPC有效 BC rel12 2016/9/4 • T1 (PC)+rel12 PC 同上,WPC在C=1时有效 13 简单RISC实现方法 • 对于16位ARM实验计算机,可使用VHDL设计它的全 部电路。为结构清晰起见,可把它分几个模块。 • 第一个为寄存器堆,包括所有寄存器和输入、输出多 路开关; • 第二个为ALU、包括ALU、CCR、移位电路、立即数 发生器等; • 第三个为控制器,包括指令寄存器和控制电路;最后 为总的CPU模块,它除了包含以上三个模块外,还包 含地址和数据锁存器。 2016/9/4 14 寄存器堆 寄存器堆的输入通道包括ALU输出、地址寄存器输出、 指令寄存器输出、数据输入、锁存器输出;输出通道 包括MUXA输出、MUXB输出、MUXD输出。除此之 外,还有相应的控制输入。 它的VHDL程序中,应包括各个寄存器、各个多路开 关。对于每个寄存器,应有以下形式的程序(以LR为 例): • process (MCLK, WLR) begin • if (MCLK’event and MCLK =‘0’) then • if(WLR =‘0’) then LR <= ALUOUT; • endif; • endif; • end process; 2016/9/4 15 对PC、SP还应加入复位置初值的功能。对R0-R7可使用case语句来描述。 对MUXA、MUXB、MUXD、MUXM、MUXSP、MUXPC等多路开关,应有以 下形式的程序(以MUXA为例): • R_outA<=R0 when SMA=“0000”else • R1 when SMA=“0001”else • R2 when SMA=“0010”else • R3 when SMA=“0011”else • R4 when SMA=“0100”else • R5 when SMA=“0101”else • R6 when SMA=“0110”else • R7 when SMA=“0111”else • LR when SMA=“1000”else • SP when SMA=“1001”else • PC when SMA=“1010”else • (others=>‘0’); 2016/9/4 16 ALU ALU的输入为寄存器堆的MUXA、MUXB输出、指令寄存器的输出,它仅有一路输出。 ALU的功能由SAL决定,可有以下一些功能: • A+B,A-B,A∧B,A V B,A,B等。 为了方便进位的处理,可把ALU的输入由16位扩展为17位,(一般把最高位填0)最 高位输出即为进位位的值。 ALU可采用when赋值语句实现(见前面多路开关的实现方法)。 移位一般采用桶形移位器,一次可左移或右移0~15位。移位数由寄存器的内容或指令码 (由SMS选择)决定。而移位与否和移位类型由SHTP控制信号决定。 立即数发生器可产生各种立即数。这些立即数一般来自指令码(由移位器来选择位置)。 SIMM可选择立即数的位数和类型,例如5位立即数,前11位填0;8位立即数,前8位 等于第7位(符号扩展)等。前者可用于立即数运算、取数等指令。后者可用于相对寻 址或变址计算。 立即数发生器也可用when的赋值语句实现, ALU的标志位一般有进位位、负标志位、零标志位和溢出标志位。前几个的实现比较简单 ,可直接由ALU的输出得到。但溢出标志位(V)比较麻烦,因为V置位的条件是最高 位与次最高位的进位输出不同。直接从ALU的输出只能得到最高的进位。要得到次最 高位的进位,有两种办法:一是单独列出次最高位和最高位的运算电路(包括它们的 进位),而不采用16位或17位的VHDL运算;另一种办法是另外设计一个15+1位(第 15位输入为0)的ALU(可只有算术运算功能),它的第15位的输出即为次高位的进 位。 对于进位位CY,它除了用作加、减法的进位、借位外,有时还用作移位的输出位。这时 应从移位器处按移位控制值得到移位输出位,加至进位寄存器的输入。 2016/9/4 17 控制器 • 控制器产生节拍信号(T0、T1、T2)和所有控制信号。为方便起见, 可采用两级译码方法。第一级译码产生各种指令码,例:LDR、STR、 MOVH、MOVL、ADD、SUB、BJ、BC等。第二级译码按指令码、时 序等组合产生各种控制信号。下面给出一些例子。 1、第一级译码 • LDR<=‘1’ when IR(15 down to 12) =“0010”else‘0’; • STR<=‘1’ when IR(15 down to 12) =“0011”else‘0’; • MOVL<=‘1’ when IR(15 down to 11) =“01100”else‘0’; • MOVH<=‘1’ when IR(15 down to 11) =“01101”else‘0’; • ADD<=‘1’ when IR(15 down to 9) =“0000000”else‘0’; • SUB<=‘1’ when IR(15 down to 9) =“0000001”else‘0’; • BJ<=‘1’ when IR(15 down to 12) =“1100”else‘0’; • BC<=‘1’ when IR(15 down to 12) =“1101”else‘0’; 2016/9/4 18 2、第二级译码 • ADRGE<=‘1’when (T1=‘1’and (LDR or STR) =‘1’)or (T0=‘1’) else‘0’; • ADRG<= ADRGE and MCLK; • SMD<=‘11’when T1=‘1’and (LDR or STR)else‘00’; • SML<=‘1’when T0=‘1’else‘0’; • WRR<=‘0’& IR(2 downto 0) when(T1=‘1’and (ADD or SUB)= ‘1’)or (T2=‘1’ and LDR=‘1’)else‘0’&IR(10 downto 8) when (T1=‘1’and(MOVL or MOVH)= ‘1’)else ‘1111’; • SMPC<=‘1’when T0=‘1’ else‘0’; • WPC<=‘1’when T0=‘1’or (T1=‘1’and (BJ=‘1’or (BC=‘1’and CY=‘1’))) else‘0’; • SMA <=‘0’&IR(5 down to 3) when (T1=‘1’and (LDR or STR or ADD or SUB)=‘1’)else‘1010’ when (T1=‘1’and (BJ or BC)= ‘1’)else ‘0’&IR(10 down to 8) when(T1=‘1’and(MOVL or MOVH)=‘1’)else ‘0000’; • SMB <=‘0’&IR(8 down to 6) when (T1=‘1’and (ADD or SUB)= ‘1’)else‘0000’; • 其它信号可类似得出。另外需注意,以上信号只考虑了8条指令的情况,对有更 多指令或更复杂操作的情况,需加入其它条件。 19 2016/9/4 CPU模块 • 在CPU模块中应先定义寄存器堆、ALU和控制器模块(作为 Component),然后在程序中使用它们(map)。CPU模块包括 地址锁存器、数据输出锁存器和数据输入锁存器。 • 这些锁存器可采用如74373的透明锁存器形式,以减少数据 传送的节拍数。如对数据输出锁存器DOUT(16)位,它的锁存 器信号为DTG,如锁存允许信号为DTGE,则可如下编程: • DTG<= DTGE and MCLK; • DOUT<= BXOUT when DTG=‘1’eles • DOUT; • 除此之外,在CPU模块中还应定义和编程所有输入、输出 信号,包含地址总线、数据总线、读写控制信号、外部设备控制 和状态信号等。 • 2016/9/4 所有的VHDL模块应按框图编程和连接。 20 观察信号 • • • • • 为了调试方便,本实验仪提供有104根信号,可在单拍或跟踪存储时,观察这些信号 的状态。除此之外,其中32根还可通过多路开关扩展为256个观察信号,可在扩展单 拍时,观察其状态。 这些信号中,地址总线(AB15~0)、数据总线(DB15~0)、控制信号( MRD、MWR、IOR、IOW、CTRL1~4)为固定信号,CO31~0、CI31~0可由实验者 任意连接至打算观察的信号,如寄存器或各种内部控制信号。 对前述16位RISC实验计算机,可把CO31~0定义于观察CPU模块中的各种控制信号, 如WRR、SAL、SMD等等。 对CI31~0可用于观察寄存器堆模块中的各种寄存器的内容。例如可如下编程。 CI(31 downto 16)<=IR when MUX=“000” else R0 when MUX=“001”else R2 when MUX=“010”else R4 when MUX=“011”else R6 when MUX=“100”else LR when MUX=“101”else SP; 而CI15~0可用于观察PC、R1、R3、R5、R7等寄存器。 2016/9/4 21 移位操作及其实现 前面介绍了ALU模块中的移位部件,它采用桶形移位器,适用了ARM类型的指令。例如,允 许以下类型指令: • LSL Rd,Rn,#data4; Rn左移由data4决定的位数,送至Rd(移入为0) • ASR Rd,Rn,#data4; Rn算术右移由data4决定的位数,送至Rd(移入为符号位) • …………………………………. • ROR Rd,Rn; Rd右环移Rn位(仅取低4位),送回Rd • …………………………………. 由此可见,移位位数可为0~15,对应的控制位为四位,可来自指令的立即数或某个寄存器。 这些可由MUXS多路开关选择。 对移位器,它的控制信号为SHTB,指定移位器类型,包括左移(LSL)、右移(LSR)、算 术右移(ASR)、左环移(ROL)、右环移(ROR)等。 移位器本身可采用桶形移位器,也可采用多路开关形式,例如:设SHCT为移位位数控制器 ,BXIN为寄存器堆模块的B通道输出,如仅有允许左移位0~3位,可如下编程(BRIN为立 即数模块的输入)(下例仅为第零位): • BRIN(0)<=BXIN(1) when SHCT=“0001”else • BXIN (2) when SHCT=“0010”else • BXIN (3) when SHCT=“0011”else • BXIN (0); • 如果具有右移功能和算术右移,则移位器的输入(BXIN)还需进行适当的预处理。 2016/9/4 22 三操作数操作 许多RISC指令系统具有三操作数指令,它们一般均为寄 存器,例如: • ADD Rd,Rn,Rm; (Rn)+(Rm)→Rd • 它的指令流程可用两拍完成,一拍为取指令,另一 拍完成操作。前面的ARM16结构中,寄存器的输出多 路开关有两路,输入控制与它们独立,可分别完成三 个寄存器的寻址操作。 另一种三操作数指令的第三操作数为立即数,例: • ADD Rd,Rn,#data; (Rn)+data→Rd • 它的立即数位数小于等于8位,前n 位一般均补0(或补 符号位)。由ALU的立即数发生器按指令码产生所需的 操作数(data)。对立即数不位于指令码低位的场合, 应该用移位器把它移至低位。 相对寻址 相对寻址一般指PC或SP相对寻址,相对地址均为有符号数(补码 )。它常用于两类指令,转跳指令和存取指令。 1.转跳指令 • 例1: B rel12; ( PC)+rel12→PC • 例2: BC rel8; if cy=1 then (PC)+rel8→PC else (PC)+1→PC • 例1为无条件转移指令,它的转移范围一般比较大,例如:取12 位(rel12)。 2.存取指令 • 例1:LDR Rd,[PC,#d8]; ((PC)+d8)→Rd • 例2:STR Rd,[SP,#d8]; (Rd)→(SP)+d8 • 例1为PC相对寻址取数,例2为SP相对寻址存数。对存取类指令 至少需三拍。其中第二拍为计算地址,它把PC或SP加上d8(补 码有符号扩展为16位),并送到地址寄存器中。 转子指令 转子指令在转向子程序入口前,必须先保护返回地址,在从 子程序返回时再恢复该地址。一般的CPU均采用堆栈来保 护返回地址。但RISC(ARM处理机)经常采用专门的寄 存器(称为连接寄存器LR)来保护返回地址。在子程序 嵌套时,需由用户程序自行保护LR的内容(如压入堆栈 中)。这时的转子指令和操作如下: • BL rel12; ①(PC)+ 1 → PC ②(PC)→ LR,(PC)+ rel12 → PC 在从子程序返回时,可使用如下指令: • MOV PC,LR; (LR)→ PC 堆栈指令 ARM没有专门的PUSH、POP指令,但它有多寄存器存取指令,可完成 PUSH、POP指令的功能。而Thumb指令的R13固定用作SP,故它有 PUSH、POP指令。并且它的PUSH、POP指令继承了ARM的多寄存器 存取指令的功能,一次可把多个寄存器进栈、退栈。 • 例1: PUSH {R0,R2~R5};把R0、R2、R3、R4、R5进栈。 • 例2: POP {R4,R7};把R4、R7退栈。 它们还可以把LR和其它寄存器一起进栈,以后在把其它寄存器退栈后, 可把LR退栈写入PC中。 • 例3: PUSH{R0,LR};保护返回地址和R0。 • …… • POP{R0,PC};恢复R0,并返回调用指令后执行。 由于以上指令实现比较麻烦,对于本实验计算机,可定义PUSH、POP 指令的操作数为单寄存器。如PUSH R0等。这样可大大简化CPU的设 计。这时,应定义SP为先进栈再减数,还是先减数再进栈。如果SP为 先进栈再减数,则堆栈指令流程应为: • PUSH Rn;(Rn)→(SP),(SP)—1 → SP • POP Rn;(SR)+1 → SP,((SP))→ Rn 根据以上流程可知,SP需有加1和减1的操作。这可用ALU实现。但为加快 指令执行速度,可增加专门的加1和减1电路。其中加1电路与PC的加1 电路合用,减1电路为专门用于SP的操作。 I/O和中断 • 本实验仪提供有打印机和键盘两种外部设备。它们各 有一根状态线(PRIX,KRIX)和一根读、写控制线 (IOW、IOR)。可使用程序查询方法来使用这两种 外部设备。这时,可采用I/O与存贮器统一编址的方法 来读、写它们。地址0000~7FFFH为存贮器, 8000~FFFFH为I/O区间。一般可取8001H为键盘地址 (只读)、8002H为打印机地址(只写)。对状态查 询,可加入专门的状态查询指令(如BNKB、BNPB 指令),也可加一个查询口,它的地址为8004H,而 KRIX、PRIX在读出8004H时分别加至数据总线的 DB0~DB1上,并送到某个寄存器中。 流水线的实现方法 前面介绍的16位RISC实验计算机为求简单,它的大多数指令仅为 两个节拍。为学习指令流水线的设计要求,可仿造ARM7的三 级流水线。这时,大多数指令流程为: 取指 译码 执行 对存贮器操作指令,第三拍为地址计算,第四拍为存储器操作 ,在实际实现时,对于前面介绍的16位RISC实验计算机,由于 它的结构已经考虑了指令的并行操作,只需对控制器作几点修 改。 ①增加一个节拍,T0为取指令,T1为译码,T2为执行(包括地址 计算),T3为存贮器操作。它们可为移位寄存器形式,即T0的 值在下一拍时送入T1中,T1的值在下一拍时送入T2中,......。 ②把第一级或第二级的译码信号改为寄存器输出,它在T1时锁存 指令的译码结果。 ③T0、T1、T2等节拍,除了复位后(这时仅T0有效)及一些特殊 情况(见下面介绍),均同时有效。即可同时执行取指、译码 、执行。 流水线的相关性及其处理 一、结构相关 • 本实验计算机为冯﹒诺依曼结构,它只有一个存储 器,而无分开的指令和数据存储器。因此,在执行 STR或LDR等存贮器操作和其它需四节拍的指令时, 必须暂停后面三条指令的第二拍操作,并且需暂停第 三条指令的取指操作。这可引入一个四节拍指令的标 志。在取指后,发现为四节拍指令时,把下一拍的指 令码锁存在一个指令暂存器中。在T1拍后,发现译码 的指令为四节拍指令,则暂停下一拍的译码暂存操作 (使T1无效)。如果在T2拍,发现执行的为四节拍指 令(一般为地址计算),即在下一拍把指令码暂存器 送到指令寄存器(IR)中,同时暂停取指操作(使T0 无效) • 使用以上方法,可实现暂停后三条指令的相关节拍 操作,从而解决流水线的结构相关产生的问题。 二、控制相关 • 在遇到分支指令和其它会改变PC值的指令时,会发 生控制相关。这时,在执行修改PC值的时候,应暂停 分支指令之后的所有指令。为此,在实验计算机中, 可在发生写入PC的操作时,禁止T1、T2和T3,从而 保证执行在修改PC后取入的指令。这样发生转移后一 般需暂停两拍。为减少暂停,可修改为在第二拍执行 转移地址计算,并在第二拍末按译码的结果和条件码 实现转移(写入PC),并可采用转移槽的技术,不管 是否转移,总是执行转移指令后的指令。 三、数据相关 • 对于ARM7架构的简单三级流水线,它仅有一拍是执 行与数据有关的操作,而在执行四节拍指令时,均暂 停一拍后面指令。故它不会发生流水线的数据相关。 实验题和要求 一、简单ARM16 RISC计算机设计(最低要求) 1、具有8个16位通用寄存器,具有LR和SP寄存器。 2、具有16条以上指令,包括取数、存数、取立即数、 加、减、逻辑与、或、移位、增量、转移等指令。 3、寻址方式,包括寄存器寻址、立即数寻址、相对地 址寻址、变址寻址。 4、具有打印机和键盘两种外部设备和一个查询口。 5、无流水线,每条指令为两/三拍。 6、能执行将键盘输入的两组两位十进制数,执行减法 ,并打印所有结果。格式如下: 16 16 – 14 = 30 = 2 -14 2016/9/4 31 基本指令系统 • • • • • • • • • • • • • • • • • 2016/9/4 LDR Rd,[Rn,#data5] STR Rd,[Rn,#data5] LSLI Rd,Rn,#data5(LSLI Rd,[Rn,#data5]) MOV Rd,Rn MOVH Rd,#data8 MOVL Rd,#data8 ADD Rd,Rn,Rm SUB Rd,Rn,Rm AND Rd,Rn,Rm ADDI Rn,#data8 SUBI Rn,#data8 ORI Rn,#data8 BC rel8 B rel11 BL rel11 RET(MOV PC,LR) (NOP) 32 二. 三级流水线的ARM16计算机设计 1、基本要求同上。 2、结构相关采用暂停方法解决。 3、控制相关采用暂停两拍方法解决。 三. 三级流水线使用转移槽方法的ARM16计算机设计 1、基本要求同上。 2、结构相关采用暂停方法解决。 3、在第二拍完成转移地址计算,并在第二拍末按译码 的结果和条件码实现转移。 4、控制相关采用转移槽方法解决。 2016/9/4 33 实验验收要求 1. 全速执行计算打印程序。 2. 演示、讲解指令执行流程、VHDL程序和流水线工作 过程。 3. 当场独立增加或修改一到三条指令。 注意:在验收时,必须独立完成,别的学生不能帮忙,否 则两人都以作弊论处! 2016/9/4 34 汇编定义注意事项: 对RSIC指令系统,需选择相对地址生成方法: 1.对存储器为8位编址方式,由于RSIC指令为16位,指令地址应为偶 地址,最低位地址必定为0。为缩短指令码长度,可在指令中不存放 相对地址的最低位0。这时可选择相对地址除以2的方式,在汇编后 自动把相对地址除以2,从而可节省一位指令码。如在指令中要存放 全部地址,则不应选择相对地址除以2的方式。 2.对存储器为全16位编址方式,由于这时地址为字编址,每个字等于 两个字节,所以应使用相对地址除以2的方式。但这时汇编后生成的 列表文件中,显示的指令地址不正确,实际值应为显示值除以二。但 汇编后的目标地址无错。注意在指令定义中rel应比实际值多1,例 B rel8,应写为B rel9! 2016/9/4 35

相关文章