计算机设计与实践MIPS基本指令.docx
- 文档编号:28530683
- 上传时间:2023-07-18
- 格式:DOCX
- 页数:10
- 大小:151.23KB
计算机设计与实践MIPS基本指令.docx
《计算机设计与实践MIPS基本指令.docx》由会员分享,可在线阅读,更多相关《计算机设计与实践MIPS基本指令.docx(10页珍藏版)》请在冰豆网上搜索。
计算机设计与实践MIPS基本指令
MIPS基本指令和寻址方式:
MIPS是典型的RISC处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式字段,由指令格式确定各操作数的寻址方式。
MIPS指令格式一般有三种格式:
R-型指令格式
I-型指令格式
J-型指令格式
OP:
操作码
rs:
第一个源操作数寄存器
rt:
第二个源操作数寄存器(单目原数据)
rd:
结果寄存器
shamt:
移位指令的位移量
func:
指令的具体操作类型
特点:
R-型指令是RR型指令,其操作码OP字段是特定的“000000”,具体操作类型由func字段给定。
例如:
func=“100000”时,表示“加法”运算。
R[rd]←R[rs]+R[rt]
特点:
I-型指令是立即数型指令
双目运算:
R[rt]R[rs](OP)SignExt(imm16)
Load指令:
Addr←R[rs]+SignExt(imm16)计算数据地址(立即数要进行符号扩展)
R[rt]←M[Addr]从存储器中取出数据,装入到寄存器中
Store指令:
Addr←R[rs]+SignExt(imm16)
M[Addr]←R[rt]
特点:
J-型指令主要是无条件跳转指令,将当前PC的高4位拼上26位立即数,后补两个“0”,作为跳转目标地址。
R型指令:
定点运算:
add/addu,sub/subu,sra,mult/multu,div/divu
逻辑运算:
and/or/nor,sll/srl
比较分支:
beq/bne/slt/sltu
跳转指令:
jr
I型指令:
定点运算:
addi/addiu
逻辑运算:
andi/ori
比较分支:
slti/sltiu
数据传送:
lw/sw/lhu/sh/lbu/sb/lui
J型指令:
j/jal
设计模块划分,教学安排
1、MIPS格式指令系统设计
2、指令存储器设计
3、寄存器堆设计
4、ALU设计——基本算术、逻辑单元的设计
32位超前进位加法器的设计
32位桶式移位寄存器的设计
5、取指令部件的设计
6、立即数处理单元设计
7、单周期处理器设计——R型指令的数据通路设计
I型指令的数据通路设计
Load/Store指令的数据通路设计
分支指令/转移指令的数据通路设计
综合12条指令的完整数据通路设计
8、ALU控制单元设计
9、主控制单元的设计
10、单周期处理器总体验证
11、异常和中断处理及其电路实现
12、带有异常和中断处理功能的处理器的设计
设计示例1:
指令存储器设计
1、指令存储器模块定义:
指令存储器用于存放CPU运算的程序指令和数据等,采用单端口存储器设计,设计最大为64个存储单元,每个存储单元数据宽度为32bit。
下图为指令存储器的模块框图。
图1模块框图
表1:
存储器接口信号说明表
序号
接口信号名称
方向(I/O)
说明
备注
1
ExtMem_CLK
I
存储器工作时钟,频率为50Mhz
2
ExtMem_CSn
I
存储器片选信号,低有效
3
ExtMem_Adr[5:
0]
I
存储器地址线
最大64个单元
4
ExtMem_WRn
I
存储器写信号,低有效
5
ExtMem_RDn
I
存储器读信号,低有效
6
ExtMem_Din[31:
0]
I
存储器输入数据线
7
ExtMem_Dout[31:
0]
O
存储器输出数据线
8
Vcc
电源
9
Gnd
地线
图2存储器接口读时序框图
图3存储器接口写时序框图
图4存储器接口读写时序框图
2、设计电路源代码
ModuleExtMem(inputExtMem_CLK,
inputExtMem_CS,
input[5:
0]ExtMem_Adr,
inputExtMem_WR,
inputExtMem_RD,
input[31:
0]ExtMem_Din,
output[31:
0]ExtMem_Dout);
reg[31:
0]Memory[0:
63];
//---存储器写操作
always@(posedgeExtMem)
begin
if(~ExtMem_CS&~ExtMem_WR)Memory[ExtMem_Adr]<=ExtMem_Din;
end
//---存储器读操作方式1
always@(posedgeExtMem)
begin
if(~ExtMem_CS&~ExtMem_RD)ExtMem_Dout<=Memory[ExtMem_Adr];
end
//---存储器读操作方式2
always@(*)
begin
if(~ExtMem_CS&~ExtMem_RD)ExtMem_Dout<=Memory[ExtMem_Adr];
end
endmodule
问题讨论:
//------方式1与方式2的区别?
//------altera公司的FPGA芯片,使用其内部存储器IP必须采用方式1设计
//------xilinx公司的FPGA芯片,使用其内部存储器IP可以采用方式1或方式2设计
3、指令存储器初始化值设计
在仿真环境下,在设计电路中添加如下初始化存储器值电路:
initial
begin
#0Memory[6'h0]<=32'h10;Memory[1]=32'h11;Memory[2]=32'h12;
Memory[63]=32'h63;
end
问题讨论:
在硬件设计实现方式下,如何给存储器付初值?
4、设计电路仿真
所设计的指令存储器模块电路,采用Active-HDL8.1ver仿真器工具进行了设计仿真验证,验证结果表明存储器功能以及接口时序完全正确,如下是仿真验证的波形图。
附件1是仿真激励源代码。
图5存储器电路读写仿真波形图
5、存在问题及解决方式方法,设计讨论等
XXXXXXXXX
YYYY
ZZZZZZZZZZZ
附件1:
//----------------------------------------------------------//
//Desc:
//----------------------------------------------------------//
//
`timescale10ps/10ps
moduleExtMem_testbench();
//---测试信号定义
regfpga_clk,mem_cs,mem_wr,men_rd;
reg[5:
0]mem_addr;
reg[31:
0]mem_din;
wire[31:
0]mem_dout;
//---存储器模块实例化调用
ExtMemmem_inst(.ExtMem_CLK(fpga_clk),
.ExtMem_CS(mem_cs),
.ExtMem_Adr(mem_addr),
.ExtMem_WR(mem_wr),
.ExtMem_RD(men_rd),
.ExtMem_Din(mem_din),
.ExtMem_Dout(mem_dout));
//-------------------------------
always#50fpga_clk<=~fpga_clk;
initial
begin
#0fpga_clk=1'h0;mem_cs=1'h1;mem_wr=1'h1;men_rd=1'h1;
mem_addr=6'h00;mem_din=32'h00;
end
initial
begin
#510mem_cs=1'h0;mem_wr=1'h0;mem_addr=6'h01;mem_din=32'h01;
#100mem_addr=6'h02;mem_din=32'h02;
#100mem_cs=1'h1;mem_wr=1'h1;
#100mem_addr=6'h03;mem_din=32'h03;
#100mem_cs=1'h0;mem_wr=1'h0;
#100mem_cs=1'h1;mem_wr=1'h1;mem_addr=6'h04;mem_din=32'h04;
#200mem_cs=1'h0;men_rd=1'h0;mem_addr=6'h02;mem_din=32'hzz;
#100mem_addr=6'h03;
#100mem_cs=1'h1;men_rd=1'h1;
#200mem_cs=1'h0;men_rd=1'h0;mem_addr=6'h01;
#200mem_cs=1'h1;men_rd=1'h1;
#100mem_addr=6'hzz;
end
//----------------------------------------------------//
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 设计 实践 MIPS 基本 指令