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

Subversion Repositories avr_hp

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

powered by: WebSVN 2.1.0

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