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

Subversion Repositories t48

[/] [t48/] [tags/] [rel_0_6__beta/] [rtl/] [vhdl/] [t48_core.vhd] - Blame information for rev 24

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 arniml
-------------------------------------------------------------------------------
2
--
3
-- T48 Microcontroller Core
4
--
5 24 arniml
-- $Id: t48_core.vhd,v 1.2 2004-03-28 13:13:20 arniml Exp $
6 4 arniml
--
7
-- Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org)
8
--
9
-- All rights reserved
10
--
11
-- Redistribution and use in source and synthezised forms, with or without
12
-- modification, are permitted provided that the following conditions are met:
13
--
14
-- Redistributions of source code must retain the above copyright notice,
15
-- this list of conditions and the following disclaimer.
16
--
17
-- Redistributions in synthesized form must reproduce the above copyright
18
-- notice, this list of conditions and the following disclaimer in the
19
-- documentation and/or other materials provided with the distribution.
20
--
21
-- Neither the name of the author nor the names of other contributors may
22
-- be used to endorse or promote products derived from this software without
23
-- specific prior written permission.
24
--
25
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
27
-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
29
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
-- POSSIBILITY OF SUCH DAMAGE.
36
--
37
-- Please report bugs to the author, but before you do so, please
38
-- make sure that this is not a derivative work and that
39
-- you have the latest version of this file.
40
--
41
-- The latest version of this file can be found at:
42
--      http://www.opencores.org/cvsweb.shtml/t48/
43
--
44
-- Limitations :
45
-- =============
46
--
47
-- Compared to the original MCS-48 architecture, the following limitations
48
-- apply:
49
--
50
--   * DA A instruction not implemented.
51
--     Implementation targeted for Beta milestone.
52
--
53
--   * Nibble-wide instructions addressing expander port not implemented.
54
--     Implementation targeted for Beta milestone.
55
--
56
--   * Single-step mode not implemented.
57
--     Not selected for future implementation.
58
--
59
--   * Reading of internal Program Memory not implemented.
60
--     Not selected for future implementation.
61
--
62
-------------------------------------------------------------------------------
63
 
64
library ieee;
65
use ieee.std_logic_1164.all;
66
 
67
entity t48_core is
68
 
69
  generic (
70
    -- divide XTAL1 by 3 to derive Clock States
71
    xtal_div_3_g          : integer := 1;
72
    -- store mnemonic in flip-flops (registered-out)
73
    register_mnemonic_g   : integer := 1;
74
    -- include the port 1 module
75
    include_port1_g       : integer := 1;
76
    -- include the port 2 module
77
    include_port2_g       : integer := 1;
78
    -- include the BUS module
79
    include_bus_g         : integer := 1;
80
    -- include the timer module
81
    include_timer_g       : integer := 1;
82
    -- state in which T1 is sampled (3 or 4)
83
    sample_t1_state_g     : integer := 4
84
  );
85
 
86
  port (
87
    -- T48 Interface ----------------------------------------------------------
88
    xtal_i      : in  std_logic;
89
    reset_i     : in  std_logic;
90
    t0_i        : in  std_logic;
91
    t0_o        : out std_logic;
92
    t0_dir_o    : out std_logic;
93
    int_n_i     : in  std_logic;
94
    ea_i        : in  std_logic;
95
    rd_n_o      : out std_logic;
96
    psen_n_o    : out std_logic;
97
    wr_n_o      : out std_logic;
98
    ale_o       : out std_logic;
99
    db_i        : in  std_logic_vector( 7 downto 0);
100
    db_o        : out std_logic_vector( 7 downto 0);
101
    db_dir_o    : out std_logic;
102
    t1_i        : in  std_logic;
103
    p2_i        : in  std_logic_vector( 7 downto 0);
104
    p2_o        : out std_logic_vector( 7 downto 0);
105
    p2_limp_o   : out std_logic;
106
    p1_i        : in  std_logic_vector( 7 downto 0);
107
    p1_o        : out std_logic_vector( 7 downto 0);
108
    p1_limp_o   : out std_logic;
109
    prog_n_o    : out std_logic;
110
    -- Core Interface ---------------------------------------------------------
111
    clk_i       : in  std_logic;
112
    en_clk_i    : in  std_logic;
113
    xtal3_o     : out std_logic;
114
    dmem_addr_o : out std_logic_vector( 7 downto 0);
115
    dmem_we_o   : out std_logic;
116
    dmem_data_i : in  std_logic_vector( 7 downto 0);
117
    dmem_data_o : out std_logic_vector( 7 downto 0);
118
    pmem_addr_o : out std_logic_vector(11 downto 0);
119
    pmem_data_i : in  std_logic_vector( 7 downto 0)
120
  );
