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

Subversion Repositories lxp32

[/] [lxp32/] [trunk/] [rtl/] [lxp32_cpu.vhd] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 ring0_mipt
---------------------------------------------------------------------
2
-- LXP32 CPU Core
3
--
4
-- Part of the LXP32 CPU
5
--
6
-- Copyright (c) 2016 by Alex I. Kuznetsov
7
---------------------------------------------------------------------
8
 
9
library ieee;
10
use ieee.std_logic_1164.all;
11
 
12
entity lxp32_cpu is
13
        generic(
14
                DBUS_RMW: boolean;
15
                DIVIDER_EN: boolean;
16
                MUL_ARCH: string;
17
                START_ADDR: std_logic_vector(29 downto 0)
18
        );
19
        port(
20
                clk_i: in std_logic;
21
                rst_i: in std_logic;
22
 
23
                lli_re_o: out std_logic;
24
                lli_adr_o: out std_logic_vector(29 downto 0);
25
                lli_dat_i: in std_logic_vector(31 downto 0);
26
                lli_busy_i: in std_logic;
27
 
28
                dbus_cyc_o: out std_logic;
29
                dbus_stb_o: out std_logic;
30
                dbus_we_o: out std_logic;
31
                dbus_sel_o: out std_logic_vector(3 downto 0);
32
                dbus_ack_i: in std_logic;
33
                dbus_adr_o: out std_logic_vector(31 downto 2);
34
                dbus_dat_o: out std_logic_vector(31 downto 0);
35
                dbus_dat_i: in std_logic_vector(31 downto 0);
36
 
37
                irq_i: in std_logic_vector(7 downto 0)
38
        );
39
end entity;
40
 
41
architecture rtl of lxp32_cpu is
42
 
43
signal fetch_word: std_logic_vector(31 downto 0);
44
signal fetch_next_ip: std_logic_vector(29 downto 0);
45
signal fetch_valid: std_logic;
46
signal fetch_jump_ready: std_logic;
47
 
48
signal decode_ready: std_logic;
49
signal decode_valid: std_logic;
50
 
51
signal decode_cmd_loadop3: std_logic;
52
signal decode_cmd_signed: std_logic;
53
signal decode_cmd_dbus: std_logic;
54
signal decode_cmd_dbus_store: std_logic;
55
signal decode_cmd_dbus_byte: std_logic;
56
signal decode_cmd_addsub: std_logic;
57
signal decode_cmd_mul: std_logic;
58
signal decode_cmd_div: std_logic;
59
signal decode_cmd_div_mod: std_logic;
60
signal decode_cmd_cmp: std_logic;
61
signal decode_cmd_jump: std_logic;
62
signal decode_cmd_negate_op2: std_logic;
63
signal decode_cmd_and: std_logic;
64
signal decode_cmd_or: std_logic;
65
signal decode_cmd_xor: std_logic;
66
signal decode_cmd_shift: std_logic;
67
signal decode_cmd_shift_right: std_logic;
68
 
69
signal decode_jump_type: std_logic_vector(3 downto 0);
70
 
71
signal decode_op1: std_logic_vector(31 downto 0);
72
signal decode_op2: std_logic_vector(31 downto 0);
73
signal decode_op3: std_logic_vector(31 downto 0);
74
signal decode_dst: std_logic_vector(7 downto 0);
75
 
76
signal execute_ready: std_logic;
77
signal execute_jump_valid: std_logic;
78
signal execute_jump_dst: std_logic_vector(29 downto 0);
79
 
80
signal sp_raddr1: std_logic_vector(7 downto 0);
81
signal sp_rdata1: std_logic_vector(31 downto 0);
82
signal sp_raddr2: std_logic_vector(7 downto 0);
83
signal sp_rdata2: std_logic_vector(31 downto 0);
84
signal sp_waddr: std_logic_vector(7 downto 0);
85
signal sp_we: std_logic;
86
signal sp_wdata: std_logic_vector(31 downto 0);
87
 
88
signal interrupt_valid: std_logic;
89
signal interrupt_vector: std_logic_vector(2 downto 0);
90
signal interrupt_ready: std_logic;
91
signal interrupt_return: std_logic;
92
signal interrupts_enabled: std_logic_vector(7 downto 0);
93
signal interrupts_blocked: std_logic_vector(7 downto 0);
94
 
95
begin
96
 
97
fetch_inst: entity work.lxp32_fetch(rtl)
98
        generic map(
99
                START_ADDR=>START_ADDR
100
        )
101
        port map(
102
                clk_i=>clk_i,
103
                rst_i=>rst_i,
104
 
105
                lli_re_o=>lli_re_o,
106
                lli_adr_o=>lli_adr_o,
107
                lli_dat_i=>lli_dat_i,
108
                lli_busy_i=>lli_busy_i,
109
 
110
                word_o=>fetch_word,
111
                next_ip_o=>fetch_next_ip,
112
                valid_o=>fetch_valid,
113
                ready_i=>decode_ready,
114
 
115
                jump_valid_i=>execute_jump_valid,
116
                jump_dst_i=>execute_jump_dst,
117
                jump_ready_o=>fetch_jump_ready
118
        );
119
 
