杭电计算机组成原理实验RISC-V 实验 取指令及指令译码实验
这里写目录标题
- 一、实验目的与要求
- 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 实验 取指令及指令译码实验相关推荐
- 杭电 2016 计算机组成原理,杭电计算机组成原理多功能ALU设计实验
<杭电计算机组成原理多功能ALU设计实验>由会员分享,可在线阅读,更多相关<杭电计算机组成原理多功能ALU设计实验(6页珍藏版)>请在人人文库网上搜索. 1.杭州电子科技大学计 ...
- 2015年杭电计算机存储器扩展,杭电计算机组成原理存储器设计实验5
<杭电计算机组成原理存储器设计实验5>由会员分享,可在线阅读,更多相关<杭电计算机组成原理存储器设计实验5(4页珍藏版)>请在人人文库网上搜索. 1.杭州电子科技大学计算机学院 ...
- 杭电 2016 计算机组成原理,杭电计算机组成原理寄存器堆设计实验4.doc
杭州电子科技大学计算机学院 实验报告 课程名称:计算机组成原理 实验项目:寄存器堆设计实验 指导教师 实验位置: 姓 班 级: 学 号: 日 期:2015年5月7日 实验目的学习和使用Verlilog ...
- 杭电计算机组成原理实验九R-I,杭电计组实验9-实现R-I型指令的CPU设计实验.doc
*** *** 实验报告 2018 年 6 月 1 日 成绩: 姓名 阳光男 学号班级专业 计算机科学与技术 课程名称 <计算机组成原理与系统结构 试验> 任课老 师 张翔老师 指导老 师 ...
- 杭电计算机组成原理教材答案,杭电计算机组成原理包建课后作业答案详解.doc...
<运算器> P61 3.3写出下列各数的原码.反码和补码,机器数长度为8位: 真值 二进制真值 原码 反码 补码 (1)0 0000000 0,0000000 0,0000000 0,00 ...
- 杭电计算机考研(初试+复试)经验分享
GitHub: KolinHuang 个人博客:KolHuang Blog 欢迎交流- 写在前头 离复试结束已经快半个月了,现在才想起来写这么一篇经验贴,供广大考研人参考参考- 本人报考的是杭州电子科 ...
- 2011---2013年杭电计算机历年研究生复试---笔试编程
1.输入三个正整数A.B.C(0<A.B.C<1000),判断这三个数能不能构成一个三角形. 转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/a ...
- 2019杭电计算机考研经验贴(初试+复试)
为期一年的杭电考研之旅结束啦!一年的付出总算没有白费,顺利上岸,进入杭电脑机交互实验室.今天和导师签了双选表,现在在回学校的高铁上,想着写一份经验贴,为下一届考研的学弟学妹们留下点东西. 一.初试 杭 ...
- 杭电计算机考研失败,2020杭电计算机考研感想
初试 本科是普通二本电子专业,因为本科期间做过几个比赛,拿过几个奖所以考研前一直对自己很有信心,非211不读,不是985往后考虑.但是!我从3月份开始准备的,随着学习越来越发现考研其实和自己平时比赛实 ...
- 杭电考研计算机专业课_2019杭电计算机考研初试科目、参考书目、报录比汇总...
原标题:2019杭电计算机考研初试科目.参考书目.报录比汇总 本文将由新祥旭徐老师全方位的对杭电计算机.软件工程专业考研进行解析,主要有以下几个板块:学院介绍,专业情况介绍,2019录取情况分析,考研 ...
最新文章
- roaringbitmap java,BitMap、RoaringBitmap与JavaEWAH
- C#和.Ne学习第五天
- ActiveMQ –经纪人网络解释–第3部分
- 20年,只有谷歌曾经不同
- 在家用计算机相亲,和相亲男吃完饭后,他默默打开了计算器
- ExtJS视频学习笔记
- CvtColor(转)
- kibana的query string syntax 笔记
- MESSAGE消息发送失败
- 想起一则急着争权的故事
- 使用SQL语句创建数据库
- 例题:最高响应比优先调度算法
- 常用win10优化工具(后续继续更新)
- 怎么把两个pdf合并成一个?pdf合并方法
- FPGA虚拟化:突破次元壁的技术
- 五段动词连用形的音变浊化
- Pytorch autograd.grad与autograd.backward详解
- matlab——红绿灯颜色及数字识别(二)
- 绝地求生——PUBG吃鸡游戏模糊,画质很差
- 【保姆级·创建对象】如何通过Supplier创建对象
热门文章
- word 项目符号(或称之为无序编号),默认,可以采用星号加空格方式实现。
- JAVA串口通信开发
- 在CentOS上重新编译nginx,加sticky模块
- MT7620a openwrt 支持32M、16M、 8M SPI flash
- pyspark 读mysql数据_spark读mysql数据
- 基于微博平台的python爬虫数据采集
- idea 提示Expecting newline or semicolon解决办法
- 计算机网络中常用的互联设备,计算机网络的互联技术
- html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
- python爬虫 提取豆瓣Top250电影信息