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

Subversion Repositories lxp32

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

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 12 ring0_mipt
signal interrupt_wakeup: std_logic;
93 9 ring0_mipt
 
94
begin
95
 
96
fetch_inst: entity work.lxp32_fetch(rtl)
97
        generic map(
98
                START_ADDR=>START_ADDR
99
        )
100
        port map(
101
                clk_i=>clk_i,
102
                rst_i=>rst_i,
103
 
104
                lli_re_o=>lli_re_o,
105
                lli_adr_o=>lli_adr_o,
106
                lli_dat_i=>lli_dat_i,
107
                lli_busy_i=>lli_busy_i,
108
 
109
                word_o=>fetch_word,
110
                next_ip_o=>fetch_next_ip,
111
                current_ip_o=>fetch_current_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
                current_ip_i=>fetch_current_ip,
128
                valid_i=>fetch_valid,
129
                jump_valid_i=>execute_jump_valid,
130
                ready_o=>decode_ready,
131
 
132
                interrupt_valid_i=>interrupt_valid,
133
                interrupt_vector_i=>interrupt_vector,
134
                interrupt_ready_o=>interrupt_ready,
135 12 ring0_mipt
 
136
                wakeup_i=>interrupt_wakeup,
137 9 ring0_mipt
 
138
                sp_raddr1_o=>sp_raddr1,
139
                sp_rdata1_i=>sp_rdata1,
140
                sp_raddr2_o=>sp_raddr2,
141
                sp_rdata2_i=>sp_rdata2,
142
 
143
                ready_i=>execute_ready,
144
                valid_o=>decode_valid,
145
 
146
                cmd_loadop3_o=>decode_cmd_loadop3,
147
                cmd_signed_o=>decode_cmd_signed,
148
                cmd_dbus_o=>decode_cmd_dbus,
149
                cmd_dbus_store_o=>decode_cmd_dbus_store,
150
                cmd_dbus_byte_o=>decode_cmd_dbus_byte,
151
                cmd_addsub_o=>decode_cmd_addsub,
152
                cmd_mul_o=>decode_cmd_mul,
153
                cmd_div_o=>decode_cmd_div,
154
                cmd_div_mod_o=>decode_cmd_div_mod,
155
                cmd_cmp_o=>decode_cmd_cmp,
156
                cmd_jump_o=>decode_cmd_jump,
157
                cmd_negate_op2_o=>decode_cmd_negate_op2,
158
                cmd_and_o=>decode_cmd_and,
159
                cmd_xor_o=>decode_cmd_xor,
160
                cmd_shift_o=>decode_cmd_shift,
161
                cmd_shift_right_o=>decode_cmd_shift_right,
162
 
163
                jump_type_o=>decode_jump_type,
164
 
165
                op1_o=>decode_op1,
166
                op2_o=>decode_op2,
167
                op3_o=>decode_op3,
168
                dst_o=>decode_dst
169
        );
170
 
171
execute_inst: entity work.lxp32_execute(rtl)
172
        generic map(
173
                DBUS_RMW=>DBUS_RMW,
174
                DIVIDER_EN=>DIVIDER_EN,
175
                MUL_ARCH=>MUL_ARCH
176
        )
177
        port map(
178
                clk_i=>clk_i,
179
                rst_i=>rst_i,
180
 
181
                cmd_loadop3_i=>decode_cmd_loadop3,
182
                cmd_signed_i=>decode_cmd_signed,
183
                cmd_dbus_i=>decode_cmd_dbus,
184
                cmd_dbus_store_i=>decode_cmd_dbus_store,
185
                cmd_dbus_byte_i=>decode_cmd_dbus_byte,
186
                cmd_addsub_i=>decode_cmd_addsub,
187
                cmd_mul_i=>decode_cmd_mul,
188
                cmd_div_i=>decode_cmd_div,
189
                cmd_div_mod_i=>decode_cmd_div_mod,
190
                cmd_cmp_i=>decode_cmd_cmp,
191
                cmd_jump_i=>decode_cmd_jump,
192
                cmd_negate_op2_i=>decode_cmd_negate_op2,
193
                cmd_and_i=>decode_cmd_and,
194
                cmd_xor_i=>decode_cmd_xor,
195
                cmd_shift_i=>decode_cmd_shift,
196
                cmd_shift_right_i=>decode_cmd_shift_right,
197
 
198
                jump_type_i=>decode_jump_type,
199
 
200
                op1_i=>decode_op1,
201
                op2_i=>decode_op2,
202
                op3_i=>decode_op3,
203
                dst_i=>decode_dst,
204
 
205
                sp_waddr_o=>sp_waddr,
206
                sp_we_o=>sp_we,
207
                sp_wdata_o=>sp_wdata,
208
 
209
                valid_i=>decode_valid,
210
                ready_o=>execute_ready,
211
 
212
                dbus_cyc_o=>dbus_cyc_o,
213
                dbus_stb_o=>dbus_stb_o,
214
                dbus_we_o=>dbus_we_o,
215
                dbus_sel_o=>dbus_sel_o,
216
                dbus_ack_i=>dbus_ack_i,
217
                dbus_adr_o=>dbus_adr_o,
218
                dbus_dat_o=>dbus_dat_o,
219
                dbus_dat_i=>dbus_dat_i,
220
 
221
                jump_valid_o=>execute_jump_valid,
222
                jump_dst_o=>execute_jump_dst,
223
                jump_ready_i=>fetch_jump_ready,
224
 
225
                interrupt_return_o=>interrupt_return
226
        );
227
 
228
scratchpad_inst: entity work.lxp32_scratchpad(rtl)
229
        port map(
230
                clk_i=>clk_i,
231
 
232
                raddr1_i=>sp_raddr1,
233
                rdata1_o=>sp_rdata1,
234
                raddr2_i=>sp_raddr2,
235
                rdata2_o=>sp_rdata2,
236
 
237
                waddr_i=>sp_waddr,
238
                we_i=>sp_we,
239
                wdata_i=>sp_wdata
240
        );
241
 
242
interrupt_mux_inst: entity work.lxp32_interrupt_mux(rtl)
243
        port map(
244
                clk_i=>clk_i,
245
                rst_i=>rst_i,
246
 
247
                irq_i=>irq_i,
248
 
249
                interrupt_valid_o=>interrupt_valid,
250
                interrupt_vector_o=>interrupt_vector,
251
                interrupt_ready_i=>interrupt_ready,
252
                interrupt_return_i=>interrupt_return,
253 12 ring0_mipt
 
254
                wakeup_o=>interrupt_wakeup,
255 9 ring0_mipt
 
256
                sp_waddr_i=>sp_waddr,
257
                sp_we_i=>sp_we,
258
                sp_wdata_i=>sp_wdata
259
        );
260
 
261
end architecture;

powered by: WebSVN 2.1.0

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