单周期MIPS CPU(处理器)的设计

news/2024/12/2 17:56:53/

MIPS CPU(处理器)的设计

一、MIPS指令

1.指令格式

1.1 R型指令

(1)R型指令格式

000000 (op)RsRtRdshamtfunct
6bits5bits5bits5bits5bits6bits

注意: 该类型指令操作数和保存结果均通过寄存器进行

操作含义
op操作码,所有R型指令都全为0
rs寄存器编号,对应第一个源操作数
rt寄存器编号,对应第二个源操作数
rd寄存器编号,保存结果
shamt常数,在移位指令中使用
funct功能码,指定指令的具体功能

(2)具体R型指令
注意: R型指令根据操作的寄存器数可以分为三种不同类型。

【1】带有3个寄存器

指令[31 : 26][25 : 21][20 : 16][15 : 11][10 : 6][5 : 0]指令功能
add000000rsrtrd00000100000寄存器加
sub000000rsrtrd00000100010寄存器减
and000000rsrtrd00000100100寄存器与
or000000rsrtrd00000100101寄存器或
xor000000rsrtrd00000100110寄存器异或
	$rd = $rs op $rt

【2】带有2个寄存器

指令[31 : 26][25 : 21][20 : 16][15 : 11][10 : 6][5 : 0]指令功能
sll00000000000rtrdsa100000逻辑左移
srl00000000000rtrdsa000010逻辑右移
sll00000000000rtrdsa000011算术右移
	$rd = $rt shift sa

【3】带有1个寄存器

指令[31 : 26][25 : 21][20 : 16][15 : 11][10 : 6][5 : 0]指令功能
jr000000rs000000000000000001000寄存器跳转
	jr rs;PC = rs
1.2 I型指令

(1)I型指令格式

OPRsRtimm(立即数)
6bits5bits5bits16bits

注意: 操作数中涉及立即数,结果保存到寄存器

操作含义
op标识指令的操作功能
rs第一个源操作数,是寄存器操作数
rt目的寄存器编号,用来保存运算结果
imm第二个源操作数,立即数

(2)具体I型指令
注意: I型指令存在4种不同的类型

【1】面向运算的I型指令

指令[31 : 26][25 : 21][20 : 16][15 : 0]指令功能
addi001000rsrtimm寄存器和立即数“加”
andi001100rsrtimm寄存器和立即数“
ori001101rsrtimm寄存器和立即数“或”
xori001110rsrtimm寄存器和立即数“异或”
第一条指令是对立即数进行符号拓展,其他都是0拓展
addi rt, rs, imm;
$rt = $rs op E(imm)

【2】面向访存的I型指令

指令[31 : 26][25 : 21][20 : 16][15 : 0]指令功能
lw100011rsrtimm从存储器种读取数据
sw101011rsrtimm把数据保存到存储器
MIPS 32中唯一两条访问存储器的指令(RISC)
lw rt, imm(rs) #rt = mem [ rt = mem[rt=mem[rs+E(imm)]
sw rt, imm(rs) #mem [ mem[mem[rs+E(imm)] = $rt

【3】面向数位设置的I型指令

指令[31 : 26][25 : 21][20 : 16][15 : 0]指令功能
lui00111100000rtimm设置寄存器的高16位
lui rt, imm #$rt = imm<<16(空位补0)

【4】面向条件转移(分支)的I型指令

指令[31 : 26][25 : 21][20 : 16][15 : 0]指令功能
beq000100rsrtimm寄存器相等则转移
bne000101rsrtimm寄存器不相等则转移
beq rs, rt, imm #if(rs = = rt) PC=PC+E(imm)<<2
bne rs, rt, imm #if(rs ! = rt) PC=PC+E(imm)<<2
标准的PC相对寻址方式
1.3 J型指令

(1)J型指令格式

OP立即数
6bits26bits

(2)具体J型指令

指令[31 : 26][25 : 0]指令功能
j000010address无条件跳转
jal001100address调用与联接
j address;
$ PC=($PC+4)H4 U (address<<2)
jal address;
$ra = $PC+4(保存返回地址)
$ PC=($PC+4)H4 U (address<<2)

2.指令功能

MIPS 指令集(共31条)

