这里写目录标题

  • 一、实验目的与要求
    • 1、 实验目的:
      • a) 掌握指令存储器、PC与IR的设计方法
      • b) 掌握CPU取指令操作与指令译码的方法和过程,掌握指令译码器的设计方法
      • c) 理解RISC-V立即数的生成与扩展方法,掌握立即数拼接与扩展器的设计
    • 2、 实验要求:
  • 二、实验设计与程序代码
    • 1、 模块设计说明
  • 三、实验仿真
    • 1、 仿真代码
  • 六、思考与探索
    • 1、 实验结果记录:
    • 2、 实验结论:
    • 3、 问题与解决方案:
    • 4、 思考题:
      • a) 先读的是0号单元的数据,因为是先取数据再PC+4
      • b) 可以
      • c) 可能出现抖动,所以需要按的更慢点
      • d) 学习了很多,获得了很多

一、实验目的与要求

1、 实验目的:

a) 掌握指令存储器、PC与IR的设计方法

b) 掌握CPU取指令操作与指令译码的方法和过程,掌握指令译码器的设计方法

c) 理解RISC-V立即数的生成与扩展方法,掌握立即数拼接与扩展器的设计

2、 实验要求:

首先设计一个64 X 32位的只读存储器作为指令存储器;然后设计程序计数器PC和指令存储器IR,实现取指令操作,设计一个指令译码器和一个立即数拼接与扩展器,完成指令译码操作。

二、实验设计与程序代码

1、 模块设计说明

(描述整个实验的设计方案,分几个模块,各模块的功能,各模块之间的连接关系,可附图)

2、 实验程序源代码及注释等
(实验各个模块的代码,包含功能注释)

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:    00:13:16 05/25/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 Ir_Write,input PC_Write,input clk_im,input clk_n,input clk_25M,output [4:0] rs1,rs2,rd,output [3:0] AN,output [7:0] seg,output [6:0] opcode,output [2:0] funct3,output [6:0] funct7);wire [31:0] IR;wire [31:0] inst;wire [31:0] imm32;wire [31:0] PC;Get_Order myGet_Order(Ir_Write,PC_Write,IR,clk_im,clk_n,PC,inst);IDI myIDI(inst,rs1,rs2,rd,imm32,opcode,funct3,funct7);ShowNum myShowNum(clk_25M,imm32,seg,AN);//这个模块主要是相关数据显示模块IM myIM(clk_im,PC[7:2],IR);endmodulemodule Get_Order(input IR_Write,input PC_Write,input [31:0] IR,input clk_im,input clk_n,output reg [31:0] PC,output reg [31:0] inst);initialbeginPC=0;endalways@(posedge clk_im or posedge clk_n)beginif(IR_Write==1)begininst<=IR;PC<=PC+4;endelse if(clk_n==1)beginPC<=0;endendendmodulemodule IDI(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'b0010011: I_fmt=6'b1000000;//I17'b0000011: I_fmt=6'b1000000;//I27'b0100011: I_fmt=6'b0100000;//S7'b1100011: I_fmt=6'b0010000;//B7'b0110111: I_fmt=6'b0001000;//U7'b0010111: I_fmt=6'b0001000;//U7'b1101111: I_fmt=6'b0000100;//J17'b1100111: I_fmt=6'b0000100;//J27'b0110011: I_fmt=6'b0000010;//Rdefault: I_fmt=0;endcasecase(I_fmt)6'b0000010: imm32=0;6'b1000000: imm32={{20{inst[31]}},inst[31:20]};//I1.I26'b1000000: imm32={{20{inst[31]}},inst[31:25],inst[11:7]};//S6'b0010000: imm32={{20{inst[31]}},inst[7],inst[30:25],inst[11:8],1'b0};//B6'b0001000: imm32={inst[31:12],{12{1'b0}}};//U6'b0000100: imm32={{12{inst[31]}},inst[19:12],inst[20],inst[30:21],1'b0};//J1,I2default: imm32=0;endcaseendendmodulemodule ShowNum(//数码管模块用于显示数据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

三、实验仿真

1、 仿真代码

(含仿真源代码、仿真验证方案)

