精华内容
下载资源
问答
  • 2读1写通用寄存器堆设计实现 文章目录2读1写通用寄存器堆设计实现一、接口设计二、接口结构三、设计实现 一、接口设计 寄存器堆数量32个,采用二维数组实现,读和写有可能同时发生,其中0号寄存器为常0(无论写什么...

    2读1写通用寄存器堆设计实现


    一、接口设计

    寄存器堆数量32个,存储数据位宽为32bit,采用二维数组实现,读和写有可能同时发生,其中0号寄存器为常0(无论写什么数据,寄存器值都为0)

    在这里插入图片描述

    二、接口结构

    在这里插入图片描述

    三、设计实现

    <

    //-------------------------
    //File Name:datapath.v
    //Designer:Liang Genyuan
    //-------------------------
    module mem_block(
    						clk,
    						nrst,
    						stall,
    						ren,
    						raddr1,
    						raddr2,
    						wen,
    						waddr,
    						wdata,
    						rs1,
    						rs2);
    input  clk;
    input  nrst;
    input  stall;
    input  ren;
    input  [4:0]raddr1;
    input  [4:0]raddr2;
    input  wen;
    input  [4:0]waddr;
    input  [31:0]wdata;
    output [31:0]rs1;
    output [31:0]rs2;
    
    reg [31:0] mem [31:0];
    reg wen_reg;
    reg waddr_reg;
    reg ren_reg;
    reg raddr1_reg;
    reg raddr2_reg;
    reg [31:0]rs1;
    reg [31:0]rs2;
    integer i;
    
    always@(posedge clk or negedge nrst)begin
    	if(!nrst)begin
    	wen_reg<=0;
    	waddr_reg<=0;
    	ren_reg<=0;
    	raddr1_reg<=0;
    	raddr2_reg<=0;
    	end
    	else begin
    	wen_reg<=wen;
    	waddr_reg<=waddr;
    	ren_reg<=ren;
    	raddr1_reg<=raddr1;
    	raddr2_reg<=raddr2;
    	end
    end
    
    always@(posedge clk or negedge nrst)begin
    	if(!nrst)begin
    	for(i=0;i<=31;i=i+1)
    	mem[i]<=32'b0;
    	end
    	else if(stall==0&&wen_reg==1)begin
    			mem[waddr_reg]<=wdata;
    	end
    	else begin
    	for(i=0;i<=31;i=i+1)
    		mem[i]<=mem[i];
    	end
    end
    
    always@(posedge clk or negedge nrst)begin
    	if(!nrst)begin
    	rs1<=0;
    	rs2<=0;
    	end
    	else if(ren==1)begin
    	rs1<=mem[raddr1_reg];
    	rs2<=mem[raddr2_reg];
    	end
    	else begin
    	rs1<=0;
    	rs2<=0;
    	end
    end
    
    
    endmodule
    	
    
    展开全文
  • 资料简介南通大学信息科学技术学院《计算机组成实验》实验报告实验名称 寄存器堆的设计与实现班级 物联网工程 192学生姓名 谢焘 学号 1930110689指导教师 成耀日 期 2021 年 5 月 30 日实验 寄存器堆的设计与实现一...

    资料简介

    南通大学信息科学技术学院

    《计算机组成实验》

    实验报告

    实验名称 寄存器堆的设计与实现

    班级 物联网工程 192

    学生姓名 谢焘 学号 1930110689

    指导教师 成耀

    日 期 2021 年 5 月 30 日

    实验 寄存器堆的设计与实现

    一、实验目的

    1.熟悉 Vivado 软件的使用方法。

    2.熟悉寄存器堆的功能。

    3.掌握自顶而下的硬件模块设计方法。

    4.掌握电路仿真测试方法,掌握仿真激励文件的编写,掌握仿真输出的分析方法。

    二、实验任务

    设计一个寄存器堆,满足两路输出一路输入的功能,并完成仿真测试。

    三、实验预习

    (1)实验电路原理及信号说明

    寄存器堆(REGFILE)是 CPU 组成的重要存储部件,也是数据通路中的重要部件,其主要功能

    是对数据进行存储。在本实验中将为 REGFILE 构建 32×32 的寄存器组,即共有 32 个寄存器,每个

    寄存器的位宽都是 32 位。32×32 的 REGFILE 逻辑结构如图所示:

    信号名 功能 位宽 类型

    Ra 寄存器 rs 输出端口地址 5 输入

    Rb 寄存器 rt 输出端口地址 5 输入

    Wr 数据写入的寄存器号 5 输入

    We 写使能信号 1 输入

    D 写入的数据 32 输入

    Qa A 端口的输出数据 32 输出

    Qb B 端口的输出数据 32 输出

    Clk 时钟信号 1 输入

    具体设计如下:

    通过带有 32 个带使能端的 D 触发器实现数据的存储,5-32 译码器实现地址与存储单元的连接选

    择,32 位 32 选 1 选择器来实现输出。

    (2)实验电路设计

    顶层文件:

    module REGFILE(Ra,Rb,D,Wr,We,Clk,Clrn,Qa,Qb);

    input [4:0]Ra,Rb,Wr;

    input [31:0]D;

    input We,Clk,Clrn;

    output [31:0]Qa,Qb;

    wire [31:0]Y;

    wire

    [31:0]Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q

    10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0;

    DEC5T32E dec(Wr,We,Y);

    REG32

    reg32(D,Y,Clk,Clrn,Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q

    13,Q12,Q11,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0);

    MUX32X32

    select1(Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q

    10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,Ra,Qa);

    MUX32X32

    select2(Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q

    10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,Rb,Qb);

    Endmodule

    5-32 地址译码器:

    module DEC5T32E(I,En,Y);

    input [4:0] I;

    input En;

    output [31:0] Y;

    reg [31:0] Y;

    always@(En or I)

    begin

    if(En)

    begin

    case(I)

    5'b00000:Y=32'b00000000000000000000000000000001;

    5'b00001:Y=32'b00000000000000000000000000000010;

    5'b00010:Y=32'b00000000000000000000000000000100;

    5'b00011:Y=32'b00000000000000000000000000001000;

    5'b00100:Y=32'b00000000000000000000000000010000;

    5'b00101:Y=32'b00000000000000000000000000100000;

    5'b00110:Y=32'b00000000000000000000000001000000;

    5'b00111:Y=32'b00000000000000000000000010000000;

    5'b01000:Y=32'b00000000000000000000000100000... 查看更多

    展开全文
  • 实验十寄存器及寄存器堆设计资料* * NET "clk" LOC= "T9"; NET "btn_in[0]" loc="E6"; NET "btn_in[1]" loc="D5"; NET "btn_in[2]" loc="C5"; NET "btn_in[3]" loc="D6"; NET "btn_in[4]" loc="C6"; NET "btn_in[5...

    实验十寄存器及寄存器堆设计资料

    * * NET "clk" LOC= "T9"; NET "btn_in[0]" loc="E6"; NET "btn_in[1]" loc="D5"; NET "btn_in[2]" loc="C5"; NET "btn_in[3]" loc="D6"; NET "btn_in[4]" loc="C6"; NET "btn_in[5]" loc="E7"; NET "btn_in[6]" loc="C7"; NET "btn_in[7]" loc="D7"; NET "btn_in[8]" loc="M13"; NET "btn_in[9]" loc="M14"; NET "btn_in[10]" loc="L13"; NET "btn_in[11]" loc="L14"; NET "switch[0]" LOC="F12"; NET "switch[1]" LOC="G12"; NET "switch[2]" LOC="H14"; NET "switch[3]" LOC="H13"; NET "switch[4]" LOC="J14"; NET "switch[5]" LOC="J13"; NET "switch[6]" LOC="K14"; NET "switch[7]" LOC="K13"; NET "switch[8]" LOC="M10"; NET "switch[9]" LOC="F3"; NET "switch[10]" LOC="H4"; NET "switch[11]" LOC="E4"; NET "switch[12]" LOC="G5"; NET "switch[13]" LOC="F4"; NET "anode[0]" LOC="D14"; NET "anode[1]" LOC="G14"; NET "anode[2]" LOC="F14"; NET "anode[3]" LOC="E13"; NET "segment[0]" LOC="E14"; NET "segment[1]" LOC="G13"; NET "segment[2]" LOC="N15"; NET "segment[3]" LOC="P15"; NET "segment[4]" LOC="R16"; NET "segment[5]" LOC="F13"; NET "segment[6]" LOC="N16"; NET "segment[7]" LOC="P16"; NET "anode[4]" LOC = "B11" ; NET "anode[5]" LOC = "A10" ; NET "anode[6]" LOC = "B10" ; NET "anode[7]" LOC = "A9" ; NET "anode[8]" LOC = "A8" ; NET "anode[9]" LOC = "B8" ; NET "anode[10]" LOC = "A7" ; NET "anode[11]" LOC = "B7" ; NET "segment[8]" LOC = "C8" ; NET "segment[9]" LOC = "D8" ; NET "segment[10]" LOC = "C9" ; NET "segment[11]" LOC = "D10" ; NET "segment[12]" LOC = "A3" ; NET "segment[13]" LOC = "B4" ; NET "segment[14]" LOC = "A4" ; NET "segment[15]" LOC = "B5" ; 寄存器及寄存器堆设计 浙江大学计算机学院实验教学中心 逻辑与计算机设计基础实验 寄存器及寄存器堆设计 寄存器及寄存器堆设计 寄存器及寄存器堆设计 寄存器及寄存器堆设计 寄存器及寄存器堆设计 2015~2016秋冬 10 * * 寄存器及寄存器堆设计 掌握寄存器、锁存器的工作原理及设计方法 掌握寄存器堆的工作原理及设计方法 了解计算机中寄存器及寄存器堆的概念 * * 寄存器及寄存器堆设计 实验设备 装有ISE的计算机系统1台 Spartan III 实验板 1套 实验材料 无 * * 寄存器及寄存器堆设计 实现含由16个16位寄存器构成的寄存器堆,要求: 支持寄存器地址选择 支持写入任意16位值 支持读取寄存器的值 加入到多功能计算器中。 * * 寄存器及寄存器堆设计 寄

    展开全文
  • 实验七-八 寄存器堆实验姓名:陈衍席 学号:1205110125 网工1202【实验环境】1. Windows 2000 或 Windows XP2. QuartusII9.1 sp2、DE2-115计算机组成原理教学实验系统一台,排线若干。【实验目的】本次实验要求掌握...

    实验七-八 寄存器堆实验

    姓名:陈衍席 学号:1205110125 网工1202

    【实验环境】

    1. Windows 2000 或 Windows XP

    2. QuartusII9.1 sp2、DE2-115计算机组成原理教学实验系统一台,排线若干。

    【实验目的】

    本次实验要求掌握触发器的基本原理,掌握寄存器和寄存器堆的组成原理。

    【实验要求】

    本次实验只需要设计并实现8位触发器和32位触发器。

    【实验原理】

    寄存器是数字电路中的基本模块,许多复杂的时序逻辑电路都是由它构成的。在数字系统中,寄存器是一种在某一特定信号的控制下用于存储一组二进制数据的时序逻辑电路。 通常使用触发器构成寄存器,把多个D触发器的时钟连接起来就可以构成一个存储多位二进制的寄存器。

    寄存器中二进制数的位可以用两种方式移入或移出寄存器。第一种方法是以串行的方式将数据每次移动一位,这种方法称之为串行移位(Serial Shifting),线路较少,但耗费时间较多。第二种方法是以并行的方式将数据同时移动,这种方法称之为并行移位(Parallel Shifting),线路较为复杂,但是数据传送的速度较快。因此,按照数据进出移位寄存器的方式,可以将移位寄存器分为四种类型:串行输入串行输出移位寄存器(Serial In- Serial Out)、串行输入并行输出移位寄存器(Serial In- Parallel Out)、并行输入串行输出移位寄存器(Parallel In- Serial Out)、并行输入并行输出移位寄存器(Parallel In-Parallel Out)。

    在CPU设计中,寄存器堆是一个可以保存指令和数据的必不可少的器件,是RISC微处理器的核心,所有内部、外部数据的读取都直接和它发生关系。它由一组寄存器组成,只要给出寄存器堆中该寄存器的编号,则其中的内容都可以读或者写。

    【实验步骤】

    1、8位触发器设计

    8位触发器中包括,输入信号:一个8位数据源D,1位CLRN复位信号,1位EN使能信号,1位CLK时钟信号;输出信号:8位Q。它由8个1位DFFE触发器经过级联后得到。这8个1位DFFE触发器的每个D分别为D[0]-D[7],Q分别为Q[0]-Q[7],时钟信号都为CLK(注意:要一一对应,如第1个1位DFFE触发器的D为D[0],则Q应为Q[0])。8位触发器真值表如下所示:

    展开全文
  • 理解和掌握CPU中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作原理,并使用Verilog和ModelSim进行设计和仿真。 二、 实验内容 使用Verilog完成ALU的设计,并编写测试仿真文件验证其正确性。要求: ...
  • 寄存器堆有2个读端口、1个写端口,即能够同时读出2个寄存器的值,写入1个寄存器。读操作不需要时钟控制,写操作需要在上跳沿才能写入。 module RegFile(clk,WE,RA,RB,RW,busA,busB,busW); input clk,WE; //相当于...
  • 3. 学习寄存器堆的数据传送与读/写工作原理,掌握寄存器堆的设计方法 解决方法 1. 分析一个32x32位的寄存器堆,即含有32个寄存器,每个寄存器32位。该寄存器堆有2个读端口、1个写端口,即能够同时读出2个寄存器的值...
  • 设计一个32×32位的寄存器堆(即含有32个寄存器,每个寄存器32位)
  • 寄存器堆(register file)是CPU中多个寄存器组成的阵列,通常由快速的静态随机读写存储器(SRAM)实现。这种RAM具有专门的读端口与写端口,可以多路并发访问不同的寄存器。 本人所写的RF寄存器堆,其中包含4个8位...
  • 杭电计算机组成原理实验RISC-V 实验 寄存器堆与运算器设计实验实验报告 一、实验目的与要求 1、 实验目的: a) 学习寄存器堆的结构传送原理,掌握三端寄存器堆的设计方法 b) 掌握运算器的结构与工作原理,能将寄存器...
  • 寄存器堆 module Register( input [4:0] R_Addr_A, input [4:0] R_Addr_B, input [4:0] W_Addr, input Write_Reg, input [31:0] Write_Data, input clk, input reset, output [31:0] R_Data_A, output [31:...
  • 文章目录ALU和寄存器堆一、实验目的:二、实验内容:三、 源代码PC和半导体存储器RAM一、实验目的:二、实验内容:三、源代码后记 ALU和寄存器堆 一、实验目的: 理解和掌握CPU中的算术逻辑运算部件(ALU)和寄存器...
  • 远程FPGA虚拟实验平台用SystemVerilog HDL实现寄存器组和堆原理单端口寄存器组三端口寄存器堆源代码单端口寄存器组VirtalBoard模块DataReg模块三端口寄存器堆VirtalBoard模块DataReg模块测试/保存/提交 原理 单端口...
  • 第2章 寄存器

    2021-08-01 16:03:02
    title: 第二章寄存器 date: 2021-07-23 14:48:03 tags: 汇编语言笔记 categories: 汇编语言笔记 在工作室好哥哥们的影响下,也开始喜欢用博客记录自己的学习过程了。 https://afanbird.github.io/ 个人博客的地址,...
  • riscv 指令集与寄存器

    2021-11-17 09:46:54
    指令集 RV32指令集 和 RV64指令集 并不是单独的 一类指令集的集合,而很多类指令集的...1. CSR(4096个,包括你见到的除了x1类和f1类之外的所有寄存器,类似mstatus,用RVzicsr指令集访问) 2. 通用寄存器(32个) 3.
  • 1.通常寄存器组是由D触发器实现的,因为它们比较通用储存器占用的硅片面积要大很多,所以不能用于大存储量的情形。一般的应用是将寄存器组和算术逻辑单元ALU串联起来,形成如图5.34所示的结构形式。寄存器组的双通道...
  • 计算机系统基础(三)之通用寄存器 本文主要结合上文关于标志寄存器的内容,解释关于通用寄存器相关的知识。 文章目录计算机系统基础(三)之通用寄存器前言一、通用寄存器是什么?二、8086CPU的通用寄存器AX,BX,...
  • 调用ALU模块、寄存器堆模块和本实验所实现的存储器模块,编写一个顶层模块,完成Ri θ (addr) → Rj的操作。尝试编写代码,仿真调试通过。
  • 它和X86/ARM相比,一大优势就是支持模块化,下面我们就来介绍一下RISC-V指令集的模块化结构,顺便再介绍下其寄存器结构。 一、模块化结构 RISC-V 指令集架构一改传统增量 ISA 模式,采用模块化 ISA 模式,它被定义为...
  • 汇编中寄存器简介

    2021-03-03 21:54:55
    转载:汇编下寄存器:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据...
  • 寄存器操作主要帮助大家理解stm32底层是怎么实现的,也是非常重要的! 一、固件库流水灯 1.工程模板的建立 由于要使用STM固件库,因此需要建立一个工程模板,详细建立过程可参考stm32f103c8t6工程模板的建立 1.1....
  • 2.CPU体系架构-寄存器

    2021-03-18 14:55:35
    CPU通用寄存器作为CPU体系架构的一部分,不可或缺。通用寄存器是CPU的算术逻辑运算操作最直接,频繁的位置。对于RISC体系的CPU,算术逻辑运算甚至只能够操作CPU通用寄存器中的数据。我们的目的不在于详尽的说明每一...
  • GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚, STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚...
  • C语言变量声明内存分配与寄存器 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序...
  • 一般寄存器:AX、BX、CX、DX AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 索引暂存器:SI、DI SI:来源索引暂存器,DI:目的索引暂存器 叠、基底暂存器:SP、BP SP:叠指标暂存器,BP:基底指标暂存器...
  • 本文内容: CPU架构通用寄存器状态寄存器状态标志(Status Flags)控制标志(DF flag)系统标志以及IOPL域(System Flags and IOPL Field)系统地址寄存器GDTRLDTRIDTRTR段寄存器控制寄存器CR0CR1CR2CR3CR4调试寄存器其他...
  • PC寄存器和虚拟机栈

    2021-03-08 11:37:55
    上篇我们学习了类加载子系统,这篇我们来介绍一下运行时数据区中的pc寄存器和虚拟机栈的细节内容介绍。 1.程序计数器(PC寄存器) JVM中的程序计数器(寄存器Program Counter Register),Register的命名来源于CPU...
  • 对于嵌入式开发者来说,了解汇编语言和内核寄存器是对内核深入理解的基础,本文对 ARM内核寄存器 和 基本汇编语言进行了简单的介绍
  • 在输出模式中,推挽模式时双MOS管以轮流方式工作,输出数据寄存器GPIOx_ODR可控制I/O输出高低电平。 开漏模式时,只有N-MOS管工作, 输出数据寄存器可控制I/O输出高阻态或低电平。输出速度可配置,有2MHz10MHz50MHz...
  • STM32的GPIO方向定义和方向寄存器的理解 好长时间没有摆弄STM32了,最近在学习MPU6050模块中遇到了关于GPIO方向定义的问题,查阅了网上的一些资料也不是特别好理解,因此在本博文中将以一种更轻松地方式去理解和解释...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,212
精华内容 29,684
关键字:

寄存器堆实现