计算机组成原理——寄存器堆
MIPS有个32寄存器,每个寄存器32位
由display编写可知input_sel控制输入情况
input_sel=
00:读地址1,01:读地址2
10:写地址,11写数据
读寄存器不需要时钟控制,但写寄存器需时钟控制。
声明模块的时候,输入一定是wire型变量,输出可以是wire也可以是reg
目录
- regfilg.v
- regfile_display
- tb.v
regfilg.v
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2021/10/05 15:22:20
// Design Name:
// Module Name: regfile
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module regfile(input clk,input wen,//写使能input [4 :0] raddr1,//读操作input [4 :0] raddr2,output reg[31:0] rdata1,output reg[31:0] rdata2,input [4 :0] waddr,//写操作input [31:0] wdata,input [4 :0] test_addr,output reg[31:0] test_data);//实验要求,读寄存器不需要时钟控制,写需要
reg [31:0] memory[31:0];
integer i;
initial beginfor(i=0;i<=31;i=i+1)beginmemory[i]=0;end
end
always@(*)
beginrdata1<=memory[raddr1];
end
always@(*)beginrdata2<=memory[raddr2]; end
always@(*)
begintest_data<=memory[test_addr];
endalways@(posedge clk)beginif(wen==1)beginmemory[waddr]<=wdata;end endendmodule
regfile_display
//*************************************************************************
// > 文件名: regfile_display.v
// > 描述 :寄存器堆显示模块,调用FPGA板上的IO接口和触摸屏
// > 作者 : LOONGSON
// > 日期 : 2016-04-14
//*************************************************************************
module regfile_display(//时钟与复位信号input clk,input resetn, //后缀"n"代表低电平有效//拨码开关,用于产生写使能和选择输入数input wen,input [1:0] input_sel,//led灯,用于指示写使能信号,和正在输入什么数据output led_wen,output led_waddr, //指示输入写地址output led_wdata, //指示输入写数据output led_raddr1, //指示输入读地址1output led_raddr2, //指示输入读地址2//触摸屏相关接口,不需要更改output lcd_rst,output lcd_cs,output lcd_rs,output lcd_wr,output lcd_rd,inout[15:0] lcd_data_io,output lcd_bl_ctr,inout ct_int,inout ct_sda,output ct_scl,output ct_rstn
);
//-----{LED显示}beginassign led_wen = wen;assign led_raddr1 = (input_sel==2'd0);assign led_raddr2 = (input_sel==2'd1);assign led_waddr = (input_sel==2'd2);assign led_wdata = (input_sel==2'd3);
//-----{LED显示}end//-----{调用寄存器堆模块}begin//寄存器堆多增加一个读端口,用于在触摸屏上显示32个寄存器值wire [31:0] test_data; wire [4 :0] test_addr;reg [4 :0] raddr1;reg [4 :0] raddr2;reg [4 :0] waddr;reg [31:0] wdata;wire [31:0] rdata1;wire [31:0] rdata2;regfile rf_module(.clk (clk ),.wen (wen ),.raddr1(raddr1),.raddr2(raddr2),.waddr (waddr ),.wdata (wdata ),.rdata1(rdata1),.rdata2(rdata2),.test_addr(test_addr),.test_data(test_data));
//-----{调用寄存器堆模块}end//---------------------{调用触摸屏模块}begin--------------------//
//-----{实例化触摸屏}begin
//此小节不需要更改reg display_valid;reg [39:0] display_name;reg [31:0] display_value;wire [5 :0] display_number;wire input_valid;wire [31:0] input_value;lcd_module lcd_module(.clk (clk ), //10Mhz.resetn (resetn ),//调用触摸屏的接口.display_valid (display_valid ),.display_name (display_name ),.display_value (display_value ),.display_number (display_number),.input_valid (input_valid ),.input_value (input_value ),//lcd触摸屏相关接口,不需要更改.lcd_rst (lcd_rst ),.lcd_cs (lcd_cs ),.lcd_rs (lcd_rs ),.lcd_wr (lcd_wr ),.lcd_rd (lcd_rd ),.lcd_data_io (lcd_data_io ),.lcd_bl_ctr (lcd_bl_ctr ),.ct_int (ct_int ),.ct_sda (ct_sda ),.ct_scl (ct_scl ),.ct_rstn (ct_rstn ));
//-----{实例化触摸屏}end//-----{从触摸屏获取输入}begin
//根据实际需要输入的数修改此小节,
//建议对每一个数的输入,编写单独一个always块//32个寄存器显示在7~38号的显示块,故读地址为(display_number-1)assign test_addr = display_number-5'd7; //当input_sel为2'b00时,表示输入数为读地址1,即raddr1always @(posedge clk)beginif (!resetn)beginraddr1 <= 5'd0;endelse if (input_valid && input_sel==2'd0)beginraddr1 <= input_value[4:0];endend//当input_sel为2'b01时,表示输入数为读地址2,即raddr2always @(posedge clk)beginif (!resetn)beginraddr2 <= 5'd0;endelse if (input_valid && input_sel==2'd1)beginraddr2 <= input_value[4:0];endend//当input_sel为2'b10时,表示输入数为写地址,即waddralways @(posedge clk)beginif (!resetn)beginwaddr <= 5'd0;endelse if (input_valid && input_sel==2'd2)beginwaddr <= input_value[4:0];endend//当input_sel为2'b11时,表示输入数为写数据,即wdataalways @(posedge clk)beginif (!resetn)beginwdata <= 32'd0;endelse if (input_valid && input_sel==2'd3)beginwdata <= input_value; endend
//-----{从触摸屏获取输入}end//-----{输出到触摸屏显示}begin
//根据需要显示的数修改此小节,
//触摸屏上共有44块显示区域,可显示44组32位数据
//44块显示区域从1开始编号,编号为1~44,always @(posedge clk)beginif (display_number >6'd6 && display_number <6'd39 )begin //块号7~38显示32个通用寄存器的值display_valid <= 1'b1;display_name[39:16] <= "REG";display_name[15: 8] <= {4'b0011,3'b000,test_addr[4]};display_name[7 : 0] <= {4'b0011,test_addr[3:0]}; display_value <= test_data;endelsebegincase(display_number)6'd1 : //显示读端口1的地址begindisplay_valid <= 1'b1;display_name <= "RADD1";display_value <= raddr1;end6'd2 : //显示读端口1读出的数据begindisplay_valid <= 1'b1;display_name <= "RDAT1";display_value <= rdata1;end6'd3 : //显示读端口2的地址begindisplay_valid <= 1'b1;display_name <= "RADD2";display_value <= raddr2;end6'd4 : //显示读端口2读出的数据begindisplay_valid <= 1'b1;display_name <= "RDAT2";display_value <= rdata2;end6'd5 : //显示写端口的地址begindisplay_valid <= 1'b1;display_name <= "WADDR";display_value <= waddr;end6'd6 : //显示写端口写入的数据begindisplay_valid <= 1'b1;display_name <= "WDATA";display_value <= wdata;enddefault :begindisplay_valid <= 1'b0;display_name <= 40'd0;display_value <= 32'd0;endendcaseendend
//-----{输出到触摸屏显示}end
//----------------------{调用触摸屏模块}end---------------------//
endmodule
tb.v
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2021/10/05 22:19:41
// Design Name:
// Module Name: tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module tb;//inputsreg clk;reg wen;//写使能reg [4 :0] raddr1;//读操作,读地址reg [4 :0] raddr2;reg [4 :0] waddr;reg [31:0] wdata;reg [4 :0] test_addr;//outputswire [31:0] rdata1;//读出数据wire [31:0] rdata2; wire [31:0] test_data;regfile uut (//调用regfile模块,自定义名字uut.clk (clk ),.wen (wen ),.raddr1(raddr1),.raddr2(raddr2),.waddr (waddr ),.wdata (wdata ),.rdata1(rdata1),.rdata2(rdata2),.test_addr(test_addr),.test_data(test_data));initial beginclk = 0;wen=0;raddr1=0;raddr2=0;waddr=0;wdata=0;test_addr=0;#100;wen=1;waddr=1'H1;wdata=32'H00001111;#200;wen=0;raddr1=1'H1;#400;endalways #5 clk = ~clk;endmodule
计算机组成原理——寄存器堆相关推荐
- 杭电 2016 计算机组成原理,杭电计算机组成原理寄存器堆设计实验4.doc
杭州电子科技大学计算机学院 实验报告 课程名称:计算机组成原理 实验项目:寄存器堆设计实验 指导教师 实验位置: 姓 班 级: 学 号: 日 期:2015年5月7日 实验目的学习和使用Verlilog ...
- 计算机组成原理寄存器的实验原理,计算机组成原理实验报告_寄存器的原理及操作课案.docx...
<计算机组成原理实验报告_寄存器的原理及操作课案.docx>由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关<计算机组成原理实验报告_寄存器的原理及操作课案.d ...
- 计算机组成原理 寄存器实验详解(含工程文件)
寄存器实验 实验要求 分析 设计 具体实现 (一)验证寄存器写操作 (二)验证寄存器读操作 (三)移位操作 (四)循环移位操作 思考问题 寄存器实验 先放一张 Proteus 总体仿真图,设计过程还是 ...
- 寄存器堆计算机组成实验,《计算机组成原理》实验报告——寄存器堆
资料简介 南通大学信息科学技术学院 <计算机组成实验> 实验报告 实验名称 寄存器堆的设计与实现 班级 物联网工程 192 学生姓名 谢焘 学号 1930110689 指导教师 成耀 日 ...
- 计算机组成原理实验——寄存器堆实现
这次要做的是用Verilog代码写一个寄存器堆,此寄存器堆共有32个寄存器,每个寄存器可存储32个二进制位.要求有一个写端口,两个读端口,本次实验设计为异步读同步写的寄存器堆,即读寄存器不需要时钟控制 ...
- 计算机组成原理R0bus是什么,计算机组成原理实验 堆栈寄存器实验
计算机组成原理实验报告 实验三:堆栈寄存器实验 一. 实验目的 1.熟悉堆栈概念. 2.熟悉堆栈寄存器的组成和硬件电路. 二.实验要求 完成3个对战寄存器的数据写入与读出. 三.实验原理 由三片8为字 ...
- 计算机组成原理swbus,计算机组成原理实验 2.1 总线与寄存器 赖晓铮.ppt
文档介绍: 计算机组成原理实验系列一.总线与寄存器二.进位加法器三.比较器(仲裁器)四.计数器五.运算器六.存储器七.时序发生器八.微程序控制器九.硬布线控制器赖晓铮博士华南理工大学******@sc ...
- 计算机组成原理指令系统的设计,计算机组成原理课程设计-指令系统及专用寄存器设计...
东北大学秦皇岛分校东北大学秦皇岛分校 计算机与通信工程学院计算机与通信工程学院 计算机组成原理计算机组成原理课程设计课程设计 指令系统及专用寄存器设计指令系统及专用寄存器设计 专业名称 计 算 机 科 ...
- 计算机组成原理实验写入怎么,计算机组成原理实验报告_寄存器的原理及操作...
<计算机组成原理实验报告_寄存器的原理及操作>由会员分享,可在线阅读,更多相关<计算机组成原理实验报告_寄存器的原理及操作(10页珍藏版)>请在人人文库网上搜索. 1.成绩:实 ...
最新文章
- [CentOS] CentOS 使用yum安装 php,mysql, apache
- Windows SDK 非模态对话框的消息处理
- os.popen read()报编码错误_偶遇OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
- HTML 5入门学习,源码中全部使用HTML 5标签
- OpenCV+yolov2-tiny实现目标检测(C++)
- Some Essential JavaScript Questions And Answers(5)
- bash shell数组模拟队列queue和shell数组使用技巧
- lisp语言画阿基米德线_中国油画艺术表达着艺术家思想情感,而且展现了油画语言独特之美...
- oracle11gasm,oracle11gASM管理
- 一朵云重50万公斤,为什么掉不下来?
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据...
- DALSA相机平场校正步骤
- Python数据处理(一):处理 JSON、XML、CSV 三种格式数据
- 关于MSDTC - 与基础事务管理器的通信失败 错误解决的小备忘
- 文本文档html乱码,文本文档乱码怎么办?电脑文本文档乱码解决方法
- 第一个动态网页——留言板
- 在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)
- Android6.0 Qualcomm Atheros QCA6174A WiFi Model Support
- 流程图、数据关系绘图神器yEd
- 黄河小浪底调水调沙问题(mathmatica)
热门文章
- trans-resistor(转换电阻),后来缩写为transistor,中文译名就是晶体管。trans词根.变形金刚,变压器都是transformers
- 上接星辰,下抵炊烟:一颗中国AI定海针的故事
- NWT内斗纪录:管理的两个荒唐错误
- 记录一下Mac查看以‘.’点开头的文件夹
- floyd算法:我们真的明白floyd吗?
- 如何让Typora做出Word、Pdf的感觉
- HUAWEI+Eudemon1000E+防火墙+典型配置案例
- 阿里云解决方案架构师张平:云原生数字化安全生产的体系建设
- AD域角色转换:将辅域控制器升级为主域控制器
- ssh连接远程服务器自动输入密码