日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

杭电计算机组成原理实验RISC-V 实验 实现运算及传送指令的CPU设计实验 实现访存指令的CPU设计实验 实现转移指令的CPU设计实验

發(fā)布時(shí)間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杭电计算机组成原理实验RISC-V 实验 实现运算及传送指令的CPU设计实验 实现访存指令的CPU设计实验 实现转移指令的CPU设计实验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

杭電計(jì)算機(jī)組成原理實(shí)驗(yàn)RISC-V 實(shí)驗(yàn) 實(shí)現(xiàn)運(yùn)算及傳送指令的CPU設(shè)計(jì)實(shí)驗(yàn) 實(shí)現(xiàn)訪存指令的CPU設(shè)計(jì)實(shí)驗(yàn) 實(shí)現(xiàn)轉(zhuǎn)移指令的CPU設(shè)計(jì)實(shí)驗(yàn)

  • 一、實(shí)驗(yàn)?zāi)康呐c要求
    • 1、 實(shí)驗(yàn)?zāi)康?#xff1a;
      • a) 掌握RISC-V的轉(zhuǎn)移指令的數(shù)據(jù)通路設(shè)計(jì),掌握指令流和數(shù)據(jù)流的控制方法
      • b) 學(xué)習(xí)依據(jù)新增指令,修改多周期CPU的系統(tǒng)結(jié)構(gòu)的方法,具備鏈接各模塊構(gòu)建整機(jī)的能力。
      • c) 掌握基于有限狀態(tài)機(jī),實(shí)現(xiàn)控制單元的設(shè)計(jì)方法。
      • d) 在實(shí)現(xiàn)RISC-V的R型和I型運(yùn)算類指令,U型傳送類指令,訪存指令的基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)轉(zhuǎn)移類指令beq,jal,jalr真的功能。
    • 2、 實(shí)驗(yàn)要求:
  • 二、實(shí)驗(yàn)設(shè)計(jì)與程序代碼
    • 1、 模塊設(shè)計(jì)說明
    • 2、 實(shí)驗(yàn)程序源代碼及注釋等
  • 三、實(shí)驗(yàn)仿真
    • 1、 仿真代碼
  • 五、引腳配置
  • 六、思考與探索
    • 1、 實(shí)驗(yàn)結(jié)果記錄:
    • 2、 實(shí)驗(yàn)結(jié)論:
    • 3、 問題與解決方案:
    • 4、 思考題:
      • a) 可以執(zhí)行三條轉(zhuǎn)移指令,測試?yán)涌梢圆榭磳?shí)驗(yàn)記錄結(jié)果
      • b) 分析j的指令1111 1110 1101 1111 1111 0000 0110 1111 發(fā)現(xiàn)這是opcode 為jar的類型,所以為jal。因?yàn)閖al是20位的立即數(shù),而jalr只有12位立即數(shù),則需要壓縮,同時(shí)jalr主要是為了rs1+imm32->PC則需要將PC的數(shù)值放入到rs1中。所以rd和rs1需要一致,綜合得到j(luò)alr指令為:1011 1111 0110 0000 1000 0000 1110 0111。
      • c) 可以,但是這里存在的問題在于需要添加一條PC和imm32的加法器,同時(shí)在選擇w_data_s的時(shí)候需要添加更多的選擇,所以CU部分也需要添加相應(yīng)的狀態(tài)才可以實(shí)現(xiàn)。
      • d) 判斷轉(zhuǎn)移條件只需要是ZF=0即可,其他的判斷條件其實(shí)只需要在原來的基礎(chǔ)上加上非即可。
      • e) 問題很多,找老師,跑板子,查數(shù)據(jù)解決。

一、實(shí)驗(yàn)?zāi)康呐c要求

1、 實(shí)驗(yàn)?zāi)康?#xff1a;

a) 掌握RISC-V的轉(zhuǎn)移指令的數(shù)據(jù)通路設(shè)計(jì),掌握指令流和數(shù)據(jù)流的控制方法

b) 學(xué)習(xí)依據(jù)新增指令,修改多周期CPU的系統(tǒng)結(jié)構(gòu)的方法,具備鏈接各模塊構(gòu)建整機(jī)的能力。

c) 掌握基于有限狀態(tài)機(jī),實(shí)現(xiàn)控制單元的設(shè)計(jì)方法。

d) 在實(shí)現(xiàn)RISC-V的R型和I型運(yùn)算類指令,U型傳送類指令,訪存指令的基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)轉(zhuǎn)移類指令beq,jal,jalr真的功能。

2、 實(shí)驗(yàn)要求:

本次實(shí)驗(yàn)內(nèi)容:在前述構(gòu)建并實(shí)現(xiàn)了運(yùn)算類指令(R型和I型)、轉(zhuǎn)移指令(U型lui指令)、訪存指令(I型和S型)的RISC-V CPU基礎(chǔ)上,新增三條轉(zhuǎn)移類指令beq、jal、jalr;首先在實(shí)驗(yàn)8基礎(chǔ)上,添加CP0寄存器、相對轉(zhuǎn)移的地址加法器和PC寫入的多路選擇器,并與各個(gè)邏輯模塊正確鏈接;然后修改寄存器堆的寫入數(shù)據(jù)多路選擇器、修改二級譯碼及控制單元,實(shí)現(xiàn)新的目標(biāo)指令集功能;最后,編寫測試程序,檢查CPU是否能正確執(zhí)行基于新目標(biāo)集的程序。