121
 
122
end t48_core;
123
 
124
 
125
use work.alu_pack.alu_op_t;
126
use work.cond_branch_pack.branch_conditions_t;
127
use work.cond_branch_pack.comp_value_t;
128
use work.dmem_ctrl_pack.dmem_addr_ident_t;
129
use work.pmem_ctrl_pack.pmem_addr_ident_t;
130
use work.t48_comp_pack.all;
131
use work.t48_pack.bus_idle_level_c;
132
use work.t48_pack.word_t;
133
use work.t48_pack.pmem_addr_t;
134
use work.t48_pack.mstate_t;
135
use work.t48_pack.to_stdLogic;
136
use work.t48_pack.to_boolean;
137
 
138
architecture struct of t48_core is
139
 
140
  signal t48_data_s : word_t;
141
 
142
  signal en_clk_s   : boolean;
143
 
144
  -- ALU signals
145
  signal alu_data_s           : word_t;
146
  signal alu_write_accu_s     : boolean;
147
  signal alu_write_shadow_s   : boolean;
148
  signal alu_write_temp_reg_s : boolean;
149
  signal alu_read_alu_s       : boolean;
150
  signal alu_carry_s          : std_logic;
151
  signal alu_aux_carry_s      : std_logic;
152
  signal alu_op_s             : alu_op_t;
153
  signal alu_use_carry_s      : boolean;
154
 
155
  -- BUS signals
156
  signal bus_write_bus_s  : boolean;
157
  signal bus_read_bus_s   : boolean;
158
  signal bus_output_pcl_s : boolean;
159
  signal bus_bidir_bus_s  : boolean;
160
  signal bus_data_s       : word_t;
161
 
162
  -- Clock Controller signals
163
  signal clk_multi_cycle_s  : boolean;
164
  signal clk_assert_psen_s  : boolean;
165
  signal clk_assert_prog_s  : boolean;
166
  signal clk_assert_rd_s    : boolean;
167
  signal clk_assert_wr_s    : boolean;
168
  signal clk_mstate_s       : mstate_t;
169
  signal clk_second_cycle_s : boolean;
170
  signal psen_s             : boolean;
171
  signal prog_s             : boolean;
172
  signal rd_s               : boolean;
173
  signal wr_s               : boolean;
174
  signal ale_s              : boolean;
175
  signal xtal3_s            : boolean;
176
 
177
  -- Conditional Branch Logic signals
178
  signal cnd_compute_take_s : boolean;
179
  signal cnd_branch_cond_s  : branch_conditions_t;
180
  signal cnd_take_branch_s  : boolean;
181
  signal cnd_comp_value_s   : comp_value_t;
182
  signal cnd_f1_s           : std_logic;
183
  signal cnd_tf_s           : std_logic;
184
 
185
  -- Data Memory Controller signals
186
  signal dm_write_dmem_addr_s : boolean;
187
  signal dm_write_dmem_s      : boolean;
188
  signal dm_read_dmem_s       : boolean;
189
  signal dm_addr_type_s       : dmem_addr_ident_t;
190
  signal dm_data_s            : word_t;
191
 
192
  -- Decoder signals
193
  signal dec_data_s           : word_t;
