- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                微控制器设计方案
第一部分  功能描述
所有的MIPS指令都是32位,支持多种指令,主要有以下几种:
·数据加载和存储指令:lw、sw指令 
·跳转指令:beq条件跳转和j、jr、jl跳转
·算数逻辑运算:add、sub、and、or、slt
具体有三种格式:
处理器有32个32位寄存器,并且为了测试和运行方便,配备了一个32字的指令存储器,和一个32字的数据存储器(地址0x0000_0000~0x0000_001f)。还备有UART串口,并且与数据存储器共同编址(0x8000_0000~0x8000_0008)。
第二部分 设计方案
1、设计策略
采用分治:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各
个击破,分而治之。
本实验中,我们将整个数据通路化分成多个模块:寄存器堆、取指部件、扩展器、二选一数据选择器、算术逻辑单元、数据存储器等,分别设计及实现,然后再整体进行逻辑控制,最终实现单周期数据通路。
2、设计思路
建立数据通路:
按照图1设计能够实现R型,lw/sw型和跳转型指令的mips处理器整体数据通路图
数据通路必须具备必要的存储元件,可能需要多个,同时数据通路必要的元件可能需要多个。
选择一组数据通路部件
根据需求,组装数据通路
分析每条指令的实现,以确定如何设置影响寄存器传输的控制点
装配控制逻辑
3.数据通路图
图1 数据通路图
第三部分  单周期MIPS分析与设计
ALU:算术逻辑运算单元,有2个32位输入和1个32位输出,还有一个零标志位。有3个控制输入,而八种可能的输入组合中只有5种可能出现。
对于取字和存储指令,ALU用于计算存储地址;
对于R型指令, 根据指令的低6位功能字段的内容, ALU执行5中操作中的一种。
对于相等分支指令,ALU执行剑法操作。
实现代码:
always @ (ctrl or in1 or in2)
	begin
	   if(in1==in2) zero=1;
	    else zero=0;
	   case (ctrl)
		3b010: ALU_out=in1+in2;
		3b110: ALU_out=in1-in2;
		3b000: ALU_out=in1  in2;
		3b001: ALU_out=in1 | in2;
		3b111: if (in1in2) 
                   ALU_out=1;
 		        else
 		             ALU_out=0;
	   default: ALU_out=0;
		endcase
	end
ALU控制的代码实现:
module ALU_ctrl(
    input [1:0] ALUOp,
    input [5:0] funct,
    output reg [2:0] ALU_ctrl
    );
	always @ (ALUOp or funct)
begin
  case (ALUOp)
  2b00: ALU_ctrl=3b010;
  2b01: ALU_ctrl=3b110;
  2b10: begin
           case (funct)
			  6b100000: ALU_ctrl=3b010;
			  6b100010: ALU_ctrl=3b110;
           6b100100: ALU_ctrl=3b000;
           6b100101: ALU_ctrl=3b001;
           6b101010: ALU_ctrl=3b111;
           default: ALU_ctrl=0;
           endcase			  
         end
  endcase
end
endmodule
						
数据存储单元:是一个状态单元,有读写控制信号、地址和数据端口。两个输入是地址和所写数据,一个输出位为出内容,读写控制信号是独立的,任意始终只能激活一个。存数指令,要从寄存器堆中读出要存的数据;取数指令,则要将刚从存储器中取出的数放入寄存器堆中指定寄存器中。
实现代码:
begin
   case ({ctrl_write,ctrl_read})
	2b01: out=mem[addr];
	2b10: mem[addr]=data;
	default: $display(error);
	endcase
 end
MUX:二选一数据选择器,通过控制信号的值来选择输出。
实现代码:
always @ (*)
 if(ctrl==0) out=in0;
 else out=in1;
寄存器堆:
实现代码:
always @ (in1 or in2
                
原创力文档
                        

文档评论(0)