二、實(shí)驗(yàn)設(shè)計(jì)與程序代碼

1、 模塊設(shè)計(jì)說明

(描述整個(gè)實(shí)驗(yàn)的設(shè)計(jì)方案,分幾個(gè)模塊,各模塊的功能,各模塊之間的連接關(guān)系,可附圖)

實(shí)驗(yàn)除了頂層模塊之外還有十一個(gè)模塊,分別為指令的存取,指令放入到IR,ID1對指令的處理,ID2對ID1處理后的數(shù)據(jù)進(jìn)行分析,分析出現(xiàn)在的指令的類型,ALU部分為數(shù)據(jù)的計(jì)算,同時(shí)還包括了判斷B或者imm32,顯示數(shù)據(jù)模塊為數(shù)碼管模塊,對數(shù)碼管進(jìn)行顯示,暫存器模塊是為了A,B的賦值,以及對PC,PC0,W_DATA的賦值,CU模塊是包含有限自動機(jī),對不同的狀態(tài)進(jìn)行轉(zhuǎn)移,數(shù)據(jù)獲得模塊,主要是為了查看相關(guān)的數(shù)據(jù),對不同的數(shù)據(jù)進(jìn)行選擇。DM模塊是存儲器模塊,主要是為了存儲獲取,寫入相關(guān)的數(shù)據(jù)。

2、 實(shí)驗(yàn)程序源代碼及注釋等

(實(shí)驗(yàn)各個(gè)模塊的代碼,包含功能注釋)

`timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 15:57:20 06/04/2021 // Design Name: // Module Name: main // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // // module main(input clk,clk_n,clk_25M,input [3:0] SW,output [3:0] AN,output [7:0] seg,output ZF,SF,CF,OF);wire [31:0] PC,PC0,IR,inst_Code,A,B,F,R_Addr_A,R_Addr_B,W_Data,imm32,MDR; wire IR_Write,Reg_Write,rs2_imm_s,PC0_write,Mem_Write,PC_Write; wire [1:0] PC_s,w_data_s; wire [4:0] rs1,rs2,rd; wire [6:0] opcode; wire [2:0] funct3; wire [6:0] funct7; wire [3:0] ALU_OP,ALU_OP_o; wire IS_R,IS_IMM,IS_LUI,IS_LW,IS_SW,IS_BEQ,IS_JAL,IS_JALR; wire [31:0] shownum; IM myIM(clk,PC[7:2],inst_Code);//指令集 Get_Order myGet_Order(IR_Write,PC_Write,PC0_Write,PC_s,inst_Code,imm32,F,clk,clk_n,PC,IR,PC0);//獲得指令 ID1 myID1(IR,rs1,rs2,rd,imm32,opcode,funct3,funct7);//ID1對指令進(jìn)行處理 ID2 myID2(opcode,funct3,funct7,IS_R,IS_IMM,IS_LUI,IS_LW,IS_SW,IS_BEQ,IS_JAL,IS_JALR,ALU_OP);//ID2對指令處理 ALU myALU(A,B,imm32,clk,rs2_imm_s,ALU_OP_o,F,ZF,SF,CF,OF);//ALU部分 ShowNum myShowNum(clk_25M,shownum,seg,AN);//顯示數(shù)據(jù) DataInput myDataInput(clk,rd,clk_n,Reg_Write,rs1,rs2,W_Data,R_Addr_A,R_Addr_B); ABInput myABInput(clk,R_Addr_A,R_Addr_B,imm32,F,MDR,PC,w_data_s,rs2_imm_s,A,B,W_Data); CU myCU(clk,clk_n,IS_R,IS_IMM,IS_LUI,IS_LW,IS_SW,IS_BEQ,IS_JAL,IS_JALR,ZF,ALU_OP,PC_Write,PC0_Write,IR_Write,Reg_Write,Mem_Write,rs2_imm_s,w_data_s,PC_s,ALU_OP_o); getShowNum mygetShowNum(PC,IR,W_Data,A,B,F,MDR,PC0,rd,imm32,rs1,rs2,SW,shownum); DM myDM(clk,Mem_Write,F[7:2],B,MDR); endmodulemodule getShowNum( input [31:0] PC,inst,W_Data,A,B,F,MDR,PC0,rd,imm32,rs1,rs2, input [3:0] sw, output reg [31:0] shownum);always@(*) begincase(sw)0:begin shownum=PC; end1:begin shownum=inst; end2:begin shownum=W_Data; end3:begin shownum=A; end4:begin shownum=B; end5:begin shownum=F; end6:begin shownum=MDR; end7:begin shownum=PC0; end8:begin shownum=rd; end9:begin shownum=imm32; end10:begin shownum=rs1; end11:begin shownum=rs2; enddefault:shownum=0;endcase endendmodulemodule CU( input clk,reset,IS_R,IS_IMM,IS_LUI,IS_LW,IS_SW,IS_BEQ,IS_JAL,IS_JALR, input ZF, input [3:0] ALU_OP, output reg PC_Write,PC0_Write,IR_Write,Reg_Write, output wire Mem_Write, output reg rs2_imm_s, output reg [1:0] w_data_s,PC_s, output reg [3:0] ALU_OP_o);reg [3:0] ST,Next_ST;initial beginST=0; endassign Mem_Write=(Next_ST==4'b1010);always@(posedge clk or posedge reset) beginif(reset) ST<=0;else ST<=Next_ST; endalways@(*) begincase(ST)4'b0000:begin Next_ST=4'b0001; end4'b0001: beginif(IS_LUI) Next_ST=4'b0110;else if(IS_R||IS_IMM||IS_LW||IS_SW||IS_JALR||IS_BEQ) Next_ST=4'b0010;else if(IS_JAL) Next_ST=4'b1011;end4'b0010:beginif(IS_R) Next_ST=4'b0011;else if(IS_IMM) Next_ST=4'b0101;else if(IS_LW||IS_SW||IS_JALR) Next_ST=4'b0111;else if(IS_BEQ) Next_ST=4'b1101;end4'b0011:begin Next_ST=4'b0100; end4'b0100:begin Next_ST=4'b0001; end4'b0101:begin Next_ST=4'b0100; end4'b0110:begin Next_ST=4'b0001; end4'b0111:begin if(IS_LW) Next_ST=4'b1000;else if(IS_SW) Next_ST=4'b1010;else if(IS_JALR) Next_ST=4'b1100;end4'b1000:begin Next_ST=4'b1001; end4'b1001:begin Next_ST=4'b1010; end4'b1010:begin Next_ST=4'b0001; end4'b1011:begin Next_ST=4'b0001; end4'b1100:begin Next_ST=4'b0001; end4'b1101:begin Next_ST=4'b1110; end4'b1110:begin Next_ST=4'b0001; enddefault: Next_ST=4'b0001;endcase endalways@(posedge clk or posedge reset) beginif(reset)begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;endelsebegincase(Next_ST)4'b0001:begin PC_Write<=1;PC0_Write<=1;IR_Write<=1;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b0010:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b0011:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=ALU_OP;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b0100:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=1;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b0101:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=ALU_OP;rs2_imm_s<=1;w_data_s<=0;PC_s<=0;end4'b0110:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=1;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=1;PC_s<=0;end4'b0111:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=1;w_data_s<=0;PC_s<=0;end4'b1000:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b1001:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=1;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=2;PC_s<=0;end4'b1010:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b1011:begin PC_Write<=1;PC0_Write<=0;IR_Write<=0;Reg_Write<=1;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=3;PC_s<=1;end4'b1100:begin PC_Write<=1;PC0_Write<=0;IR_Write<=0;Reg_Write<=1;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=3;PC_s<=2;end4'b1101:begin PC_Write<=0;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=8;rs2_imm_s<=0;w_data_s<=0;PC_s<=0;end4'b1110:begin PC_Write<=ZF;PC0_Write<=0;IR_Write<=0;Reg_Write<=0;ALU_OP_o<=0;rs2_imm_s<=0;w_data_s<=0;PC_s<=1;endendcaseendendendmodulemodule ID2(input [6:0] opcode,input [2:0] funct3,input [6:0] funct7,output reg IS_R,IS_IMM,IS_LUI,IS_LW,IS_SW,IS_BEQ,IS_JAL,IS_JALR,output reg [3:0] ALU_OP); always@(*) begincase(opcode)7'b0110011://Rbegin IS_R=1;IS_IMM=0;IS_LUI=0;IS_LW=0;IS_SW=0;IS_BEQ=0;IS_JAL=0;IS_JALR=0;ALU_OP={funct7[5],funct3}; end7'b0010011://Ibegin IS_R=0;IS_IMM=1;IS_LUI=0;IS_LW=0;IS_SW=0;IS_BEQ=0;IS_JAL=0;IS_JALR=0;ALU_OP=(funct3==3'b101)?{funct7[5],funct3}:{1'b0,funct3};end7'b0110111://Ubegin IS_R=0;IS_IMM=0;IS_LUI=1;IS_LW=0;IS_SW=0;IS_BEQ=0;IS_JAL=0;IS_JALR=0;ALU_OP=0;end7'b0000011://IWbegin IS_R=0;IS_IMM=0;IS_LUI=0;IS_LW=1;IS_SW=0;IS_BEQ=0;IS_JAL=0;IS_JALR=0;ALU_OP=0;end7'b0100011://SWbegin IS_R=0;IS_IMM=0;IS_LUI=0;IS_LW=0;IS_SW=1;IS_BEQ=0;IS_JAL=0;IS_JALR=0;ALU_OP=0;end7'b1100011://Bbegin IS_R=0;IS_IMM=0;IS_LUI=0;IS_LW=0;IS_SW=0;IS_BEQ=1;IS_JAL=0;IS_JALR=0;ALU_OP=0;end7'b1101111://Jalbegin IS_R=0;IS_IMM=0;IS_LUI=0;IS_LW=0;IS_SW=0;IS_BEQ=0;IS_JAL=1;IS_JALR=0;ALU_OP=0;end7'b1100111://Jalrbegin IS_R=0;IS_IMM=0;IS_LUI=0;IS_LW=0;IS_SW=0;IS_BEQ=0;IS_JAL=0;IS_JALR=1;ALU_OP=0;enddefault: begin IS_R=0;IS_IMM=0;IS_LUI=0;IS_LW=0;IS_SW=0;IS_BEQ=0;IS_JAL=0;IS_JALR=1;ALU_OP=0;endendcaseendendmodulemodule ID1(input [31:0] inst,output reg [4:0] rs1,rs2,rd,output reg [31:0] imm32,output reg [6:0] opcode,output reg [2:0] funct3,output reg [6:0] funct7);reg [5:0] I_fmt;always@(*)beginopcode=inst[6:0];rs1=inst[19:15];rs2=inst[24:20];rd=inst[11:7];funct3=inst[14:12];funct7=inst[31:25];case(opcode)7'b0110011: I_fmt=6'b000001;//R7'b0010011: I_fmt=6'b100000;//I7'b0000011: I_fmt=6'b100000;//L和I型一致7'b0100011: I_fmt=6'b010000;//S7'b1100011: I_fmt=6'b001000;//B7'b0110111: I_fmt=6'b000100;//U7'b1101111: I_fmt=6'b000010;//Jal7'b1100111: I_fmt=6'b100000;//Jalr和I一致default: I_fmt=0;endcasecase(I_fmt)6'b000001: imm32=0;//R6'b100000: beginif(funct3==3'b101||3'b001) imm32={{27{1'b0}},inst[24:20]};else imm32={{20{inst[31]}},inst[31:20]};//Iend6'b010000: imm32={{20{inst[31]}},inst[31:25],inst[11:7]};//S6'b001000: imm32={{20{inst[31]}},inst[7],inst[30:25],inst[11:8],1'b0};//B6'b000100: imm32={inst[31:12],{12{1'b0}}};//U6'b000010: imm32={{12{inst[31]}},inst[19:12],inst[20],inst[30:21],1'b0};//J1,I2default: imm32=0;endcaseend endmodulemodule Get_Order(input IR_Write,PC_Write,PC0_Write,input [1:0] PC_s,input [31:0] inst_Code,imm32,F,input clk,reset,output reg [31:0] PC,IR,PC0);initialbeginPC=0;endalways@(negedge clk or posedge reset)beginif(reset)beginPC<=0;IR<=0;endelsebeginif(IR_Write==1)beginIR<=inst_Code;endif(PC_Write==1)beginif(PC_s==0) PC<=PC+4;else if(PC_s==1) PC<=PC0+imm32;else if(PC_s==2) PC<=F;endif(PC0_Write==1)beginPC0<=PC;endendend endmodulemodule ABInput(//暫存器AB W_Data進(jìn)行賦值模塊input clk_RR,input [31:0] R_DataA,R_DataB,input [31:0] imm32,F,MDR,PC,input [1:0]w_data_s,input rs2_imm_s,output reg [31:0] A,B,W_Data);always@(negedge clk_RR)beginA<=R_DataA;B<=R_DataB;endalways@(*)beginif(w_data_s==0) begin W_Data=F; endelse if(w_data_s==1) begin W_Data=imm32; endelse if(w_data_s==2) begin W_Data=MDR; endelse if(w_data_s==3) begin W_Data=PC;endendendmodulemodule DataInput(//暫存器堆的重置清零和R_Addr_A,R_Addr_B,的賦值input wire clk,input wire [4:0] W_Addr,input wire reset,reg_Write,input wire [4:0] R_Addr_A,R_Addr_B,input wire [31:0] W_Data,output reg [31:0] R_DataA,R_DataB);reg [31:0] regs [31:0];initialbeginregs[0]=0;regs[1]=1;regs[2]=2;regs[3]=3;regs[4]=4;regs[5]=5;regs[6]=6;regs[7]=7;regs[8]=8;regs[9]=9;regs[10]=10;regs[11]=11;regs[12]=12;regs[13]=13;regs[14]=14;regs[15]=15;regs[16]=16;regs[17]=17;regs[18]=18;regs[19]=19;regs[20]=20;regs[21]=21;regs[22]=22;regs[23]=23;regs[24]=24;regs[25]=25;regs[26]=26;regs[27]=27;regs[28]=28;regs[29]=29;regs[30]=30;regs[31]=31;endalways@(negedge clk or posedge reset)beginif(reset)beginregs[0]<=0;regs[1]<=1;regs[2]<=2;regs[3]<=3;regs[4]<=4;regs[5]<=5;regs[6]<=6;regs[7]<=7;regs[8]<=8;regs[9]<=9;regs[10]<=10;regs[11]<=11;regs[12]<=12;regs[13]<=13;regs[14]<=14;regs[15]<=15;regs[16]<=16;regs[17]<=17;regs[18]<=18;regs[19]<=19;regs[20]<=20;regs[21]<=21;regs[22]<=22;regs[23]<=23;regs[24]<=24;regs[25]<=25;regs[26]<=26;regs[27]<=27;regs[28]<=28;regs[29]<=29;regs[30]<=30;regs[31]<=31;endelsebeginif(reg_Write==1'b1)beginif(W_Addr!=0)beginregs[W_Addr]<=W_Data;endendendendalways@(*)beginR_DataA=regs[R_Addr_A];R_DataB=regs[R_Addr_B];endendmodulemodule ALU(//ALU的計(jì)算模塊input [31:0] A,B,imm32,input clk_F,input rs2_imm_s,input [3:0] ALU_OP,output reg [31:0] F,output reg ZF,SF,CF,OF);reg F32;reg ZF_O,SF_O,CF_O,OF_O;always@(negedge clk_F)beginif(rs2_imm_s==0)begincase(ALU_OP)4'b0000:begin {F32,F}=A+B;end4'b0001:begin F=A<<B;end4'b0010:begin F=($signed(A)<$signed(B))?1:0;end4'b0011:begin F=(A<B)?1'b1 : 1'b0;end4'b0100:begin F=A^B;end4'b0101:begin F=A>>B;end4'b0110:begin F=A|B;end4'b0111:begin F=A&B;end4'b1000:begin {F32,F}=A-B;F32=~F32; end4'b1101:begin F=($signed(A))>>>B;endendcaseZF=(F>0)?1'b0:1'b1;SF=F[31];CF=F32;OF=A[31]^B[31]^F[31]^F32;endelsebegincase(ALU_OP)4'b0000:begin {F32,F}=A+imm32;end4'b0001:begin F=A<<imm32;end4'b0010:begin F=($signed(A)<$signed(imm32))?1:0;end4'b0011:begin F=(A<imm32)?1'b1 : 1'b0;end4'b0100:begin F=A^imm32;end4'b0101:begin F=A>>imm32;end4'b0110:begin F=A|imm32;end4'b0111:begin F=A&imm32;end4'b1000:begin {F32,F}=A-imm32;F32=~F32; end4'b1101:begin F=($signed(A))>>>imm32;endendcaseZF=(F>0)?1'b0:1'b1;SF=F[31];CF=F32;OF=A[31]^B[31]^F[31]^F32;endendendmodulemodule ShowNum(//數(shù)碼管模塊用于顯示數(shù)據(jù)input clk_25M,input [31:0] F,output reg [7:0]seg,output reg [3:0]AN);parameter count=10000;reg [31:0] clk_num;reg [3:0] digit;reg [2:0] which;initialbeginclk_num=0;which=0;digit=0;endalways@(posedge clk_25M)beginif(clk_num<count)begin clk_num<=clk_num+1;endelsebegin clk_num<=0;which<=which+3'b001;case(which)0: begin digit<=F[3:0];end1: begin digit<=F[7:4];end2: begin digit<=F[11:8];end3: begin digit<=F[15:12];end4: begin digit<=F[19:16];end5: begin digit<=F[23:20];end6: begin digit<=F[27:24];end7: begin digit<=F[31:28];endendcaseendendalways@(digit,which)begincase(which)1: begin AN=4'b1111;end2: begin AN=4'b1110;end3: begin AN=4'b1101;end4: begin AN=4'b1100;end5: begin AN=4'b1011;end6: begin AN=4'b1010;end7: begin AN=4'b1001;end0: begin AN=4'b1000;enddefault:AN=4'bzzzz;endcasecase(digit)0:seg[7:0]=8'b00000011;1:seg[7:0]=8'b10011111;2:seg[7:0]=8'b00100101;3:seg[7:0]=8'b00001101;4:seg[7:0]=8'b10011001;5:seg[7:0]=8'b01001001;6:seg[7:0]=8'b01000001;7:seg[7:0]=8'b00011111;8:seg[7:0]=8'b00000001;9:seg[7:0]=8'b00001001; 10:seg[7:0]=8'b00010001;11:seg[7:0]=8'b11000001;12:seg[7:0]=8'b01100011;13:seg[7:0]=8'b10000101;14:seg[7:0]=8'b01100001;15:seg[7:0]=8'b01110001;default:seg[7:0]=8'b11111111;endcaseend endmodule

三、實(shí)驗(yàn)仿真

1、 仿真代碼

(含仿真源代碼、仿真驗(yàn)證方案)

`timescale 1ns / 1ps// Company: // Engineer: // // Create Date: 22:20:29 06/18/2021 // Design Name: main // Module Name: D:/ShuZiDianLu/example/exam9.1/test1.v // Project Name: exam9.1 // Target Device: // Tool versions: // Description: // // Verilog Test Fixture created by ISE for module: main // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // module test1;// Inputsreg clk;reg clk_n;reg clk_25M;reg [3:0] SW;// Outputswire [3:0] AN;wire [7:0] seg;wire ZF;wire SF;wire CF;wire OF;// Instantiate the Unit Under Test (UUT)main uut (.clk(clk), .clk_n(clk_n), .clk_25M(clk_25M), .SW(SW), .AN(AN), .seg(seg), .ZF(ZF), .SF(SF), .CF(CF), .OF(OF));initial begin// Initialize Inputsclk = 0;clk_n = 0;clk_25M = 0;SW = 0;// Wait 100 ns for global reset to finish#100;// Add stimulus hereendinitial beginforever #1000 clk=~clk; endinitial beginforever #1 clk_25M=~clk_25M; end

