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

Subversion Repositories avr_hp

[/] [avr_hp/] [trunk/] [rtl/] [rtl_v5_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
          adr          : in std_logic_vector(5 downto 0);
358
          iore         : in std_logic;
359
          dbusin_ext   : in std_logic_vector(7 downto 0);
360
          dbusin_int   : out std_logic_vector(7 downto 0);
361
 
362
          spl_out      : in std_logic_vector(7 downto 0);
363
          sph_out      : in std_logic_vector(7 downto 0);
364
          sreg_out     : in std_logic_vector(7 downto 0);
365
          rampz_out    : in std_logic_vector(7 downto 0));
366
end component;
367
 
368
signal dbusin_int  : std_logic_vector(7 downto 0);
369
signal dbusout_int : std_logic_vector(7 downto 0);
370
 
371
signal adr_int     : std_logic_vector(5 downto 0);
372
 
373
signal iowe_int    : std_logic;
374
signal iore_int    : std_logic;
375
 
376
-- SIGNALS FOR INSTRUCTION AND STATES
377
signal idc_add  : std_logic;
378
signal idc_adc  : std_logic;
379
signal idc_adiw : std_logic;
380
signal idc_sub  : std_logic;
381
signal idc_subi : std_logic;
382
signal idc_sbc  : std_logic;
383
signal idc_sbci : std_logic;
384
signal idc_sbiw : std_logic;
385
signal adiw_st  : std_logic;
386
signal sbiw_st  : std_logic;
387
signal idc_and  : std_logic;
388
signal idc_andi : std_logic;
389
signal idc_or   : std_logic;
390
signal idc_ori  : std_logic;
391
signal idc_eor  : std_logic;
392
signal idc_com  : std_logic;
393
signal idc_neg  : std_logic;
394
signal idc_inc  : std_logic;
395
signal idc_dec  : std_logic;
396
signal idc_cp   : std_logic;
397
signal idc_cpc  : std_logic;
398
signal idc_cpi  : std_logic;
399
signal idc_cpse : std_logic;
400
signal idc_lsr  : std_logic;
401
signal idc_ror  : std_logic;
402
signal idc_asr  : std_logic;
403
signal idc_swap : std_logic;
404
signal sbi_st   : std_logic;
405
signal cbi_st   : std_logic;
406
signal idc_bst  : std_logic;
407
signal idc_bset : std_logic;
408
signal idc_bclr : std_logic;
409
signal idc_sbic : std_logic;
410
signal idc_sbis : std_logic;
411
signal idc_sbrs : std_logic;
412
signal idc_sbrc : std_logic;
413
signal idc_brbs : std_logic;
414
signal idc_brbc : std_logic;
415
signal idc_reti : std_logic;
416
 
417
signal alu_data_r_in : std_logic_vector(7 downto 0);
418
signal alu_data_out  : std_logic_vector(7 downto 0);
419
 
420
signal reg_rd_in     : std_logic_vector(7 downto 0);
421
signal reg_rd_out    : std_logic_vector(7 downto 0);
422
signal reg_rd_out_int : std_logic_vector(7 downto 0);
423
signal reg_rr_out    : std_logic_vector(7 downto 0);
424
 
425
signal reg_rd_adr    : std_logic_vector(4 downto 0);
426
signal reg_rd_adr_int    : std_logic_vector(4 downto 0);
427
signal reg_rr_adr    : std_logic_vector(4 downto 0);
428
 
429
signal reg_h_out     : std_logic_vector(15 downto 0);
430
signal reg_z_out     : std_logic_vector(15 downto 0);
431
 
432
signal reg_h_adr     : std_logic_vector(2 downto 0);
433
 
434
signal reg_rd_wr     : std_logic;
435
signal post_inc      : std_logic;
436
signal pre_dec       : std_logic;
437
signal reg_h_wr      : std_logic;
438
 
439
signal sreg_fl_in    : std_logic_vector(7 downto 0);
440
signal sreg_out      : std_logic_vector(7 downto 0);
441
 
442
signal sreg_out_0      : std_logic;
443
signal sreg_out_1      : std_logic;
444
signal sreg_out_7      : std_logic;
445
 
446
signal sreg_fl_wr_en : std_logic_vector(7 downto 0);
447
signal spl_out       : std_logic_vector(7 downto 0);
448
signal sph_out       : std_logic_vector(7 downto 0);
449
signal rampz_out     : std_logic_vector(7 downto 0);
450
 