194
 
195
  -- Port 1 signals
196
  signal p1_write_p1_s : boolean;
197
  signal p1_read_p1_s  : boolean;
198
  signal p1_read_reg_s : boolean;
199
  signal p1_data_s     : word_t;
200
 
201
  -- Port 2 signals
202
  signal p2_write_p2_s   : boolean;
203
  signal p2_write_exp_s  : boolean;
204
  signal p2_read_p2_s    : boolean;
205
  signal p2_read_reg_s   : boolean;
206 24 arniml
  signal p2_read_exp_s   : boolean;
207 4 arniml
  signal p2_output_pch_s : boolean;
208
  signal p2_output_exp_s : boolean;
209
  signal p2_data_s       : word_t;
210
 
211
  -- Program Memory Controller signals
212
  signal pm_write_pcl_s       : boolean;
213
  signal pm_read_pcl_s        : boolean;
214
  signal pm_write_pch_s       : boolean;
215
  signal pm_read_pch_s        : boolean;
216
  signal pm_read_pmem_s       : boolean;
217
  signal pm_inc_pc_s          : boolean;
218
  signal pm_write_pmem_addr_s : boolean;
219
  signal pm_data_s            : word_t;
220
  signal pm_addr_type_s       : pmem_addr_ident_t;
221
  signal pmem_addr_s          : pmem_addr_t;
222
 
223
  -- PSW signals
224
  signal psw_read_psw_s        : boolean;
225
  signal psw_read_sp_s         : boolean;
226
  signal psw_write_psw_s       : boolean;
227
  signal psw_write_sp_s        : boolean;
228
  signal psw_carry_s           : std_logic;
229
  signal psw_aux_carry_s       : std_logic;
230
  signal psw_f0_s              : std_logic;
231
  signal psw_bs_s              : std_logic;
232
  signal psw_special_data_s    : std_logic;
233
  signal psw_inc_stackp_s      : boolean;
234
  signal psw_dec_stackp_s      : boolean;
235
  signal psw_write_carry_s     : boolean;
236
  signal psw_write_aux_carry_s : boolean;
237
  signal psw_write_f0_s        : boolean;
238
  signal psw_write_bs_s        : boolean;
239
  signal psw_data_s            : word_t;
240
 
241
  -- Timer signals
242
  signal tim_overflow_s    : boolean;
243
  signal tim_of_s          : std_logic;
244
  signal tim_read_timer_s  : boolean;
245
  signal tim_write_timer_s : boolean;
246
  signal tim_start_t_s     : boolean;
247
  signal tim_start_cnt_s   : boolean;
248
  signal tim_stop_tcnt_s   : boolean;
249
  signal tim_data_s        : word_t;
250
 
251
begin
252
 
253
  -----------------------------------------------------------------------------
254
  -- Check generics for valid values.
255
  -----------------------------------------------------------------------------
256
  -- pragma translate_off
257
  assert include_timer_g = 0 or include_timer_g = 1
258
    report "include_timer_g must be either 1 or 0!"
259
    severity failure;
260
 
261
  assert include_port1_g = 0 or include_port1_g = 1
262
    report "include_port1_g must be either 1 or 0!"
263
    severity failure;
264
 
265
  assert include_port2_g = 0 or include_port2_g = 1
266
    report "include_port2_g must be either 1 or 0!"
267
    severity failure;
268
 
269
  assert include_bus_g   = 0 or include_bus_g = 1
270
    report "include_bus_g must be either 1 or 0!"
271
    severity failure;
272
  -- pragma translate_on
273
 
274
 
275
  en_clk_s <= to_boolean(en_clk_i);
276
 
277
  alu_b : alu
