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

Subversion Repositories avr_hp

[/] [avr_hp/] [trunk/] [rtl/] [rtl_s3_cm3/] [avr_core.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tobil
--************************************************************************************************
2
--  Top entity for AVR core
3
--  Version 1.82? (Special version for the JTAG OCD)
4
--  Designed by Ruslan Lepetenok 
5
--  Modified 31.08.2006
6
--  SLEEP and CLRWDT instructions support was added
7
--  BREAK instructions support was added 
8
--  PM clock enable was added
9
--************************************************************************************************
10
 
11
library IEEE;
12
use IEEE.std_logic_1164.all;
13
 
14
 
15
entity AVR_Core_cm3 is port(
16
                cp2_cml_1 : in std_logic;
17
                cp2_cml_2 : in std_logic;
18
 
19
                        --Clock and reset
20
                            cp2         : in  std_logic;
21
                                                cp2en       : in  std_logic;
22
                        ireset      : in  std_logic;
23
                                            -- JTAG OCD support
24
                                            valid_instr : out std_logic;
25
                                                insert_nop  : in  std_logic;
26
                                                block_irq   : in  std_logic;
27
                                                change_flow : out std_logic;
28
                        -- Program Memory
29
                        pc          : out std_logic_vector(15 downto 0);
30
                        inst        : in  std_logic_vector(15 downto 0);
31
                        -- I/O control
32
                        adr         : out std_logic_vector(5 downto 0);
33
                        iore        : out std_logic;
34
                        iowe        : out std_logic;
35
                        -- Data memory control
36
                        ramadr      : out std_logic_vector(15 downto 0);
37
                        ramre       : out std_logic;
38
                        ramwe       : out std_logic;
39
                                                cpuwait     : in  std_logic;
40
                                                -- Data paths
41
                        dbusin      : in  std_logic_vector(7 downto 0);
42
                        dbusout     : out std_logic_vector(7 downto 0);
43
                        -- Interrupt
44
                        irqlines    : in  std_logic_vector(22 downto 0);
45
                        irqack      : out std_logic;
46
                        irqackad    : out std_logic_vector(4 downto 0);
47
                        --Sleep Control
48
                        sleepi      : out std_logic;
49
                        irqok       : out std_logic;
50
                        globint     : out std_logic;
51
                        --Watchdog
52
                        wdri        : out std_logic
53
                                                );
54
end AVR_Core_cm3;
55
 
56
 
57
architecture Struct of avr_core_cm3 is
58
 
59
component pm_fetch_dec_cm3 is port(
60
                cp2_cml_1 : in std_logic;
61
                cp2_cml_2 : in std_logic;
62
                              -- Clock and reset
63
                              cp2              : in  std_logic;
64
                                                          cp2en            : in  std_logic;
65
                              ireset           : in  std_logic;
66
                                                          -- JTAG OCD support
67
                                                  valid_instr      : out  std_logic;
68
                                                      insert_nop       : in std_logic;
69
                                                      block_irq        : in std_logic;
70
                                                      change_flow      : out  std_logic;
71
                              -- Program memory
72
                              pc               : out std_logic_vector (15 downto 0);
73
                              inst             : in  std_logic_vector (15 downto 0);
74
                              -- I/O control
75
                              adr              : out std_logic_vector (5 downto 0);
76
                              iore             : out std_logic;
77
                              iowe             : out std_logic;
78
                              -- Data memory control
79
                              ramadr           : out std_logic_vector (15 downto 0);
80
                              ramre            : out std_logic;
81
                              ramwe            : out std_logic;
82
                              cpuwait          : in  std_logic;
83
                                                          -- Data paths
84
                              dbusin           : in  std_logic_vector (7 downto 0);
85
                              dbusout          : out std_logic_vector (7 downto 0);
86
                              dbusout_int_route : out std_logic_vector (7 downto 0);
87
                              -- Interrupt
88
                              irqlines         : in  std_logic_vector (22 downto 0);
89
                              irqack           : out std_logic;
90
                              irqackad         : out std_logic_vector(4 downto 0);
91
                                                      --Sleep 
92
                              sleepi           : out std_logic;
93
                              irqok                : out std_logic;
94
                              --Watchdog
95
                              wdri                 : out std_logic;
96
                                                          -- ALU interface(Data inputs)
97
                              alu_data_r_in    : out std_logic_vector(7 downto 0);
98
                                                          -- ALU interface(Instruction inputs)
99
                                                          idc_add_out      : out std_logic;
100
                              idc_adc_out      : out std_logic;
101
                              idc_adiw_out     : out std_logic;
102
                              idc_sub_out      : out std_logic;
103
                              idc_subi_out     : out std_logic;
104
                              idc_sbc_out      : out std_logic;
105
                              idc_sbci_out     : out std_logic;
106
                              idc_sbiw_out     : out std_logic;
107
 
108
                              adiw_st_out      : out std_logic;
109
                              sbiw_st_out      : out std_logic;
110
 
111
                              idc_and_out      : out std_logic;
112
                              idc_andi_out     : out std_logic;
113
                              idc_or_out       : out std_logic;
114
                              idc_ori_out      : out std_logic;
115
                              idc_eor_out      : out std_logic;
116
                              idc_com_out      : out std_logic;
117
                              idc_neg_out      : out std_logic;
118
 
119
                              idc_inc_out      : out std_logic;
120
                              idc_dec_out      : out std_logic;
121
 
122
                              idc_cp_out       : out std_logic;
123
                              idc_cpc_out      : out std_logic;
124
                              idc_cpi_out      : out std_logic;
125
                              idc_cpse_out     : out std_logic;
126
 
127
                              idc_lsr_out      : out std_logic;
128
                              idc_ror_out      : out std_logic;
129
                              idc_asr_out      : out std_logic;
130
                              idc_swap_out     : out std_logic;
131
 
132
                               -- ALU interface(Data output)
133
                               alu_data_out    : in std_logic_vector(7 downto 0);
134
 
135
                               -- ALU interface(Flag outputs)
136
                               alu_c_flag_out  : in std_logic;
137
                               alu_z_flag_out  : in std_logic;
138
                               alu_n_flag_out  : in std_logic;
139
                               alu_v_flag_out  : in std_logic;
140
                               alu_s_flag_out  : in std_logic;
141
                               alu_h_flag_out  : in std_logic;
142
 
143
                                                           -- General purpose register file interface
144
                               reg_rd_in       : out std_logic_vector  (7 downto 0);
145
                               reg_rd_out      : in  std_logic_vector  (7 downto 0);
146
                               reg_rd_out_int  : in std_logic_vector(7 downto 0);
147
                               reg_rd_adr      : out std_logic_vector  (4 downto 0);
148
                               reg_rd_adr_int      : out std_logic_vector  (4 downto 0);
149
                               reg_rr_out      : in  std_logic_vector  (7 downto 0);
150
                               reg_rr_adr      : out std_logic_vector  (4 downto 0);
151
                               reg_rd_wr       : out std_logic;
152
 
153
                               post_inc        : out std_logic;                       -- POST INCREMENT FOR LD/ST INSTRUCTIONS
154
                               pre_dec         : out std_logic;                        -- PRE DECREMENT FOR LD/ST INSTRUCTIONS
155
                               reg_h_wr        : out std_logic;
156
                               reg_h_out       : in  std_logic_vector (15 downto 0);
157
                               reg_h_adr       : out std_logic_vector (2 downto 0);    -- x,y,z
158
                                       reg_z_out       : in  std_logic_vector (15 downto 0);  -- OUTPUT OF R31:R30 FOR LPM/ELPM/IJMP INSTRUCTIONS
159
 
160
                               -- I/O register file interface
161
                               sreg_fl_in      : out std_logic_vector(7 downto 0);
162
                               globint         : in  std_logic; -- SREG I flag
163
 
164
                               sreg_fl_wr_en   : out std_logic_vector(7 downto 0);   --FLAGS WRITE ENABLE SIGNALS       
165
 
166
                               spl_out         : in  std_logic_vector(7 downto 0);
167
                               sph_out         : in  std_logic_vector(7 downto 0);
168
                               sp_ndown_up     : out std_logic; -- DIRECTION OF CHANGING OF STACK POINTER SPH:SPL 0->UP(+) 1->DOWN(-)
169
                               sp_en           : out std_logic; -- WRITE ENABLE(COUNT ENABLE) FOR SPH AND SPL REGISTERS
170
 
171
                               rampz_out       : in  std_logic_vector(7 downto 0);
172
 
173
                                                           -- Bit processor interface
174
                               bit_num_r_io    : out std_logic_vector(2 downto 0); -- BIT NUMBER FOR CBI/SBI/BLD/BST/SBRS/SBRC/SBIC/SBIS INSTRUCTIONS
175
                               bitpr_io_out    : in  std_logic_vector(7 downto 0); -- SBI/CBI OUT        
176
                               branch          : out std_logic_vector(2 downto 0); -- NUMBER (0..7) OF BRANCH CONDITION FOR BRBS/BRBC INSTRUCTION
177
                               bit_pr_sreg_out : in  std_logic_vector(7 downto 0); -- BCLR/BSET/BST(T-FLAG ONLY)             
178
                               bld_op_out      : in  std_logic_vector(7 downto 0); -- BLD OUT (T FLAG)
179
                               bit_test_op_out : in  std_logic;                    -- OUTPUT OF SBIC/SBIS/SBRS/SBRC
180
 
181
                               sbi_st_out      : out std_logic;
182
                               cbi_st_out      : out std_logic;
183
 
184
                               idc_bst_out     : out std_logic;
185
                               idc_bset_out    : out std_logic;
186
                               idc_bclr_out    : out std_logic;
187
 
188
                               idc_sbic_out    : out std_logic;
189
                               idc_sbis_out    : out std_logic;
190
 
191
                               idc_sbrs_out    : out std_logic;
192
                               idc_sbrc_out    : out std_logic;
193
 
194
                               idc_brbs_out    : out std_logic;
195
                               idc_brbc_out    : out std_logic;
196
 
197
                               idc_reti_out    : out std_logic);
198
 
199
end component;
200
 
201
 
202
component alu_avr_cm3 is port(
203
                cp2_cml_1 : in std_logic;
204
                cp2_cml_2 : in std_logic;
205
 
206
              alu_data_r_in   : in std_logic_vector(7 downto 0);
207
              alu_data_d_in   : in std_logic_vector(7 downto 0);
208
 
209
              alu_c_flag_in   : in std_logic;
210
              alu_z_flag_in   : in std_logic;
211
 
212
 
213
-- OPERATION SIGNALS INPUTS
214
              idc_add         :in std_logic;
215
              idc_adc         :in std_logic;
216
              idc_adiw        :in std_logic;
217
              idc_sub         :in std_logic;
218
              idc_subi        :in std_logic;
219
              idc_sbc         :in std_logic;
220
              idc_sbci        :in std_logic;
221
              idc_sbiw        :in std_logic;
222
 
223
              adiw_st         : in std_logic;
224
              sbiw_st         : in std_logic;
225
 
226
              idc_and         :in std_logic;
227
              idc_andi        :in std_logic;
228
              idc_or          :in std_logic;
229
              idc_ori         :in std_logic;
230
              idc_eor         :in std_logic;
231
              idc_com         :in std_logic;
232
              idc_neg         :in std_logic;
233
 
234
              idc_inc         :in std_logic;
235
              idc_dec         :in std_logic;
236
 
237
              idc_cp          :in std_logic;
238
              idc_cpc         :in std_logic;
239
              idc_cpi         :in std_logic;
240
              idc_cpse        :in std_logic;
241
 
242
              idc_lsr         :in std_logic;
243
              idc_ror         :in std_logic;
244
              idc_asr         :in std_logic;
245
              idc_swap        :in std_logic;
246
 
247
 
248
-- DATA OUTPUT
249
              alu_data_out    : out std_logic_vector(7 downto 0);
250
 
251
-- FLAGS OUTPUT
252
              alu_c_flag_out  : out std_logic;
253
              alu_z_flag_out  : out std_logic;
254
              alu_n_flag_out  : out std_logic;
255
              alu_v_flag_out  : out std_logic;
256
              alu_s_flag_out  : out std_logic;
257
              alu_h_flag_out  : out std_logic
258
);
259
 
260
end component;
261
 
262
 
263
component reg_file_cm3 is port (
264
                cp2_cml_1 : in std_logic;
265
                cp2_cml_2 : in std_logic;
266
                                                        --Clock and reset
267
                                                cp2         : in  std_logic;
268
                                                        cp2en       : in  std_logic;
269
                            ireset      : in  std_logic;
270
 
271
                            reg_rd_in   : in std_logic_vector  (7 downto 0);
272
                            reg_rd_out  : out std_logic_vector (7 downto 0);
273
                            reg_rd_out_int  : out std_logic_vector(7 downto 0);
274
                            reg_rd_adr  : in std_logic_vector  (4 downto 0);
275
                            reg_rd_adr_int      : in std_logic_vector  (4 downto 0);
276
                            reg_rr_out  : out std_logic_vector (7 downto 0);
277
                            reg_rr_adr  : in std_logic_vector  (4 downto 0);
278
                            reg_rd_wr   : in std_logic;
279
 
280
                            post_inc    : in std_logic;                       -- POST INCREMENT FOR LD/ST INSTRUCTIONS
281
                            pre_dec     : in std_logic;                        -- PRE DECREMENT FOR LD/ST INSTRUCTIONS
282
                            reg_h_wr    : in std_logic;
283
                            reg_h_out   : out std_logic_vector (15 downto 0);
284
                            reg_h_adr   : in std_logic_vector (2 downto 0);    -- x,y,z
285
                                    reg_z_out   : out std_logic_vector (15 downto 0)  -- OUTPUT OF R31:R30 FOR LPM/ELPM/IJMP INSTRUCTIONS
286
                            );
287
end component;
288
 
289
component io_reg_file_cm3 is port (
290
                cp2_cml_1 : in std_logic;
291
                cp2_cml_2 : in std_logic;
292
                                       --Clock and reset
293
                                   cp2           : in  std_logic;
294
                                                           cp2en         : in  std_logic;
295
                               ireset        : in  std_logic;
296
 
297
                               adr           : in  std_logic_vector(5 downto 0);
298
                               iowe          : in  std_logic;
299
                               dbusout       : in  std_logic_vector(7 downto 0);
300
 
301
                               sreg_fl_in    : in  std_logic_vector(7 downto 0);
302
                               sreg_out      : out std_logic_vector(7 downto 0);
303
 
304
                               sreg_fl_wr_en : in std_logic_vector (7 downto 0);   --FLAGS WRITE ENABLE SIGNALS       
305
 
306
                               spl_out       : out std_logic_vector(7 downto 0);
307
                               sph_out       : out std_logic_vector(7 downto 0);
308
                               sp_ndown_up   : in  std_logic; -- DIRECTION OF CHANGING OF STACK POINTER SPH:SPL 0->UP(+) 1->DOWN(-)
309
                               sp_en         : in  std_logic; -- WRITE ENABLE(COUNT ENABLE) FOR SPH AND SPL REGISTERS
310
 
311
                               rampz_out     : out std_logic_vector(7 downto 0));
312
end component;
313
 
314
 
315
component bit_processor_cm3 is port(
316
                cp2_cml_1 : in std_logic;
317
                cp2_cml_2 : in std_logic;
318
                                                          --Clock and reset
319
                              cp2             : in  std_logic;
320
                                                          cp2en           : in  std_logic;
321
                              ireset          : in  std_logic;
322
 
323
                              bit_num_r_io    : in  std_logic_vector(2 downto 0); -- BIT NUMBER FOR CBI/SBI/BLD/BST/SBRS/SBRC/SBIC/SBIS INSTRUCTIONS
324
                              dbusin          : in  std_logic_vector(7 downto 0); -- SBI/CBI/SBIS/SBIC  IN
325
                              bitpr_io_out    : out std_logic_vector(7 downto 0); -- SBI/CBI OUT        
326
                              sreg_out        : in  std_logic_vector(7 downto 0); -- BRBS/BRBC/BLD IN 
327
                              branch          : in  std_logic_vector(2 downto 0); -- NUMBER (0..7) OF BRANCH CONDITION FOR BRBS/BRBC INSTRUCTION
328
                              bit_pr_sreg_out : out std_logic_vector(7 downto 0); -- BCLR/BSET/BST(T-FLAG ONLY)             
329
                              bld_op_out      : out std_logic_vector(7 downto 0); -- BLD OUT (T FLAG)
330
                              reg_rd_out      : in  std_logic_vector(7 downto 0); -- BST/SBRS/SBRC IN    
331
                              bit_test_op_out : out std_logic;                    -- OUTPUT OF SBIC/SBIS/SBRS/SBRC/BRBC/BRBS
332
                              -- Instructions and states
333
                              sbi_st          : in  std_logic;
334
                              cbi_st          : in  std_logic;
335
                              idc_bst         : in  std_logic;
336
                              idc_bset        : in  std_logic;
337
                              idc_bclr        : in  std_logic;
338
                              idc_sbic        : in  std_logic;
339
                              idc_sbis        : in  std_logic;
340
                              idc_sbrs        : in  std_logic;
341
                              idc_sbrc        : in  std_logic;
342
                              idc_brbs        : in  std_logic;
343
                              idc_brbc        : in  std_logic;
344
                              idc_reti        : in  std_logic
345
                                                          );
346
 
347
end component;
348
 
349
component io_adr_dec_cm3 is port (
350
                cp2_cml_1 : in std_logic;
351
          adr          : in std_logic_vector(5 downto 0);
352
          iore         : in std_logic;
353
          dbusin_ext   : in std_logic_vector(7 downto 0);
354
          dbusin_int   : out std_logic_vector(7 downto 0);
355
 
356
          spl_out      : in std_logic_vector(7 downto 0);
357
          sph_out      : in std_logic_vector(7 downto 0);
358
          sreg_out     : in std_logic_vector(7 downto 0);
359
          rampz_out    : in std_logic_vector(7 downto 0));
360
end component;
361
 
362
signal dbusin_int  : std_logic_vector(7 downto 0);
363
signal dbusout_int : std_logic_vector(7 downto 0);
364
 
365
signal adr_int     : std_logic_vector(5 downto 0);
366
 
367
signal iowe_int    : std_logic;
368
signal iore_int    : std_logic;
369
 
370
-- SIGNALS FOR INSTRUCTION AND STATES
371
signal idc_add  : std_logic;
372
signal idc_adc  : std_logic;
373
signal idc_adiw : std_logic;
374
signal idc_sub  : std_logic;
375
signal idc_subi : std_logic;
376
signal idc_sbc  : std_logic;
377
signal idc_sbci : std_logic;
378
signal idc_sbiw : std_logic;
379
signal adiw_st  : std_logic;
380
signal sbiw_st  : std_logic;
381
signal idc_and  : std_logic;
382
signal idc_andi : std_logic;
383
signal idc_or   : std_logic;
384
signal idc_ori  : std_logic;
385
signal idc_eor  : std_logic;
386
signal idc_com  : std_logic;
387
signal idc_neg  : std_logic;
388
signal idc_inc  : std_logic;
389
signal idc_dec  : std_logic;
390
signal idc_cp   : std_logic;
391
signal idc_cpc  : std_logic;
392
signal idc_cpi  : std_logic;
393
signal idc_cpse : std_logic;
394
signal idc_lsr  : std_logic;
395
signal idc_ror  : std_logic;
396
signal idc_asr  : std_logic;
397
signal idc_swap : std_logic;
398
signal sbi_st   : std_logic;
399
signal cbi_st   : std_logic;
400
signal idc_bst  : std_logic;
401
signal idc_bset : std_logic;
402
signal idc_bclr : std_logic;
403
signal idc_sbic : std_logic;
404
signal idc_sbis : std_logic;
405
signal idc_sbrs : std_logic;
406
signal idc_sbrc : std_logic;
407
signal idc_brbs : std_logic;
408
signal idc_brbc : std_logic;
409
signal idc_reti : std_logic;
410
 
411
signal alu_data_r_in : std_logic_vector(7 downto 0);
412
signal alu_data_out  : std_logic_vector(7 downto 0);
413
 
414
signal reg_rd_in     : std_logic_vector(7 downto 0);
415
signal reg_rd_out    : std_logic_vector(7 downto 0);
416
signal reg_rd_out_int : std_logic_vector(7 downto 0);
417
signal reg_rr_out    : std_logic_vector(7 downto 0);
418
 
419
signal reg_rd_adr    : std_logic_vector(4 downto 0);
420
signal reg_rd_adr_int    : std_logic_vector(4 downto 0);
421
signal reg_rr_adr    : std_logic_vector(4 downto 0);
422
 
423
signal reg_h_out     : std_logic_vector(15 downto 0);
424
signal reg_z_out     : std_logic_vector(15 downto 0);
425
 
426
signal reg_h_adr     : std_logic_vector(2 downto 0);
427
 
428
signal reg_rd_wr     : std_logic;
429
signal post_inc      : std_logic;
430
signal pre_dec       : std_logic;
431
signal reg_h_wr      : std_logic;
432
 
433
signal sreg_fl_in    : std_logic_vector(7 downto 0);
434
signal sreg_out      : std_logic_vector(7 downto 0);
435
 
436
signal sreg_out_0      : std_logic;
437
signal sreg_out_1      : std_logic;
438
signal sreg_out_7      : std_logic;
439
 
440
signal sreg_fl_wr_en : std_logic_vector(7 downto 0);
441
signal spl_out       : std_logic_vector(7 downto 0);
442
signal sph_out       : std_logic_vector(7 downto 0);
443
signal rampz_out     : std_logic_vector(7 downto 0);
444
 
445
signal sp_ndown_up   : std_logic;
446
signal sp_en         : std_logic;
447
 
448
signal bit_num_r_io  : std_logic_vector(2 downto 0);
449
signal branch        : std_logic_vector(2 downto 0);
450
 
451
signal bitpr_io_out    : std_logic_vector(7 downto 0);
452
signal bit_pr_sreg_out : std_logic_vector(7 downto 0);
453
signal sreg_flags      : std_logic_vector(7 downto 0);
454
signal bld_op_out      : std_logic_vector(7 downto 0);
455
signal reg_file_rd_in  : std_logic_vector(7 downto 0);
456
 
457
signal bit_test_op_out : std_logic;
458
 
459
signal alu_c_flag_out  : std_logic;
460
signal alu_z_flag_out  : std_logic;
461
signal alu_n_flag_out  : std_logic;
462
signal alu_v_flag_out  : std_logic;
463
signal alu_s_flag_out  : std_logic;
464
signal alu_h_flag_out  : std_logic;
465
 
466
signal adr_cml_out :  std_logic_vector ( 5 downto 0 );
467
signal adr_int_cml_2 :  std_logic_vector ( 5 downto 0 );
468
signal iore_cml_out :  std_logic;
469
signal iore_int_cml_2 :  std_logic;
470
signal globint_cml_out :  std_logic;
471
signal sreg_out_cml_2 :  std_logic_vector ( 7 downto 0 );
472
signal sreg_out_cml_1 :  std_logic_vector ( 7 downto 0 );
473
 
474
begin
475
 
476
 
477
 
478
process(cp2_cml_1) begin
479
if (cp2_cml_1 = '1' and cp2_cml_1'event) then
480
        sreg_out_cml_1 <= sreg_out;
481
end if;
482
end process;
483
 
484
process(cp2_cml_2) begin
485
if (cp2_cml_2 = '1' and cp2_cml_2'event) then
486
        adr_int_cml_2 <= adr_int;
487
        iore_int_cml_2 <= iore_int;
488
        sreg_out_cml_2 <= sreg_out_cml_1;
489
end if;
490
end process;
491
adr <= adr_cml_out;
492
iore <= iore_cml_out;
493
globint <= globint_cml_out;
494
 
495
 
496
pm_fetch_dec_Inst:component pm_fetch_dec_cm3 port map (
497
                cp2_cml_1 => cp2_cml_1,
498
                cp2_cml_2 => cp2_cml_2,
499
                                      -- Clock and reset
500
                                      cp2      => cp2,
501
                                                                          cp2en    => cp2en,
502
                                      ireset   => ireset,
503
                                                                          -- JTAG OCD support
504
                                                                  valid_instr => valid_instr,
505
                                                              insert_nop  => insert_nop,
506
                                                              block_irq   => block_irq,
507
                                                              change_flow => change_flow,
508
                                      -- Program memory
509
                                      pc       => pc,
510
                                      inst     => inst,
511
                                      -- I/O control
512
                                      adr      => adr_int,
513
                                      iore     => iore_int,
514
                                      iowe     => iowe_int,
515
                                      -- Data memory control
516
                                      ramadr   => ramadr,
517
                                      ramre    => ramre,
518
                                      ramwe    => ramwe,
519
                                      cpuwait  => cpuwait,
520
                                      -- Data paths
521
                                      dbusin   => dbusin_int,
522
                                      dbusout  => dbusout,
523
                                          dbusout_int_route => dbusout_int,
524
                                      -- Interrupt
525
                                      irqlines => irqlines,
526
                                      irqack   => irqack,
527
                                      irqackad => irqackad,
528
                                      --Sleep 
529
                                      sleepi     => sleepi,
530
                                      irqok      => irqok,
531
                                      --Watchdog
532
                                      wdri       => wdri,
533
                                                                         -- ALU interface(Data inputs)
534
                                     alu_data_r_in   => alu_data_r_in,
535
                                                                         -- ALU interface(Instruction inputs)
536
                                     idc_add_out  => idc_add,
537
                                     idc_adc_out  => idc_adc,
538
                                     idc_adiw_out => idc_adiw,
539
                                     idc_sub_out  => idc_sub,
540
                                     idc_subi_out => idc_subi,
541
                                     idc_sbc_out  => idc_sbc,
542
                                     idc_sbci_out => idc_sbci,
543
                                     idc_sbiw_out => idc_sbiw,
544
 
545
                                     adiw_st_out  => adiw_st,
546
                                     sbiw_st_out  => sbiw_st,
547
 
548
                                     idc_and_out  => idc_and,
549
                                     idc_andi_out => idc_andi,
550
                                     idc_or_out   => idc_or,
551
                                     idc_ori_out  => idc_ori,
552
                                     idc_eor_out  => idc_eor,
553
                                     idc_com_out  => idc_com,
554
                                     idc_neg_out  => idc_neg,
555
 
556
                                     idc_inc_out  => idc_inc,
557
                                     idc_dec_out  => idc_dec,
558
 
559
                                     idc_cp_out   => idc_cp,
560
                                     idc_cpc_out  => idc_cpc,
561
                                     idc_cpi_out  => idc_cpi,
562
                                     idc_cpse_out => idc_cpse,
563
 
564
                                     idc_lsr_out  => idc_lsr,
565
                                     idc_ror_out  => idc_ror,
566
                                     idc_asr_out  => idc_asr,
567
                                     idc_swap_out => idc_swap,
568
                                     -- ALU interface(Data output)
569
                                     alu_data_out => alu_data_out,
570
                                     -- ALU interface(Flag outputs)
571
                                     alu_c_flag_out => alu_c_flag_out,
572
                                     alu_z_flag_out => alu_z_flag_out,
573
                                     alu_n_flag_out => alu_n_flag_out,
574
                                     alu_v_flag_out => alu_v_flag_out,
575
                                     alu_s_flag_out => alu_s_flag_out,
576
                                     alu_h_flag_out => alu_h_flag_out,
577
                                     -- General purpose register file interface
578
                                     reg_rd_in   => reg_rd_in,
579
                                     reg_rd_out  => reg_rd_out,
580
                                         reg_rd_out_int => reg_rd_out_int,
581
                                     reg_rd_adr  => reg_rd_adr,
582
                                     reg_rd_adr_int  => reg_rd_adr_int,
583
                                     reg_rr_out  => reg_rr_out,
584
                                     reg_rr_adr  => reg_rr_adr,
585
                                     reg_rd_wr   => reg_rd_wr,
586
 
587
                                     post_inc    => post_inc,
588
                                     pre_dec     => pre_dec,
589
                                     reg_h_wr    => reg_h_wr,
590
                                     reg_h_out   => reg_h_out,
591
                                     reg_h_adr   => reg_h_adr,
592
                                             reg_z_out   => reg_z_out,
593
                                     -- I/O register file interface
594
                                     sreg_fl_in    => sreg_fl_in, --??   
595
                                     globint       => sreg_out_7, -- SREG I flag   
596
 
597
                                     sreg_fl_wr_en => sreg_fl_wr_en,
598
 
599
                                     spl_out       => spl_out,
600
                                     sph_out       => sph_out,
601
                                     sp_ndown_up   => sp_ndown_up,
602
                                     sp_en         => sp_en,
603
 
604
                                     rampz_out     => rampz_out,
605
                                     -- Bit processor interface
606
                                     bit_num_r_io    => bit_num_r_io,
607
                                     bitpr_io_out    => bitpr_io_out,
608
                                     branch          => branch,
609
                                                         bit_pr_sreg_out => bit_pr_sreg_out,
610
                                                         bld_op_out      => bld_op_out,
611
                                                         bit_test_op_out => bit_test_op_out,
612
 
613
                                     sbi_st_out   => sbi_st,
614
                                     cbi_st_out   => cbi_st,
615
 
616
                                     idc_bst_out  => idc_bst,
617
                                     idc_bset_out => idc_bset,
618
                                     idc_bclr_out => idc_bclr,
619
 
620
                                     idc_sbic_out => idc_sbic,
621
                                     idc_sbis_out => idc_sbis,
622
 
623
                                     idc_sbrs_out => idc_sbrs,
624
                                     idc_sbrc_out => idc_sbrc,
625
 
626
                                     idc_brbs_out => idc_brbs,
627
                                     idc_brbc_out => idc_brbc,
628
 
629
                                     idc_reti_out => idc_reti);
630
 
631
 
632
GPRF_Inst:component reg_file_cm3 port map (
633
                cp2_cml_1 => cp2_cml_1,
634
                cp2_cml_2 => cp2_cml_2,
635
                                                   --Clock and reset
636
                                                           cp2         => cp2,
637
                                                                           cp2en       => cp2en,
638
                                       ireset      => ireset,
639
 
640
                                       reg_rd_in   => reg_rd_in,
641
                                       reg_rd_out  => reg_rd_out,
642
                                           reg_rd_out_int => reg_rd_out_int,
643
                                       reg_rd_adr  => reg_rd_adr,
644
                                       reg_rd_adr_int  => reg_rd_adr_int,
645
                                       reg_rr_out  => reg_rr_out,
646
                                       reg_rr_adr  => reg_rr_adr,
647
                                       reg_rd_wr   => reg_rd_wr,
648
 
649
                                       post_inc    => post_inc,
650
                                       pre_dec     => pre_dec,
651
                                       reg_h_wr    => reg_h_wr,
652
                                       reg_h_out   => reg_h_out,
653
                                       reg_h_adr   => reg_h_adr,
654
                                               reg_z_out   => reg_z_out);
655
 
656
 
657
BP_Inst:component bit_processor_cm3 port map (
658
                cp2_cml_1 => cp2_cml_1,
659
                cp2_cml_2 => cp2_cml_2,
660
                                                     --Clock and reset
661
                                                             cp2         => cp2,
662
                                                                                 cp2en    => cp2en,
663
                                         ireset      => ireset,
664
 
665
                                         bit_num_r_io  => bit_num_r_io,
666
                                         dbusin        => dbusin_int,
667
                                         bitpr_io_out  => bitpr_io_out,
668
 
669
                                         sreg_out      => sreg_out,
670
                                         branch   => branch,
671
 
672
                                         bit_pr_sreg_out => bit_pr_sreg_out,
673
 
674
                                         bld_op_out      => bld_op_out,
675
                                         reg_rd_out      => reg_rd_out,
676
 
677
                                         bit_test_op_out => bit_test_op_out,
678
 
679
                                         -- Instructions and states
680
                                         sbi_st   => sbi_st,
681
                                         cbi_st   => cbi_st,
682
 
683
                                         idc_bst  => idc_bst,
684
                                         idc_bset => idc_bset,
685
                                         idc_bclr => idc_bclr,
686
 
687
                                         idc_sbic => idc_sbic,
688
                                         idc_sbis => idc_sbis,
689
 
690
                                         idc_sbrs => idc_sbrs,
691
                                         idc_sbrc => idc_sbrc,
692
 
693
                                         idc_brbs => idc_brbs,
694
                                         idc_brbc => idc_brbc,
695
 
696
                                         idc_reti => idc_reti);
697
 
698
 
699
io_dec_Inst:component io_adr_dec_cm3 port map (
700
                cp2_cml_1 => cp2_cml_1,
701
          adr          => adr_int,
702
          iore         => iore_int,
703
          dbusin_int   => dbusin_int,                   -- LOCAL DATA BUS OUTPUT
704
          dbusin_ext   => dbusin,               -- EXTERNAL DATA BUS INPUT
705
 
706
          spl_out      => spl_out,
707
          sph_out      => sph_out,
708
          sreg_out     => sreg_out,
709
          rampz_out    => rampz_out
710
);
711
 
712
IORegs_Inst: component io_reg_file_cm3 port map (
713
                cp2_cml_1 => cp2_cml_1,
714
                cp2_cml_2 => cp2_cml_2,
715
                                                        --Clock and reset
716
                                                cp2        => cp2,
717
                                                                                        cp2en    => cp2en,
718
                                            ireset     => ireset,
719
 
720
                                                                                        adr        => adr_int,
721
                                            iowe       => iowe_int,
722
                                            dbusout    => dbusout_int,
723
 
724
                                            sreg_fl_in => sreg_fl_in,
725
                                            sreg_out   => sreg_out,
726
 
727
                                            sreg_fl_wr_en => sreg_fl_wr_en,
728
 
729
                                            spl_out    => spl_out,
730
                                            sph_out    => sph_out,
731
                                            sp_ndown_up => sp_ndown_up,
732
                                            sp_en      => sp_en,
733
 
734
                                            rampz_out  => rampz_out);
735
 
736
 
737
 
738
ALU_Inst:component alu_avr_cm3 port map (
739
                cp2_cml_1 => cp2_cml_1,
740
                cp2_cml_2 => cp2_cml_2,
741
                          -- Data inputs
742
              alu_data_r_in => alu_data_r_in,
743
              alu_data_d_in => reg_rd_out,
744
 
745
              alu_c_flag_in => sreg_out_0,
746
              alu_z_flag_in => sreg_out_1,
747
              -- Instructions and states
748
              idc_add  => idc_add,
749
              idc_adc  => idc_adc,
750
              idc_adiw => idc_adiw,
751
              idc_sub  => idc_sub,
752
              idc_subi => idc_subi,
753
              idc_sbc  => idc_sbc,
754
              idc_sbci => idc_sbci,
755
              idc_sbiw => idc_sbiw,
756
 
757
              adiw_st  => adiw_st,
758
              sbiw_st  => sbiw_st,
759
 
760
              idc_and  => idc_and,
761
              idc_andi => idc_andi,
762
              idc_or   => idc_or,
763
              idc_ori  => idc_ori,
764
              idc_eor  => idc_eor,
765
              idc_com  => idc_com,
766
              idc_neg  => idc_neg,
767
 
768
              idc_inc  => idc_inc,
769
              idc_dec  => idc_dec,
770
 
771
              idc_cp   => idc_cp,
772
              idc_cpc  => idc_cpc,
773
              idc_cpi  => idc_cpi,
774
              idc_cpse => idc_cpse,
775
 
776
              idc_lsr  => idc_lsr,
777
              idc_ror  => idc_ror,
778
              idc_asr  => idc_asr,
779
              idc_swap => idc_swap,
780
              -- Data outputs
781
              alu_data_out => alu_data_out,
782
                          -- Flag outputs
783
              alu_c_flag_out => alu_c_flag_out,
784
              alu_z_flag_out => alu_z_flag_out,
785
              alu_n_flag_out => alu_n_flag_out,
786
              alu_v_flag_out => alu_v_flag_out,
787
              alu_s_flag_out => alu_s_flag_out,
788
              alu_h_flag_out => alu_h_flag_out);
789
 
790
 
791
-- SynEDA CoreMultiplier
792
-- assignment(s): adr
793
-- replace(s): adr_int
794
 
795
-- Outputs
796
adr_cml_out      <= adr_int_cml_2;
797
iowe     <= iowe_int;
798
-- SynEDA CoreMultiplier
799
-- assignment(s): iore
800
-- replace(s): iore_int
801
 
802
iore_cml_out     <= iore_int_cml_2;
803
 
804
-- SynEDA CoreMultiplier
805
-- assignment(s): globint
806
-- replace(s): sreg_out
807
 
808
-- Sleep support
809
globint_cml_out <= sreg_out_cml_2(7); -- I flag
810
sreg_out_0 <= sreg_out(0);
811
-- SynEDA CoreMultiplier
812
-- assignment(s): sreg_out_1
813
-- replace(s): sreg_out
814
 
815
sreg_out_1 <= sreg_out_cml_1(1);
816
-- SynEDA CoreMultiplier
817
-- assignment(s): sreg_out_7
818
-- replace(s): sreg_out
819
 
820
sreg_out_7 <= sreg_out_cml_2(7);
821
 
822
end Struct;

powered by: WebSVN 2.1.0

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