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

Subversion Repositories t48

[/] [t48/] [tags/] [rel_0_3_beta/] [rtl/] [vhdl/] [t48_core.vhd] - Blame information for rev 32

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

powered by: WebSVN 2.1.0

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