xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx

上传人:b****6 文档编号:16389843 上传时间:2022-11-23 格式:DOCX 页数:5 大小:18.76KB
下载 相关 举报
xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx_第1页
第1页 / 共5页
xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx_第2页
第2页 / 共5页
xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx_第3页
第3页 / 共5页
xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx_第4页
第4页 / 共5页
xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx

《xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx》由会员分享,可在线阅读,更多相关《xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx(5页珍藏版)》请在冰豆网上搜索。

xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告文档格式.docx

  moduleregfile(rna,rnb,d,wn,we,clk,clrn,qa,qb);

input[4:

0]rna,rnb,wn;

input[31:

0]d;

inputwe,clk,clrn;

output[31:

0]qa,qb;

reg[31:

0]register[1:

31];

  assign  qa=(rna==0)0:

register[rna];

  assign  qb=(rnb==0)0:

register[rnb];

  always@(posedgeclkornegedgeclrn)beginif(clrn==0)begin  integeri;

  for(i=1;

ia[4:

0];

  4'

b1111:

cal=$signed(b)>

>

a[4:

endcaseendfunctionendmodule

  其他部件:

  modulef(reg_dest,jal,wn);

0]reg_dest;

input  jal;

output[4:

0]wn;

assignwn=reg_dest|{5{jal}};

endmodule

  modulesa(di,dot);

0]di;

0]dot;

assigndot={27'

b0,di};

  moduleout4(out);

0]out;

assignout=32'

h4;

  modulee(immin,sext,immediate,offset);

input[15:

0]immin;

inputsext;

0]immediate,offset;

wire  e=sext&

immin[15];

wire[15:

0]imm={16{e}};

assignoffset={imm[13:

0],immin[15:

0],1'

b0,1'

b0};

assignimmediate={imm,immin[15:

0]};

  modulexxbine(address,pc,add);

input[25:

0]address;

input[3:

0]pc;

0]add;

assignadd={pc[3:

0],address[25:

  moduleconvert1(dain,sain,op,func,rs,rt,rd,imm,addr);

0]dain;

0]sain,rs,rt,rd;

output[5:

0]op,func;

output[15:

0]imm;

output[25:

0]addr;

assignsain={dain[10:

6]};

assignop={dain[31:

26]};

