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

Subversion Repositories t48

[/] [t48/] [tags/] [rel_1_0/] [rtl/] [vhdl/] [t48_core.vhd] - Blame information for rev 4

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
-- $Id: t48_core.vhd,v 1.1 2004-03-23 21:31:53 arniml Exp $
6
--
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
  signal p2_output_pch_s : boolean;
207
  signal p2_output_exp_s : boolean;
208
  signal p2_data_s       : word_t;
209
 
210
  -- Program Memory Controller signals
211
  signal pm_write_pcl_s       : boolean;
212
  signal pm_read_pcl_s        : boolean;
213
  signal pm_write_pch_s       : boolean;
214
  signal pm_read_pch_s        : boolean;
215
  signal pm_read_pmem_s       : boolean;
216
  signal pm_inc_pc_s          : boolean;
217
  signal pm_write_pmem_addr_s : boolean;
218
  signal pm_data_s            : word_t;
219
  signal pm_addr_type_s       : pmem_addr_ident_t;
220
  signal pmem_addr_s          : pmem_addr_t;
221
 
222
  -- PSW signals
223
  signal psw_read_psw_s        : boolean;
224
  signal psw_read_sp_s         : boolean;
225
  signal psw_write_psw_s       : boolean;
226
  signal psw_write_sp_s        : boolean;
227
  signal psw_carry_s           : std_logic;
228
  signal psw_aux_carry_s       : std_logic;
229
  signal psw_f0_s              : std_logic;
230
  signal psw_bs_s              : std_logic;
231
  signal psw_special_data_s    : std_logic;
232
  signal psw_inc_stackp_s      : boolean;
233
  signal psw_dec_stackp_s      : boolean;
234
  signal psw_write_carry_s     : boolean;
235
  signal psw_write_aux_carry_s : boolean;
236
  signal psw_write_f0_s        : boolean;
237
  signal psw_write_bs_s        : boolean;
238
  signal psw_data_s            : word_t;
239
 
240
  -- Timer signals
241
  signal tim_overflow_s    : boolean;
242
  signal tim_of_s          : std_logic;
243
  signal tim_read_timer_s  : boolean;
244
  signal tim_write_timer_s : boolean;
245
  signal tim_start_t_s     : boolean;
246
  signal tim_start_cnt_s   : boolean;
247
  signal tim_stop_tcnt_s   : boolean;
248
  signal tim_data_s        : word_t;
249
 
250
begin
251
 
252
  -----------------------------------------------------------------------------
253
  -- Check generics for valid values.
254
  -----------------------------------------------------------------------------
255
  -- pragma translate_off
256
  assert include_timer_g = 0 or include_timer_g = 1
257
    report "include_timer_g must be either 1 or 0!"
258
    severity failure;
259
 
260
  assert include_port1_g = 0 or include_port1_g = 1
261
    report "include_port1_g must be either 1 or 0!"
262
    severity failure;
263
 
264
  assert include_port2_g = 0 or include_port2_g = 1
265
    report "include_port2_g must be either 1 or 0!"
266
    severity failure;
267
 
268
  assert include_bus_g   = 0 or include_bus_g = 1
269
    report "include_bus_g must be either 1 or 0!"
270
    severity failure;
271
  -- pragma translate_on
272
 
273
 
274
  en_clk_s <= to_boolean(en_clk_i);
275
 
276
  alu_b : alu
277
    port map (
278
      clk_i              => clk_i,
279
      res_i              => reset_i,
280
      en_clk_i           => en_clk_s,
281
      data_i             => t48_data_s,
282
      data_o             => alu_data_s,
283
      write_accu_i       => alu_write_accu_s,
284
      write_shadow_i     => alu_write_shadow_s,
285
      write_temp_reg_i   => alu_write_temp_reg_s,
286
      read_alu_i         => alu_read_alu_s,
287
      carry_i            => psw_carry_s,
288
      carry_o            => alu_carry_s,
289
      aux_carry_i        => psw_aux_carry_s,
290
      aux_carry_o        => alu_aux_carry_s,
291
      alu_op_i           => alu_op_s,
292
      use_carry_i        => alu_use_carry_s
293
    );
294
 
295
  bus_mux_b : bus_mux
296
    port map (
297
      alu_data_i => alu_data_s,
298
      bus_data_i => bus_data_s,
299
      dec_data_i => dec_data_s,
300
      dm_data_i  => dm_data_s,
301
      pm_data_i  => pm_data_s,
302
      p1_data_i  => p1_data_s,
303
      p2_data_i  => p2_data_s,
304
      psw_data_i => psw_data_s,
305
      tim_data_i => tim_data_s,
306
      data_o     => t48_data_s
307
    );
308
 
309
  clock_ctrl_b : clock_ctrl
