【计算机组成原理】CPU:单周期数据通路(MIPS) | 您所在的位置:网站首页 › addi指令所需的控制信号 › 【计算机组成原理】CPU:单周期数据通路(MIPS) |
寄存器传送语言RTL
1)R(r)表示寄存器r的内容 2)M(address)表示主存储器地址address的内容 3)传输方向“←”表示,从右向左传输 4)程序计数器PC的内容直接用PC表示 输出信号改变时机1)setup建立时间:触发时钟边缘之前保持稳定一段时间 2)hold保持时间:触发时钟边缘之后保持稳定一段时间 3)clk-2-Q time锁存延迟:触发时钟边缘之后不能立即变化,有一点点延迟 即:输入的信号(1或0)在输入之前(下跳沿到达之前)要稳住自己,不能出差错,在到达下调沿时输入信号不会立刻影响输出,而是经历一点点延迟(clk2Q)输出才改变,而与此同时输入信号会保持更长一段时间。 寄存器组解读1)ReadinA\RB两个读入接口,符合组合逻辑,输入5-bit寄存器编号,选择32个寄存器之一的内容,耗费一小段时间(取数时间AccessTime),从BusA\busB输出(2^5=32)。 2)busWrite是写入接口,是时序逻辑,在(WriteEnable=1)&&(时钟下降沿到达)的情况下经过延迟(CLK2Q)将busW的值写入RW读入接口指定的寄存器中;WE=0时即使下降沿到来也不会写入。 内部结构图 3)理想数据存储器 指令:add rd,rs,rt RTL: 1)M[PC]; 2)R[rd]←R[rs]+R[rt]; 3)PC ← PC + 4 设计思路:不考虑1)3)两个公共操作: (1)Rs、Rt表示两个源寄存器编号,故与RA、RB相连,读取这两个寄存器的值,分别由busA、busB送入ALU计算,由func控制ALUctr进行add操作; (2)结果送入busW写入RW指定的寄存器,故RW连接Rd,只有当结果不溢出且RegWr=1的情况下才将结果写入,结果溢出(OF=1)则送出到溢出处理通路。 花费时间:PC的CLK2Q时间+指令存储器取指令时间+寄存器组取数时间+ALU延迟+寄存器建立时间+时钟偏移 ALUctr=add,RegWr=1 指令:ori rt,rs,imm16 RTL: 1)M[PC]; 2)R[rt] ← R[rs] or ZeroExt(imm16); 3)PC ← PC + 4 设计思路:不考虑1)3)两个公共操作: (1)因为目的寄存器是rt,跟R-type的rd不一样,所以得在RW装个多路选择器,用RegDst控制是用哪个做目的寄存器(R-type用0,I-type用1); (2)由于要进行立即数零扩展(32位才能送入ALU),添加一个扩展器,用ExtOp=1控制进行符号扩展,ExtOp=0控制进行零扩展; (3)由于R-type是两个寄存器数运算,I-type有一个来自立即数,所以要在ALU一个输入接口装一个多路选择器,用ALUSrc=0控制寄存器输入,ALUSrc=1控制立即数输入。 时间:PC的CLK2Q时间+指令存储器取数时间+寄存器组取数时间+ALU延迟+写寄存器的建立时间+时钟偏移 ALUctr=or,RegWr=1,RegDst=1,ExtOp=0,ALUSrc=1 指令:lw:lw rt,rs,imm16;sw:sw rt, rs,imm16 RTL: 1)M[PC]; 2)Addr←R[rs]+SignExt(imm16); 3)lw:R[rt]←M[Addr];sw:M[Addr]←R[rt]; 4)PC ← PC + 4) 设计思路:不考虑1)4)两个公共操作: (1)因为写入目的寄存器的数据来源不是ALU结果,而是存储器的输出,所以要在busW加一个多路选择器,用MemtoReg=0控制ALU结果写入,MemtoReg=1控制存储器读出数据写入; (2)因为要从数据存储器取数,所以添加了一个数据存储器部件,存储器的取数地址由ALU计算R[rs]+SignExt(imm16)得到,所以ALU结果连接Adr端,图中busB输出端连接DataIn将数据写入实现的是指令sw的功能,注意该写入是时序逻辑。 花费时间: lw:PC的CLK2Q时间+指令存储器取数时间+寄存器组取数时间+ALU延迟+数据存储器取数时间+写寄存器的建立时间+时钟偏移 sw:PC的CLK2Q时间+指令存储器取数时间+寄存器组取数时间+ALU延迟+写存储器的建立时间+时钟偏移
指令:beq rs,rt,imm16 RTL: 1)M[PC]; 2)Cond ←R[rs]-R[rt]; 3)if (Cond = 0) {PC ← PC + 4 + (SignExt(imm16) x 4)} else{PC ← PC + 4} 设计思路:不考虑1)4)两个公共操作: (1)因为PC下地址产生不同,所以增加了下地址逻辑,输出下一条指令地址,用Branch=1使用分支功能,Branch=0不使用; (2)Zero为R[rs]-R[rt]的零标志,在Branch=1启用分支功能时,Zero=0表示两个源寄存器内容相等,应该走PC ← PC + 4 + ( SignExt(imm16)x4)这一路,反之走普通的PC←PC + 4,Branch=0时不用考虑Zero的值,因为没有启用分支。注意这里的立即数是相对偏移指令数,前面的立即数是相对偏移存储单元数。 时间:PC的CLK2Q时间+指令存储器取数时间+寄存器组取数时间+ALU延迟+寄存器建立时间(写入PC)+时钟偏移 ALUctr=subu,RegWr=0,RegDst=1/0,ExtOp=1/0,MemWr=0,MemtoReg=1/0,ALUSrc=1,Branch=1 因为指令长度32-bit,主存按字节编址,所以指令的地址总是4的倍数,所以低两位总是00,所以PC只用存放前30位,即PC,所以下条指令的计算方法如下: 顺序执行时:PC = PC + 1 转移执行时:PC = PC + 1 + SignExt[imm16] 取指令时:指令地址=PC 串接“00” 另外:这里用Adder是因为无需ALUctr 指令:j target RTL: 1)M[PC]; 2)PC←PC串接 target 设计思路:不考虑1)4)两个公共操作: (1)因为功能是无条件将目标地址写到PC中,所以主要修改的是取指令部件; (2)因为送到下一个PC的值不再仅仅是计算结果,也可能是直接跳越的结果,所以在PC的写入端加一个多路选择器,用Jump=1控制写入跳跃目的地址,Jump=0控制写入计算结果。 时间:PC的CLK2Q时间+指令存储器取数时间+寄存器建立时间(写入PC)+时钟偏移 ALUctr=1/0,RegWr=0,RegDst=1/0,ExtOp=1/0,ALUSrc=1/0,MemWr=1,MemtoReg=0,Jump=1 跳转指令的范围:2^28=256MB的内存 【计算机组成原理】CPU:单周期数据通路(MIPS) 加我一起学习 |
CopyRight 2018-2019 实验室设备网 版权所有 |