278
    port map (
279
      clk_i              => clk_i,
280
      res_i              => reset_i,
281
      en_clk_i           => en_clk_s,
282
      data_i             => t48_data_s,
283
      data_o             => alu_data_s,
284
      write_accu_i       => alu_write_accu_s,
285
      write_shadow_i     => alu_write_shadow_s,
286
      write_temp_reg_i   => alu_write_temp_reg_s,
287
      read_alu_i         => alu_read_alu_s,
288
      carry_i            => psw_carry_s,
289
      carry_o            => alu_carry_s,
290
      aux_carry_i        => psw_aux_carry_s,
291
      aux_carry_o        => alu_aux_carry_s,
292
      alu_op_i           => alu_op_s,
293
      use_carry_i        => alu_use_carry_s
294
    );
295
 
296
  bus_mux_b : bus_mux
297
    port map (
298
      alu_data_i => alu_data_s,
299
      bus_data_i => bus_data_s,
300
      dec_data_i => dec_data_s,
301
      dm_data_i  => dm_data_s,
302
      pm_data_i  => pm_data_s,
303
      p1_data_i  => p1_data_s,
304
      p2_data_i  => p2_data_s,
305
      psw_data_i => psw_data_s,
306
      tim_data_i => tim_data_s,
307
      data_o     => t48_data_s
308
    );
309
 
310
  clock_ctrl_b : clock_ctrl
311
    generic map (
312
      xtal_div_3_g   => xtal_div_3_g
313
    )
314
    port map (
315
      clk_i          => clk_i,
316
      xtal_i         => xtal_i,
317
      res_i          => reset_i,
318
      en_clk_i       => en_clk_s,
319
      xtal3_o        => xtal3_s,
320
      multi_cycle_i  => clk_multi_cycle_s,
321
      assert_psen_i  => clk_assert_psen_s,
322
      assert_prog_i  => clk_assert_prog_s,
323
      assert_rd_i    => clk_assert_rd_s,
324
      assert_wr_i    => clk_assert_wr_s,
325
      mstate_o       => clk_mstate_s,
326
      second_cycle_o => clk_second_cycle_s,
327
      ale_o          => ale_s,
328
      psen_o         => psen_s,
329
      prog_o         => prog_s,
330
      rd_o           => rd_s,
331
      wr_o           => wr_s
332
    );
333
 
334
  cond_branch_b : cond_branch
335
    port map (
336
      clk_i          => clk_i,
337
      res_i          => reset_i,
338
      en_clk_i       => en_clk_s,
339
      compute_take_i => cnd_compute_take_s,
340
      branch_cond_i  => cnd_branch_cond_s,
341
      take_branch_o  => cnd_take_branch_s,
342
      accu_i         => alu_data_s,
343
      t0_i           => To_X01Z(t0_i),
344
      t1_i           => To_X01Z(t1_i),
345
      int_n_i        => int_n_i,
346
      f0_i           => psw_f0_s,
347
      f1_i           => cnd_f1_s,
348
      tf_i           => cnd_tf_s,
349
      carry_i        => psw_carry_s,
350
      comp_value_i   => cnd_comp_value_s
351
    );
352
 
353
  use_db_bus: if include_bus_g = 1 generate
354
    db_bus_b : db_bus
