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

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [arm/] [arm_comp.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tarookumic
-- $(lic)
2
-- $(help_generic)
3
-- $(help_local)
4
 
5
library IEEE;
6
use IEEE.std_logic_1164.all;
7
use work.amba.all;
8
use work.corelib.all;
9
use work.bus_comp.all;
10
use work.cache_comp.all;
11
use work.ctrl_comp.all;
12
use work.armpctrl.all;
13
use work.armpmodel.all;
14
use work.armdecode.all;
15
 
16
package arm_comp is
17
 
18
type arm_proc_typ_in is record
19
   irqo : irq_iu_out_type;
20
end record;
21
 
22
type arm_proc_typ_out is record
23
   irqi : irq_iu_in_type;
24
end record;
25
 
26
component arm_proc
27
  generic (
28
    TEST_CACHE : boolean := false
29
  );
30
  port (
31
    rst    : in  std_logic;
32
    clk    : in  std_logic;
33
    clkn   : in  std_logic;
34
    i      : in arm_proc_typ_in;
35
    o      : out arm_proc_typ_out;
36
    ahbi   : in  ahb_mst_in_type;
37
    ahbo   : out ahb_mst_out_type;
38
    apbi   : in  apb_slv_in_type;
39
    apbo   : out apb_slv_out_type
40
  );
41
end component;
42
 
43
component armcache
44
  port (
45
    rst    : in  std_logic;
46
    clk    : in  std_logic;
47
    hold   : in cli_hold;
48
    ici    : in genic_type_in;
49
    ico    : out genic_type_out;
50
    dci    : in gendc_type_in;
51
    dco    : out gendc_type_out;
52
    ahbi   : in  ahb_mst_in_type;
53
    ahbo   : out ahb_mst_out_type;
54
    apbi   : in  apb_slv_in_type;
55
    apbo   : out apb_slv_out_type
56
  );
57
end component;
58
 
59
type armiu_typ_in is record
60
   irqo : irq_iu_out_type;
61
end record;
62
 
63
type armiu_typ_out is record
64
   irqi : irq_iu_in_type;
65
end record;
66
 
67
component armiu
68
  port (
69
    rst     : in  std_logic;
70
    clk     : in  std_logic;
71
    clkn    : in  std_logic;
72
    hold    : in cli_hold;
73
    ici     : out genic_type_in;
74
    ico     : in genic_type_out;
75
    dci     : out gendc_type_in;
76
    dco     : in gendc_type_out;
77
    i       : in  armiu_typ_in;
78
    o       : out armiu_typ_out
79
    );
80
end component;
81
 
82
component tbench_armcache
83
  port (
84
    rst     : in  std_logic;
85
    clk     : in  std_logic;
86
    clkn    : in  std_logic;
87
    hold    : in cli_hold;
88
    ici     : out genic_type_in;
89
    ico     : in genic_type_out;
90
    dci     : out gendc_type_in;
91
    dco     : in gendc_type_out;
92
    i       : in  armiu_typ_in;
93
    o       : out armiu_typ_out
94
    );
95
end component;
96
 
97
-------------------------------------------------------------------------------
98
 
99
-- imstg inputs:
100
-- pstate          : [rrstg,wrstg] pctrls + hold + nextinsn
101
 
102
type armiu_imstg_typ_in is record
103
   pstate : apc_pstate;
104
   flush_v : std_logic;
105
   branch_v : std_logic;
106
   addrvir_v : std_logic_vector(31 downto 0);
107
end record;
108
 
109
-- imstg outputs:
110
-- toFE_addrphy_v   : translated physical address
111
-- toFE_addrvir_v   : current virtual address
112
-- toFE_addrvalid_v : addr valid ('0' after pflush until next branchaddr enters)
113
-- toFE_branch_v    : is branch
114
-- toFE_trap_v      : prefectch trap
115
 
116
type armiu_imstg_typ_out is record
117
   toFE_addrphy_v   : std_logic_vector(31 downto 0);
118
   toFE_addrvir_v   : std_logic_vector(31 downto 0);
119
   toFE_addrvalid_v : std_logic;
120
   toFE_branch_v    : std_logic;
121
   toFE_trap_v      : std_logic;
122
end record;
123
 
124
component armiu_imstg
125
  port (
126
    rst     : in  std_logic;
127
    clk     : in  std_logic;
128
    i       : in  armiu_imstg_typ_in;
129
    o       : out armiu_imstg_typ_out
130
    );
131
end component;
132
 
133
-------------------------------------------------------------------------------
134
-- festg inputs:
135
-- pstate          : [rrstg,wrstg] pctrls + hold + nextinsn
136
-- fromIM_addrphy_v   : translated physical address
137
-- fromIM_addrvir_v   : current virtual address
138
-- fromIM_addrvalid_v : addr valid ('0' after pflush until next branchaddr enters)
139
-- fromIM_branch_v    : is branch
140
-- fromIM_trap_v      : prefectch trap
141
 
142
type armiu_festg_typ_in is record
143
   pstate : apc_pstate;
144
   flush_v : std_logic;
145
   ico   : genic_type_out;
146
   fromIM_addrphy_v   : std_logic_vector(31 downto 0);
147
   fromIM_addrvir_v   : std_logic_vector(31 downto 0);
148
   fromIM_addrvalid_v : std_logic;
149
   fromIM_branch_v    : std_logic;
150
   fromIM_trap_v      : std_logic;
151
end record;
152
 
153
-- festg outputs:
154
-- toDE_insn_r    : fetched insn (drives destg)
155
-- toDE_insn_v    : next cycle fetched insn (sampled on pstate.hold and pstate.nextinsn)
156
 
157
type armiu_festg_typ_out is record
158
   ici   : genic_type_in;
159
   toDE_insn_r : ade_feinsn;
160
   toDE_insn_v : ade_feinsn;
161
end record;
162
 
163
component armiu_festg
164
  port (
165
    rst     : in  std_logic;
166
    clk     : in  std_logic;
167
    i       : in  armiu_festg_typ_in;
168
    o       : out armiu_festg_typ_out
169
    );
170
end component;
171
 
172
-------------------------------------------------------------------------------
173
 
174
-- destg inputs:
175
-- pstate          : [rrstg,wrstg] pctrls + hold + nextinsn
176
-- fromFE_insn_r   : fetched insn (drives destg)
177
-- fromFE_insn_v   : next cycle fetched insn (sampled in festg on pstate.hold and pstate.nextinsn)
178
 
179
type armiu_destg_typ_in is record
180
   pstate : apc_pstate;
181
   flush_v : std_logic;
182
   fromFE_insn_r : ade_feinsn;
183
   fromFE_insn_v : ade_feinsn;
184
end record;
185
 
186
-- destg outputs:
187
-- toDR_insn_r    : decoded insn (drives drstg)
188
-- toDR_insn_v    : next cycle decoded insn, (sampled on pstate.hold and pstate.nextinsn)
189
 
190
type armiu_destg_typ_out is record
191
   toDR_insn_r : ade_deinsn;
192
   toDR_insn_v : ade_deinsn;
193
end record;
194
 
195
component armiu_destg
196
  port (
197
    rst     : in  std_logic;
198
    clk     : in  std_logic;
199
    i       : in  armiu_destg_typ_in;
200
    o       : out armiu_destg_typ_out
201
    );
202
end component;
203
 
204
-------------------------------------------------------------------------------
205
 
206
-- drstg inputs:
207
-- fromDE_insn_r      : decoded insn (drives drstg)
208
-- fromDE_insn_v      : next cycle decoded insn, (sampled in destg on pstate.hold and pstate.nextinsn)
209
-- fromRR_nextmicro_v : register locking from rrstg
210
-- fromWR_dabort_v     : data abort in wrstg
211
-- fromCPDE_accept    : coprocessor accept cmd (for undef trap)
212
-- fromCPDE_busy      : coprocessor lock until ready
213
-- fromCPDE_last      : coprocessor (ldc,stc) last addr
214
 
215
type armiu_drstg_typ_in is record
216
   pstate : apc_pstate;
217
   flush_v : std_logic;
218
 
219
   fromDE_insn_r : ade_deinsn;
220
   fromDE_insn_v : ade_deinsn;
221
   fromRR_nextmicro_v : std_logic;
222
   fromWR_dabort_v : std_logic;
223
 
224
   fromCPDE_accept : std_logic;
225
   fromCPDE_busy : std_logic;
226
   fromCPDE_last : std_logic;
227
 
228
end record;
229
 
230
-- drstg outputs:
231
-- toRR_micro_v    : pctrl + src regs assemble next microcode to rrstg
232
-- id              : cmd id
233
type armiu_drstg_typ_out is record
234
   nextinsn_v : std_logic;
235
   toRR_micro_v : apc_micro;
236
   id : std_logic_vector(2 downto 0);
237
end record;
238
 
239
component armiu_drstg
240
  port (
241
    rst     : in  std_logic;
242
    clk     : in  std_logic;
243
    i       : in  armiu_drstg_typ_in;
244
    o       : out armiu_drstg_typ_out
245
    );
246
end component;
247
 
248
-------------------------------------------------------------------------------
249
 
250
-- rrstg inputs:
251
-- pstate            : [rrstg,wrstg] pctrls + hold
252
-- fromDR_micro_v    : pctrl + src regs assemble by drstg
253
-- fromEX_alures_v   : current aluresult of exstg for forwarding 
254
-- fromWR_rd_v       : wrstg write: write reg
255
-- fromWR_rd_valid_v : wrstg write: write enable
256
-- fromWR_rd_data_v  : wrstg write: write data
257
-- fromCPEX_data     : coprocessor cpreg->armreg, cpreg->mem (mrc,stc)
258
-- fromCPEX_lock     : coprocessor holds pipeline
259
 
260
type armiu_rrstg_typ_in is record
261
   pstate : apc_pstate;
262
   flush_v : std_logic;
263
 
264
   fromDR_micro_v : apc_micro;
265
   fromEX_alures_v : std_logic_vector(31 downto 0);
266
 
267
   fromWR_rd_v : std_logic_vector(APM_RREAL_U downto APM_RREAL_D);
268
   fromWR_rd_valid_v : std_logic;
269
   fromWR_rd_data_v : std_logic_vector(31 downto 0);
270
 
271
   fromCPEX_data : std_logic_vector(31 downto 0);
272
   fromCPEX_lock : std_logic;
273
end record;
274
 
275
-- rrstg outputs:
276
-- fromRR_nextmicro_v : register locking (also coprocessor registers)
277
 
278
type armiu_rrstg_typ_out is record
279
   pctrl_r : apc_pctrl;
280
   toRS_pctrl_v : apc_pctrl;
281
 
282
   toDR_nextmicro_v  : std_logic;
283
end record;
284
 
285
component armiu_rrstg
286
  port (
287
    rst     : in  std_logic;
288
    clk     : in  std_logic;
289
    clkn    : in  std_logic;
290
    i       : in  armiu_rrstg_typ_in;
291
    o       : out armiu_rrstg_typ_out
292
    );
293
end component;
294
 
295
-------------------------------------------------------------------------------
296
 
297
-- rsstg inputs:
298
-- pstate          : [rrstg,wrstg] pctrls + hold
299
-- fromRR_pctrl_v  : next pctrl, sampled on pstate.hold = '0'
300
-- fromEX_alures_v : current aluresult of exstg for forwarding (rsop_op(1|2)_src = apc_opsrc_alures)
301
-- fromEX_cpsr_v   : exstg cpsr (carry for shiefter)
302
 
303
type armiu_rsstg_typ_in is record
304
   pstate : apc_pstate;
305
   flush_v : std_logic;
306
 
307
   fromRR_pctrl_v : apc_pctrl;
308
   fromEX_alures_v : std_logic_vector(31 downto 0);
309
   fromEX_cpsr_v : apm_cpsr;
310
end record;
311
 
312
type armiu_rsstg_typ_out is record
313
   pctrl_r : apc_pctrl;
314
   toEX_pctrl_v : apc_pctrl;
315
end record;
316
 
317
component armiu_rsstg
318
  port (
319
    rst     : in  std_logic;
320
    clk     : in  std_logic;
321
    i       : in  armiu_rsstg_typ_in;
322
    o       : out armiu_rsstg_typ_out
323
    );
324
end component;
325
 
326
-------------------------------------------------------------------------------
327
 
328
-- exstg inputs:
329
-- pstate           : [rrstg,wrstg] pctrls + hold
330
-- fromRS_pctrl_v   : next pctrl, sampled on pstate.hold = '0'
331
-- fromWR_spsr_r    : wrstg spsr (for mrs,msr)
332
-- fromWR_cpsr_v    : wrstg write cpsr 
333
-- fromWR_cpsrset_v : wrstg write cpsr enable
334
-- fromCP_active    : coprocessor active (for undef trap)
335
 
336
type armiu_exstg_typ_in is record
337
   pstate : apc_pstate;
338
   flush_v : std_logic;
339
 
340
   fromRS_pctrl_v : apc_pctrl;
341
 
342
   fromWR_spsr_r  : apm_spsr;
343
   fromWR_cpsr_v  : apm_cpsr;
344
   fromWR_cpsrset_v : std_logic;
345
 
346
   fromCP_active : std_logic;
347
end record;
348
 
349
-- exstg outputs:
350
-- cpsr_r   : exstg cpsr
351
-- cpsr_v   : exstg cpsr next cycle
352
-- alures_v : current aluresult
353
-- toIM_branch_v : alures_v into imstg as address
354
-- flush_v       : flush [imstg-rsstg]
355
type armiu_exstg_typ_out is record
356
   pctrl_r : apc_pctrl;
357
   toDM_pctrl_v : apc_pctrl;
358
 
359
   cpsr_r : apm_cpsr;
360
   cpsr_v : apm_cpsr;
361
   alures_v : std_logic_vector(31 downto 0);
362
 
363
   toIM_branch_v : std_logic;
364
   flush_v : std_logic;
365
 
366
end record;
367
 
368
component armiu_exstg
369
  port (
370
    rst     : in  std_logic;
371
    clk     : in  std_logic;
372
    i       : in  armiu_exstg_typ_in;
373
    o       : out armiu_exstg_typ_out
374
    );
375
end component;
376
 
377
-------------------------------------------------------------------------------
378
 
379
-- dmstg inputs:
380
-- pstate          : [rrstg,wrstg] pctrls + hold
381
-- fromEX_pctrl_v  : next pctrl, sampled on pstate.hold = '0'
382
 
383
type armiu_dmstg_typ_in is record
384
   pstate : apc_pstate;
385
   flush_v : std_logic;
386
 
387
   fromEX_pctrl_v : apc_pctrl;
388
end record;
389
 
390
type armiu_dmstg_typ_out is record
391
   pctrl_r : apc_pctrl;
392
   toME_pctrl_v : apc_pctrl;
393
end record;
394
 
395
component armiu_dmstg
396
  port (
397
    rst     : in  std_logic;
398
    clk     : in  std_logic;
399
    i       : in  armiu_dmstg_typ_in;
400
    o       : out armiu_dmstg_typ_out
401
    );
402
end component;
403
 
404
-------------------------------------------------------------------------------
405
 
406
-- mestg inputs:
407
-- pstate          : [rrstg,wrstg] pctrls + hold
408
-- fromDM_pctrl_v  : next pctrl, sampled on pstate.hold = '0'
409
-- dci             : dcache input
410
-- irqo            : irq ctrl output
411
 
412
-- mestg outputs:
413
 
414
type armiu_mestg_typ_in is record
415
   pstate : apc_pstate;
416
   flush_v : std_logic;
417
 
418
   irqo : irq_iu_out_type;
419
   fromDM_pctrl_v : apc_pctrl;
420
end record;
421
 
422
type armiu_mestg_typ_out is record
423
   pctrl_r : apc_pctrl;
424
   toWR_pctrl_v : apc_pctrl;
425
   dci   : gendc_type_in;
426
end record;
427
 
428
component armiu_mestg
429
  port (
430
    rst     : in  std_logic;
431
    clk     : in  std_logic;
432
    i       : in  armiu_mestg_typ_in;
433
    o       : out armiu_mestg_typ_out
434
    );
435
end component;
436
 
437
-------------------------------------------------------------------------------
438
 
439
-- wrstg inputs:
440
-- pstate            : [rrstg,wrstg] pctrls + hold
441
-- fromME_pctrl_v    : next pctrl, sampled on pstate.hold = '0'
442
-- dco               : dcache output
443
-- fromCP_data       : coprocessor armreg->cpreg (mcr)
444
 
445
type armiu_wrstg_typ_in is record
446
   pstate : apc_pstate;
447
   fromME_pctrl_v : apc_pctrl;
448
   dco   : gendc_type_out;
449
 
450
   fromCP_data : std_logic_vector(31 downto 0);
451
end record;
452
 
453
-- wrstg outputs:
454
-- spsr_r            : wrstg spsr;
455
-- toIM_branch_v     : branch on memload->pc or trap
456
-- toIM_branchaddr_v : branch addr
457
-- toDR_dabort_v     : signal dabort
458
-- toEX_cpsr_v       : set exstg cpsr
459
-- toEX_cpsrset_v    : set exstg cpsr enable
460
-- toRR_rd_v         : write rd reg
461
-- toRR_rd_valid_v   : write rd enable
462
-- toRR_rd_data_v    : write rd data
463
-- toCPWR_crd_data_v : coprocessor mem->cpreg data (ldc)
464
-- irqi              : irqctrl irq ack
465
type armiu_wrstg_typ_out is record
466
   pctrl_r : apc_pctrl;
467
 
468
   spsr_r : apm_spsr;
469
 
470
   irqi : irq_iu_in_type;
471
 
472
   toIM_branch_v : std_logic;
473
   toIM_branchaddr_v : std_logic_vector(31 downto 0);
474
 
475
   toDR_dabort_v : std_logic;
476
 
477
   toEX_cpsr_v : apm_cpsr;
478
   toEX_cpsrset_v : std_logic;
479
 
480
   toRR_rd_v : std_logic_vector(APM_RREAL_U downto APM_RREAL_D);
481
   toRR_rd_valid_v : std_logic;
482
   toRR_rd_data_v : std_logic_vector(31 downto 0);
483
 
484
   toCPWR_crd_data_v : std_logic_vector(31 downto 0);
485
end record;
486
 
487
component armiu_wrstg
488
  port (
489
    rst     : in  std_logic;
490
    clk     : in  std_logic;
491
    i       : in  armiu_wrstg_typ_in;
492
    o       : out armiu_wrstg_typ_out
493
    );
494
end component;
495
 
496
end arm_comp;

powered by: WebSVN 2.1.0

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