2、 仿真波形
(運(yùn)行仿真時(shí),波形截圖)

3、 仿真結(jié)果分析
(對仿真波形進(jìn)行分析)
仿真波形基本符合實(shí)驗(yàn)要求

四、電路圖
(開發(fā)工具中顯示的電路模塊圖)

五、引腳配置

(引腳約束文件的內(nèi)容,描述主要配置情況)

NET "AN[3]" LOC = L21; NET "AN[2]" LOC = M22; NET "AN[1]" LOC = M21; NET "AN[0]" LOC = N22; NET "seg[7]" LOC = H19; NET "seg[6]" LOC = G20; NET "seg[5]" LOC = J22; NET "seg[4]" LOC = K22; NET "seg[3]" LOC = K21; NET "seg[2]" LOC = H20; NET "seg[1]" LOC = H22; NET "seg[0]" LOC = J21; NET "SW[3]" LOC = T3; NET "SW[2]" LOC = U3; NET "SW[1]" LOC = T4; NET "SW[0]" LOC = V3; NET "ZF" LOC = R1; NET "SF" LOC = P2; NET "CF" LOC = P1; NET "OF" LOC = N2; NET "clk" LOC = R4; NET "clk_25M" LOC = H4; NET "clk_n" LOC = AA4;#PlanAhead Generated IO constraints NET "AN[3]" IOSTANDARD = LVCMOS18; NET "AN[2]" IOSTANDARD = LVCMOS18; NET "AN[1]" IOSTANDARD = LVCMOS18; NET "AN[0]" IOSTANDARD = LVCMOS18; NET "seg[7]" IOSTANDARD = LVCMOS18; NET "seg[6]" IOSTANDARD = LVCMOS18; NET "seg[5]" IOSTANDARD = LVCMOS18; NET "seg[4]" IOSTANDARD = LVCMOS18; NET "seg[3]" IOSTANDARD = LVCMOS18; NET "seg[2]" IOSTANDARD = LVCMOS18; NET "seg[1]" IOSTANDARD = LVCMOS18; NET "seg[0]" IOSTANDARD = LVCMOS18; NET "SW[3]" IOSTANDARD = LVCMOS18; NET "SW[2]" IOSTANDARD = LVCMOS18; NET "SW[1]" IOSTANDARD = LVCMOS18; NET "SW[0]" IOSTANDARD = LVCMOS18; NET "clk" IOSTANDARD = LVCMOS18; NET "clk_25M" IOSTANDARD = LVCMOS18; NET "clk_n" IOSTANDARD = LVCMOS18; NET "OF" IOSTANDARD = LVCMOS18; NET "SF" IOSTANDARD = LVCMOS18; NET "ZF" IOSTANDARD = LVCMOS18; NET "CF" IOSTANDARD = LVCMOS18; NET "SW[3]" PULLDOWN; NET "SW[2]" PULLDOWN; NET "SW[1]" PULLDOWN; NET "SW[0]" PULLDOWN; NET "clk_25M" PULLDOWN; NET "clk" PULLDOWN; NET "clk_n" PULLDOWN;