助记符指令格式示例示例含义操作及其解释
Bit #31…2625…2120…1615…1110…65…0
R-typeoprsrtrdshamtfunc
add000000rsrtrd00000100000add $1,$2,$3$1=$2+$3rd <- rs + rt ;其中rs=$2,rt=$3, rd=$1
addu000000rsrtrd00000100001addu $1,$2,$3$1=$2+$3rd <- rs + rt ;其中rs=$2,rt=$3, rd=$1,无符号数
sub000000rsrtrd00000100010sub $1,$2,$3$1=$2-$3rd <- rs - rt ;其中rs=$2,rt=$3, rd=$1
subu000000rsrtrd00000100011subu $1,$2,$3$1=$2-$3rd <- rs - rt ;其中rs=$2,rt=$3, rd=$1,无符号数
and000000rsrtrd00000100100and $1,$2,$3$1=$2 & $3rd <- rs & rt ;其中rs=$2,rt=$3, rd=$1
or000000rsrtrd00000100101or $1,$2,$3$1=$2 | $3rd <- rs | rt ;其中rs=$2,rt=$3, rd=$1
xor000000rsrtrd00000100110xor $1,$2,$3$1=$2 ^ $3rd <- rs xor rt ;其中rs=$2,rt=$3, rd=$1(异或)
nor000000rsrtrd00000100111nor $1,$2,$3$1=~($2 | $3)rd <- not(rs | rt) ;其中rs=$2,rt=$3, rd=$1(或非)
slt000000rsrtrd00000101010slt $1,$2,$3if($2<$3) $1=1 else $1=0if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
sltu000000rsrtrd00000101011sltu $1,$2,$3if($2<$3) $1=1 else $1=0if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1 (无符号数)
sll00000000000rtrdshamt000000sll $1,$2,10$1=$2<<10rd <- rt << shamt ;shamt存放移位的位数, 也就是指令中的立即数,其中rt=$2, rd=$1
srl00000000000rtrdshamt000010srl $1,$2,10$1=$2>>10rd <- rt >> shamt ;(logical) ,其中rt=$2, rd=$1
sra00000000000rtrdshamt000011sra $1,$2,10$1=$2>>10rd <- rt >> shamt ;(arithmetic) 注意符号位保留 其中rt=$2, rd=$1
sllv000000rsrtrd00000000100sllv $1,$2,$3$1=$2<<$3rd <- rt << rs ;其中rs=$3,rt=$2, rd=$1
srlv000000rsrtrd00000000110srlv $1,$2,$3$1=$2>>$3rd <- rt >> rs ;(logical)其中rs=$3,rt=$2, rd=$1
srav000000rsrtrd00000000111srav $1,$2,$3$1=$2>>$3rd <- rt >> rs ;(arithmetic) 注意符号位保留 其中rs=$3,rt=$2, rd=$1
jr000000rs000000000000000001000jr $31goto $31PC <- rs
I-typeoprsrtimmediate
addi001000rsrtimmediateaddi $1,$2,100$1=$2+100rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2
addiu001001rsrtimmediateaddiu $1,$2,100$1=$2+100rt <- rs + (zero-extend)immediate ;其中rt=$1,rs=$2
andi001100rsrtimmediateandi $1,$2,10$1=$2 & 10rt <- rs & (zero-extend)immediate ;其中rt=$1,rs=$2
ori001101rsrtimmediateori $1,$2,10$1=$2 | 10rt <- rs | (zero-extend)immediate ;其中rt=$1,rs=$2
xori001110rsrtimmediatexori $1,$2,10$1=$2 ^ 10rt <- rs xor (zero-extend)immediate ;其中rt=$1,rs=$2
lui00111100000rtimmediatelui $1,100$1=100*65536rt <- immediate*65536 ;将16位立即数放到目标寄存器高16 位,目标寄存器的低16位填0
lw100011rsrtimmediatelw $1,10($2)$1=memory[$2 +10]rt <- memory[rs + (sign-extend)immediate] ;rt=$1,rs=$2
sw101011rsrtimmediatesw $1,10($2)memory[$2+10] =$1memory[rs + (sign-extend)immediate] <- rt ;rt=$1,rs=$2
beq000100rsrtimmediatebeq $1,$2,10if($1==$2) goto PC+4+40if (rs == rt) PC <- PC+4 + (sign-extend)immediate<<2
bne000101rsrtimmediatebne $1,$2,10if($1!=$2) goto PC+4+40if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2
slti001010rsrtimmediateslti $1,$2,10if($2<10) $1=1 else $1=0if (rs <(sign-extend)immediate) rt=1 else rt=0 ; 其中rs=$2,rt=$1
sltiu001011rsrtimmediatesltiu $1,$2,10if($2<10) $1=1 else $1=0if (rs <(zero-extend)immediate) rt=1 else rt=0 ; 其中rs=$2,rt=$1
J-typeopaddress
j000010addressj 10000goto 10000PC <- (PC+4)[31…28],address,0,0 ;address=10000/4
jal000011addressjal 10000$31<-PC+4; goto 10000$31<-PC+4;PC <- (PC+4)[31…28],address,0,0 ;address=10000/4