451
signal sp_ndown_up   : std_logic;
452
signal sp_en         : std_logic;
453
 
454
signal bit_num_r_io  : std_logic_vector(2 downto 0);
455
signal branch        : std_logic_vector(2 downto 0);
456
 
457
signal bitpr_io_out    : std_logic_vector(7 downto 0);
458
signal bit_pr_sreg_out : std_logic_vector(7 downto 0);
459
signal sreg_flags      : std_logic_vector(7 downto 0);
460
signal bld_op_out      : std_logic_vector(7 downto 0);
461
signal reg_file_rd_in  : std_logic_vector(7 downto 0);
462
 
463
signal bit_test_op_out : std_logic;
464
 
465
signal alu_c_flag_out  : std_logic;
466
signal alu_z_flag_out  : std_logic;
467
signal alu_n_flag_out  : std_logic;
468
signal alu_v_flag_out  : std_logic;
469
signal alu_s_flag_out  : std_logic;
470
signal alu_h_flag_out  : std_logic;
471
 
472
signal adr_cml_out :  std_logic_vector ( 5 downto 0 );
473
signal adr_int_cml_3 :  std_logic_vector ( 5 downto 0 );
474
signal adr_int_cml_2 :  std_logic_vector ( 5 downto 0 );
475
signal iore_cml_out :  std_logic;
476
signal iore_int_cml_3 :  std_logic;
477
signal iore_int_cml_2 :  std_logic;
478
signal globint_cml_out :  std_logic;
479
signal sreg_out_cml_3 :  std_logic_vector ( 7 downto 0 );
480
signal sreg_out_cml_2 :  std_logic_vector ( 7 downto 0 );
481
signal sreg_out_cml_1 :  std_logic_vector ( 7 downto 0 );
482
 
483
begin
484
 
485
 
486
 