六、思考與探索

1、 實(shí)驗(yàn)結(jié)果記錄:

實(shí)驗(yàn)8實(shí)驗(yàn)結(jié)果記錄表

序號PCIR匯編指令預(yù)期執(zhí)行結(jié)果指令clk數(shù)W_DataMDR
1001000f93li t6,16t6=1640x100x10
24000fad03lw s10,0(t6)S10=0x1140x110x11
38004fad83lw s11,4(t6)S11=0x2240x220x22
4C01bfa023sw s11,0(t6)Mem[4]=0x2240x22
51001afa223sw s10,4(t6)Mem[5]=0x1140x11
614000fad03lw s10,0(t6)S10=0x2240x220x22
718004fad83lw s11,4(t6)S11=0x1140x110x11
81c01bd0e33add t3,s10,s11t3=0x3340x33
92001c02823sw t3,16(zero)t3=0x3340x33
102401002e83lw t4,16(zero)t4=0x3340x330x33
112887600093li ra,22ra=0xFFFF_F87640xFFFF_F876
122c00400113li sp,4sp=0x0000_000440x0000_0004
1330002081b3add gp,ra,spgp=0xFFFF_F87A40xFFFF_F87A
143440208233sub tp,ra,sptp=0xFFFF_F87240xFFFF_F872
1538002092b3sll t0,ra,spt0=0xFFFF_876040xFFFF_8760
163c0020d333srl t1,ra,spt1=0x0FFF_FF8740x0FFF_FF87
17404020d3b3sra t2,ra,spt2=0xFFFF_FF8740xFFFF_FF87
18440020a433slt s0,ra,sps0=0x0000_000140x0000_0001
19480020b4b3sltu s1,ra,sps1=0x0000_000040x0000_0000
204c0062f533and a0,t0,t1s0=0x0FFF_870040x0FFF_8700
21500062e5b3or a1,t0,t1a1=0xFFFF_FFE740xFFFF_FFE7
22540062c633xor a2,t0,t1a2=0xF000_78E740xF000_78E7
2358800006b7lui a3,0x80000a3=0x8000_000020x8000_0000
245cfff68713addi a4,a3,-1a4=0x7FFF_FFFF40x7FFF_FFFF
256012370793addi a5,a4,291a5=0x8000_012240x8000_0122
266400379813slli a6,a5,0x3a6=0x0000_091040x0000_0910
27680037d893srli a7,a5,0x3a7=0x1000_002440x1000_0024
286c4037d913srai s2,a5,0x3s2=0xF000_002440xF000_0024
2970fff92993slti s3,s2,-1s3=0x0000_000140x0000_0001
3074fff93a13sltiu s4,s2,-1s4=0x0000_000140x0000_0001
317800192a93slti s5,s2,1s5=0x0000_000140x0000_0001
327c00193b13seqz s6,s2s6=0x0000_000040x0000_0000
33800ff67b93andi s7,a2,255s7=0x0000_00E740x0000_00E7
34840ff66b93ori s7,a2,255s7=0xF000_78FF40xF000_78FF —
358800010c37lui s8,0x10s8=0x0001_000020x0001_0000
368cfffc0c13addi s8,s8,-1s8=0x0000_FFFF40x0000_FFFF
3790fffc4c93not s9,s8s9=0xFFFF_000040xFFFF_0000