3.指令功能的RTL描述

补:寄存器传送语言(RTL)

  1. 用R[r]表示寄存器堆中寄存器r的内容。
  2. 用M[addr]表示读取存储单元addr的内容
  3. 传送方向用←表示,传送源在右,目的在左。
  4. 程序计数器PC直接用PC表示其内容。
指令功能说明
add rd,rs,rtM[PC],PC←PC+4 R[rd]←R[rs]+R[rt]从PC所指的内存单元中取指令,并加4.从rs、rt中取数后相加,若溢出则异常处理,否则结果送rd
sub rd,rs,rtM[PC],PC←PC+4 R[rd]←R[rs]-R[rt]从PC所指的内存单元中取指令,并加4.从rs、rt中取数后相减,若溢出则异常处理,否则结果送rd
subu rd,rs,rtM[PC],PC←PC+4 R[rd]←R[rs]-R[rt]从PC所指的内存单元中取指令,并加4.从rs、rt中取数后相减,结果送rd(不进行溢出判断)
slt rd,rs,rtif(R[s]<R[t]) R[d]←1 else R[d]←0从PC所指的内存单元中取指令,并加4.从rs、rt中按带符号整数来判断两数大小,小于则rd为1,反之为0
sltu rd,rs,rtif(R[s]<R[t]) R[d]←1 else R[d]←0从PC所指的内存单元中取指令,并加4.从rs、rt中按无符号整数来判断两数大小,小于则rd为1,反之为0
ori rt,rs,imm16R[rt]←R[rs]|ZeroExt(imm16)从PC所指的内存单元中取指令,并加4.从rs取数,将imm16进行零扩展,然后两者按位或,结果送rt
addiu rt,rs,imm16R[rt]←R[rs]+SignExt(imm16)从PC所指的内存单元中取指令,并加4.从rs取数,将imm16进行符号扩展,然后两者相加,结果送rt
lw rt,rs,imm16Addr←R[rs]+SignExt(imm16) R[rt]←M[Addr]从PC所指的内存单元中取指令,并加4.从rs取数,将imm16进行符号扩展,然后两者相加,结果作为访存地址Addr,从Addr中取数并送rt
sw rt,rs,imm16Addr←R[rs]+SignExt(imm16) M[Addr]←R[rt]从PC所指的内存单元中取指令,并加4.从rs取数,将imm16进行符号扩展,然后两者相加,结果作为访存地址Addr,将rt送Addr中
beq rs,rt,imm16Cond←R[rs]-R[rt] if(Cond eq 0) PC←PC+4+(SignExt(imm16)*4)从PC所指的内存单元中取指令,并加4.做减法以比较rs和rt中内容的大小,并计算下一条指令的地址,然后修改PC
j targetPC<31: 2>←PC<31: 28> || target<25: 0>第一步无需进行PC+4而直接计算目标地址,符号||表示拼接

4.本实验的具体的指令

(1)指令:addu

指令名称:无符号加

指令格式:addu rd,rs,rt

指令功能:

​ IM[PC];取指令(公共操作,取指部件完成)

​ R[rd] ←R[rs] + R[rt];从rs、rt 所指的寄存器中取数后相加,结果送rd 所指的寄存器中

​ PC ← PC + 4;计算下地址(公共操作,取指部件完成)

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000000rsrtrd00000100001
(2)指令:subu

指令名称:无符号减

指令格式:subu rd,rs,rt

指令功能:

