单周期实验报告超_第1页
单周期实验报告超_第2页
单周期实验报告超_第3页
单周期实验报告超_第4页
单周期实验报告超_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

超517030910330采用 分频模块 puter模修改io_output_reg.v采用 基本单周期CPU517030910330理解计算机5大组成部分的协调工作原理,理解程序自动执行的原理DE1-SOC实验板1采用VerilogHDL在quartusⅡ中实现基本的具有20条MIPS指令的单周期CPU设计。CPU与外部设备的输入输出端口设计。实验中可采用高端地址。利用设计的I/O端口,通过sw指令,输出对DE2实验板上的LED灯等输出设备的控制信号(或数据信息)。即将对外部设备的控制数据,从CPU相应控制寄存器(或可直接连接至外部设备的控制输入信号)。利用自己编写的程序代码,在自己设计的CPU入,并将判别或处理结果,利用板载LED灯或7段LE数码管显示出来。(具体任务形式不做严格规定,同学可自由创意)在实现MIPS基本20条指令的基础上,掌握新指令的扩展方法采用VerilogHDL在quartusⅡ中实现基本的具有20条MIPS指令的单 根据真值表完善CU.vmodulemodulesc_cu(op,func,z,wmem,wreg,regrt,m2reg,aluc,shift,aluimm,pcsource,jal,sext);input[5:0]op,func; 56789 output[3:0]aluc;output[1:0]pcsource;wirer_type=~|op;wirei_add=r_type&func[5]&~func[4]&~func[3]~func[2]&~func[1]&~func[0]; wirei_sub=r_type&func[5]&~func[4]&~func[3]&~func[2]&func[1]& //Rwirei_and=r_type&func[5]&~func[4]&~func[3]&func[2]~func[1]&~func[0];//wirei_or=r_type&func[5]&~func[4]&~func[3]&func[2]~func[1]&func[0];//wirei_xor=r_type&func[5]&~func[4]&~func[3]&func[2]&func[1]&~func[0]; wirei_sll=r_type&~func[5]&~func[4]&~func[3]&~func[2]~func[1]&~func[0];//wirei_srl=r_type&~func[5]&~func[4]&~func[3]&~func[2]&func[1]&~func[0];//000010wirei_sra=r_type&~func[5]&~func[4]&~func[3]&~func[2]&func[1]&func[0]; //000011wirei_jr=r_type&~func[5]&~func[4]&func[3]&~func[2]~func[1]& //Iwirei_addi=~op[5]&~op[4]&op[3]&~op[2]&~op[1]&wirei_andi=~op[5]&~op[4]&op[3]&op[2]&~op[1]&wirei_ori ~op[5]&~op[4]&op[3]&op[2]&~op[1]&wirei_xori ~op[5]&~op[4]&op[3]&op[2]&op[1]&wire op[5]&~op[4]&~op[3]&~op[2]&op[1]&wire =op[5]&~op[4]&op[3]&~op[2]&op[1]&wirei_beq=~op[5]&~op[4]&~op[3]&op[2]&~op[1]&wirei_bne=~op[5]&~op[4]&~op[3]&op[2]&~op[1]&wirei_lui=~op[5] ~op[4]&op[3]&op[2]&op[1] //Jwire =~op[5]&~op[4]&~op[3]&~op[2]&op[1]&wirei_jal=~op[5]&~op[4]&~op[3]&~op[2]&op[1]&assignpcsource[1]=i_jr|i_j|assignpcsource[0]=(i_beq&z)|(i_bne&~z)|i_j|i_jalassignwreg=i_add|i_sub|i_and|i_or|i_xor|i_sll|i_srl|i_sra|i_addi|i_andi|i_ori|i_xori|i_lw|i_lui|i_jal;assignaluc[3]=i_sra|assignaluc[2]=i_sub|i_or|i_srl|i_sra|i_oriassignaluc[1]=i_xor|i_sll|i_srl|i_sra| assignaluc[0]=i_and|i_or|i_andi|i_ori|i_sll|i_srl|i_sra;assign =i_sll|i_srl|i_sraassignaluimm=i_addi|i_ori|i_andi|i_xori|i_lw|i_swassign =i_addi|i_lw|i_sw|i_beqassign =assign =assign =i_addi|i_ori|i_andi|i_xori|i_lw|i_sw|assignjal =i_jal;66完善ALU.v input[31:0]input[3:0]output[31:0] reg[31:0] 7always@(aorbor //casex 4'bx000:s=a+ //x000 4'bx100:s=a- //x100 4'bx001:s=a& //x001 4'bx101:s=a| //x101 4'bx010:s=a^ //x010 4'bx110:s=b<< //x110LUI:imm<< 4'b0011:s=b<< //0011SLL:rd<-(rt 4'b0111:s=b>> //0111SRL:rd<-(rtsa)