355
      port map (
356
        clk_i        => clk_i,
357
        res_i        => reset_i,
358
        en_clk_i     => en_clk_s,
359
        ea_i         => ea_i,
360
        data_i       => t48_data_s,
361
        data_o       => bus_data_s,
362
        write_bus_i  => bus_write_bus_s,
363
        read_bus_i   => bus_read_bus_s,
364
        output_pcl_i => bus_output_pcl_s,
365
        bidir_bus_i  => bus_bidir_bus_s,
366
        pcl_i        => pmem_addr_s(word_t'range),
367
        db_i         => db_i,
368
        db_o         => db_o,
369
        db_dir_o     => db_dir_o
370
      );
371
  end generate;
372
 
373
  skip_db_bus: if include_bus_g = 0 generate
374
    bus_data_s <= (others => bus_idle_level_c);
375
    db_o       <= (others => '0');
376
    db_dir_o   <= '0';
377
  end generate;
378
 
379
  decoder_b : decoder
380
    generic map (
381
      register_mnemonic_g => register_mnemonic_g
382
    )
383
    port map (
384
      clk_i                  => clk_i,
385
      res_i                  => reset_i,
386
      en_clk_i               => en_clk_s,
387
      ea_i                   => ea_i,
388
      ale_i                  => ale_s,
389
      int_n_i                => int_n_i,
390
      t0_dir_o               => t0_dir_o,
391
      data_i                 => t48_data_s,
392
      data_o                 => dec_data_s,
393
      alu_write_accu_o       => alu_write_accu_s,
394
      alu_write_shadow_o     => alu_write_shadow_s,
395
      alu_write_temp_reg_o   => alu_write_temp_reg_s,
396
      alu_read_alu_o         => alu_read_alu_s,
397
      bus_write_bus_o        => bus_write_bus_s,
398
      bus_read_bus_o         => bus_read_bus_s,
399
      dm_write_dmem_addr_o   => dm_write_dmem_addr_s,
400
      dm_write_dmem_o        => dm_write_dmem_s,
401
      dm_read_dmem_o         => dm_read_dmem_s,
402
      p1_write_p1_o          => p1_write_p1_s,
403
      p1_read_p1_o           => p1_read_p1_s,
404
      pm_write_pcl_o         => pm_write_pcl_s,
405
      p2_write_p2_o          => p2_write_p2_s,
406
      p2_write_exp_o         => p2_write_exp_s,
407
      p2_read_p2_o           => p2_read_p2_s,
408
      pm_read_pcl_o          => pm_read_pcl_s,
409
      pm_write_pch_o         => pm_write_pch_s,
410
      pm_read_pch_o          => pm_read_pch_s,
411
      pm_read_pmem_o         => pm_read_pmem_s,
412
      psw_read_psw_o         => psw_read_psw_s,
413
      psw_read_sp_o          => psw_read_sp_s,
414
      psw_write_psw_o        => psw_write_psw_s,
415
      psw_write_sp_o         => psw_write_sp_s,
416
      alu_carry_i            => alu_carry_s,
417
      alu_aux_carry_i        => alu_aux_carry_s,
418
      alu_op_o               => alu_op_s,
419
      alu_use_carry_o        => alu_use_carry_s,
420
      bus_output_pcl_o       => bus_output_pcl_s,
421
      bus_bidir_bus_o        => bus_bidir_bus_s,
422
      clk_multi_cycle_o      => clk_multi_cycle_s,
423
      clk_assert_psen_o      => clk_assert_psen_s,
424
      clk_assert_prog_o      => clk_assert_prog_s,
425
      clk_assert_rd_o        => clk_assert_rd_s,
426
      clk_assert_wr_o        => clk_assert_wr_s,
427
      clk_mstate_i           => clk_mstate_s,
428
      clk_second_cycle_i     => clk_second_cycle_s,
429
      cnd_compute_take_o     => cnd_compute_take_s,
430
      cnd_branch_cond_o      => cnd_branch_cond_s,
431
      cnd_take_branch_i      => cnd_take_branch_s,
432
      cnd_comp_value_o       => cnd_comp_value_s,
433
      cnd_f1_o               => cnd_f1_s,
434
      cnd_tf_o               => cnd_tf_s,
435
      dm_addr_type_o         => dm_addr_type_s,
436
      tim_read_timer_o       => tim_read_timer_s,
437
      tim_write_timer_o      => tim_write_timer_s,
438
      tim_start_t_o          => tim_start_t_s,
439
      tim_start_cnt_o        => tim_start_cnt_s,
440
      tim_stop_tcnt_o        => tim_stop_tcnt_s,
441
      p1_read_reg_o          => p1_read_reg_s,
442
      p2_read_reg_o          => p2_read_reg_s,
443 24 arniml
      p2_read_exp_o          => p2_read_exp_s,
444 4 arniml
      p2_output_pch_o        => p2_output_pch_s,
445
      p2_output_exp_o        => p2_output_exp_s,
446
      pm_inc_pc_o            => pm_inc_pc_s,
447
      pm_write_pmem_addr_o   => pm_write_pmem_addr_s,
448
      pm_addr_type_o         => pm_addr_type_s,
449
      psw_special_data_o     => psw_special_data_s,
450
      psw_carry_i            => psw_carry_s,
451
      psw_f0_i               => psw_f0_s,
452
      psw_inc_stackp_o       => psw_inc_stackp_s,
453
      psw_dec_stackp_o       => psw_dec_stackp_s,
454
      psw_write_carry_o      => psw_write_carry_s,
455
      psw_write_aux_carry_o  => psw_write_aux_carry_s,
456
      psw_write_f0_o         => psw_write_f0_s,
457
      psw_write_bs_o         => psw_write_bs_s,
458
      tim_overflow_i         => tim_overflow_s
459
    );
460
 
461
  dmem_ctrl_b : dmem_ctrl
462
    port map (
463
      clk_i             => clk_i,
464
      res_i             => reset_i,
465
      en_clk_i          => en_clk_s,
466
      data_i            => t48_data_s,
467
      write_dmem_addr_i => dm_write_dmem_addr_s,
468
      write_dmem_i      => dm_write_dmem_s,
469
      read_dmem_i       => dm_read_dmem_s,
470
      addr_type_i       => dm_addr_type_s,
471
      bank_select_i     => psw_bs_s,
472
      data_o            => dm_data_s,
473
      dmem_data_i       => dmem_data_i,
474
      dmem_addr_o       => dmem_addr_o,
475
      dmem_we_o         => dmem_we_o,
476
      dmem_data_o       => dmem_data_o
477
    );
478
 
479
  use_timer: if include_timer_g = 1 generate
480
    timer_b : timer
481
      generic map (
482
        sample_t1_state_g => sample_t1_state_g
483
      )
484
      port map (
485
        clk_i         => clk_i,
486
        res_i         => reset_i,
487
        en_clk_i      => en_clk_s,
488
        t1_i          => To_X01Z(t1_i),
489
        clk_mstate_i  => clk_mstate_s,
490
        data_i        => t48_data_s,
491
        data_o        => tim_data_s,
492
        read_timer_i  => tim_read_timer_s,
493
        write_timer_i => tim_write_timer_s,
494
        start_t_i     => tim_start_t_s,
495
        start_cnt_i   => tim_start_cnt_s,
496
        stop_tcnt_i   => tim_stop_tcnt_s,
497
        overflow_o    => tim_of_s
498
      );
499
  end generate;
500
 
501
  skip_timer: if include_timer_g = 0 generate
502
    tim_data_s <= (others => bus_idle_level_c);
503
    tim_of_s   <= '0';
504
  end generate;
505
 
506
  tim_overflow_s <= to_boolean(tim_of_s);
507
 
508
  use_p1: if include_port1_g = 1 generate
509
    p1_b : p1
510
      port map (
511
        clk_i      => clk_i,
512
        res_i      => reset_i,
513
        en_clk_i   =>  en_clk_s,
514
        data_i     => t48_data_s,
515
        data_o     => p1_data_s,
516
        write_p1_i => p1_write_p1_s,
517
        read_p1_i  => p1_read_p1_s,
518
        read_reg_i => p1_read_reg_s,
519
        p1_i       => p1_i,
520
        p1_o       => p1_o,
521
        p1_limp_o  => p1_limp_o
522
      );
523
  end generate;
524
 
525
  skip_p1: if include_port1_g = 0 generate
526
    p1_data_s <= (others => bus_idle_level_c);
527
    p1_o      <= (others => '0');
528
    p1_limp_o <= '0';
529
  end generate;
530
 
531
  use_p2: if include_port2_g = 1 generate
532
    p2_b : p2
533
      port map (
534
        clk_i        => clk_i,
535
        res_i        => reset_i,
536
        en_clk_i     => en_clk_s,
537
        data_i       => t48_data_s,
538
        data_o       => p2_data_s,
539
        write_p2_i   => p2_write_p2_s,
540
        write_exp_i  => p2_write_exp_s,
541
        read_p2_i    => p2_read_p2_s,
542
        read_reg_i   => p2_read_reg_s,
543 24 arniml
        read_exp_i   => p2_read_exp_s,
544 4 arniml
        output_pch_i => p2_output_pch_s,
545
        output_exp_i => p2_output_exp_s,
546
        pch_i        => pmem_addr_s(11 downto 8),
547
        p2_i         => p2_i,
548
        p2_o         => p2_o,
549
        p2_limp_o    => p2_limp_o
550
      );
551
  end generate;
552
 
553
  skip_p2: if include_port2_g = 0 generate
554
    p2_data_s <= (others => bus_idle_level_c);
555
    p2_o      <= (others => '0');
556
    p2_limp_o <= '0';
557
  end generate;
558
 
559
  pmem_ctrl_b : pmem_ctrl
560
    port map (
561
      clk_i             => clk_i,
562
      res_i             => reset_i,
563
      en_clk_i          => en_clk_s,
564
      data_i            => t48_data_s,
565
      data_o            => pm_data_s,
566
      write_pcl_i       => pm_write_pcl_s,
567
      read_pcl_i        => pm_read_pcl_s,
568
      write_pch_i       => pm_write_pch_s,
569
      read_pch_i        => pm_read_pch_s,
570
      inc_pc_i          => pm_inc_pc_s,
571
      write_pmem_addr_i => pm_write_pmem_addr_s,
572
      addr_type_i       => pm_addr_type_s,
573
      read_pmem_i       => pm_read_pmem_s,
574
      pmem_addr_o       => pmem_addr_s,
575
      pmem_data_i       => pmem_data_i
576
    );
577
 
578
  psw_b : psw
579
    port map (
580
      clk_i              => clk_i,
581
      res_i              => reset_i,
582
      en_clk_i           => en_clk_s,
583
      data_i             => t48_data_s,
584
      data_o             => psw_data_s,
585
      read_psw_i         => psw_read_psw_s,
586
      read_sp_i          => psw_read_sp_s,
587
      write_psw_i        => psw_write_psw_s,
588
      write_sp_i         => psw_write_sp_s,
589
      special_data_i     => psw_special_data_s,
590
      inc_stackp_i       => psw_inc_stackp_s,
591
      dec_stackp_i       => psw_dec_stackp_s,
592
      write_carry_i      => psw_write_carry_s,
593
      write_aux_carry_i  => psw_write_aux_carry_s,
594
      write_f0_i         => psw_write_f0_s,
595
      write_bs_i         => psw_write_bs_s,
596
      carry_o            => psw_carry_s,
597
      aux_carry_o        => psw_aux_carry_s,
598
      f0_o               => psw_f0_s,
599
      bs_o               => psw_bs_s
600
    );
601
 
602
 
603
  -----------------------------------------------------------------------------
604
  -- Output Mapping.
605
  -----------------------------------------------------------------------------
606
  ale_o       <= to_stdLogic(ale_s);
607
  t0_o        <= clk_i;
608
  psen_n_o    <= to_stdLogic(not psen_s);
609
  prog_n_o    <= to_stdLogic(not prog_s);
610
  rd_n_o      <= to_stdLogic(not rd_s);
611
  wr_n_o      <= to_stdLogic(not wr_s);
612
  xtal3_o     <= to_stdLogic(xtal3_s);
613
  pmem_addr_o <= pmem_addr_s;
614
 
615
end struct;
616
 
617
 
618
-------------------------------------------------------------------------------
619
-- File History:
620
--
621
-- $Log: not supported by cvs2svn $
622 24 arniml
-- Revision 1.1  2004/03/23 21:31:53  arniml
623
-- initial check-in
624 4 arniml
--
625
-------------------------------------------------------------------------------

powered by: WebSVN 2.1.0

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