IM[PC];从PC所指的内存单元中取指令R[rd] ←R[rs]- R[rt];从rs、rt 所指的寄存器中取数后相减,结果送rd 所指的寄存器中PC ← PC + 4;计算下地址(公共操作,取指部件完成)

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000000rsrtrd00000100011
(3)指令:ori

指令名称:或立即数

指令格式:ori rt,rs,imm16

指令功能:

​ IM[PC];取指令(公共操作,取指部件完成)

​ R[rt] ← R[rs] or ZeroExt(imm16);立即数零扩展,并与rs内容做“或”运算

​ PC ← PC + 4 ;计算下地址(公共操作,取指部件完成)

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
001101rsrtimm16
(4)指令:lw

指令名称:加载字

格式:lw rt, imm16(rs)

指令功能:

IM[PC];从PC所指的内存单元中取指令addr ← R[rs] + SignExt(imm16) ; 计算数据地址 (立即数要进行符号扩展)R[rt] ← DM[addr]; 从存储器中取出数据,装入到寄存器中

​ PC ← PC + 4;计算下地址(公共操作,取指部件完成)

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
100011rsrtimm16
(5)指令:sw

指令名称:存储字

指令格式:sw rt, imm16(rs)

指令功能:

IM[PC];取指令(公共操作,取指部件完成)

​ addr ← R[rs] + SignExt(imm16) ;计算存储单元地址(符号扩展!)

​ DM[addr] ← R[rt] ; 寄存器rt中的内容存到内存单元中

PC ← PC + 4; 计算下地址(公共操作,取指部件完成) 

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
101011rsrtimm16
(6)指令:beq

指令名称:等于转移

指令格式:beq rs,rt, imm16

指令功能:

IM[PC];取指令(公共操作,取指部件完成)Cond ← R[rs] - R[rt]   ;做减法比较rs和rt中的内容if (COND == 0) ;计算下地址(根据比较结果,修改PC)

​ PC ← PC + 4 + ( SignExt(imm16) * 4 )

  else

​ PC ← PC + 4

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000100rsrtimm16
(7)指令:j

指令名称:跳转并链接

指令格式:j target < 25:0 >

指令功能:

​ IM[PC] ;取指令(公共操作,取指部件完成)

​ PC < 31:2 > ← PC < 31:28 > , target < 25:0 > ;计算目标地址

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000010target < 25:0 >
(8)指令:and

指令格式:and rd,rs,rt

指令功能:rd ←rs & rt

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000000rsrtrd00000100100
(9)指令:or

指令格式:or rd,rs,rt

指令功能:rd ←rs | rt

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000000rsrtrd00000100101
(10)指令:xor

逻辑异或

指令格式:xor rd,rs,rt

指令功能:rd ←rs ^ rt

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000000rsrtrd00000100110
(11)指令:nor

逻辑或非

指令格式:nor rd,rs,rt

指令功能:rd ←~(rs | rt )

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000000rsrtrd00000100111
(12)指令:addiu

加无符号立即数

指令格式:addiu rt,rs,imm16

指令功能:rt ← rs+ (zero-extend)imm16

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
001001rsrtimmediate
(13)指令:andi

与立即数

指令格式:andi rt,rs,imm16

指令功能:rt ← rs& (zero-extend)imm16

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
001100rsrtimmediate
(14)指令:xori

异或立即数

指令格式:xori rt,rs,imm16

指令功能:rt ← rs ^ (zero-extend)imm16

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
001110rsrtimmediate
(15)指令:bne

不等于转移

指令格式:bne rs,rt, imm16

指令功能: if (rs != rt) PC ← PC+4 + (sign-extend)imm16<<2

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000101rsrtimmediate
(16)指令:jal

跳转并链接

指令格式:jal addr26

指令功能:$31<-PC+4;PC ←(PC+4)[31…28],addr26,0,0

指令编码:

31…2625…2120…1615…1110…65…0
oprsrtrdshamtfunc
000011address

二、数据通路的设计

以上的指令包括以下几种与指令有关的数据通路:

  • 指令——寄存器组:R格式指令均为寄存器指令,需要指令提供寄存器地址
  • 指令——运算单元(ALU):运算指令由指令提供运算类型,同时提供参与运算的立即数和位移量
  • 指令——存储器:load/store指令的寻址方式仅为寄存器偏移量寻址,需要指令提供立即数偏移量
  • 指令——PC:J格式指令需要将指令中的立即数载入PC中