表11.1 實(shí)驗(yàn)9實(shí)驗(yàn)結(jié)果記錄表

序號PCIR匯編指令執(zhí)行結(jié)果下條指令地址
1001000513li a0,16a0=1600306593
2400306593ori a1,zero,3a1=303004613
3803004613xori a2,zero,48a2=48008000ef
4C008000efJal ra,14PC=14000502b3
514000502b3add t0,a0,zerot0=160005e333
6180005e333or t1,a1,zeroa1=3000073b3
71c000073b3and t2,zero,zerot2=00002ae03
8200002ae03lw t3,0(t0)t3=401c383b3
92401c383b3add t2,t2,t3t2=400428293
102800428293addi t0,t0,4t0=20fff30313
112cfff30313addi t1,t1,-1t1=200030463
123000030463beqz t1,38 0fedff06f
1334fedff06fj 20 PC=200002ae03
14200002ae03lw t3,0(t0)t3=501c383b3
152401c383b3add t2,t2,t3t2=900428293
162800428293addi t0,t0,4 t100030463
183000030463beqz t1,38 0fedff06f
1934fedff06fj 20 PC=200002ae03
20200002ae03lw t3,0(t0)t3=601c383b3
212401c383b3add t2,t2,t3t2=f00428293
222800428293addi t0,t0,4t0=28fff30313
232cfff30313addi t1,t1,-1t1=000030463
243000030463beqz t1,38 100762023
253800762023sw t2,0(a2)mem?=f00008067
263c00008067Ret00062403
271000062403lw s0,0(a2)s0=f----

