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

Subversion Repositories riscompatible

[/] [riscompatible/] [trunk/] [rtl/] [riscompatible_core.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 borin
-------------------------------------------------------------------------------------------------------------------
2
-- ____________   _____   ___________   ___________   ___________ 
3
-- ||||        \ ||||  | ||||        | ||||        | ||||        |
4
-- ||||_____   | ||||  | ||||   _____| ||||   _____| ||||   __   |
5
-- ______||||  | ||||  | ||||  |_____  ||||  |       ||||  ||||  |
6
-- ||||        / ||||  | ||||        | ||||  |       ||||  ||||  |
7
-- ||||  ___   \ ||||  | ||||_____   | ||||  |       ||||  ||||  |
8
-- ||||  ||||  | ||||  | ______||||  | ||||  |_____  ||||  ||||  |
9
-- ||||  ||||  | ||||  | ||||        | ||||        | ||||        |
10
-- ||||__||||__| ||||__| ||||________| ||||________| ||||________|mpatible Core
11
--
12
-- RISCOmpatible - Implementation Based on the Instruction Set developed in:
13
-- "[1] RISCO - Microprocessador RISC CMOS de 32 Bits",
14
--      by Alexandre Ambrozi Junqueira and Altamiro Amadeu Suzim, 1993.
15
--      http://hdl.handle.net/10183/21530
16
-- HDL code by Andre Borin Soares
17
--
18
-- Current Features: Harvard architecture, single clock phase, multicycle operation.
19
--
20
-- USE THIS CODE AT YOUR OWN RISK !
21
-- HDL code 'as is' without warranty.  Author liable for nothing.
22
-------------------------------------------------------------------------------------------------------------------
23
-- Suffixes and prefixes used in the code:
24
-- _W - Wire
25
-- _R - Register
26
-- _F - Function
27
-- _O - Output
28
-- _I - Input
29
-- C_ - Constant
30
-------------------------------------------------------------------------------------------------------------------
31
library ieee;
32
use ieee.std_logic_1164.all;
33
use ieee.numeric_std.all;
34
library work;
35
use work.riscompatible_package.all;
36
-------------------------------------------------------------------------------------------------------------------
37
entity riscompatible_core is
38
    generic
39
    (
40
        NumBitsProgramMemory : natural:=5;
41
        NumBitsDataMemory    : natural:=5;
42
        NumBitsRegBank       : natural:=5
43
    );
44
    port
45
    (
46
        Clk_I             : in std_logic;
47
        Reset_I           : in std_logic;
48
        PMem_Enable_O     : out std_logic;
49
        PMem_Write_O      : out std_logic;
50
        PMem_Address_O    : out std_logic_vector(NumBitsProgramMemory-1 downto 0);
51
        PMem_InputData_O  : out TRiscoWord;
52
        PMem_OutputData_I : in TRiscoWord;
53
        DMem_Enable_O     : out std_logic;
54
        DMem_Write_O      : out std_logic;
55
        DMem_Address_O    : out std_logic_vector(NumBitsDataMemory-1 downto 0);
56
        DMem_InputData_O  : out TRiscoWord;
57
        DMem_OutputData_I : in TRiscoWord;
58
        Int_I             : in std_logic;
59
        IntAck_O          : out std_logic
60
    );
61
end riscompatible_core;
62
-------------------------------------------------------------------------------------------------------------------
63
architecture behavioral of riscompatible_core is
64
    ---------------------------------------------
65
    -- Registers
66
    ---------------------------------------------
67
    signal PSW_W : TRiscoReg;
68
    signal PC_W  : TRiscoReg;
69
    signal RUA_W : TRiscoReg;
70
    signal RUB_W : TRiscoReg;
71
    signal RDA_W : TRiscoReg;
72
    signal RDB_W : TRiscoReg;
73
    ---------------------------------------------
74
    -- Wires
75
    ---------------------------------------------
76
    -- Register Bank Signals ------------------------------
77
    signal RegBnk_Write_W           : std_logic;
78
    signal RegBnk_RegisterW_W       : std_logic_vector(NumBitsRegBank - 1 downto 0);
79
    signal RegBnk_Register1_W       : std_logic_vector(NumBitsRegBank - 1 downto 0);
80
    signal RegBnk_Register2_W       : std_logic_vector(NumBitsRegBank - 1 downto 0);
81
    signal RegBnk_InputData_W       : TRiscoWord;
82
    signal RegBkn_FT1_OutputDatai_W : TRiscoWord;
83
    signal RegBkn_FT2_OutputDatai_W : TRiscoWord;
84
    -- ULA Signals ----------------------------------------
85
    alias  ULA_Cy_I_W       : std_logic is PSW_W.Data_O(4);
86
    signal ULA_Cy_O_W       : std_logic;
87
    signal ULA_Ng_O_W       : std_logic;
88
    signal ULA_Ov_O_W       : std_logic;
89
    signal ULA_Zr_O_W       : std_logic;
90
    signal ULA_Function_W   : std_logic_vector(4 downto 0);
91
    signal ULA_Output_W     : TRiscoWord;
92
    -- UD Signals -----------------------------------------
93
    alias  UD_InputData_W   : TRiscoWord is RDA_W.Data_O;
94
    alias  UD_ShiftAmount_W : std_logic_vector(4 downto 0) is RDB_W.Data_O(4 downto 0);
95
    signal UD_OutputData_W  : TRiscoWord;
96
    signal UD_Function_W    : std_logic_vector(4 downto 0);
97
    alias  UD_Cy_I_W        : std_logic is PSW_W.Data_O(4);
98
    signal UD_Cy_O_W        : std_logic;
99
    -------------------------------------------------------
100
begin
101
 
102
PMem_InputData_O <= (others => '0');
103
 
104
---------------------------------------------
105
-- Registers
106
---------------------------------------------
107
 
108
-- Flags
109
PSW1:reg generic map (NumBits => C_NumBitsWord) port map (Clk_I => Clk_I, Clr_I => PSW_W.Clr_I, Wen_I => PSW_W.Wen_I, Data_I => PSW_W.Data_I, Data_O => PSW_W.Data_O);
110
 
111
-- PC
112
PC1:reg generic map (NumBits => C_NumBitsWord) port map (Clk_I => Clk_I, Clr_I => PC_W.Clr_I, Wen_I => PC_W.Wen_I, Data_I => PC_W.Data_I, Data_O => PC_W.Data_O);
113
 
114
-- Ula Inputs
115
RUA1:reg generic map (NumBits => C_NumBitsWord) port map (Clk_I => Clk_I, Clr_I => RUA_W.Clr_I, Wen_I => RUA_W.Wen_I, Data_I => RUA_W.Data_I, Data_O => RUA_W.Data_O);
116
RUB1:reg generic map (NumBits => C_NumBitsWord) port map (Clk_I => Clk_I, Clr_I => RUB_W.Clr_I, Wen_I => RUB_W.Wen_I, Data_I => RUB_W.Data_I, Data_O => RUB_W.Data_O);
117
 
118
-- UD inputs
119
RDA1:reg generic map (NumBits => C_NumBitsWord) port map (Clk_I => Clk_I, Clr_I => RDA_W.Clr_I, Wen_I => RDA_W.Wen_I, Data_I => RDA_W.Data_I, Data_O => RDA_W.Data_O);
120
RDB1:reg generic map (NumBits => C_NumBitsWord) port map (Clk_I => Clk_I, Clr_I => RDB_W.Clr_I, Wen_I => RDB_W.Wen_I, Data_I => RDB_W.Data_I, Data_O => RDB_W.Data_O);
121
 
122
 
123
---------------------------------------------
124
-- Register Bank
125
---------------------------------------------
126
RegisterBank1: RegisterBank
127
    generic map
128
    (
129
        NumBitsAddr => NumBitsRegBank,
130
        DataWidth => 32
131
    )
132
    port map
133
    (
134
        Clk_I           => Clk_I,
135
        Enable_I        => '1',
136
        Write_I         => RegBnk_Write_W,
137
        RegisterW_I     => RegBnk_RegisterW_W,
138
        Register1_I     => RegBnk_Register1_W,
139
        Register2_I     => RegBnk_Register2_W,
140
        InputData_I     => RegBnk_InputData_W,
141
        FT1OutputData_O => RegBkn_FT1_OutputDatai_W,
142
        FT2OutputData_O => RegBkn_FT2_OutputDatai_W
143
    );
144
 
145
---------------------------------------------
146
-- ULA - Arithmetic Logic Unit
147
---------------------------------------------
148
Ula1: Ula
149
    port map
150
    (
151
        Cy_I       => ULA_Cy_I_W,
152
        Source1_I  => RUA_W.Data_O,
153
        Source2_I  => RUB_W.Data_O,
154
        Function_I => ULA_Function_W,
155
        Output_O   => ULA_Output_W,
156
        Cy_O       => ULA_Cy_O_W,
157
        Ov_O       => ULA_Ov_O_W,
158
        Zr_O       => ULA_Zr_O_W,
159
        Ng_O       => ULA_Ng_O_W
160
    );
161
 
162
---------------------------------------------
163
-- UD - Shift Unit
164
---------------------------------------------
165
UD1: UD
166
    port map
167
    (
168
        InputData_I   => UD_InputData_W,
169
        ShiftAmount_I => UD_ShiftAmount_W,
170
        OutputData_O  => UD_OutputData_W,
171
        Function_I    => UD_Function_W,
172
        Cy_I          => UD_Cy_I_W,
173
        Cy_O          => UD_Cy_O_W
174
    );
175
 
176
---------------------------------------------
177
-- Control and Signal Selectors
178
---------------------------------------------
179
SelectAndControl1 : select_and_control
180
    generic map
181
    (
182
        NumBitsProgramMemory => NumBitsProgramMemory,
183
        NumBitsDataMemory    => NumBitsDataMemory,
184
        NumBitsRegBank       => NumBitsRegBank
185
    )
186
    port map
187
    (
188
        Clk_I                   => Clk_I,
189
        Reset_I                 => Reset_I,
190
        PMem_Enable_O           => PMem_Enable_O,
191
        PMem_Address_O          => PMem_Address_O,
192
        PMem_Write_O            => PMem_Write_O,
193
        PMem_OutputData_I       => PMem_OutputData_I,
194
        DMem_Enable_O           => DMem_Enable_O,
195
        DMem_Write_O            => DMem_Write_O,
196
        DMem_Address_O          => DMem_Address_O,
197
        DMem_InputData_O        => DMem_InputData_O,
198
        DMem_OutputData_I       => DMem_OutputData_I,
199
        RegBnk_Register1_O      => RegBnk_Register1_W,
200
        RegBnk_Register2_O      => RegBnk_Register2_W,
201
        RegBnk_RegisterW_O      => RegBnk_RegisterW_W,
202
        RegBnk_Write_O          => RegBnk_Write_W,
203
        RegBnk_InputData_O      => RegBnk_InputData_W,
204
        RegBnk_FT1_OutputData_I => RegBkn_FT1_OutputDatai_W,
205
        RegBnk_FT2_OutputData_I => RegBkn_FT2_OutputDatai_W,
206
        ULA_Function_O          => ULA_Function_W,
207
        ULA_Output_I            => ULA_Output_W,
208
        ULA_Ng_O_I              => ULA_Ng_O_W,
209
        ULA_Cy_O_I              => ULA_Cy_O_W,
210
        ULA_Ov_O_I              => ULA_Ov_O_W,
211
        ULA_Zr_O_I              => ULA_Zr_O_W,
212
        UD_Function_O           => UD_Function_W,
213
        UD_OutputData_I         => UD_OutputData_W,
214
        UD_Cy_O_I               => UD_Cy_O_W,
215
        RUA_Clr_O               => RUA_W.Clr_I,
216
        RUB_Clr_O               => RUB_W.Clr_I,
217
        RDA_Clr_O               => RDA_W.Clr_I,
218
        RDB_Clr_O               => RDB_W.Clr_I,
219
        RUA_Wen_O               => RUA_W.Wen_I,
220
        RUB_Wen_O               => RUB_W.Wen_I,
221
        RDA_Wen_O               => RDA_W.Wen_I,
222
        RDB_Wen_O               => RDB_W.Wen_I,
223
        RUA_Data_O              => RUA_W.Data_I,
224
        RUB_Data_O              => RUB_W.Data_I,
225
        RDA_Data_O              => RDA_W.Data_I,
226
        RDB_Data_O              => RDB_W.Data_I,
227
        PC_Clr_O                => PC_W.Clr_I,
228
        PC_Wen_O                => PC_W.Wen_I,
229
        PC_Data_I               => PC_W.Data_O,
230
        PC_Data_O               => PC_W.Data_I,
231
        PSW_Clr_O               => PSW_W.Clr_I,
232
        PSW_Wen_O               => PSW_W.Wen_I,
233
        PSW_Data_I              => PSW_W.Data_O,
234
        PSW_Data_O              => PSW_W.Data_I,
235
        Int_I                   => Int_I,
236
        IntAck_O                => IntAck_O
237
    );
238
 
239
end behavioral;

powered by: WebSVN 2.1.0

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