OpenCores
URL https://opencores.org/ocsvn/nanoblaze/nanoblaze/trunk

Subversion Repositories nanoblaze

[/] [nanoblaze/] [trunk/] [Circuit/] [registerFile.vhd] - Blame information for rev 10

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 10 fcorthay
--##############################################################################
2
--
3
--  registerFile
4
--      Microprocessor registers
5
--
6
--      The register file has one data input, from the ALU,
7
--      and two data outputs for the ALU inputs.
8
--
9
--------------------------------------------------------------------------------
10
--
11
--  Versions / Authors
12
--      1.0 Francois Corthay    first implementation
13
--
14
--  Provided under GNU LGPL licence: <http://www.gnu.org/copyleft/lesser.html>
15
--
16
--  by the electronics group of "HES-SO//Valais Wallis", in Switzerland:
17
--  <http://www.hevs.ch/en/rad-instituts/institut-systemes-industriels/>.
18
--
19
--------------------------------------------------------------------------------
20
--
21
--  Hierarchy
22
--      Used by "nanoblaze/nanoProcessor/aluAndRegs".
23
--
24
--##############################################################################
25
 
26
LIBRARY ieee;
27
  USE ieee.std_logic_1164.all;
28
  USE ieee.numeric_std.all;
29
 
30
ENTITY registerFile IS
31
  GENERIC(
32
    registerAddressBitNb : positive := 4;
33
    dataBitNb            : positive := 8
34
  );
35
  PORT(
36
    clock       : IN  std_ulogic;
37
    reset       : IN  std_ulogic;
38
    addrA       : IN  unsigned(registerAddressBitNb-1 DOWNTO 0);
39
    addrB       : IN  unsigned(registerAddressBitNb-1 DOWNTO 0);
40
    regWrite    : IN  std_ulogic;
41
    registersIn : IN  signed(dataBitNb-1 DOWNTO 0);
42
    opA         : OUT signed(dataBitNb-1 DOWNTO 0);
43
    opB         : OUT signed(dataBitNb-1 DOWNTO 0)
44
  );
45
END registerFile ;
46
 
47
--==============================================================================
48
 
49
ARCHITECTURE RTL OF registerFile IS
50
 
51
  subtype registerType is signed(registersIn'range);
52
  type registerArrayType is array (0 to 2**registerAddressBitNb-1) of registerType;
53
  signal registerArray : registerArrayType;
54
 
55
BEGIN
56
  ------------------------------------------------------------------------------
57
                                                           -- write to registers
58
  updateRegister: process(reset, clock)
59
  begin
60
    if reset = '1' then
61
      registerArray <= (others => (others => '0'));
62
    elsif rising_edge(clock) then
63
      if regWrite = '1' then
64
        registerArray(to_integer(addrA)) <= registersIn;
65
      end if;
66
    end if;
67
  end process updateRegister;
68
 
69
  ------------------------------------------------------------------------------
70
                                                          -- read from registers
71
  opA <= registerArray(to_integer(addrA));
72
  opB <= registerArray(to_integer(addrB));
73
 
74
END ARCHITECTURE RTL;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.