2、 實(shí)驗(yàn)結(jié)論:

(分析實(shí)驗(yàn)結(jié)果,給出實(shí)驗(yàn)結(jié)論)
實(shí)驗(yàn)結(jié)果基本符合實(shí)驗(yàn)的要求,同時(shí)對照數(shù)據(jù)值發(fā)現(xiàn)符合DM提前放進(jìn)進(jìn)去的數(shù)據(jù)值,說明sw和lw沒有問題,同時(shí)跳轉(zhuǎn)指令也符合要求,則說明beq、jal、jalr也符合要求。

3、 問題與解決方案:

問題:實(shí)驗(yàn)中間發(fā)現(xiàn)了很多奇怪的問題,比如跳轉(zhuǎn)不對,數(shù)據(jù)不對,數(shù)碼管位移這一系列的問題。
解決方案:通過反復(fù)實(shí)驗(yàn)和查找數(shù)據(jù),發(fā)現(xiàn)一部分錯(cuò)誤在于沒有必要的代碼,還有一部分代碼問題在于寫代碼時(shí)間過長,導(dǎo)致除了代碼的前后差異過大,從而也會造成差異。

4、 思考題:

a) 可以執(zhí)行三條轉(zhuǎn)移指令,測試?yán)涌梢圆榭磳?shí)驗(yàn)記錄結(jié)果