310
    generic map (
311
      xtal_div_3_g   => xtal_div_3_g
312
    )
313
    port map (
314
      clk_i          => clk_i,
315
      xtal_i         => xtal_i,
316
      res_i          => reset_i,
317
      en_clk_i       => en_clk_s,
318
      xtal3_o        => xtal3_s,
319
      multi_cycle_i  => clk_multi_cycle_s,
320
      assert_psen_i  => clk_assert_psen_s,
321
      assert_prog_i  => clk_assert_prog_s,
322
      assert_rd_i    => clk_assert_rd_s,
323
      assert_wr_i    => clk_assert_wr_s,
324
      mstate_o       => clk_mstate_s,
325
      second_cycle_o => clk_second_cycle_s,
326
      ale_o          => ale_s,
327
      psen_o         => psen_s,
328
      prog_o         => prog_s,
329
      rd_o           => rd_s,
330
      wr_o           => wr_s
331
    );
332
 
333
  cond_branch_b : cond_branch
334
    port map (
335
      clk_i          => clk_i,
336
      res_i          => reset_i,
337
      en_clk_i       => en_clk_s,
338
      compute_take_i => cnd_compute_take_s,
339
      branch_cond_i  => cnd_branch_cond_s,
340
      take_branch_o  => cnd_take_branch_s,
341
      accu_i         => alu_data_s,
342
      t0_i           => To_X01Z(t0_i),
343
      t1_i           => To_X01Z(t1_i),
344
      int_n_i        => int_n_i,
345
      f0_i           => psw_f0_s,
346
      f1_i           => cnd_f1_s,
347
      tf_i           => cnd_tf_s,
348
      carry_i        => psw_carry_s,
349
      comp_value_i   => cnd_comp_value_s
350
    );
351
 
352
  use_db_bus: if include_bus_g = 1 generate
353
    db_bus_b : db_bus
