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

Subversion Repositories avr_hp

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

powered by: WebSVN 2.1.0

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