同时还有几种必备的与指令无关的数据通路:

  • 寄存器组——运算单元(ALU):寄存器组为运算单元提供操作数,运算结果存在寄存器组中

  • 寄存器组——存储器:load/store指令的两端

  • 寄存器组——PC:跳转指令与寄存器组有关

    当使用哈弗结构时,数据通路框图如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gzH7vaVM-1642646412830)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\7241055-efcd9bb60656ba25.png)]

1.组合逻辑元件和存储元件

1.1 PC
(1)基本描述

PC是指令计数器,主要功能是完成输出当前指令地址并保存下一条指令地址。复位后,PC指向0x0000_3000,此处为第一条指令的地址。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VLIKOxEJ-1642646412831)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20211202223129607.png)]

(2)模块接口
信号名方向描述
[31:2]NPCI下条指令的地址
PCWrIPC写使能 1:允许NPC写入PC内部寄存器 0:禁止NPC写入PC内部寄存器
clkI时钟信号
rstI复位信号。 1:复位 0:无效
[31:2]PCO30位指令存储器地址(最低2位省略)
(3)功能定义
序号功能名称功能描述
1复位if rst=1,PC←0x0000_3000。
2保存NPC并输出Clk上升沿。 if rst=0,PC←NPC。
(4)模块描述
module PC( clk, rst, PCWr, NPC, PC );input         clk;input         rst;input         PCWr;input  [31:2] NPC;output [31:2] PC;reg [31:2] PC;reg [1:0] tmp;always @(posedge clk or posedge rst) beginif ( rst ) {PC, tmp} <=32'h0000_3000;else if ( PCWr ) PC <= NPC;end            
endmodule
1.2 NPC

[Next PC – 下指令部件]

(1)基本描述

NPC是下条指令计数器,主要功能是计算下一条指令地址,NPCOp[1:0]决定如何计算NPC,与PC配合使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-woeZabjU-1642646412831)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\NPC.PNG)]

(2)模块接口
信号名方向描述
PC[31:2]I30位本条指令的地址(最低2位省略)
Imm[25:0]I立即数(偏移量)
NPCOp[1:0]I计算方式
NPC[31:2]O30位下一条指令地址(最低2位省略)
(3)功能定义
NPCOp功能操作
00顺序地址NPC ←PC + 1
01计算B指令转移地址NPC ←PC +{ sign_ext(imm16) }
10计算J类指令转移地址NPC← {PC[31:28], imm26}
11
(4)模块描述
module NPC( PC, NPCOp, IMM, NPC );input  [31:2] PC;input  [1:0]  NPCOp;input  [25:0] IMM;output [31:2] NPC;reg [31:2] NPC;always @(*) begincase (NPCOp){00}: NPC <=  PC+1;{01}: NPC <=  PC +{ {14{IMM[15]}},IMM[15:0] };{10}: NPC <=  {PC[31:28], IMM[25:0] };default: ;endcaseend    
endmodule     
1.3 flopr模块(触发器)
(1)基本描述

存储器数据寄存器MDR、存储器地址寄存器MAR、暂存器A、暂存器B、ALU运算结果寄存器ALUOut是由flopr模块实例化,主要功能是数据缓冲,由带复位的D触发器构成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V5g39zkR-1642646412831)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\flopr.PNG)]

(2)模块接口
信号名方向描述
[WIDTH-1:0] dI输入数据
rstI复位信号
clkI时钟信号
[WIDTH-1:0] qO输出数据
(3)功能定义
序号功能名称功能描述
1数据复位if rst=0, q←d
2数据缓冲if rst=1, q←0
(4)模块描述
module flopr(clk,rst,d,q);input clk;input rst;input  [31:0] d;output [31:0] q;reg [31:0] q_r;always @(posedge clk or posedge rst) beginif ( rst ) q_r <=0;else q_r <=d;endassign q = q_r;
endmodule
1.31 DM

[Data Memory – 数据内存]

信号名方向描述
addrI读/写数据地址
dinI内存写入总线
wEnI写使能信号
clkI时钟信号
doutO数据输出总线

