计算机组成CPU数据通路verilog实验报告_数据通路组成实验汇总
计算机组成CPU数据通路verilog实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据通路组成实验汇总”。
计算机组成与系统结构实验报告
实验目的:
院(系): 计算机科学与技术学院 专业班级: 学 号: 姓 名: 同 组 者: 指导教师: 实验时间: 2012 年 5 月 23 日
完成处理器的单周期cpu的设计。实验仪器:
PC机(安装Altebra 公司的开发软件 QuartusII)一台
实验原理:
控制器分为主控制器和局部ALU控制器两部分。主控制器的输入为指令操作码op,输出各种控制信号,并根据指令所涉及的ALU运算类型产生ALUop,同时,生成一个R-型指令的控制信号R-type,用它来控制选择将ALUop输出作为ALUctr信号,还是根据R-型指令中的func字段来产生ALUctr信号。
实验过程及实验记录: 1.设计过程:
第一步:分析每条指令的功能,并用RTL来表示。
第二步:根据指令的功能给出所需的元件,并考虑如何将它们互连。
第三步:确定每个元件所需控制信号的取值。
第四步:汇总各指令涉及的控制信号,生成所反映指令与控制信号之间的关系图。
第五步:根据关系表,得到每个控制信号的逻辑表达式,据此设计控制电路。
2.完成代码的编写,并调试运行。1)control module Control(op,func,Branch,Jump,RegDst,ALUSrc,ALUctr,MemtoReg,RegWr,MemWr,ExtOp);input [5:0] op,func;output reg Branch,Jump,RegDst,ALUSrc,MemtoReg,RegWr,MemWr,ExtOp;output reg [2:0] ALUctr;always @(op)case(op)6'b000000: begin Branch=0;Jump=0;RegDst=1;ALUSrc=0;MemtoReg=0;RegWr=1;MemWr=0;case(func)6'b100000:ALUctr=3'b001;6'b100010:ALUctr=3'b101;6'b100011:ALUctr=3'b100;6'b101010:ALUctr=3'b111;6'b101011:ALUctr=3'b110;endcase end 6'b001101: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=0;ALUctr=3'b010;end 6'b001001: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3'b000;end
6'b100011: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=1;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3'b000;end 6'b101011: begin Branch=0;Jump=0;ALUSrc=1;RegWr=0;MemWr=1;ExtOp=1;ALUctr=3'b000;end 6'b000100: begin Branch=1;Jump=0;ALUSrc=0;RegWr=0;MemWr=0;ALUctr=3'b100;end 6'b000010: begin Branch=0;Jump=1;RegWr=0;MemWr=0;end endcase endmodule
2)数据通路DataRoad module DataRoad(Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUctr,ALUSrc,busA,busB,busW,Instruction,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,Mem2,Mem3,Result,Im);input Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUSrc;input [2:0] ALUctr;output [31:0] Instruction,busA,busB,busW,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,Mem2,Mem3,Result,Im;wire [31:0] busC,DataOut;
wire [15:0] im;wire [4:0] Rs,Rd,Rt;wire Overflow,Zero;QZL qzl(Clk,Branch,Jump,Zero,Instruction,Run);aign Rs=Instruction[25:21];aign Rt=Instruction[20:16];aign Rd=Instruction[15:11];aign im=Instruction[15:0];Register register(Run,RegWr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);ALU alu(busA,busC,ALUctr,Zero,Overflow,Result);DataMem(Run,MemWr,Clk,busB,DataOut,Result,Mem1,Mem2,Mem3);MUX mux1(ALUSrc,busB,Im,busC);MUX mux2(MemtoReg,Result,DataOut,busW);Extender ext(im,Im,ExtOp);endmodule 3)取指令
module QZL(Clk,Branch,Jump,Zero,Instruction,Run);input Clk,Branch,Jump,Zero,Run;output [31:0] Instruction;wire [4:0] addmem;reg [29:0] PC;wire [29:0] Newpc,pc_1,pc_2,pc_3,pc_12,imm30;wire Branch_Zero;aign addmem={PC[2:0],2'b00};InsMem GetIns(addmem,Instruction);always @(negedge Clk)if(Run==1)begin PC
PC
Instruction=Mem[addmem];Endmodule
4)ALU module ALU(A,B,ALUctr,Zero,Overflow,Result);parameter n=32;input [n-1:0] A,B;input [2:0] ALUctr;output Zero,Overflow;output [n-1:0] Result;wire SUBctr,OVctr,SIGctr,SignA,SignB,Cin;wire [1:0] OPctr;wire [n-1:0] X,Y,Z,Le,M,N,Add_Result;wire Add_Carry,Add_Overflow,Add_Sign;aign M={n{1'b0}};aign N={n{1'b1}};aign SUBctr=ALUctr[2];aign OVctr=!ALUctr[1]&ALUctr[0];aign SIGctr=ALUctr[0];aign OPctr[1]=ALUctr[2]&ALUctr[1];aign OPctr[0]=!ALUctr[2]&ALUctr[1]&!ALUctr[0];aign Cin=SUBctr;aign X=B^{n{SUBctr}};aign Y=A|B;Adder ad(Cin,A,X,Add_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);aign SignA=Cin^Add_Carry;aign SignB=Add_Overflow^Add_Sign;aign Overflow=Add_Overflow&OVctr;MUX m1(SIGctr,SignA,SignB,Le);defparam m1.k=1;MUX m2(Le,M,N,Z);MUX3_1 m3(Add_Result,Y,Z,Result,OPctr);
endmodule module MUX3_1(A,B,C,D,ctr);parameter k=32;input [k-1:0] A,B,C;output reg [k-1:0] D;input [1:0] ctr;always @(A or B or C or ctr)if(ctr==2'b00)D=A;else if(ctr==2'b01)D=B;else if(ctr==2'b10)D=C;endmodule module Adder(Cin,X,Y,Add_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);parameter k=32;input [k-1:0] X,Y;input Cin;output reg [k-1:0] Add_Result;output Add_Carry,Add_Overflow,Add_Sign,Zero;reg Add_Carry;aign Zero=~|Add_Result;aign Add_Sign=Add_Result[k-1];aign Add_Overflow=(X[k-1]&Y[k-1]&~Add_Result[k-1])|(~X[k-1]&~Y[k-1]&Add_Result[k-1]);always @(X or Y or Cin){Add_Carry,Add_Result}=X+Y+Cin;Endmodule
5)数据存数 module DataMem(Run,MemWr,Clk,DataIn,DataOut,Adr,Mem1,Mem2,Mem3);
input Run,MemWr,Clk;input [31:0] DataIn,Adr;output [31:0] DataOut;output [31:0] Mem1,Mem2,Mem3;reg[31:0] Mem[31:0];aign Mem1=Mem[1];aign Mem2=Mem[2];aign Mem3=Mem[3];aign DataOut=Mem[Adr];always @(negedge Clk)if(Run==0)begin Mem[0]=0;Mem[1]=10;Mem[2]=20;Mem[3]=30;end else begin if(MemWr==1)Mem[Adr]=DataIn;end endmodule 6)寄存器 module Register(Run,Regwr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);input Regwr,Clk,RegDst,Run,Overflow;input [31:0] busW;input [4:0] Rd,Rt,Rs;output reg [31:0] busA,busB;output [31:0] Reg0,Reg1,Reg2,Reg3,Reg4;reg [31:0] Mem[31:0];reg [4:0] Rw;
wire [4:0] Ra,Rb;wire RegWr;aign RegWr=Regwr&~Overflow;aign Ra=Rs;aign Rb=Rt;aign Reg0=Mem[0];aign Reg1=Mem[1];aign Reg2=Mem[2];aign Reg3=Mem[3];aign Reg4=Mem[4];always @(Rd or Rt or RegDst)if(RegDst==1'b1)Rw=Rd;else Rw=Rt;always @(negedge Clk)if(Run==1'b1)begin if(RegWr==1'b1)Mem[Rw]=busW;end else begin Mem[0]
end else begin busA=0;busB=0;end endmodule
7)数据选择
module MUX(ctr,X,Y,Z);parameter k=32;input [k-1:0] X,Y;output reg [k-1:0] Z;input ctr;always @(X or Y or ctr)if(ctr==1'b0)Z
数据通路组成实验一、实验目的(1)将双端口通用寄存器组和双端口存储器模块联机;(2)进一步熟悉计算机的数据通路;(3)掌握数字逻辑电路中故障的一般规律,以及排除故障的一般原则和方法;(4)锻炼......
非常简单CPU数据通路设计【实验目的】1.掌握CPU的设计步骤 2.学会芯片的运用及其功能 【实验环境】Maxplus2环境下实现非常简单CPU数据通路的设计 【实验内容】绘制非常简单......
数据通路实验报告数据通路实验报告一. 实验概述。1.数据通路的设计原则。数据通路的设计直接影响到控制器的设计,同时也影响到数字系统的速度指标和成本。一般来说,处理速度快......
运算器数据通路实验设计报告学号: 姓名: 成绩: 学号: 姓名: 成绩:一、实验名称:总线、半导体静态存储器实验二、实验目的. 1.熟悉函数功能发生器的功能、使用方法。 2.熟悉运算器的......
计算机科学与技术-计104 计 算 机 组 成 原 理 实 验 报姓名:学号:班级:指 导 老 师:郑- 1计算机科学与技术-计104一个上升沿,数据66H 被写入W 寄存器。 3)将11H写入R0寄存器①K23......