`timescale 1ns / 1ps// Company:
// Engineer:
//
// Create Date:   00:21:34 06/03/2021
// Design Name:   main
// Module Name:   D:/ShuZiDianLu/example/PCIR/test.v
// Project Name:  PCIR
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: main
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// module test;// Inputsreg Ir_Write;reg PC_Write;reg clk_im;reg clk_n;reg clk_25M;// Outputswire [4:0] rs1;wire [4:0] rs2;wire [4:0] rd;wire [3:0] AN;wire [7:0] seg;wire [6:0] opcode;wire [2:0] funct3;wire [6:0] funct7;// Instantiate the Unit Under Test (UUT)main uut (.Ir_Write(Ir_Write), .PC_Write(PC_Write), .clk_im(clk_im), .clk_n(clk_n), .clk_25M(clk_25M), .rs1(rs1), .rs2(rs2), .rd(rd), .AN(AN), .seg(seg), .opcode(opcode), .funct3(funct3), .funct7(funct7));initial begin// Initialize InputsIr_Write = 0;PC_Write = 0;clk_im = 0;clk_n = 0;clk_25M = 0;// Wait 100 ns for global reset to finish#100;// Add stimulus hereIr_Write=1;PC_Write=1;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;#100clk_im = 1;#20clk_im = 0;endinitial beginforever #1 clk_25M=~clk_25M;   endendmodule

2、 仿真波形
(运行仿真时,波形截图)

3、 仿真结果分析
(对仿真波形进行分析)
符合要求

四、电路图
(开发工具中显示的电路模块图)

五、引脚配置
(引脚约束文件的内容,描述主要配置情况)

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[0]" LOC = J21;
NET "seg[1]" LOC = H22;NET "AN[3]" IOSTANDARD = LVCMOS18;
NET "AN[2]" IOSTANDARD = LVCMOS18;
NET "AN[1]" IOSTANDARD = LVCMOS18;
NET "AN[0]" IOSTANDARD = LVCMOS18;
NET "funct3[2]" IOSTANDARD = LVCMOS18;
NET "funct3[1]" IOSTANDARD = LVCMOS18;
NET "funct3[0]" IOSTANDARD = LVCMOS18;
NET "funct7[6]" IOSTANDARD = LVCMOS18;
NET "funct7[5]" IOSTANDARD = LVCMOS18;
NET "funct7[4]" IOSTANDARD = LVCMOS18;
NET "funct7[3]" IOSTANDARD = LVCMOS18;
NET "funct7[2]" IOSTANDARD = LVCMOS18;
NET "funct7[1]" IOSTANDARD = LVCMOS18;
NET "funct7[0]" IOSTANDARD = LVCMOS18;
NET "opcode[6]" IOSTANDARD = LVCMOS18;
NET "opcode[5]" IOSTANDARD = LVCMOS18;
NET "opcode[4]" IOSTANDARD = LVCMOS18;
NET "opcode[3]" IOSTANDARD = LVCMOS18;
NET "opcode[2]" IOSTANDARD = LVCMOS18;
NET "opcode[1]" IOSTANDARD = LVCMOS18;
NET "opcode[0]" IOSTANDARD = LVCMOS18;
NET "rd[4]" IOSTANDARD = LVCMOS18;
NET "rd[3]" IOSTANDARD = LVCMOS18;
NET "rd[2]" IOSTANDARD = LVCMOS18;
NET "rd[1]" IOSTANDARD = LVCMOS18;
NET "rd[0]" IOSTANDARD = LVCMOS18;
NET "rs1[4]" IOSTANDARD = LVCMOS18;
NET "rs1[3]" IOSTANDARD = LVCMOS18;
NET "rs1[2]" IOSTANDARD = LVCMOS18;
NET "rs1[1]" IOSTANDARD = LVCMOS18;
NET "rs1[0]" IOSTANDARD = LVCMOS18;
NET "rs2[4]" IOSTANDARD = LVCMOS18;
NET "rs2[3]" IOSTANDARD = LVCMOS18;
NET "rs2[2]" IOSTANDARD = LVCMOS18;
NET "rs2[1]" IOSTANDARD = LVCMOS18;
NET "rs2[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 "clk_im" IOSTANDARD = LVCMOS18;
NET "clk_n" IOSTANDARD = LVCMOS18;
NET "clk_25M" IOSTANDARD = LVCMOS18;
NET "Ir_Write" IOSTANDARD = LVCMOS18;
NET "PC_Write" IOSTANDARD = LVCMOS18;NET "clk_25M" LOC = H4;
NET "clk_im" LOC = R4;
NET "clk_n" LOC = AA4;
NET "Ir_Write" LOC = T3;
NET "PC_Write" LOC = U3;NET "clk_25M" PULLDOWN;
NET "clk_im" PULLDOWN;
NET "Ir_Write" PULLDOWN;
NET "clk_n" PULLDOWN;
NET "PC_Write" PULLDOWN;#PlanAhead Generated physical constraints NET "opcode[0]" LOC = J4;
NET "opcode[1]" LOC = L4;
NET "opcode[2]" LOC = N4;
NET "opcode[3]" LOC = H3;
NET "opcode[4]" LOC = K3;
NET "opcode[5]" LOC = M3;
NET "opcode[6]" LOC = N3;
NET "rd[0]" LOC = B2;
NET "rd[1]" LOC = B1;
NET "rd[2]" LOC = D1;
NET "rd[3]" LOC = E2;
NET "rd[4]" LOC = F1;
NET "funct3[0]" LOC = G2;
NET "funct3[1]" LOC = H2;
NET "funct3[2]" LOC = J1;
NET "rs1[0]" LOC = K1;
NET "rs1[1]" LOC = G4;
NET "rs1[3]" LOC = G3;
NET "rs1[4]" LOC = L3;
NET "rs1[2]" LOC = K4;
NET "rs2[0]" LOC = A1;
NET "rs2[1]" LOC = D2;
NET "rs2[2]" LOC = E1;
NET "rs2[3]" LOC = G1;
NET "rs2[4]" LOC = J2;
NET "funct7[0]" LOC = L1;
NET "funct7[1]" LOC = M2;
NET "funct7[2]" LOC = M1;
NET "funct7[3]" LOC = N2;
NET "funct7[4]" LOC = P1;
NET "funct7[5]" LOC = P2;
NET "funct7[6]" LOC = R1;

六、思考与探索

1、 实验结果记录:

(实验操作的过程及结果记录)
实验6实验结果记录表
PC IR COE文件中指令代码 汇编指令 立即数imm32 解析字段是否正确
00000000 000002b3 000002b3 add 00000000 对
00000004 00000333 00000333 add 00000000 对
00000008 00a00393 00a00393 li 0000000A 对
000000C 04032e03 04032e03 lw 00000040 对
00000010 01c282b3 01c282b3 add 00000000 对
00000014 00430313 00430313 addi 00000004 对

2、 实验结论:

(分析实验结果,给出实验结论)
实验符合要求

3、 问题与解决方案:

(整个实验过程中发生了什么问题?你是如何解决的。)
问题存在但已经解决

4、 思考题:

a) 先读的是0号单元的数据,因为是先取数据再PC+4

b) 可以

c) 可能出现抖动,所以需要按的更慢点

d) 学习了很多,获得了很多

杭电计算机组成原理实验RISC-V 实验 取指令及指令译码实验相关推荐

  1. 杭电 2016 计算机组成原理,杭电计算机组成原理多功能ALU设计实验

    <杭电计算机组成原理多功能ALU设计实验>由会员分享,可在线阅读,更多相关<杭电计算机组成原理多功能ALU设计实验(6页珍藏版)>请在人人文库网上搜索. 1.杭州电子科技大学计 ...

  2. 2015年杭电计算机存储器扩展,杭电计算机组成原理存储器设计实验5

    <杭电计算机组成原理存储器设计实验5>由会员分享,可在线阅读,更多相关<杭电计算机组成原理存储器设计实验5(4页珍藏版)>请在人人文库网上搜索. 1.杭州电子科技大学计算机学院 ...

  3. 杭电 2016 计算机组成原理,杭电计算机组成原理寄存器堆设计实验4.doc

    杭州电子科技大学计算机学院 实验报告 课程名称:计算机组成原理 实验项目:寄存器堆设计实验 指导教师 实验位置: 姓 班 级: 学 号: 日 期:2015年5月7日 实验目的学习和使用Verlilog ...

  4. 杭电计算机组成原理实验九R-I,杭电计组实验9-实现R-I型指令的CPU设计实验.doc

    *** *** 实验报告 2018 年 6 月 1 日 成绩: 姓名 阳光男 学号班级专业 计算机科学与技术 课程名称 <计算机组成原理与系统结构 试验> 任课老 师 张翔老师 指导老 师 ...

  5. 杭电计算机组成原理教材答案,杭电计算机组成原理包建课后作业答案详解.doc...

    <运算器> P61 3.3写出下列各数的原码.反码和补码,机器数长度为8位: 真值 二进制真值 原码 反码 补码 (1)0 0000000 0,0000000 0,0000000 0,00 ...

  6. 杭电计算机考研(初试+复试)经验分享

    GitHub: KolinHuang 个人博客:KolHuang Blog 欢迎交流- 写在前头 离复试结束已经快半个月了,现在才想起来写这么一篇经验贴,供广大考研人参考参考- 本人报考的是杭州电子科 ...

  7. 2011---2013年杭电计算机历年研究生复试---笔试编程

    1.输入三个正整数A.B.C(0<A.B.C<1000),判断这三个数能不能构成一个三角形. 转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/a ...

  8. 2019杭电计算机考研经验贴(初试+复试)

    为期一年的杭电考研之旅结束啦!一年的付出总算没有白费,顺利上岸,进入杭电脑机交互实验室.今天和导师签了双选表,现在在回学校的高铁上,想着写一份经验贴,为下一届考研的学弟学妹们留下点东西. 一.初试 杭 ...

  9. 杭电计算机考研失败,2020杭电计算机考研感想

    初试 本科是普通二本电子专业,因为本科期间做过几个比赛,拿过几个奖所以考研前一直对自己很有信心,非211不读,不是985往后考虑.但是!我从3月份开始准备的,随着学习越来越发现考研其实和自己平时比赛实 ...

  10. 杭电考研计算机专业课_2019杭电计算机考研初试科目、参考书目、报录比汇总...

    原标题:2019杭电计算机考研初试科目.参考书目.报录比汇总 本文将由新祥旭徐老师全方位的对杭电计算机.软件工程专业考研进行解析,主要有以下几个板块:学院介绍,专业情况介绍,2019录取情况分析,考研 ...

最新文章

  1. roaringbitmap java,BitMap、RoaringBitmap与JavaEWAH
  2. C#和.Ne学习第五天
  3. ActiveMQ –经纪人网络解释–第3部分
  4. 20年,只有谷歌曾经不同
  5. 在家用计算机相亲,和相亲男吃完饭后,他默默打开了计算器
  6. ExtJS视频学习笔记
  7. CvtColor(转)
  8. kibana的query string syntax 笔记
  9. MESSAGE消息发送失败
  10. 想起一则急着争权的故事
  11. 使用SQL语句创建数据库
  12. 例题:最高响应比优先调度算法
  13. 常用win10优化工具(后续继续更新)
  14. 怎么把两个pdf合并成一个?pdf合并方法
  15. FPGA虚拟化:突破次元壁的技术
  16. 五段动词连用形的音变浊化
  17. Pytorch autograd.grad与autograd.backward详解
  18. matlab——红绿灯颜色及数字识别(二)
  19. 绝地求生——PUBG吃鸡游戏模糊,画质很差
  20. 【保姆级·创建对象】如何通过Supplier创建对象

热门文章

  1. word 项目符号(或称之为无序编号),默认,可以采用星号加空格方式实现。
  2. JAVA串口通信开发
  3. 在CentOS上重新编译nginx,加sticky模块
  4. MT7620a openwrt 支持32M、16M、 8M SPI flash
  5. pyspark 读mysql数据_spark读mysql数据
  6. 基于微博平台的python爬虫数据采集
  7. idea 提示Expecting newline or semicolon解决办法
  8. 计算机网络中常用的互联设备,计算机网络的互联技术
  9. html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
  10. python爬虫 提取豆瓣Top250电影信息