序号功能名称功能描述
1写入数据当写使能信号有效时,在每个时钟上升沿将写入总线的数据写进相应内存地址中
2读出数据将指定地址的数据通过数据输出总线进行输出
module dm_4k( addr, din, DMWr, clk, dout );input  [9:0] addr;input  [31:0] din;input         DMWr;input         clk;output [31:0] dout;reg [31:0] dmem[1023:0];always @(posedge clk) beginif (DMWr)dmem[addr] <= din;$display("dmem[0-4-16]=%8X, %8X, %8X",  dmem[0], dmem[1], dmem[16]);end // end alwaysassign dout = dmem[addr];endmodule  
1.32 IM

[Instruction Memory – 指令内存]

信号名方向描述
iaddrI当前需要执行的指令地址
insO指令输出

序号功能名称功能描述
1写入指令使用 $readmemh 函数将 code.txt 中的指令写入指令内存中
2读出指令根据得到的指令地址从指令内存中读出相应的指令数据
module im_4k( addr, dout );input [9:0] addr;output [31:0] dout;reg [31:0] imem[1023:0];assign dout = imem[addr];endmodule 
1.4 MUX

[Multiplexer – 选择器]

信号名方向描述
aI缺省输入信号
bI选择输入信号
ctrl_sI选通控制信号
doutO选择器输出

序号功能名称功能描述
1缺省输出当选通控制信号无效时,选择器输出缺省输入信号
2选择输出当选通控制信号有效时,选择器输出选择输入信号
module mux #(parameter WIDTH = 32) (a, b, ctrl_s, dout);input 	[WIDTH - 1:0] 	a;input 	[WIDTH - 1:0] 	b;input 		ctrl_s;output 	[WIDTH - 1:0]	dout;assign dout = ctrl_s? b: a;endmodule // Multiplexer;
1.5 RF

[Register File – 寄存器堆]

(1)基本描述

RF主要功能是保存寄存器文件,并支持对通用寄存器的访问。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RwxUGwvh-1642646412832)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\RF.PNG)]