487
process(cp2_cml_1) begin
488
if (cp2_cml_1 = '1' and cp2_cml_1'event) then
489
        sreg_out_cml_1 <= sreg_out;
490
end if;
491
end process;
492
 
493
process(cp2_cml_2) begin
494
if (cp2_cml_2 = '1' and cp2_cml_2'event) then
495
        adr_int_cml_2 <= adr_int;
496
        iore_int_cml_2 <= iore_int;
497
        sreg_out_cml_2 <= sreg_out_cml_1;
498
end if;
499
end process;
500
 
501
process(cp2_cml_3) begin
502
if (cp2_cml_3 = '1' and cp2_cml_3'event) then
503
        adr_int_cml_3 <= adr_int_cml_2;
504
        iore_int_cml_3 <= iore_int_cml_2;
505
        sreg_out_cml_3 <= sreg_out_cml_2;
506
end if;
507
end process;
508
adr <= adr_cml_out;
509
iore <= iore_cml_out;
510
globint <= globint_cml_out;
511
 
512
 
513
pm_fetch_dec_Inst:component pm_fetch_dec_cm4 port map (
514
                cp2_cml_1 => cp2_cml_1,
515
                cp2_cml_2 => cp2_cml_2,
516
                cp2_cml_3 => cp2_cml_3,
517
                                      -- Clock and reset
518
                                      cp2      => cp2,
519
                                                                          cp2en    => cp2en,
520
                                      ireset   => ireset,
521
                                                                          -- JTAG OCD support
522
                                                                  valid_instr => valid_instr,
523
                                                              insert_nop  => insert_nop,
524
                                                              block_irq   => block_irq,
525
                                                              change_flow => change_flow,
526
                                      -- Program memory
527
                                      pc       => pc,
528
                                      inst     => inst,
529
                                      -- I/O control
530
                                      adr      => adr_int,
531
                                      iore     => iore_int,
532
                                      iowe     => iowe_int,
533
                                      -- Data memory control
534
                                      ramadr   => ramadr,
535
                                      ramre    => ramre,
536
                                      ramwe    => ramwe,
537
                                      cpuwait  => cpuwait,
538
                                      -- Data paths
539
                                      dbusin   => dbusin_int,
540
                                      dbusout  => dbusout,
541
                                          dbusout_int_route => dbusout_int,
542
                                      -- Interrupt
543
                                      irqlines => irqlines,
544
                                      irqack   => irqack,
545
                                      irqackad => irqackad,
546
                                      --Sleep 
547
                                      sleepi     => sleepi,
548
                                      irqok      => irqok,
549
                                      --Watchdog
550
                                      wdri       => wdri,
551
                                                                         -- ALU interface(Data inputs)
552
                                     alu_data_r_in   => alu_data_r_in,
553
                                                                         -- ALU interface(Instruction inputs)
554
                                     idc_add_out  => idc_add,
555
                                     idc_adc_out  => idc_adc,
556
                                     idc_adiw_out => idc_adiw,
557
                                     idc_sub_out  => idc_sub,
558
                                     idc_subi_out => idc_subi,
559
                                     idc_sbc_out  => idc_sbc,
560
                                     idc_sbci_out => idc_sbci,
561
                                     idc_sbiw_out => idc_sbiw,
562
 
563
                                     adiw_st_out  => adiw_st,
564
                                     sbiw_st_out  => sbiw_st,
565
 
566
                                     idc_and_out  => idc_and,
567
                                     idc_andi_out => idc_andi,
568
                                     idc_or_out   => idc_or,
569
                                     idc_ori_out  => idc_ori,
570
                                     idc_eor_out  => idc_eor,
571
                                     idc_com_out  => idc_com,
572
                                     idc_neg_out  => idc_neg,
573
 
574
                                     idc_inc_out  => idc_inc,
575
                                     idc_dec_out  => idc_dec,
576
 
577
                                     idc_cp_out   => idc_cp,
578
                                     idc_cpc_out  => idc_cpc,
579
                                     idc_cpi_out  => idc_cpi,
580
                                     idc_cpse_out => idc_cpse,
581
 
582
                                     idc_lsr_out  => idc_lsr,
583
                                     idc_ror_out  => idc_ror,
584
                                     idc_asr_out  => idc_asr,
585
                                     idc_swap_out => idc_swap,
586
                                     -- ALU interface(Data output)
587
                                     alu_data_out => alu_data_out,
588
                                     -- ALU interface(Flag outputs)
589
                                     alu_c_flag_out => alu_c_flag_out,
590
                                     alu_z_flag_out => alu_z_flag_out,
591
                                     alu_n_flag_out => alu_n_flag_out,
592
                                     alu_v_flag_out => alu_v_flag_out,
593
                                     alu_s_flag_out => alu_s_flag_out,
594
                                     alu_h_flag_out => alu_h_flag_out,
595
                                     -- General purpose register file interface
596
                                     reg_rd_in   => reg_rd_in,
597
                                     reg_rd_out  => reg_rd_out,
598
                                         reg_rd_out_int => reg_rd_out_int,
599
                                     reg_rd_adr  => reg_rd_adr,
600
                                     reg_rd_adr_int  => reg_rd_adr_int,
601
                                     reg_rr_out  => reg_rr_out,
602
                                     reg_rr_adr  => reg_rr_adr,
603
                                     reg_rd_wr   => reg_rd_wr,
604
 
605
                                     post_inc    => post_inc,
606
                                     pre_dec     => pre_dec,
607
                                     reg_h_wr    => reg_h_wr,
608
                                     reg_h_out   => reg_h_out,
609
                                     reg_h_adr   => reg_h_adr,
610
                                             reg_z_out   => reg_z_out,
611
                                     -- I/O register file interface
612
                                     sreg_fl_in    => sreg_fl_in, --??   
613
                                     globint       => sreg_out_7, -- SREG I flag   
614
 
615
                                     sreg_fl_wr_en => sreg_fl_wr_en,
616
 
617
                                     spl_out       => spl_out,
618
                                     sph_out       => sph_out,
619
                                     sp_ndown_up   => sp_ndown_up,
620
                                     sp_en         => sp_en,
621
 
622
                                     rampz_out     => rampz_out,
623
                                     -- Bit processor interface
624
                                     bit_num_r_io    => bit_num_r_io,
625
                                     bitpr_io_out    => bitpr_io_out,
626
                                     branch          => branch,
627
                                                         bit_pr_sreg_out => bit_pr_sreg_out,
628
                                                         bld_op_out      => bld_op_out,
629
                                                         bit_test_op_out => bit_test_op_out,
630
 
631
                                     sbi_st_out   => sbi_st,
632
                                     cbi_st_out   => cbi_st,
633
 
634
                                     idc_bst_out  => idc_bst,
635
                                     idc_bset_out => idc_bset,
636
                                     idc_bclr_out => idc_bclr,
637
 
638
                                     idc_sbic_out => idc_sbic,
639
                                     idc_sbis_out => idc_sbis,
640
 
641
                                     idc_sbrs_out => idc_sbrs,
642
                                     idc_sbrc_out => idc_sbrc,
643
 
644
                                     idc_brbs_out => idc_brbs,
645
                                     idc_brbc_out => idc_brbc,
646
 
647
                                     idc_reti_out => idc_reti);
648
 
649
 
650
GPRF_Inst:component reg_file_cm4 port map (
651
                cp2_cml_1 => cp2_cml_1,
652
                cp2_cml_2 => cp2_cml_2,
653
                cp2_cml_3 => cp2_cml_3,
654
                                                   --Clock and reset
655
                                                           cp2         => cp2,
656
                                                                           cp2en       => cp2en,
657
                                       ireset      => ireset,
658
 
659
                                       reg_rd_in   => reg_rd_in,
660
                                       reg_rd_out  => reg_rd_out,
661
                                           reg_rd_out_int => reg_rd_out_int,
662
                                       reg_rd_adr  => reg_rd_adr,
663
                                       reg_rd_adr_int  => reg_rd_adr_int,
664
                                       reg_rr_out  => reg_rr_out,
665
                                       reg_rr_adr  => reg_rr_adr,
666
                                       reg_rd_wr   => reg_rd_wr,
667
 
668
                                       post_inc    => post_inc,
669
                                       pre_dec     => pre_dec,
670
                                       reg_h_wr    => reg_h_wr,
671
                                       reg_h_out   => reg_h_out,
672
                                       reg_h_adr   => reg_h_adr,
673
                                               reg_z_out   => reg_z_out);
674
 
675
 
676
BP_Inst:component bit_processor_cm4 port map (
677
                cp2_cml_1 => cp2_cml_1,
678
                cp2_cml_2 => cp2_cml_2,
679
                cp2_cml_3 => cp2_cml_3,
680
                                                     --Clock and reset
681
                                                             cp2         => cp2,
682
                                                                                 cp2en    => cp2en,
683
                                         ireset      => ireset,
684
 
685
                                         bit_num_r_io  => bit_num_r_io,
686
                                         dbusin        => dbusin_int,
687
                                         bitpr_io_out  => bitpr_io_out,
688
 
689
                                         sreg_out      => sreg_out,
690
                                         branch   => branch,
691
 
692
                                         bit_pr_sreg_out => bit_pr_sreg_out,
693
 
694
                                         bld_op_out      => bld_op_out,
695
                                         reg_rd_out      => reg_rd_out,
696
 
697
                                         bit_test_op_out => bit_test_op_out,
698
 
699
                                         -- Instructions and states
700
                                         sbi_st   => sbi_st,
701
                                         cbi_st   => cbi_st,
702
 
703
                                         idc_bst  => idc_bst,
704
                                         idc_bset => idc_bset,
705
                                         idc_bclr => idc_bclr,
706
 
707
                                         idc_sbic => idc_sbic,
708
                                         idc_sbis => idc_sbis,
709
 
710
                                         idc_sbrs => idc_sbrs,
711
                                         idc_sbrc => idc_sbrc,
712
 
713
                                         idc_brbs => idc_brbs,
714
                                         idc_brbc => idc_brbc,
715
 
716
                                         idc_reti => idc_reti);
717
 
718
 
719
io_dec_Inst:component io_adr_dec_cm4 port map (
720
                cp2_cml_1 => cp2_cml_1,
721
          adr          => adr_int,
722
          iore         => iore_int,
723
          dbusin_int   => dbusin_int,                   -- LOCAL DATA BUS OUTPUT
724
          dbusin_ext   => dbusin,               -- EXTERNAL DATA BUS INPUT
725
 
726
          spl_out      => spl_out,
727
          sph_out      => sph_out,
728
          sreg_out     => sreg_out,
729
          rampz_out    => rampz_out
730
);
731
 
732
IORegs_Inst: component io_reg_file_cm4 port map (
733
                cp2_cml_1 => cp2_cml_1,
734
                cp2_cml_2 => cp2_cml_2,
735
                cp2_cml_3 => cp2_cml_3,
736
                                                        --Clock and reset
737
                                                cp2        => cp2,
738
                                                                                        cp2en    => cp2en,
739
                                            ireset     => ireset,
740
 
741
                                                                                        adr        => adr_int,
742
                                            iowe       => iowe_int,
743
                                            dbusout    => dbusout_int,
744
 
745
                                            sreg_fl_in => sreg_fl_in,
746
                                            sreg_out   => sreg_out,
747
 
748
                                            sreg_fl_wr_en => sreg_fl_wr_en,
749
 
750
                                            spl_out    => spl_out,
751
                                            sph_out    => sph_out,
752
                                            sp_ndown_up => sp_ndown_up,
753
                                            sp_en      => sp_en,
754
 
755
                                            rampz_out  => rampz_out);
756
 
757
 
758
 
759
ALU_Inst:component alu_avr_cm4 port map (
760
                cp2_cml_1 => cp2_cml_1,
761
                cp2_cml_2 => cp2_cml_2,
762
                cp2_cml_3 => cp2_cml_3,
763
                          -- Data inputs
764
              alu_data_r_in => alu_data_r_in,
765
              alu_data_d_in => reg_rd_out,
766
 
767
              alu_c_flag_in => sreg_out_0,
768
              alu_z_flag_in => sreg_out_1,
769
              -- Instructions and states
770
              idc_add  => idc_add,
771
              idc_adc  => idc_adc,
772
              idc_adiw => idc_adiw,
773
              idc_sub  => idc_sub,
774
              idc_subi => idc_subi,
775
              idc_sbc  => idc_sbc,
776
              idc_sbci => idc_sbci,
777
              idc_sbiw => idc_sbiw,
778
 
779
              adiw_st  => adiw_st,
780
              sbiw_st  => sbiw_st,
781
 
782
              idc_and  => idc_and,
783
              idc_andi => idc_andi,
784
              idc_or   => idc_or,
785
              idc_ori  => idc_ori,
786
              idc_eor  => idc_eor,
787
              idc_com  => idc_com,
788
              idc_neg  => idc_neg,
789
 
790
              idc_inc  => idc_inc,
791
              idc_dec  => idc_dec,
792
 
793
              idc_cp   => idc_cp,
794
              idc_cpc  => idc_cpc,
795
              idc_cpi  => idc_cpi,
796
              idc_cpse => idc_cpse,
797
 
798
              idc_lsr  => idc_lsr,
799
              idc_ror  => idc_ror,
800
              idc_asr  => idc_asr,
801
              idc_swap => idc_swap,
802
              -- Data outputs
803
              alu_data_out => alu_data_out,
804
                          -- Flag outputs
805
              alu_c_flag_out => alu_c_flag_out,
806
              alu_z_flag_out => alu_z_flag_out,
807
              alu_n_flag_out => alu_n_flag_out,
808
              alu_v_flag_out => alu_v_flag_out,
809
              alu_s_flag_out => alu_s_flag_out,
810
              alu_h_flag_out => alu_h_flag_out);
811
 
812
 
813
-- SynEDA CoreMultiplier
814
-- assignment(s): adr
815
-- replace(s): adr_int
816
 
817
-- Outputs
818
adr_cml_out      <= adr_int_cml_3;
819
iowe     <= iowe_int;
820
-- SynEDA CoreMultiplier
821
-- assignment(s): iore
822
-- replace(s): iore_int
823
 
824
iore_cml_out     <= iore_int_cml_3;
825
 
826
-- SynEDA CoreMultiplier
827
-- assignment(s): globint
828
-- replace(s): sreg_out
829
 
830
-- Sleep support
831
globint_cml_out <= sreg_out_cml_3(7); -- I flag
832
sreg_out_0 <= sreg_out(0);
833
-- SynEDA CoreMultiplier
834
-- assignment(s): sreg_out_1
835
-- replace(s): sreg_out
836
 
837
sreg_out_1 <= sreg_out_cml_2(1);
838
-- SynEDA CoreMultiplier
839
-- assignment(s): sreg_out_7
840
-- replace(s): sreg_out
841
 
842
sreg_out_7 <= sreg_out_cml_3(7);
843
 
844
end Struct;

powered by: WebSVN 2.1.0

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