assignfunc={dain[5:

assignrs={dain[25:

21]};

assignrt={dain[20:

16]};

assignrd={dain[15:

11]};

assignimm={dain[15:

assignaddr={dain[25:

  moduleconvert2(pc,pcout);

output[3:

0]pcout;

assignpcout={pc[31:

28]};

  存储器内的测试数据:

  --Copyright(C)1991-20XXAlteraCorporation

  --YouruseofAlteraCorporation'

sdesigntools,logicfunctions--andothersoftwareandtools,anditsAMPPpartnerlogic--functions,andanyoutputfilesfromanyoftheforegoing--(includingdeviceprogrammingorsimulationfiles),andany--associateddocumentationorinformationareexpresslysubject--tothetermsandconditionsoftheAlteraProgramLicense--SubscriptionAgreement,AlteraMegaCoreFunctionLicense--Agreement,orotherapplicablelicenseagreement,including,--withoutlimitation,thatyouruseisforthesolepurposeof

  --programminglogicdevicesmanufacturedbyAlteraandsoldby--Alteraoritsauthorizeddistributors.Pleaserefertothe--applicableagreementforfurtherdetails.

  --QuartusIIgeneratedMemoryInitializationFile(.mif)

  DEPTH=64;

  %MemorydepthandwidtharerequiredWIDTH=32;

  %Enteradecimalnumber  ADDRESS_RADIX=HEX;

-dressandvalueradixesareoptionalDATA_RADIX=HEX;

%EnterBIN,DEC,HEX,orOCT;

unless  %otherwisespecified,radixes=HEX  

  CONTENTBEGIN

  [0..3F]:

00000000;

%Range--Everyaddressfrom0to3F=000000000:

3c010000;

%(00)main:

luir1,0#addressofdata[0]1:

34240080;

%(04)orir4,r1,0x80#addressofdata[0]2:

20XX0004;

%(08)addir5,r0,4#counter  3:

0c000018;

%(0c)call:

jalsum  #callfunction4:

ac820XX0;

%(10)swr2,0(r4)#storeresult5:

8c890000;

%(14)lwr9,0(r4)#checksw6:

01244022;

%(18)subr8,r9,r4#sub:

r8>

16=ffff8000(arith)r8,r8,15#>

15=0001ffff(logic)finish#deadloop  r8,r0,r0#sum  r9,0(r4)#loaddata  r4,4#address+4  r8,r8,r9#sum  r5,-1#counter-1  r5,r0,loop#finish  r2,r8,0#moveresulttov0r31#return  %

  %%%%%%%%%%%%%%%%%

  六.EDA阶段的实验结果

  仿真结果如上图。

  

  七.测试时的电路总体结构及其说明

  实验电路图

  八.测试计划及其相关说明

  输出说明:

  于引脚及输出需要,故下表ir对应ir[31..0]且将显示高四位,pc对应pc[31..0]且将显示低两位,alu对应alu[31..0]且将显示低两位

  输入clock  mem_clk  pc  输出alu  ir  clock  输入mem_clk  pc  输出alu  ir  

  九.关于实验电路设计的其他说明

  于引脚及输出需要,故只输出ir、pc、aluir[31..0]切将显示ir高四位,pc[31..0]低两位,alu[31..0]低两位,q、adr、fromm、a、b、tom将不会输出

  十.前期实验总结

  本次实验,不仅加深了我对多周期CPU及存储器相关知识的理解,而且帮助自己回忆和复习了单周期CPU方面的知识,比如如何用VerilogHDL描述ALU模块、一些数据选择器、符号扩展电路、以及寄存器。

i<

32;

i=i+1)  register[i]<

=0;

endelsebegin  if((wn!

=0)&

&

(we==1))  register[wn]<

=d;

endendendmodule

  32位四选一选择器:

  modulemux4x32(a0,a1,a2,a3,s,y);

0]a0,a1,a2,a3;

input[1:

0]s;

0]y;

function[31:

0]select;

case(s)  2'

b00:

select=a0;

  2'

b01:

select=a1;

b10:

select=a2;

b11:

select=a3;

endcaseendfunctionassigny=select(a0,a1,a2,a3,s);

  //r1-r31//read//read

  //reset

  //write

  5位二选一选择器:

  modulemux2x5(a0,a1,s,y);

0]a0,a1;

inputs;

output[4:

assigny=sa1:

a0;

  32位二选一选择器:

  modulemux2x32(a0,a1,s,y);

  存储器元件:

  modulemcmem(clk,dataout,datain,addr,we,inclk,outclk);

0]datain;

inputclk,we,inclk,outclk;

0]dataout;

wire  write_enable=we&

~clk;

lpm_ram_dqram

  (.data(datain),.address(addr[7:

2]),.we(write_enable),.inclock(inclk),.outclock(outclk),.q(dataout));

defparam_width=32;

defparam_widthad=6;

defparam_indata=\defparam_outdata=\defparam_file  =\defparam_address_control=\endmodule

  控制部件:

  modulemccu(op,func,z,clock,resetn,wpc,wir,wmem,wreg,iord,regrt,m2reg,aluc,shift,alusrca,alusrcb,pcsource,jal,sext,state);

input[5:

0]op,func;

inputz,clock,resetn;

outputregwpc,wir,wmem,wreg,iord,regrt,m2reg;

outputreg[3:

0]aluc;

outputreg[1:

0]alusrcb,pcsource;

outputregshift,alusrca,jal,sext;

outputreg[2:

0]state;

  reg[2:

0]next_state;

parameter[2:

0]sif=3'

b000,  //IFstate  sid=3'

b001,  //IDstate  sexe=3'

b010,  //EXEstate  smem=3'

b011,  //MEMstate  swb=3'

b100;

  //WBstatewirer_type,i_add,i_sub,i_and,i_or,i_xor,i_sll,i_srl,i_sra,i_jr;

  wirei_addi,i_andi,i_ori,i_xori,i_lw,i_sw,i_beq,i_bne,i_lui,i_j,i_jal;

and(r_type,~op[5],~op[4],~op[3],~op[2],~op[1],~op[0]);

  and(i_add,r_type,func[5],~func[4],~func[3],~func[2],~func[1],~func[0]);

and(i_sub,r_type,func[5],~func[4],~func[3],~func[2],func[1],~func[0]);

and(i_and,r_type,func[5],~func[4],~func[3],func[2],~func[1],~func[0]);

and(i_or,r_type,func[5],~func[4],~func[3],func[2],~func[1],func[0]);

and(i_xor,r_type,func[5],~func[4],~func[3],func[2],func[1],~func[0]);

and(i_sll,r_type,~func[5],~func[4],~func[3],~func[2],~func[1],~func[0]);

and(i_srl,r_type,~func[5],~func[4],~func[3],~func[2],func[1],~func[0]);

and(i_sra,r_type,~func[5],~func[4],~func[3],~func[2],func[1],func[0]);

and(i_jr,r_type,~func[5],~func[4],func[3],~func[2],~func[1],~func[0]);

and(i_addi,~op[5],~op[4],op[3],~op[2],~op[1],~op[0]);

and(i_andi,~op[5],~op[4],op[3],op[2],~op[1],~op[0]);

and(i_ori,~op[5],~op[4],op[3],op[2],~op[1],op[0]);

and(i_xori,~op[5],~op[4],op[3],op[2],op[1],~op[0]);

and(i_lw,op[5],~op[4],~op[3],~op[2],op[1],op[0]);

and(i_sw,op[5],~op[4],op[3],~op[2],op[1],op[0]);

and(i_beq,~op[5],~op[4],~op[3],op[2],~op[1],op[0]);

and(i_bne,~op[5],~op[4],~op[3],op[2],~op[1],op[0]);

and(i_lui,~op[5],~op[4],op[3],op[2],op[1],op[0]);

and(i_j,~op[5],~op[4],~op[3],~op[2],op[1],~op[0]);

and(i_jal,~op[5],~op[4],~op[3],~op[2],op[1],op[0]);

wirei_shift;

  or(i_shift,i_sll,i_srl,i_sra);

always@*begin  //controlsignals'

dfaultoutputs:

wpc=0;

  //donotwritepcwir=0;

  //donotwriteirwmem=0;

  //donotwritememorywreg=0;

  //donotwriteregisterfileiord=0;

  //selectpcasmemoryaddressaluc=4'

bx000;

  //ALUoperation:

addalusrca=0;

  //ALUinputa:

regaorsaalusrcb=2'

h0;

  //ALUinputb:

regbregrt=0;

  //regdestno:

rdm2reg=0;

  //selectregcshift=0;

  //

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

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1