120
decode_inst: entity work.lxp32_decode(rtl)
121
        port map(
122
                clk_i=>clk_i,
123
                rst_i=>rst_i,
124
 
125
                word_i=>fetch_word,
126
                next_ip_i=>fetch_next_ip,
127
                valid_i=>fetch_valid,
128
                jump_valid_i=>execute_jump_valid,
129
                ready_o=>decode_ready,
130
 
131
                interrupt_valid_i=>interrupt_valid,
132
                interrupt_vector_i=>interrupt_vector,
133
                interrupt_ready_o=>interrupt_ready,
134
 
135
                sp_raddr1_o=>sp_raddr1,
136
                sp_rdata1_i=>sp_rdata1,
137
                sp_raddr2_o=>sp_raddr2,
138
                sp_rdata2_i=>sp_rdata2,
139
 
140
                ready_i=>execute_ready,
141
                valid_o=>decode_valid,
142
 
143
                cmd_loadop3_o=>decode_cmd_loadop3,
144
                cmd_signed_o=>decode_cmd_signed,
145
                cmd_dbus_o=>decode_cmd_dbus,
146
                cmd_dbus_store_o=>decode_cmd_dbus_store,
147
                cmd_dbus_byte_o=>decode_cmd_dbus_byte,
148
                cmd_addsub_o=>decode_cmd_addsub,
149
                cmd_mul_o=>decode_cmd_mul,
150
                cmd_div_o=>decode_cmd_div,
151
                cmd_div_mod_o=>decode_cmd_div_mod,
152
                cmd_cmp_o=>decode_cmd_cmp,
153
                cmd_jump_o=>decode_cmd_jump,
154
                cmd_negate_op2_o=>decode_cmd_negate_op2,
155
                cmd_and_o=>decode_cmd_and,
156
                cmd_or_o=>decode_cmd_or,
157
                cmd_xor_o=>decode_cmd_xor,
158
                cmd_shift_o=>decode_cmd_shift,
159
                cmd_shift_right_o=>decode_cmd_shift_right,
160
 
161
                jump_type_o=>decode_jump_type,
162
 
163
                op1_o=>decode_op1,
164
                op2_o=>decode_op2,
165
                op3_o=>decode_op3,
166
                dst_o=>decode_dst
167
        );
168
 
169
execute_inst: entity work.lxp32_execute(rtl)
170
        generic map(
171
                DBUS_RMW=>DBUS_RMW,
172
                DIVIDER_EN=>DIVIDER_EN,
173
                MUL_ARCH=>MUL_ARCH
174
        )
175
        port map(
176
                clk_i=>clk_i,
177
                rst_i=>rst_i,
178
 
179
                cmd_loadop3_i=>decode_cmd_loadop3,
180
                cmd_signed_i=>decode_cmd_signed,
181
                cmd_dbus_i=>decode_cmd_dbus,
182
                cmd_dbus_store_i=>decode_cmd_dbus_store,
183
                cmd_dbus_byte_i=>decode_cmd_dbus_byte,
184
                cmd_addsub_i=>decode_cmd_addsub,
185
                cmd_mul_i=>decode_cmd_mul,
186
                cmd_div_i=>decode_cmd_div,
187
                cmd_div_mod_i=>decode_cmd_div_mod,
188
                cmd_cmp_i=>decode_cmd_cmp,
189
                cmd_jump_i=>decode_cmd_jump,
190
                cmd_negate_op2_i=>decode_cmd_negate_op2,
191
                cmd_and_i=>decode_cmd_and,
192
                cmd_or_i=>decode_cmd_or,
193
                cmd_xor_i=>decode_cmd_xor,
194
                cmd_shift_i=>decode_cmd_shift,
195
                cmd_shift_right_i=>decode_cmd_shift_right,
196
 
197
                jump_type_i=>decode_jump_type,
198
 
199
                op1_i=>decode_op1,
200
                op2_i=>decode_op2,
201
                op3_i=>decode_op3,
202
                dst_i=>decode_dst,
203
 
204
                sp_waddr_o=>sp_waddr,
205
                sp_we_o=>sp_we,
206
                sp_wdata_o=>sp_wdata,
207
 
208
                valid_i=>decode_valid,
209
                ready_o=>execute_ready,
210
 
211
                dbus_cyc_o=>dbus_cyc_o,
212
                dbus_stb_o=>dbus_stb_o,
213
                dbus_we_o=>dbus_we_o,
214
                dbus_sel_o=>dbus_sel_o,
215
                dbus_ack_i=>dbus_ack_i,
216
                dbus_adr_o=>dbus_adr_o,
217
                dbus_dat_o=>dbus_dat_o,
218
                dbus_dat_i=>dbus_dat_i,
219
 
220
                jump_valid_o=>execute_jump_valid,
221
                jump_dst_o=>execute_jump_dst,
222
                jump_ready_i=>fetch_jump_ready,
223
 
224
                interrupt_return_o=>interrupt_return,
225
                interrupts_enabled_o=>interrupts_enabled,
226
                interrupts_blocked_o=>interrupts_blocked
227
        );
228
 
229
scratchpad_inst: entity work.lxp32_scratchpad(rtl)
230
        port map(
231
                clk_i=>clk_i,
232
 
233
                raddr1_i=>sp_raddr1,
234
                rdata1_o=>sp_rdata1,
235
                raddr2_i=>sp_raddr2,
236
                rdata2_o=>sp_rdata2,
237
 
238
                waddr_i=>sp_waddr,
239
                we_i=>sp_we,
240
                wdata_i=>sp_wdata
241
        );
242
 
243
interrupt_mux_inst: entity work.lxp32_interrupt_mux(rtl)
244
        port map(
245
                clk_i=>clk_i,
246
                rst_i=>rst_i,
247
 
248
                irq_i=>irq_i,
249
 
250
                interrupts_enabled_i=>interrupts_enabled,
251
                interrupts_blocked_i=>interrupts_blocked,
252
 
253
                interrupt_valid_o=>interrupt_valid,
254
                interrupt_vector_o=>interrupt_vector,
255
                interrupt_ready_i=>interrupt_ready,
256
                interrupt_return_i=>interrupt_return
257
        );
258
 
259
end architecture;

powered by: WebSVN 2.1.0

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