计算机组成原理课程设计报告16位模型机的设计_第1页
计算机组成原理课程设计报告16位模型机的设计_第2页
计算机组成原理课程设计报告16位模型机的设计_第3页
计算机组成原理课程设计报告16位模型机的设计_第4页
计算机组成原理课程设计报告16位模型机的设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

石家庄经济学院华信学院计算机组成原理课程设计报告计算数据块中所有数据的累加和并存储到内存单元中题目16位模型机的设计姓名学号班号一班指导老师成绩2023年1月

目录TOC\o"1-3"\h\u7545一、引言 3101301.1设计目的 3289051.2设计任务 326095二、具体设计及实现 4153362.1拟定指令系统 4251652.2指令格式 5245462.3寻址方式 56087三、16位CPU的模型 754673.1各功能部件的VHDL设计 9182443.216位模型机的设计与实现 228779四、总结 2711488五、参考文献: 2712378六、代码 28一、引言1.1设计目的为掌握并巩固本学期所学习的计算机组成原理知识,设计本次实验。运用整合所学的相关知识,一步步设计构造一台基本的模型计算机,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础。1.2设计任务本机功能:计算数据块中所有数据的累加和并存储到内存单元中。汇编代码如下:START:MOVSI,OFFSETSRC1;源操作数地址送SIMOVDI,OFFSETDXT;目的操作数地址送DIMOVBX,OFFSETSRC2;结束地址送BXMOVBL0;设立BL中初值为0NEXT: MOVAL,[SI];取数 ADDBL,AL;数据相加MOV[DI],AL;存数CMP SI, BX;JE START;假如SI=BX,则转向STARTINC SI;修改源地址JMPNEXT;转向NEXT二、具体设计及实现2.1拟定指令系统分析:依据汇编语言程序得出部件间的数据流的方向为立即数→寄存器寄存器↔内存内存操作数采用寄存器间址寻址方式源与目的寄存器内容比较,假如源等于目的转移,转向地址在指令中提供寄存器加1指令无条件转移指令,转向地址在指令中提供。指令类型(指令中的立即数为一个字即16位)立即数→寄存器需要在指令中指出寄存器及立即数如:LOADIR0,10H,此指令为双字指令内存操作数→寄存器需要在指令中指出间址寄存器及目的寄存器如:LOADR3,[R1];指令为单字指令寄存器→内存需要指令中指出源寄存器及间址寄存器如:STORE[R2],R7;指令为单字指令寄存器内容比较产生转移的指令需要指令中指出源、目的寄存器以及转向的地址如:BRANCHEQI0000H;指令为单字指令寄存器加1指令指令中指出寄存器如:INCR1,指令为单字指令无条件转移指令指令中提供转向地址如:BRANCHI0008H;指令为单字指令2.2指令格式单字指令格式单指令但操作数:INCBRANCHI单指令双操作数:movloadstoreLOADI双字指令格式双字三操作数:BRANCHEQIBRANCHGTI操作码指令功能00001LOAD将寄存器间址的存储单元内容装载到寄存器00010STORE将寄存器的数据存入到寄存器间址的存储单元00011MOV将源寄存器内容传送到目的寄存器00100LOADI将立即数装入到寄存器00101BRANCHI无条件转移到由立即数指定的地址00110BRANCHEQI假如源寄存器内容等于目的寄存器的内容,则转移到由立即数指定的地址00111INC寄存器内容加1指令01000ADD数据相加2.3寻址方式寻址方式含义立即数寻址指令格式中源操作数为立即数寄存器间址寻址方式寄存器中操作数的地址直接寻址主存中为操作数依据以上设计的指令系统,将主存中数据累加并存储到内存单元中的程序如下:地址机器码指令功能说明0000H0001H2023H0010HLOADIR1,0010H源操作数地址送R10002H0003H2023H0030HLOADIR2,0030H目的操作数地址送R20004H0005H2023H0016HLOADIR6,0016H结束地址送R60006H0007H2023H0000HLOADR7,0R7内放入0初始化最小值0008H080BHLOADR3,[R1]取数0009H401FHADDR7,R3相加000AH103AHSTORE[R2],R7存数000BH000CH300EH0000HBRANCHEQI0000H假如R6内容等于R1的内容,则转向0000H000DH3031HINC R1修改源地址000EH000FH2800H0008HBRANCHI0008H无条件转移到由立即数指定的地址存储器初始化文献memdata.mif的内容:三、16位CPU的模型 图1是采用单总线结构的16位CPU结构图,包含了基本的功能模块,由寄存器阵列构成的8个16位寄存器Reg0Reg7;工作寄存器OpReg;算术逻辑运算部件ALU;移位器Shifter;输出寄存器OutReg;比较器Comp;指令寄存器InstrReg;程序计数器ProgCnt;地址寄存器AddrReg。所有功能模块共用16位的三态数据总线进行信息的传送。控制器模块由状态机实现,控制器依据指令、数据通路通过控制线向各功能模块发出控制命令。由寄存器阵列构成的8个16位寄存器Reg0Reg7的优点是节省资源、使用方便。它们共用一个三态开关,由控制器选择与数据总线的连接。工作寄存器OpReg可为ALU、比较器Comp提供一个操作数,而ALU、比较器的另一操作数直接来自数据总线。将ALU、移位器Shifter、输出寄存器OutReg串接起来,由控制器统一控制来共同完毕一些复杂的操作,由输出寄存器OutReg存储结果,输出寄存器OutReg向总线的输出端具有三态开关。比较器Comp由控制器直接控制,比较的结果进入控制器。地址寄存器AddrReg提供要访问的主存单元的地址,本设计中将程序和数据放在同一存储器中。程序计数器ProgCnt,不具有清零和+1的功能,存放CPU要执行的下一条指令的地址。指令寄存器InstrReg存放CPU正在执行的指令。工作寄存器OpReg,输出寄存器OutReg,指令寄存器InstrReg,程序计数器ProgCnt,地址寄存器AddrReg,均为最基本的寄存器。为了验证CPU的功能,增长存储器,存储器中存入完毕数据块传送所需的程序和数据。系统中所有向数据总线输出数据的模块,其输出口必须使用三态控制器。模型机的实际电路如图2所示:图2图2顶层实体模拟图3.1各功能部件的VHDL设计程序包:说明数据类型、运算器的功能、移位寄存器的操作、比较器的比较类型和用于CPU控制的状态类型。运算器的设计功能:Sel输入操作说明0000C=A通过PASS0001C=AANDB与0010C=AORB或0011C=NOTA非0100C=AXORB异或0101C=A+B加法0110C=A-B减法0111C=A+1加11000C=A-1减11001C=0清零说明:a[15..0]来自于总线,b[15..0]来自于工作寄存器OpReg,c[15..0]输出送至移位器。sel[3..0]来自于控制器发出的控制信号aluSel[3..0],选择ALU的操作。运算器功能仿真波形图如图3所示:图图3运算器功能仿真波形图仿真结果说明:当sel为0000时,进行直传的操作。通过pass,则c=a,为1000。当sel为0001时,进行与的操作。a=1000,b=1234,与之后c为1000。当sel为0010时,进行或的操作。a=1000,b=1234,c为1234。当sel为0011时,进行非的操作。a=1000,a为EFFF。当sel为0100时,进行异或的操作。axorb,c为0234。当sel为0101时,进行加法的操作。a=1000,c为2234。当sel为0110时,进行减法的操作。a=1000,c为FDCC。当sel为0111时,进行加1的操作。a=1000,c为1001。当sel为1000时,进行减1的操作。a=1000,c为0FFF。当sel为1001时,进行清0操作,所有置0.当sel为1010时,为类型其他,所有输出0.比较器的设计功能:t_comp比较类型操作说明000Eq(等于)若a=b,compout=1001Neq(不等于)若a<>b,compout=1010Gt(大于)若a>b,compout=1011gte(大于等于)若a>=b,compout=1100It(小于)若a<b,compout=1101Ite(小于等于)若a<=b,compout=1其他compout=0比较器功能仿真波形图如图4所示:图图4比较器功能仿真波形图仿真结果说明:sel为000时,进行比较是否相等的操作,1000不等于1234,compout=0sel为001时,进行比较是否不等于的操作,1000不等于1234,compout=1sel为010时,进行比较是否大于的操作,1000<1234,compout=0sel为011时,进行比较是否大于等于的操作,1000<1234,compout=0sel为100时,进行比较是否小于的操作,1000<1234,compout=1sel为101时,进行比较是否小于等于的操作,1000<1234,compout=1sel为其他时,compout输出0.移位器的设计功能:t_shift移位类型000直通001无符号数左移010无符号数右移011循环左移100循环右移其他输出0移位器的功能仿真波形图如图5所示:图5图5移位器的功能仿真波形图仿真结果说明:当sel为000时,进行直传的操作,a和y相同当sel为001时,进行无符号数左移的操作,1234变为2468当sel为010时,进行无符号数右移的操作,1234变为091A当sel为011时,进行循环左移的操作,1234变为2468当sel为100时,进行循环右移的操作,1234变为091A当sel为其他时,输出0基本寄存器ACLKQn+10011X0Qn功能:功能说明:在CPU中基本寄存器的角色是工作寄存器OpReg,输出寄存器OutReg,指令寄存器InstrReg,程序计数器ProgCnt,地址寄存器AddrReg。基本寄存器功能仿真波形图如图6所示:图图6基本寄存器功能仿真波形图仿真结果说明:0ns到5ns,还没有碰到clk的上升沿,所以q端的输出是00005ns到20ns时,clk的上升沿到来,q端输出100020ns到25ns时,a发生变化,但clk上升沿没有到来,q端输出100025ns到30ns时,clk的上升沿到来,q端输出1234寄存器组功能:Sel[2..0]Reg000R0001R1……111R7功能说明:clk的上升沿,将data[15..0]写入sel[2..0]指定的寄存器中,并在q[15..0]输出此寄存器新写入的内容。否则,q[15..0]输出sel[2..0]指定的寄存器本来的内容。如此设计的目的,便于观测写入指定寄存器中的内容。寄存器组功能仿真波形图如图7所示:图图7寄存器组功能仿真波形图0-10ns,sel=000选中R0,当clk上升沿时,将data的数据0001写入R0,q=000110-20ns,sel=001选中R1,当clk上升沿时,将data的数据0002写入R1,q=000220-30ns,sel=010选中R2,当clk上升沿时,将data的数据0003写入R2,q=000330-40ns,sel=011选中R3,当clk上升沿时,将data的数据0004写入R3,q=000440-50ns,sel=100选中R4,当clk上升沿时,将data的数据0005写入R4,q=000550-60ns,sel=101选中R5,当clk上升沿时,将data的数据0006写入R5,q=000660-70ns,sel=110选中R6,当clk上升沿时,将data的数据0007写入R6,q=000770-80ns,sel=111选中R7,当clk上升沿时,将data的数据0008写入R7,q=0008时序电路 功能说明:产生电位信号step和脉冲信号t4,每个step的上升沿状态机的状态发生改变,t4与寄存器的写信号相与作为寄存器的同步打入控制信号。时序电路的功能仿真波形图如图8所示:图8时序电路的功能仿真波形图图8时序电路的功能仿真波形图仿真结果说明:0-10ns,clr高电平,t4=0,step初始值为0;10-15ns,clr低电平,clk为低电平,t4,step保持不变;15-20ns,clr低电平,clk上升沿,x=000+1=001,t4=x(1)andx(0)=0and0=0,step=x(1)=0;20-25ns,clr低电平,clk为低电平,t4,step保持不变;25-30ns,clr低电平,clk上升沿,x=001+1=010,t4=x(1)andx(0)=0and0=0,step=x(1)=0;30-35ns,clr低电平,clk为低电平,t4,step保持不变;35-40ns,clr低电平,clk上升沿,x=010+1=011,t4=x(1)andx(0)=1and0=0,step=x(1)=1;40-45ns,clr低电平,clk为低电平,t4,step保持不变;45-50ns,clr低电平,clk上升沿,x=011+1=100,t4=x(1)andx(0)=1and1=1,step=x(1)=1;50-55ns,clr低电平,clk为低电平,t4,step保持不变;存储器的设计LPM_RAM定制一方面,定制初始化数据文献,建立MemoryInitializationFile(.mif)文献,选择File→New命令,并在New窗口选择Otherfile选项,再选择MemoryInitializationFile选项。出现对话框,选择存储字的个数及字长,按下OK,出现如下界面,在最左列或最上行击鼠标右键,选择地址和内存操作数所使用的基值,选择Hexadecimal,存储器里存放数据块传送的指令和数据,CPU通过执行此程序进行功能验证。完毕后,保存文献(memdata.mif)。之后,定制LPM_RAM。设计环节如下:选择Tools→MegaWizardPlug-InManager命令,打开MegaWizardPlug-InManager对话框,选中Createanewcustommegafunctionvariation,单击Next,出现下面对话框,选择LPM_RAM_DQ,选择所用器件的类型以及所创建的输出文献的类型及名字。选择NEXT,进入如下界面。选择数据线位数、主存容量大小(地址线位数)。CC:\cpu_zj\ram选择NEXT,进入下一步界面,取消q输出端的锁存。选择NEXT,进入下一步,选择内存的初始化文献。依据选项自动生成的代码,注意将.mif文献的途径改为相对途径,存储单元的个数为100个。ram的功能仿真波形图如图9所示:图图9ram仿真波形图功能仿真说明:0-10ns,wren是读信号,address地址寄存器选择的是地址0000单元,当碰到clk时,将ram里面的内容读出来是202310-20ns,wren是读信号,address地址寄存器选择的是地址0001单元,当碰到clk时,将ram里面的内容读出来是003040-50ns,wren是写信号,address地址寄存器选择的是地址0031单元,当碰到clk时,将ram里面的内容写进去是5550控制器功能说明:采用状态机实现,其中control的输入有step,reset,compout,instrReg,这些输入的组合可用于辨认指令,并输出相关控制信号。具体信号的相关功能见control.vhdl部件说明。在译码阶段,具体来说,在一定的节拍下,contorl一方面将接受的指令的前5位和后6位分开,用于分离操作数和操作码,然后将操作数的前3位和后3位分开,用于区分源操作数和目的操作数,然后根据具体的指令输出相关控制信号。依据指令的格式、数据通路给出指令系统中所有指令的指令流程:3.216位模型机的设计与实现创建顶层实体图工程所在的文献夹中包含文献如下所示。依次在功能部件所相应的VHD文献上击右键,选择CreateSymbolFilesforCurrentFile,创建所有功能部件的图符。功能说明:整个CPU系统以控制器为中心,负责指令的译码及发出各种相关控制信号。节拍发生器控制着整个系统的时钟信号,系统的相关部件在统一的节拍控制下发挥自己的作用。IR为指令寄存器,负责存储即将执行的下一条指令,addr为地址寄存器,存放被访问存储单元的地址。PC为程序计数器,存放现行指令的地址,具有计数功能。ALU负责解决相关数据运算操作。寄存器组负责存放相关操作数和中间临时变量。多路数据选择器在相关控制信号的作用下将相关数据输入ALU解决。总线分数据总线和地址总线,负责ram和相关寄存器之间的数据互换。RAM为存储器,存放相关数据和程序。连接所有的功能部件形成模型机。