代碼如下: 00000000 <main>:0: 01000513 li a0,164: 00306593 ori a1,zero,38: 03004613 xori a2,zero,48c: 008000ef jal ra,14 <BankSum>10: 00062403 lw s0,0(a2)00000014 <BankSum>:14: 000502b3 add t0,a0,zero18: 0005e333 or t1,a1,zero1c: 000073b3 and t2,zero,zero00000020 <L>:20: 0002ae03 lw t3,0(t0)24: 01c383b3 add t2,t2,t328: 00428293 addi t0,t0,42c: fff30313 addi t1,t1,-130: 00030463 beqz t1,38 <exit>34: fedff06f j 20 <L>00000038 <exit>:38: 00762023 sw t2,0(a2)3c: 00008067 ret

b) 分析j的指令1111 1110 1101 1111 1111 0000 0110 1111 發(fā)現(xiàn)這是opcode 為jar的類型,所以為jal。因?yàn)閖al是20位的立即數(shù),而jalr只有12位立即數(shù),則需要壓縮,同時(shí)jalr主要是為了rs1+imm32->PC則需要將PC的數(shù)值放入到rs1中。所以rd和rs1需要一致,綜合得到j(luò)alr指令為:1011 1111 0110 0000 1000 0000 1110 0111。

c) 可以,但是這里存在的問題在于需要添加一條PC和imm32的加法器,同時(shí)在選擇w_data_s的時(shí)候需要添加更多的選擇,所以CU部分也需要添加相應(yīng)的狀態(tài)才可以實(shí)現(xiàn)。

d) 判斷轉(zhuǎn)移條件只需要是ZF=0即可,其他的判斷條件其實(shí)只需要在原來的基礎(chǔ)上加上非即可。

e) 問題很多,找老師,跑板子,查數(shù)據(jù)解決。

總結(jié)

以上是生活随笔為你收集整理的杭电计算机组成原理实验RISC-V 实验 实现运算及传送指令的CPU设计实验 实现访存指令的CPU设计实验 实现转移指令的CPU设计实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产绳艺sm调教室论坛 | 亚洲一二三四五 | 在线观看亚洲视频 | 91蝌蚪在线观看 | 日本免费一二区 | 女人下面无遮挡 | 美女擦边视频 | 天天看a | 狠狠丁香 | 欧美 变态 另类 人妖 | 婷婷综合网 | 日本在线小视频 | 香蕉蜜桃视频 | 亚洲av激情无码专区在线播放 | 农村老熟妇乱子伦视频 | 国产亚洲一区二区不卡 | 国产精品高潮视频 | 日韩视频h | 影音先锋美女 | 成人瑟瑟 | 小罗莉极品一线天在线 | 午夜影院免费在线观看 | 日韩www视频| 色爽交| 亚洲AV无码一区二区三区蜜桃 | 蜜桃视频久久一区免费观看入口 | 欧美日韩国产精品一区二区三区 | 日韩欧美视频在线播放 | 午夜黄色网 | 欧美区一区二区三 | 亚洲成a人v | 少妇一级淫片免费播放 | 91网站视频在线观看 | 欧美人体做爰大胆视频 | 亚洲射射 | 伦av综合一区 | 91看视频| 免费黄色看片 | 欧美性生交xxxxxdddd | 日韩欧美亚洲国产精品字幕久久久 | av黄在线 | 在线视频精品一区 | 欧美 日韩 国产 一区二区三区 | 久草av在线播放 | 国产av第一区 | 久久国产美女 | 国产在线视频一区二区三区 | 亚洲高清影院 | 伊人tv | 黄色精品视频 | av影片在线 | 97在线视频免费 | 少妇搡bbbb搡bbb搡澳门 | 这里只有精品6 | 国内毛片视频 | 成人av电影免费观看 | 在线观看欧美国产 | 青青草.com| 免费黄色在线视频 | 自拍偷拍精品视频 | 99久久婷婷国产综合精品草原 | 成人av在线电影 | 污污污www精品国产网站 | 天天看夜夜爽 | 免费国产精品视频 | 午夜精品无码一区二区三区 | 粉色视频网站 | 日韩精品一区二区av | 东方av在线免费观看 | 人av在线| 日韩欧美一区二区一幕 | 人人射人人射 | 一区二区三区中文字幕在线观看 | 精品国产免费av | 日韩欧美一区二区三区久久婷婷 | 久一区二区三区 | 成人黄色电影在线 | 四虎4hu永久免费网站影院 | 亚洲精品视频在线观看免费视频 | 最新日韩三级 | 一级免费看 | 高清av不卡 | 小泽玛利亚一区二区三区 | 亚洲综合在线视频 | a级一a一级在线观看 | 国产1区2区3区中文字幕 | 欧美亚洲国产精品 | 一区二区三区国产视频 | 九九精品网 | 国产伦精品一区二区三区免费 | 国产欧美三级 | 青娱乐最新视频 | 神马一区二区三区 | 日本免费高清一区二区 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 日韩色小说| 精品亚洲一区二区三区 | 2018av在线| 日本久久高清视频 |