当前位置:文档之家› 计算机设计与实践——MIPS基本指令

计算机设计与实践——MIPS基本指令

MIPS基本指令和寻址方式:MIPS是典型的RISC处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式字段,由指令格式确定各操作数的寻址方式。

MIPS指令格式一般有三种格式:R-型指令格式I-型指令格式J理指令格式R_Type指指指指31 265bit 6bit OP:操作码rs:第一个源操作数寄存器rt: 第二个源操作数寄存器(单目原数据)rd: 结果寄存器shamt :移位指令的位移量func:指令的具体操作类型特点:R-型指令是RR型指令,其操作码0P字段是特定的000000”,具体操作类型由字段给定。

例如:func= 100000"时,表示加法"运算。

R[rd] —R[rs] + R[rt]I_Type 指指指指5bit 5bit 16bit 特点:I-型指令是立即数型指令双目运算:R[rt] R[rs] (OP) SignExt(imm16)Load指令:funcAddr J R[rs] + SignExt(imm16) M[Addr] J R[rt]J _Type 指令格式3126 256bit特点:J-型指令主要是无条件跳转指令, 将当前PC 的高4位拼上26位立即数,后补两个“ 0”, 作为跳转目标地址。

R 型指令:定点运算: add / addu , sub / subu , sra , mult/multu , div/divu逻辑运算:and / or / nor , sll / srl比较分支:beq / bne / slt / sltu跳转指令: jrI 型指令:定点运算: addi / addiu逻辑运算:andi / ori比较分支:slti / sltiu数据传送: lw / sw/ lhu / sh / lbu / sb / luiJ 型指令:j / jalAddr J R[rs] + SignExt(imm16) R[rt] J M[Addr]Store 指令:计算数据地址(立即数要进行符号扩展) 从存储器中取出数据,装入到寄存器中设计模块划分,教学安排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 。

下图为指令存储器的模块框图。

module ExtMemExtMem Adr ExtMem RD ExtMem CLK图1模块框图序号 接口信号名称方向(I/O )说明备注1 ExtMem_CLK I 存储器工作时钟,频率为50Mhz2 ExtMem_CS n I 存储器片选信号,低有效3 ExtMem_Adr [5:0] I 存储器地址线最大64个单兀4 ExtMem_WR n I 存储器写信号,低有效5 ExtMem_RD n I 存储器读信号,低有效6 ExtMem_Din [31:0] I 存储器输入数据线7 ExtMem_Dout [31:0]O存储器输出数据线8Vcc电源9Gnd地线ExtMem CS ExtMem Dout ExtMem WR ExtMem DinExtMem_CLK ExtMem_CS ExtMem_WR ExtMem_RD ExtMem_Adr ExtMem_Din图2存储器接口读时序框图reg [31:0] Memory [0: 63]; //---存储器写操作always @( posedgeExtMem )beginif (~ExtMem_CS end& ~ExtMem_WR )Memory[ExtMem_Adr]<= ExtMem_Di n;//---存储器读操作方式 1 always @( posedge ExtMem )beginExtMem_CLK ExtMem_CS ExtMem_WRExtMem_RD ExtMem_Adr ExtMem_Dout/Valid ) \/Valid\\图3存储器接口写时序框图ExtMem_CLK ExtMem_CS ExtMem_WR ExtMem_RD ExtMem_Adr ExtMem_Din ExtMem_DoutValidValid--------------- (Valid ' --------- ---------------------------------------------------- -------------------------------------------------------------- ■, Valid图4存储器接口读写时序框图2、设计电路源代码 Module ExtMem ( in putin put in put in put in put in put output ExtMem_CLK,ExtMem_CS, [5:0] ExtMem_Adr, ExtMem_WR, ExtMem_RD, [31:0] ExtMem_D in, [31:0] ExtMem_Dout )if (~ExtMem_CS & ~ExtMem_RD ) ExtMem_Dout<= Memory[ExtMem_Adr];end//--- 存储器读操作方式 2always @( * )beginif (~ExtMem_CS & ~ExtMem_RD ) ExtMem_Dout<= Memory[ExtMem_Adr];endendmodule问题讨论:// ----- 方式1 与方式2 的区别?// ----- altera 公司的FPGA 芯片,使用其内部存储器IP 必须采用方式1 设计// ----- xilinx 公司的FPGA 芯片,使用其内部存储器IP 可以采用方式1或方式2 设计3、指令存储器初始化值设计在仿真环境下,在设计电路中添加如下初始化存储器值电路:initialbegin#0 Memory[6'h0]<=32'h10; Memory[1]=32'h11; Memory[2]=32'h12;Memory[63]=32'h63;end问题讨论:在硬件设计实现方式下,如何给存储器付初值?4、设计电路仿真所设计的指令存储器模块电路,采用Active-HDL 8.1ver 仿真器工具进行了设计仿真验证,验证结果表明存储器功能以及接口时序完全正确,如下是仿真验证的波形图。

附件 1 是仿真激励源代码。

图5存储器电路读写仿真波形图5、存在问题及解决方式方法,设计讨论等XXXXXXXXXYYYYZZZZZZZZZZZ附件1:// -------------------------------------------------------- ////Desc:// -------------------------------------------------------- ////'timescale 10ps/10psmodule ExtMem_testbench ( );//--- 测试信号定义reg fpga_clk, mem_cs, mem_wr, men_rd;reg [5:0] mem_addr;reg [31:0] mem_din;wire [31:0] mem_dout;//---存储器模块实例化调用ExtMem mem_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 #50 fpga_clk<= ~fpga_clk;initialbegin#0 fpga_clk=1'h0; mem_cs=1'h1; mem_wr=1'h1; men_rd=1'h1; mem_addr=6'h00; mem_din=32'h00;end initialbegin#510 mem_cs=1'h0; mem_wr=1'h0; mem_addr=6'h01; mem_din=32'h01;#100 mem_addr=6'h02; mem_din=32'h02;#100 mem_cs=1'h1; mem_wr=1'h1;#100 mem_addr=6'h03; mem_din=32'h03;#100 mem_cs=1'h0; mem_wr=1'h0;#100 mem_cs=1'h1; mem_wr=1'h1; mem_addr=6'h04; mem_din=32'h04;#200 mem_cs=1'h0; men_rd=1'h0; mem_addr=6'h02; mem_din=32'hzz;#100 mem_addr=6'h03;#100 mem_cs=1'h1; men_rd=1'h1;#200 mem_cs=1'h0; men_rd=1'h0; mem_addr=6'h01;#200 mem_cs=1'h1; men_rd=1'h1;#100 mem_addr=6'hzz;end// --------------------------------------------------- //endmodule。

相关主题