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

Subversion Repositories lxp32

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

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

Line No. Rev Author Line
1 9 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(31 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_current_ip: std_logic_vector(29 downto 0);
46
signal fetch_valid: std_logic;
47
signal fetch_jump_ready: std_logic;
48
 
49
signal decode_ready: std_logic;
50
signal decode_valid: std_logic;
51
 
52
signal decode_cmd_loadop3: std_logic;
53
signal decode_cmd_signed: std_logic;
54
signal decode_cmd_dbus: std_logic;
55
signal decode_cmd_dbus_store: std_logic;
56
signal decode_cmd_dbus_byte: std_logic;
57
signal decode_cmd_addsub: std_logic;
58
signal decode_cmd_mul: std_logic;
59
signal decode_cmd_div: std_logic;
60
signal decode_cmd_div_mod: std_logic;
61
signal decode_cmd_cmp: std_logic;
62
signal decode_cmd_jump: std_logic;
63
signal decode_cmd_negate_op2: std_logic;
64
signal decode_cmd_and: 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
 
93
begin
94
 
95
fetch_inst: entity work.lxp32_fetch(rtl)
96
        generic map(
97
                START_ADDR=>START_ADDR
98
        )
99
        port map(
100
                clk_i=>clk_i,
101
                rst_i=>rst_i,
102
 
103
                lli_re_o=>lli_re_o,
104
                lli_adr_o=>lli_adr_o,
105
                lli_dat_i=>lli_dat_i,
106
                lli_busy_i=>lli_busy_i,
107
 
108
                word_o=>fetch_word,
109
                next_ip_o=>fetch_next_ip,
110
                current_ip_o=>fetch_current_ip,
111
                valid_o=>fetch_valid,
112
                ready_i=>decode_ready,
113
 
114
                jump_valid_i=>execute_jump_valid,
115
                jump_dst_i=>execute_jump_dst,
116
                jump_ready_o=>fetch_jump_ready
117
        );
118
 
119
decode_inst: entity work.lxp32_decode(rtl)
120
        port map(
121
                clk_i=>clk_i,
122
                rst_i=>rst_i,
123
 
124
                word_i=>fetch_word,
125
                next_ip_i=>fetch_next_ip,
126
                current_ip_i=>fetch_current_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_xor_o=>decode_cmd_xor,
157
                cmd_shift_o=>decode_cmd_shift,
158
                cmd_shift_right_o=>decode_cmd_shift_right,
159
 
160
                jump_type_o=>decode_jump_type,
161
 
162
                op1_o=>decode_op1,
163
                op2_o=>decode_op2,
164
                op3_o=>decode_op3,
165
                dst_o=>decode_dst
166
        );
167
 
168
execute_inst: entity work.lxp32_execute(rtl)
169
        generic map(
170
                DBUS_RMW=>DBUS_RMW,
171
                DIVIDER_EN=>DIVIDER_EN,
172
                MUL_ARCH=>MUL_ARCH
173
        )
174
        port map(
175
                clk_i=>clk_i,
176
                rst_i=>rst_i,
177
 
178
                cmd_loadop3_i=>decode_cmd_loadop3,
179
                cmd_signed_i=>decode_cmd_signed,
180
                cmd_dbus_i=>decode_cmd_dbus,
181
                cmd_dbus_store_i=>decode_cmd_dbus_store,
182
                cmd_dbus_byte_i=>decode_cmd_dbus_byte,
183
                cmd_addsub_i=>decode_cmd_addsub,
184
                cmd_mul_i=>decode_cmd_mul,
185
                cmd_div_i=>decode_cmd_div,
186
                cmd_div_mod_i=>decode_cmd_div_mod,
187
                cmd_cmp_i=>decode_cmd_cmp,
188
                cmd_jump_i=>decode_cmd_jump,
189
                cmd_negate_op2_i=>decode_cmd_negate_op2,
190
                cmd_and_i=>decode_cmd_and,
191
                cmd_xor_i=>decode_cmd_xor,
192
                cmd_shift_i=>decode_cmd_shift,
193
                cmd_shift_right_i=>decode_cmd_shift_right,
194
 
195
                jump_type_i=>decode_jump_type,
196
 
197
                op1_i=>decode_op1,
198
                op2_i=>decode_op2,
199
                op3_i=>decode_op3,
200
                dst_i=>decode_dst,
201
 
202
                sp_waddr_o=>sp_waddr,
203
                sp_we_o=>sp_we,
204
                sp_wdata_o=>sp_wdata,
205
 
206
                valid_i=>decode_valid,
207
                ready_o=>execute_ready,
208
 
209
                dbus_cyc_o=>dbus_cyc_o,
210
                dbus_stb_o=>dbus_stb_o,
211
                dbus_we_o=>dbus_we_o,
212
                dbus_sel_o=>dbus_sel_o,
213
                dbus_ack_i=>dbus_ack_i,
214
                dbus_adr_o=>dbus_adr_o,
215
                dbus_dat_o=>dbus_dat_o,
216
                dbus_dat_i=>dbus_dat_i,
217
 
218
                jump_valid_o=>execute_jump_valid,
219
                jump_dst_o=>execute_jump_dst,
220
                jump_ready_i=>fetch_jump_ready,
221
 
222
                interrupt_return_o=>interrupt_return
223
        );
224
 
225
scratchpad_inst: entity work.lxp32_scratchpad(rtl)
226
        port map(
227
                clk_i=>clk_i,
228
 
229
                raddr1_i=>sp_raddr1,
230
                rdata1_o=>sp_rdata1,
231
                raddr2_i=>sp_raddr2,
232
                rdata2_o=>sp_rdata2,
233
 
234
                waddr_i=>sp_waddr,
235
                we_i=>sp_we,
236
                wdata_i=>sp_wdata
237
        );
238
 
239
interrupt_mux_inst: entity work.lxp32_interrupt_mux(rtl)
240
        port map(
241
                clk_i=>clk_i,
242
                rst_i=>rst_i,
243
 
244
                irq_i=>irq_i,
245
 
246
                interrupt_valid_o=>interrupt_valid,
247
                interrupt_vector_o=>interrupt_vector,
248
                interrupt_ready_i=>interrupt_ready,
249
                interrupt_return_i=>interrupt_return,
250
 
251
                sp_waddr_i=>sp_waddr,
252
                sp_we_i=>sp_we,
253
                sp_wdata_i=>sp_wdata
254
        );
255
 
256
end architecture;

powered by: WebSVN 2.1.0

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