4'b1111:s=$signed(b)>>> //1111SRA:rd<-(rtsa)default:s=if(s==0)z=elsez=分频模块modulemoduleinputoutputclock;regclock;56789clock=always@(posedgemem_clk)clock<=0;clock<=~clock;15实现CPU与外部设备的输入输出首先要阅读实验指导书上实验三:外部I/O4位二进制数,计算结果,将被加数,加数和和用D显示出来;当开关置于减法器时,通过八个开关输入两个4位二进制数,计算结果,将被减数,减数和差用D那么显示绝对值,同时负数指示灯亮起。将老师给出的io_output_reg.v和io_input_reg.v两个文件加入进来,同时中的 puter模块进行修改,加入端口输入(三个输入即第一操作数,第二操作数,加减控制信号)和输出的信号(六D的控制信号和负数指示灯信号),设置LD的输出值,同时添加数显的svenseg模块;由于有三个输入同时作差果为负数,需要的处理,所以iott_egv也需要相应的修改;相应地,o_input_reg.v文件也需要相应的修改;最后对sc_datamem.v文件进行修改。修 11puter(resetn,mem_clk,pc,3input[3:0]in_port0,4inputin_port_sub;//5outputLEDR4;//6output out_port0,out_port1,7outputwire[6:0]HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;//8inputresetn,mem_clk;//9output[31:0]pc,inst;//pcwire[31:0]data,aluout,memout;//wirewmem,clock;//half_frequencyhf(resetn,mem_clk,clock);//sc_cpucpu(clock,resetn,inst,memout,pc,wmem,aluout,data);//sc_instmemimem(pc,inst,clock,mem_clk,imem_clk);//wire[3:0]op_0_ge,op_1_ge,op_2_ge,op_0_shi,op_1_shi,op_2_shi;//assignassignassignassignassignassignsc_datamemt1,in_port_sub,out_port0,out_port1,out_port2,io_read_data,LEDR4);datasevensegs0(op_2_ge,HEX4);//sevensegsevenseg31sevenseg33sevenseg34sevenseg36modulemodulesevenseg(data,input[3:0]data;outputledsegments;reg[6:0]ledsegments;always@(*)//gfe_dcba//7段LED//654_3210//DE1-SOC0:ledsegments=7'b100_0000;//DE1-SOC板上的数码管为共阳极接法。1:ledsegments=7'b111_1001;2:ledsegments=7'b010_0100;3:ledsegments=7'b011_0000;4:ledsegments=7'b001_1001;5:ledsegments=7'b001_0010;6:ledsegments=7'b000_0010;7:ledsegments=7'b111_1000;8:ledsegments=9:ledsegments=default:ledsegments=7'b111_1111;//修改io_output_reg.v文112345input[31:0]addr,inputwrite_io_enable,input//输出清 output[31:0]out_port0,out_port1,out_port2;//第一操作数数结果reg[31:0]out_port0,out_port1,outputLEDR4;//regalways@(posedgeio_clkornegedgeif(clrn 输出清out_port0<=out_port1<=out_port2<=if(write_io_enable==1)// 6'b100000:out_port0<= 6'b100001:out_port1<= //88hif(datain[31]==1)//LEDR4<=1;//out_port2<=~datain+1;// out_port2<= 修改io_input_reg.v文module//inport:外部直接输入进入input[31:0] input[31:0]output[31:0]7 [31:0]in_reg0; //inputport0 [31:0] //input [31:0] //input always@(posedgeio_clk)in_reg0<= //输入端口在io_clkin_reg1<= //输入端口在io_clkin_reg2<=in_port_sub;//输入端口在io_clkmoduleio_input_mux(a0,a1,a2,sel_addr,y); [31:0]a0,a1,a2; [5:0]sel_addr;output[31:0]y; [31:0]y;always@*case6'b110000:y=896'b110001:y=6'b110010:y=修改sc_datamem.v文1module3input[31:0]addr;//4input[31:0]datain;// we,clock,mem_clk,in_portsub_tmp;input3:0in_port0_tmpin_port1_tmpI/O输入output out_port0,out_port1,out_port2,io_read_data;//出output[31:0]dataout;//输出数据给CPU wire wire[31:0] write_enablewrite_io_enable,wire[31:0]in_port0,in_port1,in_port_sub;//assignin_port0={28'b0,in_port0_tmp};//assignin_port1={28'b0,in_port1_tmp};assignin_port_sub={31'b0,in_portsub_tmp}; write_enable=we&~clock;assigndmem_clk=mem_clk&(~clock); write_io_enable=addr[7]&write_enable;assignwrite_datamem_enable=~addr[7]&write_enable;mem_io_dataout_mux(mem_dataout,io_read_data,addr[7],dataout选择向56789out_port1,out_port2,LEDR4);//I/O112345678DEPTH=WIDTH=32;=DATA_RADIX=%Memorydepthandwidtharerequired%Enteradecimalnumber%Addressandvalueradixesareoptional%EnterBIN,DEC,HEX,orOCT;unless%otherwisespecified,radixes=%0:%addi$1,$0,192addi$2,$0,128addi|%912;%|%;%|%addiaddi$1,$0,192addi$2,$0,128addi$6,$0,1loop:lwlw$4,4($1)lw$5,8($1)sw$3,0($2)sw$4,4($2)beq add swjsubsub:sub sw j3:%loop:lw|%4%lw%5%lw|%6%sw|%7%sw|%8:%beq|9;%add%sw$7,8($2)%j%|%a:|%b:c;|%;%subsub:sub|%sw$7,8($2)%21d:|%e:END;%j|%采用VerilogHDL在quartusⅡ中实现基本的具有20条MIPS指令的单填写完成20条MIPS指令的真值表,完善CU.v和ALU.v文件 `timescale1ps/1ps puter_sim;reg

//仿真时间单位/

resetn;mem_clk[3:0]in_port0[3:0]in_port1[6:0]9 [31:0]out_port0,out_port1,out_port2; [31:0]pc,inst,aluout;putersc(resetn,mem_clk,pc,inst,aluout,mem_clk=while#1mem_clk=~mem_clkresetn= //低电平持续10个时间单位,后一直为1while#5resetn= mem_clk=%b",resetn,仿真结果如下实现CPU与外部设备的输入输出首先要阅读实验指导书上实验三:外部I/O4位二进制数,计算结果,将被加数,加数和和用D显示出来;当开关置于减法器时,通过八个开关输入两个4位二进制数,计算结果,将被减数,减数和差用D那么显示绝对值,同时负数指示灯亮起。将老师给出的io_output_reg.v和io_input_reg.v两个文件加入进来,同时中的 puter模块进行修改,加入端口输入(三个输入即第一操作数,第二操作数,加减控制信号)和输出的信号(六D的控制信号和负数指示灯信号),设置LD的输出值,同时添加数

温馨提示

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

评论

0/150

提交评论