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

Subversion Repositories rise

[/] [rise/] [trunk/] [vhdl/] [rise_pack.vhd] - Blame information for rev 126

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jlechner
-------------------------------------------------------------------------------
2
-- File: rise_pack.vhd
3
-- Author: Jakob Lechner, Urban Stadler, Harald Trinkl, Christian Walter
4
-- Created: 2006-11-29
5
-- Last updated: 2006-11-29
6
 
7
-- Description:
8
-- Package for RISE project.
9
-------------------------------------------------------------------------------
10
 
11
 
12
library IEEE;
13
use IEEE.STD_LOGIC_1164.all;
14 8 jlechner
use IEEE.STD_LOGIC_ARITH.all;
15 70 jlechner
use work.RISE_PACK_SPECIFIC.all;
16 2 jlechner
 
17
package RISE_PACK is
18
 
19 126 trinklhar
  constant CLK_FREQ  : integer := 50000000;
20 2 jlechner
  constant ARCHITECTURE_WIDTH : integer := 16;
21
  constant REGISTER_COUNT : integer := 16;
22
 
23
  constant PC_WIDTH : integer := ARCHITECTURE_WIDTH;
24
  constant IR_WIDTH : integer := ARCHITECTURE_WIDTH;
25
  constant SR_WIDTH : integer := ARCHITECTURE_WIDTH;
26
  constant MEM_DATA_WIDTH : integer := ARCHITECTURE_WIDTH;
27
  constant MEM_ADDR_WIDTH : integer := ARCHITECTURE_WIDTH;
28
 
29
  constant REGISTER_WIDTH : integer := ARCHITECTURE_WIDTH;
30 5 cwalter
  constant REGISTER_ADDR_WIDTH : integer := 4;
31 2 jlechner
  constant IMMEDIATE_WIDTH : integer := ARCHITECTURE_WIDTH;
32
  constant LOCK_WIDTH : integer := REGISTER_COUNT;
33 8 jlechner
 
34
  constant ALUOP1_WIDTH : integer := 3;
35
  constant ALUOP2_WIDTH : integer := 3;
36 2 jlechner
 
37
  subtype PC_REGISTER_T is std_logic_vector(PC_WIDTH-1 downto 0);
38
  subtype IR_REGISTER_T is std_logic_vector(IR_WIDTH-1 downto 0);
39
  subtype SR_REGISTER_T is std_logic_vector(SR_WIDTH-1 downto 0);
40
  subtype REGISTER_T is std_logic_vector(REGISTER_WIDTH-1 downto 0);
41
  subtype REGISTER_ADDR_T is std_logic_vector(REGISTER_ADDR_WIDTH-1 downto 0);
42
  subtype MEM_DATA_T is std_logic_vector(MEM_DATA_WIDTH-1 downto 0);
43
  subtype MEM_ADDR_T is std_logic_vector(MEM_ADDR_WIDTH-1 downto 0);
44
 
45
  subtype LOCK_REGISTER_T is std_logic_vector(LOCK_WIDTH-1 downto 0);
46 40 jlechner
 
47 2 jlechner
  subtype IMMEDIATE_T is std_logic_vector(IMMEDIATE_WIDTH-1 downto 0);
48
 
49 8 jlechner
  subtype ALUOP1_T is std_logic_vector(ALUOP1_WIDTH-1 downto 0);
50
  subtype ALUOP2_T is std_logic_vector(ALUOP2_WIDTH-1 downto 0);
51
 
52 5 cwalter
  --
53 12 cwalter
  constant SR_REGISTER_ADDR : REGISTER_ADDR_T := "1111";
54
  constant PC_REGISTER_ADDR : REGISTER_ADDR_T := "1110";
55
  constant LR_REGISTER_ADDR : REGISTER_ADDR_T := "1101";
56
 
57 5 cwalter
  constant SR_REGISTER_DI : INTEGER := 15;
