200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 计算机组成原理单周期mips 计算机组成原理CPU单周期数据通路(MIPS)

计算机组成原理单周期mips 计算机组成原理CPU单周期数据通路(MIPS)

时间:2019-11-18 00:26:04

相关推荐

计算机组成原理单周期mips 计算机组成原理CPU单周期数据通路(MIPS)

计算机组成原理CPU单周期数据通路(MIPS)

【计算机组成原理】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指令(R-type)

指令: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指令(I-type)

指令: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、sw指令(I-type)

指令: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延迟+写存储器的建立时间+时钟偏移

ALUctr=addu,RegWr=1,RegDst=1,ExtOp=1,ALUSrc=1,

MemWr=1,MemtoReg=1

④beq指令(I-type)

指令: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<31:2>,所以下条指令的计算方法如下:

顺序执行时:PC<31:2> = PC<31:2> + 1

转移执行时:PC<31:2> = PC<31:2> + 1 + SignExt[imm16]

取指令时:指令地址=PC<31:2> 串接“00”

另外:这里用Adder是因为无需ALUctr

⑤Jump指令(J-type)

指令:j target

RTL:

1)M[PC];

2)PC<31:2>←PC<31:28>串接 target<25:0>

设计思路:不考虑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)

加我一起学习

公众号:凡古一往

计算机组成原理CPU单周期数据通路(MIPS)相关教程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。