多周期MPIS指令集设计.docx

上传人:b****4 文档编号:4047495 上传时间:2023-05-06 格式:DOCX 页数:91 大小:574.63KB
下载 相关 举报
多周期MPIS指令集设计.docx_第1页
第1页 / 共91页
多周期MPIS指令集设计.docx_第2页
第2页 / 共91页
多周期MPIS指令集设计.docx_第3页
第3页 / 共91页
多周期MPIS指令集设计.docx_第4页
第4页 / 共91页
多周期MPIS指令集设计.docx_第5页
第5页 / 共91页
多周期MPIS指令集设计.docx_第6页
第6页 / 共91页
多周期MPIS指令集设计.docx_第7页
第7页 / 共91页
多周期MPIS指令集设计.docx_第8页
第8页 / 共91页
多周期MPIS指令集设计.docx_第9页
第9页 / 共91页
多周期MPIS指令集设计.docx_第10页
第10页 / 共91页
多周期MPIS指令集设计.docx_第11页
第11页 / 共91页
多周期MPIS指令集设计.docx_第12页
第12页 / 共91页
多周期MPIS指令集设计.docx_第13页
第13页 / 共91页
多周期MPIS指令集设计.docx_第14页
第14页 / 共91页
多周期MPIS指令集设计.docx_第15页
第15页 / 共91页
多周期MPIS指令集设计.docx_第16页
第16页 / 共91页
多周期MPIS指令集设计.docx_第17页
第17页 / 共91页
多周期MPIS指令集设计.docx_第18页
第18页 / 共91页
多周期MPIS指令集设计.docx_第19页
第19页 / 共91页
多周期MPIS指令集设计.docx_第20页
第20页 / 共91页
亲,该文档总共91页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

多周期MPIS指令集设计.docx

《多周期MPIS指令集设计.docx》由会员分享,可在线阅读,更多相关《多周期MPIS指令集设计.docx(91页珍藏版)》请在冰点文库上搜索。

多周期MPIS指令集设计.docx

多周期MPIS指令集设计

指令类型

[31:

26]

[25:

21]

[20:

16]

[15:

11]

[10:

6]

[5:

0]

R类型

Op

Rs

Rt

Rd

shamt

funct

含义

nop

000000

00000

00000

00000

00000

000000

空操作

addu

000000

rs

rt

rd

00000

100001

加(不带溢出)

subu

000000

rs

rt

rd

00000

100011

减(不带溢出)

and

000000

rs

rt

rd

00000

100100

or

000000

rs

rt

rd

00000

100101

xor

000000

rs

rt

rd

00000

100110

异或

nor

000000

rs

rt

rd

00000

100111

或非

sllv

000000

rs

rt

rd

00000

000100

逻辑左移变量

srlv

000000

rs

rt

rd

00000

000110

逻辑右移变量

I类型

Op

Rs

Rt

immediate

bltz

000001

rs

00000

Immediate

小于0转移

beq

000100

rs

rt

Immediate

相等转移

bne

000101

rs

rt

Immediate

不相等转移

addi

001000

rs

rt

Immediate

加立即数

andi

001100

rs

rt

Immediate

与立即数

ori

001101

rs

rt

Immediate

或立即数

lw

100011

rs

rt

Immediate

取字

sw

101011

rt

rt

Immediate

存字

J类型

Op

Address

j

000010

address

无条件跳转

综述:

本设计选用了如下指令,基于此设计出了单周期MIPS处理器,并在单周期的基础上添加了5级流水线设计出了带五级流水线的MIPS处理器。

第一部分单周期MIPS处理器

一、代码

----------------------------------------------------------------------------------

--ModuleName:

top_mips-Behavioral顶层模块

----------------------------------------------------------------------------------

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitytop_mipsis

port(reset:

instd_logic;

clk:

instd_logic;

ov:

outstd_logic);

endtop_mips;

architectureBehavioraloftop_mipsis

signals_pc:

std_logic_vector(31downto0);---pc输入

signals_pc_i:

std_logic_vector(31downto0);---pc输出

signals_command:

std_logic_vector(31downto0);---指令

signals_add1_pc:

std_logic_vector(31downto0);---pc+1值

signals_shift:

std_logic_vector(27downto0);--指令低26位左移2位后值

signals_jump_pc:

std_logic_vector(31downto0);--绝对跳转

signals_regdst:

std_logic;----控制信号