58
  constant SR_REGISTER_IP_MASK : INTEGER := 12;
59
  constant SR_REGISTER_OVERFLOW : INTEGER := 3;
60
  constant SR_REGISTER_NEGATIVE : INTEGER := 2;
61
  constant SR_REGISTER_CARRY : INTEGER := 1;
62
  constant SR_REGISTER_ZERO : INTEGER := 0;
63
  constant RESET_PC_VALUE : PC_REGISTER_T := ( others => '0' );
64
  constant RESET_SR_VALUE : PC_REGISTER_T := ( others => '0' );
65 53 cwalter
 
66 8 jlechner
  constant PC_ADDR : REGISTER_ADDR_T := CONV_STD_LOGIC_VECTOR(14, REGISTER_ADDR_WIDTH);
67 46 cwalter
 
68
  constant PC_RESET_VECTOR : MEM_ADDR_T := x"FFFE";
69
 
70 8 jlechner
 
71
  -- STATUS REGISTER BITS --
72
  constant SR_ZERO_BIT          : integer := 0;
73
  constant SR_CARRY_BIT         : integer := 1;
74
  constant SR_NEGATIVE_BIT      : integer := 2;
75
  constant SR_OVERFLOW_BIT      : integer := 3;
76
 
77 2 jlechner
  type IF_ID_REGISTER_T is record
78
                             pc : PC_REGISTER_T;
79
                             ir : IR_REGISTER_T;
80
                           end record;
81
 
82
  type ID_EX_REGISTER_T is record
83
                             sr         : SR_REGISTER_T;
84
                             pc         : PC_REGISTER_T;
85
                             opcode     : OPCODE_T;
86
                             cond       : COND_T;
87
                             rX_addr    : REGISTER_ADDR_T;
88
                             rX         : REGISTER_T;
89
                             rY         : REGISTER_T;
90
                             rZ         : REGISTER_T;
91
                             immediate  : IMMEDIATE_T;
92
                           end record;
93 8 jlechner
 
94
  -- bit positions for aluop1
95
  constant ALUOP1_LD_MEM_BIT : integer := 0;
96
  constant ALUOP1_ST_MEM_BIT : integer := 1;
97
  constant ALUOP1_WB_REG_BIT : integer := 2;
98
 
99
  -- bit positions for aluop2
100
  constant ALUOP2_SR_BIT : integer := 0;
101
  constant ALUOP2_LR_BIT : integer := 1;
102
 
103 2 jlechner
  type EX_MEM_REGISTER_T is record
104 8 jlechner
                              aluop1        : ALUOP1_T;
105
                              aluop2        : ALUOP2_T;
106 2 jlechner
                              reg           : REGISTER_T;
107
                              alu           : REGISTER_T;
108
                              dreg_addr     : REGISTER_ADDR_T;
109
                              lr            : PC_REGISTER_T;
110 8 jlechner
                              sr            : SR_REGISTER_T;
111 2 jlechner
                            end record;
112 40 jlechner
 
113 2 jlechner
  type MEM_WB_REGISTER_T is record
114 8 jlechner
                              aluop1        : ALUOP1_T;
115
                              aluop2        : ALUOP2_T;
116 2 jlechner
                              reg           : REGISTER_T;
117 40 jlechner
                              mem_reg       : REGISTER_T;
118 2 jlechner
                              dreg_addr     : REGISTER_ADDR_T;
119
                              lr            : PC_REGISTER_T;
120 40 jlechner
                              sr            : SR_REGISTER_T;
121 2 jlechner
                            end record;
122
 
123 121 trinklhar
    constant CONST_UART_STATUS_ADDRESS: REGISTER_T := x"8000";
124 126 trinklhar
         constant CONST_UART_DATA_ADDRESS: REGISTER_T := x"8001";
125 2 jlechner
end RISE_PACK;
126
 

powered by: WebSVN 2.1.0

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