(2)模块接口
信号名方向描述
A1 [4:0]I需要读的寄存器1的地址
A2 [4:0]I需要读的寄存器2的地址
A3 [4:0]I需要写的寄存器的地址
WD [31:0]I需要写的寄存器的数据
RFWrI寄存器写使能端 0:寄存器不写 1:寄存器写
clkI时钟信号
RD1 [31:0]O需要读的寄存器1的数据
RD2 [31:0]O需要读的寄存器2的数据
(3)功能定义
序号功能名称功能描述
1读取通用寄存器根据输入的RS、RT域的值,输出相应通用寄存器所存储的数据。 RD1←RF[A1];RD2←RF[A2]
2写回通用寄存器当RF写使能有效时,将待写的数据写入给定地址的通用寄存器中。 Clk上升沿时 if (RFWr) then RF[A3]←WD
(4)模块描述
`define DEBUG 1
module RF( A1, A2, A3, WD, clk, RFWr, RD1, RD2 );input  [4:0]  A1, A2, A3;input  [31:0] WD;input         clk;input         RFWr;output [31:0] RD1, RD2;reg [31:0] rf[31:0];integer i;initial beginfor (i=0; i<32; i=i+1)rf[i] <= 0;endalways @(posedge clk) beginif (RFWr)rf[A3] <= WD;`ifdef DEBUG$display("R[00-07]=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X", 0, rf[1], rf[2], rf[3], rf[4], rf[5], rf[6], rf[7]);$display("R[08-15]=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X", rf[8], rf[9], rf[10], rf[11], rf[12], rf[13], rf[14], rf[15]);$display("R[16-23]=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X", rf[16], rf[17], rf[18], rf[19], rf[20], rf[21], rf[22], rf[23]);$display("R[24-31]=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X", rf[24], rf[25], rf[26], rf[27], rf[28], rf[29], rf[30], rf[31]);`endifend assign RD1 = rf[A1];assign RD2 =rf[A2];endmodule  
1.6 EXT

[Extender – 扩展器]

信号名方向描述
imm16II-指令的16位立即数
extOpI扩展器控制信号
doutO扩展器输出总线

序号功能名称功能描述
1逻辑扩展当控制信号无效时,对输入的16位立即数逻辑扩展为32位
2算术扩展当控制信号有效时,对输入的16位立即数算术扩展为32位
module ext (imm16, extOp, dout);input                extOp;input       [15:0]   imm16;output reg  [31:0]   dout;always @ ( * ) begincase (extOp)0: dout = {16'h0000, imm16};// Logical Cal;1: dout = {{16{imm16[15]}}, imm16};// Arithmetic Cal;;endcaseend
endmodule // Extender;
1.7 IR

[指令寄存器]

(1)基本描述

IR主要功能是完成对来自IM的指令的缓冲。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FAylh2U7-1642646412833)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\IR.PNG)]

(2)模块接口
信号名方向描述
[31:0] im_dout;I指令输入
IRWrI写使能信号
rstI复位信号
clkI时钟信号
[31:0] instr;O指令输出
(3)功能定义
序号功能名称功能描述
1复位if rst=1, instr←0
2缓冲if rst=0, instr←im_dout
(4)模块描述
module IR (clk, rst, IRWr, im_dout, instr);input         clk;input         rst;input         IRWr; input  [31:0] im_dout;output [31:0] instr;reg [31:0] instr;always @(posedge clk or posedge rst) beginif ( rst ) instr <= 0;else if (IRWr)instr <=im_dout;end 
endmodule 

2.算术逻辑部件的设计(ALU)

Arithmetic Logic Unit – 算术逻辑单元

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V21ILpEY-1642646412833)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\ALU.png)]

11条目标指令对应的4种ALU操作

指令功能运算类型
add rd,rs,rtM[PC],PC←PC+4 R[rd]←R[rs]+R[rt]加(判溢出)
sub rd,rs,rtM[PC],PC←PC+4 R[rd]←R[rs]-R[rt]减(判溢出)
subu rd,rs,rtM[PC],PC←PC+4 R[rd]←R[rs]-R[rt]减(不判溢出)
slt rd,rs,rtif(R[s]<R[t]) R[d]←1 else R[d]←0减(不判溢出) 带符号整数比较大小
sltu rd,rs,rtif(R[s]<R[t]) R[d]←1 else R[d]←0减(不判溢出) 无符号整数比较大小
ori rt,rs,imm16R[rt]←R[rs]|ZeroExt(imm16)按位或(不判溢出)
addiu rt,rs,imm16R[rt]←R[rs]+SignExt(imm16)加(不判溢出)
lw rt,rs,imm16Addr←R[rs]+SignExt(imm16) R[rt]←M[Addr]加(不判溢出)
sw rt,rs,imm16Addr←R[rs]+SignExt(imm16) M[Addr]←R[rt]加(不判溢出)
beq rs,rt,imm16Cond←R[rs]-R[rt] if(Cond eq 0) PC←PC+4+(SignExt(imm16)*4)减(判0) 加(不判溢出)
j targetPC<31: 2>←PC<31: 28> || target<25: 0>无须ALU运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RM5yzeOz-1642646412833)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\ALU1.png)]

信号名方向描述
A [31:0]I操作数A
B [31:0]I操作数B
ALUCtrl[2:0]I需要进行的运算 000:加法 001:减法 01l:与运算 110:或运算
ZeroO两操作数是否相等
C [31:0]O运算结果
ALUCtrl功能操作
----A等于B?Zero ← (A==B) ? 1 : 0
000C ← A + B
001C ← A – B
010C ←A & B
110C ←A | B
module alu (A, B, ALUOp, C, Zero);input  [31:0] A, B;input  [1:0]  ALUOp;output [31:0] C;output        Zero;reg [31:0] C;always @( A or B or ALUOp ) begincase ( ALUOp )`ALUOp_ADDU: C = A + B;`ALUOp_SUBU: C = A - B;`ALUOp_OR:   C = A | B;//`ALUOp_AND:  C = A & B;//`ALUOp_XOR:  C = A ^ B;default:   ;endcaseend // end always;assign Zero = (A == B) ? 1 : 0;endmodule    

3. 单周期MIPS处理器数据通路

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifS2BEVo-1642646412834)(C:\Users\ASUS\Desktop\思维导图\计算机组成原理\MIPSCPU\相关图片\单周期CPU数据通路的设计.png)]
|
| C [31:0] | O | 运算结果 |