signals_jump:

std_logic;

signals_branch:

std_logic;

signals_memread:

std_logic;

signals_memtoreg:

std_logic;

signals_aluop:

std_logic_vector(3downto0);

signals_memwrite:

std_logic;

signals_alusrc:

std_logic;

signals_regwrite:

std_logic;

signals_opa:

std_logic_vector(31downto0);----ALU操作数

signals_opb:

std_logic_vector(31downto0);----ALU操作数

signals_reg_data:

std_logic_vector(31downto0);--寄存器读出的第二个数据

signals_imm_data:

std_logic_vector(31downto0);---低16位符号扩展后

signals_zero:

std_logic;

signals_alu_result:

std_logic_vector(31downto0);

signals_branch_pc:

std_logic_vector(31downto0);----条件跳转

signals_1orbranch:

std_logic_vector(31downto0);

signals_ram_data:

std_logic_vector(31downto0);

signals_wr_data:

std_logic_vector(31downto0);

signals_mux:

std_logic;

signals_alu_ctrl:

std_logic_vector(3downto0);

signals_aimreg_addr:

std_logic_vector(4downto0);写寄存器堆的地址

componentpcis---pc指针模块

port(reset:

instd_logic;

clk:

instd_logic;

pc_i:

instd_logic_vector(31downto0);

pc_o:

outstd_logic_vector(31downto0));

endcomponent;

componentmemoryis---指令存储器

port(reset:

instd_logic;

mem_adr:

instd_logic_vector(31downto0);

mem_out:

outstd_logic_vector(31downto0));

endcomponent;

componentreg_32bit_arrayis---寄存器堆

port(reset:

instd_logic;

clk:

instd_logic;

wr_en:

instd_logic;

addr_wr:

instd_logic_vector(4downto0);

addr1_rd:

instd_logic_vector(4downto0);

addr2_rd:

instd_logic_vector(4downto0);

reg_data_i:

instd_logic_vector(31downto0);

reg_data1_o:

outstd_logic_vector(31downto0);

reg_data2_o:

outstd_logic_vector(31downto0));

endcomponent;

componentramis---数据存储器

port(reset:

instd_logic;

clk:

instd_logic;

rd_en:

instd_logic;

wr_en:

instd_logic;

addr:

instd_logic_vector(5downto0);

data_i:

instd_logic_vector(31downto0);

data_o:

outstd_logic_vector(31downto0));

endcomponent;

componentfsmis----指令译码器

port(

command:

instd_logic_vector(5downto0);

regdst:

outstd_logic;

jump:

outstd_logic;

branch:

outstd_logic;

memread:

outstd_logic;

memtoreg:

outstd_logic;

aluop:

outstd_logic_vector(3downto0);

memwrite:

outstd_logic;

alusrc:

outstd_logic;

regwrite:

outstd_logic);

endcomponent;

componentALU_ctrlis----ALU控制单元

port(

funct_i:

instd_logic_vector(5downto0);

aluop_i:

instd_logic_vector(3downto0);

alu_ctrl_o:

outstd_logic_vector(3downto0));

endcomponent;

componentaluis----ALU

port(

op_a,op_b:

instd_logic_vector(31downto0);

alu_ctrl_i:

instd_logic_vector(3downto0);

zero:

outstd_logic;

result:

outstd_logic_vector(31downto0));

endcomponent;

componentaddis---加法器

port(

op_a,op_b:

instd_logic_vector(31downto0);

result:

outstd_logic_vector(31downto0);

ov:

outstd_logic);

endcomponent;

begin

s_shift<=s_command(25downto0)&"00";---左移2位

s_add1_pc<=s_pc+1;---pc+1

s_jump_pc<=s_add1_pc(31downto28)&s_shift;---无条件跳转地址

s_mux<=s_branchands_zero;

s_aimreg_addr<=s_command(20downto16)whens_regdst='0'else

s_command(15downto11);

s_opb<=s_reg_datawhens_alusrc='0'else

s_imm_data;

s_1orbranch<=s_add1_pcwhens_mux='0'else

s_branch_pc;

s_pc_i<=s_1orbranchwhens_jump='0'else

s_jump_pc;

s_wr_data<=s_alu_resultwhens_memtoreg='0'else

s_ram_data;

---expand

s_imm_data<=s_command(15)&x"0000"&s_command(14downto0);

mips_pc:

