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

Subversion Repositories avr_hp

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

powered by: WebSVN 2.1.0

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