资源描述:
《ALU模块设计文档.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、版本信息版本日期描述作者1.020/03/2015ALU模块设计文档刘有耀封面版本信息必须与本页最后版本保持一致。ALU模块设计方案算术逻辑运算器(ALU)是数字计算机中执行加、减等算术运算,执行与、或等逻辑运算,以及执行比较、移位、传送等操作的功能部件,本模块实现32位的ALU。本文描述MIPS单周期处理器的ALU模块的功能、接口、时序及其实现。1功能ALU主要完成:l有符号数的加减运算l无符号数的加减运算l与、或逻辑运算l算术右移l逻辑左移、右移l有符号小于置1运算l无符号小于置1运算2接口说明表1ALU接口
2、信号定义信号名称方向含义ALU_DA[31:0]INALU第一个输入数据端口,32位宽度ALU_DB[31:0]INALU第二个输入数据端口,32位宽度ALU_CLT[3:0]INALU运算功能编码,12种指令需要4位编码ALU_SHIFT[4:0]INALU移位次数ALU_ZEROOUT运算结果全零标志ALU_OverFlowOUT有符号运算溢出标志ALU_DC[31:0]OUTALU运算结果3时序说明ClkPCRs,Rt,Rd,Op,FuncClk-to-QALUctrInstructionMemoryAcc
3、essTimeOldValueNewValueRegWrOldValueNewValueDelaythroughControlLogicbusARegisterFileAccessTimeOldValueNewValuebusBALUDelayOldValueNewValueOldValueNewValueNewValueOldValueExtOpOldValueNewValueALUSrcOldValueNewValueMemtoRegOldValueNewValueAddressOldValueNewValu
4、ebusWOldValueNewDelaythroughExtender&MuxRegisterWriteOccursDataMemoryAccessTimePC+4PC+4PC4实现方案算术逻辑运算器(ALU)的具体实现方案如图1。分析图1的功能,并按功能要求将图1补充完整(即与逻辑和移位功能的实现)。图1ALU实现方案表1ALU控制信号SUBctr=ALUctr<2>(作为加减控制信号,同时作为与或控制信号)ANDctr=ALUctr<0>OVctr=!ALUctr<1>&ALUctr<0>SIGctr=AL
5、Uctr<0>OPctr<1>=ALUctr<2>&ALUctr<1>OPctr<0>=(!ALUctr<2>&ALUctr<1>&!ALUctr<0>)
6、ALUctr<3>根据(Opctr=2’b11时作为移位输出选择)、ALUctr<3:0>==4’b10000逻辑左移,ALUctr<3:0>==4’b10001逻辑右移,ALUctr<3:0>==4’b10010算术右移等要求修改补充表1。5电路设计描述module(ALU_DA,ALU_DB,ALU_CLT,ALU_SHIFT,ALU_ZERO,ALU_O
7、verFlow,ALU_DC)input[31:0]ALU_DA;input[31:0]ALU_DB;input[3:0]ALU_CLT;input[4:0]ALU_SHIFT;outputALU_ZERO;outputALU_OverFlow;output[31:0]ALU_DC;reg[31:0]ALU_DC;wire[1:0]OPctr;wireSUBctr;wireANDctr;wireOVctr;wireSIGctr;reg[31:0]SLL_M,SRL_M,SRA_M;assignSUBctr=ALU
8、ctr[2];assignANDctr=ALUctr[0];assignOVctr=!ALUctr[1]&ALUctr[0];assignSIGctr=ALUctr[0];assignOPctr<1>=ALUctr[2]&ALUctr[1];assignOPctr<0>=?!ALUctr[2]&ALUctr[1]&!ALUctr[0]?
9、ALUctr[3];always//SRLbegincase(ALU_SHIFT)5'b00000:SRL_M[31:0]=ALU_DA[31:0];5'b00001:SRL_M
10、[31:0]={1'b0,ALU_DA[31:1]};5'b00010:SRL_M[31:0]={2'b0,ALU_DA[31:2]};//.....5'b11111:SRL_M[31:0]={31'b0,ALU_DA[31]};default:SRL_M[31:0]=ALU_DA[31:0];endcaseendalways//SLLbegincase(ALU_SHIF