pcportmap(reset=>reset,

clk=>clk,

pc_i=>s_pc_i,

pc_o=>s_pc);

mips_memory:

memoryportmap(reset=>reset,

mem_adr=>s_pc,

mem_out=>s_command);

mips_regs:

reg_32bit_arrayportmap(

reset=>reset,

clk=>clk,

wr_en=>s_regwrite,

addr_wr=>s_aimreg_addr,

addr1_rd=>s_command(25downto21),

addr2_rd=>s_command(20downto16),

reg_data_i=>s_wr_data,

reg_data1_o=>s_opa,

reg_data2_o=>s_reg_data);

mips_ram:

ramportmap(reset=>reset,

clk=>clk,

wr_en=>s_memwrite,

rd_en=>s_memread,

addr=>s_alu_result(5downto0),

data_i=>s_reg_data,

data_o=>s_ram_data);

mips_fsm:

fsmportmap(command=>s_command(31downto26),

regdst=>s_regdst,

jump=>s_jump,

branch=>s_branch,

memread=>s_memread,

memtoreg=>s_memtoreg,

aluop=>s_aluop,

memwrite=>s_memwrite,

alusrc=>s_alusrc,

regwrite=>s_regwrite);

mips_aluctrl:

ALU_ctrlportmap(funct_i=>s_command(5downto0),

aluop_i=>s_aluop,

alu_ctrl_o=>s_alu_ctrl);

mips_alu:

aluportmap(op_a=>s_opa,

op_b=>s_opb,

alu_ctrl_i=>s_alu_ctrl,

zero=>s_zero,

result=>s_alu_result);

mips_add:

addportmap(op_a=>s_add1_pc,

op_b=>s_imm_data,

result=>s_branch_pc,

ov=>ov);

endBehavioral;

----------------------------------------------------------------------------------

--ModuleName:

pc-Behavioralpc模块

----------------------------------------------------------------------------------

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitypcis

port(reset:

instd_logic;

clk:

instd_logic;

pc_i:

instd_logic_vector(31downto0);

pc_o:

outstd_logic_vector(31downto0));

endpc;

architectureBehavioralofpcis

begin

process(clk,reset,pc_i)

begin

ifreset='1'then

pc_o<=x"00000000";

elsif(clk'eventandclk='1')then

pc_o<=pc_i;

endif;

endprocess;

endBehavioral;

----------------------------------------------------------------------------------

--ModuleName:

memory-Behavioral程序存储器模块

------------------------------指令存储器64×32----------------------------------------------------

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitymemoryis

port(reset:

instd_logic;

mem_adr:

instd_logic_vector(31downto0);

mem_out:

outstd_logic_vector(31downto0));

endmemory;

architectureBehavioralofmemoryis

TYPEmem_dataisarray(0to63)ofstd_logic_vector(31downto0);---指令存储器

signalrom_table:

mem_data;

begin

process(reset,mem_adr,rom_table)

begin

if(reset='1')then

rom_table<=(---------将指令通过RESET固化进去

"00000000000000000000000000000000",---nop

"00000000000000000000000000000000",---nop

"00000000001000100000100000100000",---add

"00000000011000100001000000100010",---sub

"00000000100001010001100000100100",---and

"00000000110001110010000000100101",---or

"00000001000010010010100000100110",---xor

"00000001010010110011000000100111",---nor

"00000001100011010011100000000100",---sllv

"00000001110011110100000000000110",---srlv

"00000111111000000000000000000010",---bltz

"00000000000000000000000000000000",

"00000000000000000000000000000000",

"00010010001011110000000000000010",---beq

"00000000000000000000000000000000",

"00000000000000000000000000000000",

"00010110010100110000000000000010",---ben

"00000000000000000000000000000000",

"00000000000000000000000000000000",

"00000110000000000000000000000010",---bltz

"00000000000000000000000000000000",

"00000000000000000000000000000000",

"00010010001100010000000000000010",---beq

"00000000000000000000000000000000",

"00000000000000000000000000000000",

"00010111111000000000000000000010",---ben

"00000000000000000000000000000000",

"00000000000000000000000000000000",

"00100010011111100000000011111111",---addi

"00110010100111010000000000011001",---andi

"00110110110111000000000000011000",---ori

"10001100000110110000000000001111",---lw

"10101100000101110000000000011111",---sw

"00001000000000000000000000011101",---j

"00000000000000000000000000000000",

"000000000000000000000

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2