354
      port map (
355
        clk_i        => clk_i,
356
        res_i        => reset_i,
357
        en_clk_i     => en_clk_s,
358
        ea_i         => ea_i,
359
        data_i       => t48_data_s,
360
        data_o       => bus_data_s,
361
        write_bus_i  => bus_write_bus_s,
362
        read_bus_i   => bus_read_bus_s,
363
        output_pcl_i => bus_output_pcl_s,
364
        bidir_bus_i  => bus_bidir_bus_s,
365
        pcl_i        => pmem_addr_s(word_t'range),
366
        db_i         => db_i,
367
        db_o         => db_o,
368
        db_dir_o     => db_dir_o
369
      );
370
  end generate;
371
 
372
  skip_db_bus: if include_bus_g = 0 generate
373
    bus_data_s <= (others => bus_idle_level_c);
374
    db_o       <= (others => '0');
375
    db_dir_o   <= '0';
376
  end generate;
377
 
378
  decoder_b : decoder
379
    generic map (
380
      register_mnemonic_g => register_mnemonic_g
381
    )
382
    port map (
383
      clk_i                  => clk_i,
384
      res_i                  => reset_i,
385
      en_clk_i               => en_clk_s,
386
      ea_i                   => ea_i,
387
      ale_i                  => ale_s,
388
      int_n_i                => int_n_i,
389
      t0_dir_o               => t0_dir_o,
390
      data_i                 => t48_data_s,
391
      data_o                 => dec_data_s,
392
      alu_write_accu_o       => alu_write_accu_s,
393
      alu_write_shadow_o     => alu_write_shadow_s,
394
      alu_write_temp_reg_o   => alu_write_temp_reg_s,
395
      alu_read_alu_o         => alu_read_alu_s,
396
      bus_write_bus_o        => bus_write_bus_s,
397
      bus_read_bus_o         => bus_read_bus_s,
398
      dm_write_dmem_addr_o   => dm_write_dmem_addr_s,
399
      dm_write_dmem_o        => dm_write_dmem_s,
400
      dm_read_dmem_o         => dm_read_dmem_s,
401
      p1_write_p1_o          => p1_write_p1_s,
402
      p1_read_p1_o           => p1_read_p1_s,
403
      pm_write_pcl_o         => pm_write_pcl_s,
404
      p2_write_p2_o          => p2_write_p2_s,
405
      p2_write_exp_o         => p2_write_exp_s,
406
      p2_read_p2_o           => p2_read_p2_s,
407
      pm_read_pcl_o          => pm_read_pcl_s,
408
      pm_write_pch_o         => pm_write_pch_s,
409
      pm_read_pch_o          => pm_read_pch_s,
410
      pm_read_pmem_o         => pm_read_pmem_s,
411
      psw_read_psw_o         => psw_read_psw_s,
412
      psw_read_sp_o          => psw_read_sp_s,
413
      psw_write_psw_o        => psw_write_psw_s,
414
      psw_write_sp_o         => psw_write_sp_s,
415
      alu_carry_i            => alu_carry_s,
416
      alu_aux_carry_i        => alu_aux_carry_s,
417
      alu_op_o               => alu_op_s,
418
      alu_use_carry_o        => alu_use_carry_s,
419
      bus_output_pcl_o       => bus_output_pcl_s,
420
      bus_bidir_bus_o        => bus_bidir_bus_s,
421
      clk_multi_cycle_o      => clk_multi_cycle_s,
422
      clk_assert_psen_o      => clk_assert_psen_s,
423
      clk_assert_prog_o      => clk_assert_prog_s,
424
      clk_assert_rd_o        => clk_assert_rd_s,
425
      clk_assert_wr_o        => clk_assert_wr_s,
426
      clk_mstate_i           => clk_mstate_s,
427
      clk_second_cycle_i     => clk_second_cycle_s,
428
      cnd_compute_take_o     => cnd_compute_take_s,
429
      cnd_branch_cond_o      => cnd_branch_cond_s,
430
      cnd_take_branch_i      => cnd_take_branch_s,
431
      cnd_comp_value_o       => cnd_comp_value_s,
432
      cnd_f1_o               => cnd_f1_s,
433
      cnd_tf_o               => cnd_tf_s,
434
      dm_addr_type_o         => dm_addr_type_s,
435
      tim_read_timer_o       => tim_read_timer_s,
436
      tim_write_timer_o      => tim_write_timer_s,
437
      tim_start_t_o          => tim_start_t_s,
438
      tim_start_cnt_o        => tim_start_cnt_s,
439
      tim_stop_tcnt_o        => tim_stop_tcnt_s,
440
      p1_read_reg_o          => p1_read_reg_s,
441
      p2_read_reg_o          => p2_read_reg_s,
442
      p2_output_pch_o        => p2_output_pch_s,
443
      p2_output_exp_o        => p2_output_exp_s,
444
      pm_inc_pc_o            => pm_inc_pc_s,
445
      pm_write_pmem_addr_o   => pm_write_pmem_addr_s,
446
      pm_addr_type_o         => pm_addr_type_s,
447
      psw_special_data_o     => psw_special_data_s,
448
      psw_carry_i            => psw_carry_s,
449
      psw_f0_i               => psw_f0_s,
450
      psw_inc_stackp_o       => psw_inc_stackp_s,
451
      psw_dec_stackp_o       => psw_dec_stackp_s,
452
      psw_write_carry_o      => psw_write_carry_s,
453
      psw_write_aux_carry_o  => psw_write_aux_carry_s,
454
      psw_write_f0_o         => psw_write_f0_s,
455
      psw_write_bs_o         => psw_write_bs_s,
456
      tim_overflow_i         => tim_overflow_s
457
    );
458
 
459
  dmem_ctrl_b : dmem_ctrl
460
    port map (
461
      clk_i             => clk_i,
462
      res_i             => reset_i,
463
      en_clk_i          => en_clk_s,
464
      data_i            => t48_data_s,
465
      write_dmem_addr_i => dm_write_dmem_addr_s,
466
      write_dmem_i      => dm_write_dmem_s,
467
      read_dmem_i       => dm_read_dmem_s,
468
      addr_type_i       => dm_addr_type_s,
469
      bank_select_i     => psw_bs_s,
470
      data_o            => dm_data_s,
471
      dmem_data_i       => dmem_data_i,
472
      dmem_addr_o       => dmem_addr_o,
473
      dmem_we_o         => dmem_we_o,
474
      dmem_data_o       => dmem_data_o
475
    );
476
 
477
  use_timer: if include_timer_g = 1 generate
478
    timer_b : timer
479
      generic map (
480
        sample_t1_state_g => sample_t1_state_g
481
      )
482
      port map (
483
        clk_i         => clk_i,
484
        res_i         => reset_i,
485
        en_clk_i      => en_clk_s,
486
        t1_i          => To_X01Z(t1_i),
487
        clk_mstate_i  => clk_mstate_s,
488
        data_i        => t48_data_s,
489
        data_o        => tim_data_s,
490
        read_timer_i  => tim_read_timer_s,
491
        write_timer_i => tim_write_timer_s,
492
        start_t_i     => tim_start_t_s,
493
        start_cnt_i   => tim_start_cnt_s,
494
        stop_tcnt_i   => tim_stop_tcnt_s,
495
        overflow_o    => tim_of_s
496
      );
497
  end generate;
498
 
499
  skip_timer: if include_timer_g = 0 generate
500
    tim_data_s <= (others => bus_idle_level_c);
501
    tim_of_s   <= '0';
502
  end generate;
503
 
504
  tim_overflow_s <= to_boolean(tim_of_s);
505
 
506
  use_p1: if include_port1_g = 1 generate
507
    p1_b : p1
508
      port map (
509
        clk_i      => clk_i,
510
        res_i      => reset_i,
511
        en_clk_i   =>  en_clk_s,
512
        data_i     => t48_data_s,
513
        data_o     => p1_data_s,
514
        write_p1_i => p1_write_p1_s,
515
        read_p1_i  => p1_read_p1_s,
516
        read_reg_i => p1_read_reg_s,
517
        p1_i       => p1_i,
518
        p1_o       => p1_o,
519
        p1_limp_o  => p1_limp_o
520
      );
521
  end generate;
522
 
523
  skip_p1: if include_port1_g = 0 generate
524
    p1_data_s <= (others => bus_idle_level_c);
525
    p1_o      <= (others => '0');
526
    p1_limp_o <= '0';
527
  end generate;
528
 
529
  use_p2: if include_port2_g = 1 generate
530
    p2_b : p2
531
      port map (
532
        clk_i        => clk_i,
533
        res_i        => reset_i,
534
        en_clk_i     => en_clk_s,
535
        data_i       => t48_data_s,
536
        data_o       => p2_data_s,
537
        write_p2_i   => p2_write_p2_s,
538
        write_exp_i  => p2_write_exp_s,
539
        read_p2_i    => p2_read_p2_s,
540
        read_reg_i   => p2_read_reg_s,
541
        output_pch_i => p2_output_pch_s,
542
        output_exp_i => p2_output_exp_s,
543
        pch_i        => pmem_addr_s(11 downto 8),
544
        p2_i         => p2_i,
545
        p2_o         => p2_o,
546
        p2_limp_o    => p2_limp_o
547
      );
548
  end generate;
549
 
550
  skip_p2: if include_port2_g = 0 generate
551
    p2_data_s <= (others => bus_idle_level_c);
552
    p2_o      <= (others => '0');
553
    p2_limp_o <= '0';
554
  end generate;
555
 
556
  pmem_ctrl_b : pmem_ctrl
557
    port map (
558
      clk_i             => clk_i,
559
      res_i             => reset_i,
560
      en_clk_i          => en_clk_s,
561
      data_i            => t48_data_s,
562
      data_o            => pm_data_s,
563
      write_pcl_i       => pm_write_pcl_s,
564
      read_pcl_i        => pm_read_pcl_s,
565
      write_pch_i       => pm_write_pch_s,
566
      read_pch_i        => pm_read_pch_s,
567
      inc_pc_i          => pm_inc_pc_s,
568
      write_pmem_addr_i => pm_write_pmem_addr_s,
569
      addr_type_i       => pm_addr_type_s,
570
      read_pmem_i       => pm_read_pmem_s,
571
      pmem_addr_o       => pmem_addr_s,
572
      pmem_data_i       => pmem_data_i
573
    );
574
 
575
  psw_b : psw
576
    port map (
577
      clk_i              => clk_i,
578
      res_i              => reset_i,
579
      en_clk_i           => en_clk_s,
580
      data_i             => t48_data_s,
581
      data_o             => psw_data_s,
582
      read_psw_i         => psw_read_psw_s,
583
      read_sp_i          => psw_read_sp_s,
584
      write_psw_i        => psw_write_psw_s,
585
      write_sp_i         => psw_write_sp_s,
586
      special_data_i     => psw_special_data_s,
587
      inc_stackp_i       => psw_inc_stackp_s,
588
      dec_stackp_i       => psw_dec_stackp_s,
589
      write_carry_i      => psw_write_carry_s,
590
      write_aux_carry_i  => psw_write_aux_carry_s,
591
      write_f0_i         => psw_write_f0_s,
592
      write_bs_i         => psw_write_bs_s,
593
      carry_o            => psw_carry_s,
594
      aux_carry_o        => psw_aux_carry_s,
595
      f0_o               => psw_f0_s,
596
      bs_o               => psw_bs_s
597
    );
598
 
599
 
600
  -----------------------------------------------------------------------------
601
  -- Output Mapping.
602
  -----------------------------------------------------------------------------
603
  ale_o       <= to_stdLogic(ale_s);
604
  t0_o        <= clk_i;
605
  psen_n_o    <= to_stdLogic(not psen_s);
606
  prog_n_o    <= to_stdLogic(not prog_s);
607
  rd_n_o      <= to_stdLogic(not rd_s);
608
  wr_n_o      <= to_stdLogic(not wr_s);
609
  xtal3_o     <= to_stdLogic(xtal3_s);
610
  pmem_addr_o <= pmem_addr_s;
611
 
612
end struct;
613
 
614
 
615
-------------------------------------------------------------------------------
616
-- File History:
617
--
618
-- $Log: not supported by cvs2svn $
619
--
620
-------------------------------------------------------------------------------

powered by: WebSVN 2.1.0

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