仿真结果说明指令LOADIR1,0020H;执行过程中寄存器的变化情况:state微操作addraludata2instrpcramregselregnoutgetReset1ALU清0,输出经移位器传至OutReg00000000ZZZZ00000000000000000000000Common1OutReg→ProgCnt00000000000000000000202300000000000Common2ProgCnt→AddrReg0000000000000000202300000000000Common3M(AddrReg)→IR2023202320232023executeOp?UUUUZZZZ202320232023Loadi2ProgCnt+1→OutReg000100002023000020230001Loadi3OutReg→ProgCnt→AddrReg00010001000120230001202300000000001Loadi4M(AddrReg)→Ri00010010001020230001001000100100001incpcProgCnt+1→OutReg00010002000120230001001000000000002

仿真结果说明:指令LOADR3,[R1]取数执行过程中寄存器的变化情况:仿真结果说明:ADDR7,R3相加执行过程中寄存器的变化情况仿真结果说明:指令STORE[R2],R7;存数执行过程中寄存器的变化情况:仿真结果说明:BRANCHEQI0000H假如R1等于R6,则转向地址0000H执行过程中寄存器的变化情况:四、总结通过本次实验,我明白到了做计算机组成原理的实验一方面一定要注意线路的连接,有些要相应的要一一相应,我一开始由于没注意.弄得数据不对的,尚有要注意操作方法等等。总之,通过这次对指令系统的设计,让我对整个计算机基本原理和系统结构都有了很深的体会和结识,也逼迫自己在以前局限性的地方去学习了一些新的知识,最重要的是,真正让自己结识到了自己现在所学过的知识还太少太少,主线局限性以完毕一个哪怕是最简朴的计算机项目,自己以前只满足于将课本知识学会的想法也有很大的问题,需要好好反省,在接下来的时间里,自己一定要好好把握,既要加强基础知识的学习,也要锻炼自己的实验能力,努力让自己的专业素质有很大的提高。五、参考文献:白中英.计算机组成原理(第五版).北京:科学出版社,2023代码addLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEwork.cpu_lib.all;entityaddisport(a:inbit16;clk:instd_logic;q:outbit16);endadd;architecturert1ofaddisbeginprocessbeginwaituntilclk'eventandclk='1';q<=a+"1010";endprocess;endrt1;addoutLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEwork.cpu_lib.all;entityaddoutisport(a:int_reg;b:inbit16;reset:instd_logic;q:outbit16);endaddout;architecturert1ofaddoutissignaltemp:bit16;beginprocess(a,b)beginifreset='1'thentemp<="0000";endif;ifa="111"andb>tempthenq<=b;temp<=b; endif;endprocess;endrt1;aluLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.ALL;USEwork.cpu_lib.all;entityaluisport(a,b:inbit16;sel:int_alu;c:outbit16);endalu;architecturert1ofaluisbegin process(a,b,sel)begincaseseliswhenalupass=>c<=a;whenandOp=>c<=aandb;whenorOp=>c<=aorb;whenxorOp=>c<=axorb; whennotOp=>c<=nota;whenplus=>c<=a+b;whenalusub=>c<=a-b;wheninc=>c<=a+"0001";whendec=>c<=a-"0001";whenzero=>c<="0000";whenothers=>c<="0000";endcase;endprocess;endrt1;compLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_arith.ALL;USEIEEE.std_logic_unsigned.ALL;usework.cpu_lib.all;entitycompisport(a,b:inbit16;sel:int_comp;compout:outbit);endcomp;architecturert1ofcompisbeginprocess(a,b,sel)begincaseseliswheneq=>ifa=bthencompout<='1'; elsecompout<='0'; endif;whenneq=>ifa/=bthencompout<='1'; elsecompout<='0'; endif;whengt=>ifa>bthencompout<='1'; elsecompout<='0'; endif;whengte=>ifa>=bthencompout<='1'; elsecompout<='0'; endif;whenlt=>ifa<bthencompout<='1'; elsecompout<='0'; endif;whenlte=>ifa<=bthencompout<='1'; elsecompout<='0'; endif;whenothers=>compout<='0';endcase;endprocess;endrt1;controllibraryIEEE;useIEEE.std_logic_1164.all;usework.cpu_lib.all;entitycontrolis port(step,reset,compout:instd_logic;instrReg:inbit16; progCntrWr,progCntrRd,addrRegWr,outRegWr,outRegRd:outstd_logic; shiftSel:outt_shift;aluSel:outt_alu;compSel:outt_comp; opRegRd,opRegWr,instrWr,regRd,regWr,rw,vma:outstd_logic; regSel:outt_reg);endcontrol;architecturertlofcontrolis signalcurrent_state,next_state:state; begin process(current_state,instrReg,compout) begin progCntrWr<='0';progCntrRd<='0';addrRegWr<='0';outRegWr<='0'; outRegRd<='0';shiftSel<=shftpass;aluSel<=alupass;compSel<=eq; opRegRd<='0';opRegWr<='0';instrWr<='0';regSel<="000"; regRd<='0';regWr<='0';rw<='0';vma<='0'; casecurrent_stateis whenreset1=>aluSel<=zero;shiftSel<=shftpass;outRegWr<='1';next_state<=common1; whencommon1=>outRegRd<='1';progCntrWr<='1';next_state<=common2; whencommon2=>progcntrRd<='1';addrRegWr<='1';next_state<=common3; whencommon3=>rw<='0';vma<='1';instrWr<='1';next_state<=execute; whenexecute=>caseinstrReg(15downto11)is when"00000"=>next_state<=incPc;--nop when"00001"=>next_state<=load2;--loadri,[rj] when"00010"=>next_state<=store2;--store[ri],rj when"00011"=>next_state<=move2;movri,rj when"00100"=>next_state<=loadI2;loadiri,n when"00101"=>next_state<=braI2;--branchin when"00110"=>next_state<=beqI2;--BranchEQin;rs=rdthenbranchinelseinpc11 when"00111"=>next_state<=inc2;--incrd when"01000"=>next_state<=add1;--add whenothers=>next_state<=incPc; endcase; whenload2=>regSel<=instrReg(5downto3);regRd<='1';addrregWr<='1';next_state<=load3; whenload3=>rw<='0';vma<='1';regSel<=instrReg(2downto0);regWr<='1';next_state<=incPc; whenstore2=>regSel<=instrReg(2downto0);regRd<='1';addrregWr<='1';next_state<=store3; whenstore3=>regSel<=instrReg(5downto3);regRd<='1';rw<='1';next_state<=incPc; whenmove2=>regSel<=instrReg(5downto3);regRd<='1';aluSel<=alupass;shiftsel<=shftpass;outRegWr<='1';next_state<=move3; whenmove3=>outRegRd<='1';regSel<=instrReg(2downto0);regWr<='1';next_state<=incPc; whenloadI2=>progcntrRd<='1';alusel<=inc;shiftsel<=shftpass;outregWr<='1';next_state<=loadI3; whenloadI3=>outregRd<='1';progcntrWr<='1';addrregWr<='1';next_state<=loadI4; whenloadI4=>rw<='0';vma<='1';regSel<=instrReg(2downto0);regWr<='1';next_state<=incPc; whenbraI2=>progcntrRd<='1';alusel<=inc;shiftsel<=shftpass;outregWr<='1';next_state<=braI3; whenbraI3=>outregRd<='1';addrregWr<='1';next_state<=braI4; whenbraI4=>rw<='0';vma<='1';progcntrWr<='1';next_state<=common2; whenbeqI2=>regSel<=instrReg(5downto3);regRd<='1';opRegWr<='1';next_state<=beqI3; whenbeqI3=>opRegRd<='1';regSel<=instrReg(2downto0);regRd<='1';compsel<=eq; ifcompout='1'thennext_state<=beqI4; elsenext_state<=incPc11; endif; whenbeqI4=>progcntrRd<='1';alusel<=inc;shiftsel<=shftpass;outregWr<='1';next_state<=beqI5; whenbeqI5=>outregRd<='1';addrregWr<='1';next_state<=beqI6; whenbeqI6=>rw<='0';vma<='1';progcntrWr<='1';next_state<=common2; wheninc2=>regSel<=instrReg(2downto0);regRd<='1';alusel<=inc;shiftsel<=shftpass;outregWr<='1';next_state<=inc3; wheninc3=>outregRd<='1';regsel<=instrReg(2downto0);regWr<='1';next_state<=incPc; whenincPc11=>progcntrRd<='1';alusel<=inc;shiftsel<=shftpass;outregWr<='1';next_state<=incPc12; whenincPc12=>outregRd<='1';progcntrWr<='1';next_state<=incPc; whenadd1=>regSel<=instrReg(5downto3);regRd<='1';opRegWr<='1';next_state<=add2; whenadd2=>regSel<=instrReg(2downto0);regRd<='1';alusel<=plus;shiftsel<=shftpass;outregWr<='1';next_state<=add3; whenadd3=> outregRd<='1';regSel<=instrReg(2downto0);regWr<='1';next_state<=incPc; whenincPc=>progcntrRd<='1';alusel<=inc;shiftsel<=shftpass;outregWr<='1';next_state<=common1; whenothers=>next_state<=incPc; endcase;endprocess;process(step,reset) begin ifreset='1'thencurrent_state<=reset1; elsifstep'eventandstep='1' thencurrent_state<=next_stateafter1ns; endif;endprocess;endrtl;cpu_libLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_arith.ALL;packagecpu_libissubtypebit16isstd_logic_vector(15downto0);subtypet_regisstd_logic_vector(2downto0);subtypet_shiftisunsigned(3downto0);constantshftpass:t_shift:="0000";constantsftl:t_shift:="0001";constantsftr:t_shift:="0010";constantrotl:t_shift:="0011";constantrotr:t_shift:="0100";subtypet_aluisunsigned(3downto0);constantalupass:t_alu:="0000";constantandOp:t_alu:="0001";constantorOp:t_alu:="0010";constantnotOp:t_alu:="0011";constantxorOp:t_alu:="0100";constantplus:t_alu:="0101";constantalusub:t_alu:="0110";constantinc:t_alu:="0111";constantdec:t_alu:="1000";constantzero:t_alu:="1001";subtypet_compisunsigned(3downto0);constanteq:t_comp:="0000";constantneq:t_comp:="0001";constantgt:t_comp:="0010";constantgte:t_comp:="0011";constantlt:t_comp:="0100";constantlte:t_comp:="0101";typestateis(reset1,common1,common2,common3,execute,load2,load3,store2,store3,store4,move2,move3,incPc11,incPc12,incPc,incPc2,incPc3,loadIr,loadIr2,beqI2,beqI3,beqI4,beqI5,beqI6,braI2,braI3,braI4,loadI2,loadI3,loadI4,inc2,inc3,add1,add2,add3);endcpu_lib;loadreg--AddrRegProgCntOpRegLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEwork.cpu_lib.all;entityloadregisport(a:inbit16;rst,clk,load:instd_logic;q:outbit16);endloadreg;architecturert1ofloadregisbegin process(rst,clk) begin ifrst='1'thenq<=(OTHERS=>'0'); elsifrising_edge(clk)then ifload='1'then q<=a; endif; endif;endprocess;endrt1;ram--megafunctionwizard:%LPM_RAM_DQ%--GENERATION:STANDARD--VERSION:WM1.0--MODULE:altsyncram--============================================================--FileName:ram.vhd--MegafunctionName(s):-- altsyncram--============================================================--************************************************************--THISISAWIZARD-GENERATEDFILE.DONOTEDITTHISFILE!5.1Build17610/26/2023SJFullVersion--************************************************************--Copyright(C)1991-2023AlteraCorporation--YouruseofAlteraCorporation'sdesigntools,logicfunctions--andothersoftwareandtools,anditsAMPPpartnerlogic--functions,andanyoutputfilesanyoftheforegoing--(includingdeviceprogrammingorsimulationfiles),andany--associateddocumentationorinformationareexpresslysubject--tothetermsandconditionsoftheAlteraProgramLicense--SubscriptionAgreement,AlteraMegaCoreFunctionLicense--Agreement,orotherapplicablelicenseagreement,including,--withoutlimitation,thatyouruseisforthesolepurposeof--programminglogicdevicesmanufacturedbyAlteraandsoldby--Alteraoritsauthorizeddistributors.Pleaserefertothe--applicableagreementforfurtherdetails.LIBRARYieee;USEieee.std_logic_1164.all;LIBRARYaltera_mf;USEaltera_mf.altera_mf_components.all;ENTITYramIS PORT ( address :INSTD_LOGIC_VECTOR(15DOWNTO0); clock :INSTD_LOGIC; data :INSTD_LOGIC_VECTOR(15DOWNTO0); wren :INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(15DOWNTO0) );ENDram;ARCHITECTURESYNOFramIS SIGNALsub_wire0 :STD_LOGIC_VECTOR(15DOWNTO0); COMPONENTaltsyncram GENERIC( address_aclr_a :STRING; indata_aclr_a :STRING; init_file :STRING; intended_device_family :STRING; lpm_hint :STRING; lpm_type :STRING; numwords_a :NATURAL; operation_mode :STRING; outdata_aclr_a :STRING; outdata_reg_a :STRING; power_up_uninitialized :STRING; widthad_a :NATURAL; width_a :NATURAL; width_byteena_a :NATURAL; wrcontrol_aclr_a :STRING ); PORT( wren_a :INSTD_LOGIC; clock0 :INSTD_LOGIC; address_a :INSTD_LOGIC_VECTOR(15DOWNTO0); q_a :OUTSTD_LOGIC_VECTOR(15DOWNTO0); data_a :INSTD_LOGIC_VECTOR(15DOWNTO0) ); ENDCOMPONENT;BEGIN q<=sub_wire0(15DOWNTO0); altsyncram_component:altsyncram GENERICMAP( address_aclr_a=>"NONE", indata_aclr_a=>"NONE", init_file=>"memdata.mif", intended_device_family=>"Cyclone", lpm_hint=>"ENABLE_RUNTIME_MOD=NO", lpm_type=>"altsyncram", numwords_a=>100, operation_mode=>"SINGLE_PORT", outdata_aclr_a=>"NONE", outdata_reg_a=>"UNREGISTERED", power_up_uninitialized=>"FALSE", widthad_a=>16, width_a=>16, width_byteena_a=>1, wrcontrol_aclr_a=>"NONE" ) PORTMAP( wren_a=>wren, clock0=>clock, address_a=>address, data_a=>data, q_a=>sub_wire0 );ENDSYN;--============================================================--CNXfileretrievalinfo--============================================================--Retrievalinfo:PRIVATE:ADDRESSSTALL_ANUMERIC"0"--Retrievalinfo:PRIVATE:AclrAddrNUMERIC"0"--Retrievalinfo:PRIVATE:AclrByteNUMERIC"0"--Retrievalinfo:PRIVATE:AclrDataNUMERIC"0"--Retrievalinfo:PRIVATE:AclrOutputNUMERIC"0"--Retrievalinfo:PRIVATE:BYTE_ENABLENUMERIC"0"--Retrievalinfo:PRIVATE:BYTE_SIZENUMERIC"8"--Retrievalinfo:PRIVATE:BlankMemoryNUMERIC"0"--Retrievalinfo:PRIVATE:CLOCK_ENABLE_INPUT_ANUMERIC"0"--Retrievalinfo:PRIVATE:CLOCK_ENABLE_OUTPUT_ANUMERIC"0"--Retrievalinfo:PRIVATE:ClkenNUMERIC"0"--Retrievalinfo:PRIVATE:DataBusSeparatedNUMERIC"1"--Retrievalinfo:PRIVATE:IMPLEMENT_IN_LESNUMERIC"0"--Retrievalinfo:PRIVATE:INIT_FILE_LAYOUTSTRING"PORT_A"--Retrievalinfo:PRIVATE:INIT_TO_SIM_XNUMERIC"0"--Retrievalinfo:PRIVATE:INTENDED_DEVICE_FAMILYSTRING"Cyclone"--Retrievalinfo:PRIVATE:JTAG_ENABLEDNUMERIC"0"--Retrievalinfo:PRIVATE:JTAG_IDSTRING"NONE"--Retrievalinfo:PRIVATE:MAXIMUM_DEPTHNUMERIC"0"--Retrievalinfo:PRIVATE:MIFfilenameSTRING"memdata.mif"--Retrievalinfo:PRIVATE:NUMWORDS_ANUMERIC"65536"--Retrievalinfo:PRIVATE:RAM_BLOCK_TYPENUMERIC"0"--Retrievalinfo:PRIVATE:RegAddrNUMERIC"1"--Retrievalinfo:PRIVATE:RegDataNUMERIC"1"--Retrievalinfo:PRIVATE:RegOutputNUMERIC"0"--Retrievalinfo:PRIVATE:SingleClockNUMERIC"1"--Retrievalinfo:PRIVATE:UseDQRAMNUMERIC"1"--Retrievalinfo:PRIVATE:WRCONTROL_ACLR_ANUMERIC"0"--Retrievalinfo:PRIVATE:WidthAddrNUMERIC"16"--Retrievalinfo:PRIVATE:WidthDataNUMERIC"16"--Retrievalinfo:CONSTANT:ADDRESS_ACLR_ASTRING"NONE"--Retrievalinfo:CONSTANT:INDATA_ACLR_ASTRING"NONE"--Retrievalinfo:CONSTANT:INIT_FILESTRING"memdata.mif"--Retrievalinfo:CONSTANT:INTENDED_DEVICE_FAMILYSTRING"Cyclone"--Retrievalinfo:CONSTANT:LPM_HINTSTRING"ENABLE_RUNTIME_MOD=NO"--Retrievalinfo:CONSTANT:LPM_TYPESTRING"altsyncram"--Retrievalinfo:CONSTANT:NUMWORDS_ANUMERIC"65536"--Retrievalinfo:CONSTANT:OPERATION_MODESTRING"SINGLE_PORT"--Retrievalinfo:CONSTANT:OUTDATA_ACLR_ASTRING"NONE"--Retrievalinfo:CONSTANT:OUTDATA_REG_ASTRING"UNREGISTERED"--Retrievalinfo:CONSTANT:POWER_UP_UNINITIALIZEDSTRING"FALSE"--Retrievalinfo:CONSTANT:WIDTHAD_ANUMERIC"16"--Retrievalinfo:CONSTANT:WIDTH_ANUMERIC"16"--Retrievalinfo:CONSTANT:WIDTH_BYTEENA_ANUMERIC"1"--Retrievalinfo:CONSTANT:WRCONTROL_ACLR_ASTRING"NONE"--Retrievalinfo:USED_PORT:address00160INPUTNODEFVALaddress[15..0]--Retrievalinfo:USED_PORT:clock0000INPUTNODEFVALclock--Retrievalinfo:USED_PORT:data00160INPUTNODEFVALdata[15..0]--Retrievalinfo:USED_PORT:q00160OUTPUTNODEFVALq[15..0]--Retrievalinfo:USED_PORT:wren0000INPUTNODEFVALwren--Retrievalinfo:CONNECT:@address_a00160address00160--Retrievalinfo:CONNECT:q00160@q_a00160-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论