VHDL学习----多端口通用寄存器堆RF

寄存器堆(register file)是CPU中多个寄存器组成的阵列,通常由快速的静态随机读写存储器(SRAM)实现。这种RAM具有专门的读端口与写端口,可以多路并发访问不同的寄存器。
本人所写的RF寄存器堆,其中包含4个8位寄存器(R0、R1、R2、R3),有三个控制端口。其中两个端口控制读操作,一个端口控制写操作,三个端口可同时操作。RD1、RD0选择从A端口读出的寄存器,RS1、RS0选择从B端口读出的寄存器,WR1、WR0选择被写入的寄存器。WRD 控制写操作。当WRD = 0时,禁止写操作;当WRD = 1 时,将来自ER寄存器的数据写入由WR1、WR0 选中的寄存器。

代码如下:

library ieee;
use ieee.std_logic_1164.all;

entity RF is
port(
RS:in std_logic_vector(1 downto 0);
RD:in std_logic_vector(1 downto 0);
WR:in std_logic_vector(1 downto 0);
WRD:in std_logic;
D_ER_i:in std_logic_vector(7 downto 0);
D_RA_o:out std_logic_vector(7 downto 0);
D_RB_o:out std_logic_vector(7 downto 0)
);
end RF;

architecture behave of Rf is
signal R0: std_logic_vector(7 downto 0);
signal R1: std_logic_vector(7 downto 0);
signal R2: std_logic_vector(7 downto 0);
signal R3: std_logic_vector(7 downto 0);

begin

process(WR)   --write
begin
if(WRD='1') then
 case WR is
 when "00"=>
     R0<=D_ER_i;
 when "01"=>
     R1<=D_ER_i;
 when "10"=>
     R2<=D_ER_i;
 when "11"=>
     R3<=D_ER_i;
when others=>null;
end case;
end if;
end process;

process(RD) ---read A
begin
 case RD is
 when "00"=>
     D_RA_o<=R0;
 when "01"=>
     D_RA_o<=R1;
 when "10"=>
     D_RA_o<=R2;
 when "11"=>
     D_RA_o<=R3; 
when others=>null;
end case;
end process;

process(RS) ---read B
begin
 case RS is
 when "00"=>
     D_RB_o<=R0;
 when "01"=>
     D_RB_o<=R1;
 when "10"=>
     D_RB_o<=R2;
 when "11"=>
     D_RB_o<=R3; 
when others=>null;
end case;
end process;
end behave;



随后进行仿真,验证读写功能,波形图如下:
在这里插入图片描述

此时读写控制信号WRD为1,表明可以进行写操作。WR为01,选中R1,向寄存器R1写入10101010。RD、RS同时为01,选中R1寄存器,从R1中读取数据。可以看出,D_RA_o与D_RB_o读出的数据相同,均为10101010,既验证了D_ER_i中的数据成功写入R1中,也验证了A、B两端口成功读出R1中数据。
在这里插入图片描述
再次进行对比仿真,将RS改为11,即B端口从R3读取数据。由于并未向R3中写入数据,因此B端口读不出数据,而A端口仍然正常读出数据。说明读写功能均正确:)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值