ALUCtrl功能操作
----A等于B?Zero ← (A==B) ? 1 : 0
000C ← A + B
001C ← A – B
010C ←A & B
110C ←A | B
module alu (A, B, ALUOp, C, Zero);input  [31:0] A, B;input  [1:0]  ALUOp;output [31:0] C;output        Zero;reg [31:0] C;always @( A or B or ALUOp ) begincase ( ALUOp )`ALUOp_ADDU: C = A + B;`ALUOp_SUBU: C = A - B;`ALUOp_OR:   C = A | B;//`ALUOp_AND:  C = A & B;//`ALUOp_XOR:  C = A ^ B;default:   ;endcaseend // end always;assign Zero = (A == B) ? 1 : 0;endmodule    

3. 单周期MIPS处理器数据通路

[外链图片转存中…(img-ifS2BEVo-1642646412834)]


http://www.ppmy.cn/news/151544.html

相关文章

什么软件测试cpu满载,功耗实测——待机/CPU满载/3DMark_CPUCPU评测-中关村在线

◎功耗实测——待机/CPU满载/3DMark 采用最新22纳米3-D三栅极晶体管工艺制造的第四代智能英特尔酷睿处理器在功耗方面显然也会获得极大的改善&#xff0c;记得上一代的IVB核心产品就已经让我们看到了英特尔在功耗方面的努力。如果大家看过本文第五页的内容&#xff0c;那么应该…

p29 p30 p31 p32

p29: 三目运算符 三目运算符&#xff1a;&#xff08;作用&#xff09; 通过三目运算符实现简单的判断。 语法&#xff1a; 表达式1 &#xff1f; 表达式2 &#xff1a;表达式3&#xff1b; 解释&#xff1a; 如果表达式1的值为真&#xff0c;执行表达式2.&#xff0c;并且返…

国行Surface Laptop 3评测:微软最佳轻薄本之作

微软在今年10月份的那场发布会上&#xff0c;一口气发布了6款新设备&#xff0c;这其中不乏关注度爆棚的双屏移动设备Surface Duo&#xff0c;还有可能成为新形态电脑的Surface Neo。但实际上真正能走到我们身边的还要属Surface Laptop 3。毕竟这是微软目前的硬件产品中最成熟的…

intel cpu 分类 i7、i5、i3、T系列、P系列

同学要买笔记本&#xff0c;就帮忙看看。 咋一看&#xff0c;吓一跳&#xff0c;好久没看&#xff0c;intelCPU蹦出那么多型号来&#xff0c;搞得一头雾水&#xff0c;还好咱有网络&#xff0c;查了一并整理一下。 现在市场的CPU有T系列、P系列、E系列、还有i3、i5、i7. T系列…

Intel第二代智能酷睿 i3/i5/i7处理器对比评测(1)

Intel Core i3 2100、Core i5 2500K、Core i7 2600K 新技术性能对比&#xff1a; 参数规格&#xff1a; 1、前言分析&#xff1a;第二代Core i3/i5/i7隶属于第二代智能酷睿家族&#xff0c;全部基于全新的Sandy Bridge微架构&#xff0c;相比第一代产品主要带来五点重要革新…

人脸识别(Java+ Face++实现)

人脸识别&#xff08;Java Face实现&#xff09; 一. 概述 Face的核心技术是基于深度学习的人脸识别技术&#xff0c;其算法在准确率和速度方面都处于领先地位。该公司的产品和服务包括人脸识别SDK、人脸识别API、人脸比对服务、人脸检测服务、活体检测服务等。这些产品和服务广…

锐炬显卡和mx350区别

锐炬显卡和mx350区别如下&#xff1a; 选锐炬显卡还是mx350这些点很重要 http://www.adiannao.cn/dq 1、功耗&#xff1a; 锐炬显卡的功耗比mx350要小&#xff0c;更加省电。 2、性能&#xff1a; mx350比锐炬性能强一点。 3、类型&#xff1a; 锐炬显卡是集成显卡&#xff0c;…

rtx3070ti显卡什么水平 rtx3070ti显卡什么级别 rtx3070ti显卡怎么样

高端高性价比显卡。 目前显卡的顶端是3090TI&#xff0c;但是价格上万元&#xff0c;而3070TI的价格只有3090TI的一半不到&#xff0c;性能也是非常好&#xff0c;算是一个极具性价比的显卡。 我用的显卡就是活动时8折抢购的太给力了 http://www.adiannao.cn/dq 3070TI NVIDIA …