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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.74/] [rtl/] [w11a/] [pdp11_sys70.vhd] - Blame information for rev 38

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 36 wfjm
-- $Id: pdp11_sys70.vhd 750 2016-03-24 23:11:51Z mueller $
2 2 wfjm
--
3 36 wfjm
-- Copyright 2015-2016 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 2 wfjm
--
5
-- This program is free software; you may redistribute and/or modify it under
6
-- the terms of the GNU General Public License as published by the Free
7
-- Software Foundation, either version 2, or at your option any later version.
8
--
9
-- This program is distributed in the hope that it will be useful, but
10
-- WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
11
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
-- for complete details.
13
--
14
------------------------------------------------------------------------------
15
-- Module Name:    pdp11_sys70 - syn
16 30 wfjm
-- Description:    pdp11: 11/70 system - single core +rbus,debug,cache
17 2 wfjm
--
18 30 wfjm
-- Dependencies:   w11a/pdp11_core_rbus
19
--                 w11a/pdp11_core
20
--                 w11a/pdp11_cache
21
--                 w11a/pdp11_mem70
22
--                 ibus/ibd_ibmon
23
--                 ibus/ib_sres_or_3
24 34 wfjm
--                 w11a/pdp11_dmscnt
25
--                 rbus/rb_sres_or_4
26 30 wfjm
--                 w11a/pdp11_tmu_sb           [sim only]
27
--
28 2 wfjm
-- Test bench:     tb/tb_pdp11_core (implicit)
29
-- Target Devices: generic
30 36 wfjm
-- Tool versions:  ise 14.7; viv 2014.4-2015.5; ghdl 0.33
31 8 wfjm
--
32 2 wfjm
-- Revision History: 
33
-- Date         Rev Version  Comment
34 36 wfjm
-- 2016-03-22   750   1.2    pdp11_cache now configurable size
35 34 wfjm
-- 2015-11-01   712   1.1.4  use sbcntl_sbf_tmu
36
-- 2015-07-19   702   1.1.3  use DM_STAT_SE
37
-- 2015-07-04   697   1.1.2  change DM_STAT_SY setup; add dmcmon, dmhbpt;
38
-- 2015-06-26   695   1.1.1  add pdp11_dmscnt support
39 30 wfjm
-- 2015-05-09   677   1.1    start/stop/suspend overhaul; reset overhaul
40
-- 2015-05-01   672   1.0    Initial version (extracted from sys_w11a_*)
41 2 wfjm
------------------------------------------------------------------------------
42
 
43
library ieee;
44
use ieee.std_logic_1164.all;
45 13 wfjm
use ieee.numeric_std.all;
46 2 wfjm
 
47
use work.slvtypes.all;
48 30 wfjm
use work.rblib.all;
49 2 wfjm
use work.pdp11.all;
50
use work.iblib.all;
51
use work.sys_conf.all;
52
 
53
-- ----------------------------------------------------------------------------
54
 
55 30 wfjm
entity pdp11_sys70 is                   -- 11/70 system 1 core +rbus,debug,cache
56 2 wfjm
  port (
57
    CLK : in slbit;                     -- clock
58 30 wfjm
    RESET : in slbit;                   -- reset
59
    RB_MREQ : in rb_mreq_type;          -- rbus request  (slave)
60
    RB_SRES : out rb_sres_type;         -- rbus response
61
    RB_STAT : out slv4;                 -- rbus status flags
62
    RB_LAM_CPU : out slbit;             -- rbus lam (cpu)
63
    GRESET : out slbit;                 -- general reset (from rbus)
64
    CRESET : out slbit;                 -- cpu reset     (from cp)
65
    BRESET : out slbit;                 -- bus reset     (from cp or cpu)
66
    CP_STAT : out cp_stat_type;         -- console port status
67
    EI_PRI  : in slv3;                  -- external interrupt priority
68
    EI_VECT : in slv9_2;                -- external interrupt vector
69
    EI_ACKM : out slbit;                -- external interrupt acknowledge
70
    ITIMER : out slbit;                 -- instruction timer
71
    IB_MREQ : out ib_mreq_type;         -- ibus request  (master)
72
    IB_SRES : in ib_sres_type;          -- ibus response
73
    MEM_REQ : out slbit;                -- memory: request
74
    MEM_WE : out slbit;                 -- memory: write enable
75
    MEM_BUSY : in slbit;                -- memory: controller busy
76
    MEM_ACK_R : in slbit;               -- memory: acknowledge read
77
    MEM_ADDR : out slv20;               -- memory: address
78
    MEM_BE : out slv4;                  -- memory: byte enable
79
    MEM_DI : out slv32;                 -- memory: data in  (memory view)
80
    MEM_DO : in slv32;                  -- memory: data out (memory view)
81
    DM_STAT_DP : out dm_stat_dp_type    -- debug and monitor status - dpath
82 2 wfjm
  );
83
end pdp11_sys70;
84
 
85
architecture syn of pdp11_sys70 is
86
 
87 34 wfjm
  signal RB_SRES_CORE   : rb_sres_type := rb_sres_init;
88
  signal RB_SRES_DMSCNT : rb_sres_type := rb_sres_init;
89
  signal RB_SRES_DMHBPT : rb_sres_type := rb_sres_init;
90
  signal RB_SRES_DMCMON : rb_sres_type := rb_sres_init;
91 2 wfjm
 
92 30 wfjm
  signal CP_CNTL : cp_cntl_type := cp_cntl_init;
93
  signal CP_ADDR : cp_addr_type := cp_addr_init;
94
  signal CP_DIN  : slv16 := (others=>'0');
95
  signal CP_STAT_L : cp_stat_type := cp_stat_init;
96
  signal CP_DOUT : slv16 := (others=>'0');
97 2 wfjm
 
98 30 wfjm
  signal EM_MREQ : em_mreq_type := em_mreq_init;
99
  signal EM_SRES : em_sres_type := em_sres_init;
100
 
101
  signal GRESET_L : slbit := '0';
102
  signal CRESET_L : slbit := '0';
103
  signal BRESET_L : slbit := '0';
104 2 wfjm
 
105 30 wfjm
  signal HM_ENA      : slbit := '0';
106
  signal MEM70_FMISS : slbit := '0';
107
  signal CACHE_FMISS : slbit := '0';
108
  signal CACHE_CHIT  : slbit := '0';
109 2 wfjm
 
110 34 wfjm
  signal HBPT        : slbit := '0';
111
 
112
  signal DM_STAT_SE   : dm_stat_se_type := dm_stat_se_init;
113 30 wfjm
  signal DM_STAT_DP_L : dm_stat_dp_type := dm_stat_dp_init;
114
  signal DM_STAT_VM   : dm_stat_vm_type := dm_stat_vm_init;
115
  signal DM_STAT_CO   : dm_stat_co_type := dm_stat_co_init;
116
  signal DM_STAT_SY   : dm_stat_sy_type := dm_stat_sy_init;
117
 
118
  signal IB_MREQ_M : ib_mreq_type := ib_mreq_init;
119
  signal IB_SRES_M : ib_sres_type := ib_sres_init;
120
  signal IB_SRES_MEM70 : ib_sres_type := ib_sres_init;
121
  signal IB_SRES_IBMON : ib_sres_type := ib_sres_init;
122
 
123
  constant rbaddr_ibus0 : slv16 := x"4000"; -- 4000/1000: 0100 xxxx xxxx xxxx
124
  constant rbaddr_core0 : slv16 := x"0000"; -- 0000/0020: 0000 0000 000x xxxx
125
 
126 2 wfjm
begin
127
 
128 30 wfjm
  RB2CP : pdp11_core_rbus
129
    generic map (
130
      RB_ADDR_CORE => rbaddr_core0,
131
      RB_ADDR_IBUS => rbaddr_ibus0)
132
    port map (
133
      CLK       => CLK,
134
      RESET     => RESET,
135
      RB_MREQ   => RB_MREQ,
136 34 wfjm
      RB_SRES   => RB_SRES_CORE,
137 30 wfjm
      RB_STAT   => RB_STAT,
138
      RB_LAM    => RB_LAM_CPU,
139
      GRESET    => GRESET_L,
140
      CP_CNTL   => CP_CNTL,
141
      CP_ADDR   => CP_ADDR,
142
      CP_DIN    => CP_DIN,
143
      CP_STAT   => CP_STAT_L,
144
      CP_DOUT   => CP_DOUT
145
    );
146 2 wfjm
 
147 30 wfjm
  W11A : pdp11_core
148
    port map (
149
      CLK       => CLK,
150
      RESET     => GRESET_L,
151
      CP_CNTL   => CP_CNTL,
152
      CP_ADDR   => CP_ADDR,
153
      CP_DIN    => CP_DIN,
154
      CP_STAT   => CP_STAT_L,
155
      CP_DOUT   => CP_DOUT,
156
      ESUSP_O   => open,
157
      ESUSP_I   => '0',
158
      ITIMER    => ITIMER,
159 34 wfjm
      HBPT      => HBPT,
160 30 wfjm
      EI_PRI    => EI_PRI,
161
      EI_VECT   => EI_VECT,
162
      EI_ACKM   => EI_ACKM,
163
      EM_MREQ   => EM_MREQ,
164
      EM_SRES   => EM_SRES,
165
      CRESET    => CRESET_L,
166
      BRESET    => BRESET_L,
167
      IB_MREQ_M => IB_MREQ_M,
168
      IB_SRES_M => IB_SRES_M,
169 34 wfjm
      DM_STAT_SE => DM_STAT_SE,
170 30 wfjm
      DM_STAT_DP => DM_STAT_DP_L,
171
      DM_STAT_VM => DM_STAT_VM,
172
      DM_STAT_CO => DM_STAT_CO
173
    );
174 2 wfjm
 
175 30 wfjm
  CACHE: pdp11_cache
176 36 wfjm
    generic map (
177
      TWIDTH => sys_conf_cache_twidth)
178 30 wfjm
    port map (
179
      CLK       => CLK,
180
      GRESET    => GRESET_L,
181
      EM_MREQ   => EM_MREQ,
182
      EM_SRES   => EM_SRES,
183
      FMISS     => CACHE_FMISS,
184
      CHIT      => CACHE_CHIT,
185
      MEM_REQ   => MEM_REQ,
186
      MEM_WE    => MEM_WE,
187
      MEM_BUSY  => MEM_BUSY,
188
      MEM_ACK_R => MEM_ACK_R,
189
      MEM_ADDR  => MEM_ADDR,
190
      MEM_BE    => MEM_BE,
191
      MEM_DI    => MEM_DI,
192
      MEM_DO    => MEM_DO
193
    );
194 2 wfjm
 
195 30 wfjm
  MEM70: pdp11_mem70
196
    port map (
197
      CLK         => CLK,
198
      CRESET      => BRESET_L,
199
      HM_ENA      => HM_ENA,
200
      HM_VAL      => CACHE_CHIT,
201
      CACHE_FMISS => MEM70_FMISS,
202
      IB_MREQ     => IB_MREQ_M,
203
      IB_SRES     => IB_SRES_MEM70
204
    );
205 2 wfjm
 
206 30 wfjm
  HM_ENA      <= EM_SRES.ack_r or EM_SRES.ack_w;
207
  CACHE_FMISS <= MEM70_FMISS or sys_conf_cache_fmiss;
208
 
209
  IBMON : if sys_conf_ibmon_awidth > 0 generate
210
  begin
211
    I0 : ibd_ibmon
212
      generic map (
213
        IB_ADDR => slv(to_unsigned(8#160000#,16)),
214
        AWIDTH  => sys_conf_ibmon_awidth)
215
      port map (
216
        CLK         => CLK,
217
        RESET       => RESET,
218
        IB_MREQ     => IB_MREQ_M,
219
        IB_SRES     => IB_SRES_IBMON,
220
        IB_SRES_SUM => DM_STAT_VM.ibsres
221
      );
222
  end generate IBMON;
223 2 wfjm
 
224 30 wfjm
  IB_SRES_OR : ib_sres_or_3
225
    port map (
226
      IB_SRES_1  => IB_SRES_MEM70,
227
      IB_SRES_2  => IB_SRES,
228
      IB_SRES_3  => IB_SRES_IBMON,
229
      IB_SRES_OR => IB_SRES_M
230
    );
231 2 wfjm
 
232 34 wfjm
  DMSCNT : if sys_conf_dmscnt generate
233
  begin
234
    I0: pdp11_dmscnt
235
      generic map (
236
        RB_ADDR => slv(to_unsigned(16#0040#,16)))
237
      port map (
238
        CLK         => CLK,
239
        RESET       => RESET,
240
        RB_MREQ     => RB_MREQ,
241
        RB_SRES     => RB_SRES_DMSCNT,
242
        DM_STAT_SE  => DM_STAT_SE,
243
        DM_STAT_DP  => DM_STAT_DP_L,
244
        DM_STAT_CO  => DM_STAT_CO
245
      );
246
  end generate DMSCNT;
247
 
248
  DMCMON : if sys_conf_dmcmon_awidth > 0 generate
249
  begin
250
    I0: pdp11_dmcmon
251
      generic map (
252
        RB_ADDR => slv(to_unsigned(16#0048#,16)))
253
      port map (
254
        CLK         => CLK,
255
        RESET       => RESET,
256
        RB_MREQ     => RB_MREQ,
257
        RB_SRES     => RB_SRES_DMCMON,
258
        DM_STAT_SE  => DM_STAT_SE,
259
        DM_STAT_DP  => DM_STAT_DP_L,
260
        DM_STAT_VM  => DM_STAT_VM,
261
        DM_STAT_CO  => DM_STAT_CO
262
      );
263
  end generate DMCMON;
264
 
265
  DMHBPT : if sys_conf_dmhbpt_nunit > 0 generate
266
  begin
267
    I0: pdp11_dmhbpt
268
      generic map (
269
        RB_ADDR => slv(to_unsigned(16#0050#,16)),
270
        NUNIT   => sys_conf_dmhbpt_nunit)
271
      port map (
272
        CLK         => CLK,
273
        RESET       => RESET,
274
        RB_MREQ     => RB_MREQ,
275
        RB_SRES     => RB_SRES_DMHBPT,
276
        DM_STAT_SE  => DM_STAT_SE,
277
        DM_STAT_DP  => DM_STAT_DP_L,
278
        DM_STAT_VM  => DM_STAT_VM,
279
        DM_STAT_CO  => DM_STAT_CO,
280
        HBPT        => HBPT
281
      );
282
  end generate DMHBPT;
283
 
284
  RB_SRES_OR : rb_sres_or_4
285
    port map (
286
      RB_SRES_1  => RB_SRES_CORE,
287
      RB_SRES_2  => RB_SRES_DMSCNT,
288
      RB_SRES_3  => RB_SRES_DMHBPT,
289
      RB_SRES_4  => RB_SRES_DMCMON,
290
      RB_SRES_OR => RB_SRES
291
    );
292
 
293 30 wfjm
  IB_MREQ    <= IB_MREQ_M;          -- setup output signals
294
  GRESET     <= GRESET_L;
295
  CRESET     <= CRESET_L;
296
  BRESET     <= BRESET_L;
297
  CP_STAT    <= CP_STAT_L;
298
  DM_STAT_DP <= DM_STAT_DP_L;
299
 
300 34 wfjm
  DM_STAT_SY.chit   <= CACHE_CHIT;
301
 
302 30 wfjm
-- synthesis translate_off
303
 
304
  TMU : pdp11_tmu_sb
305
    generic map (
306 34 wfjm
      ENAPIN => sbcntl_sbf_tmu)
307 30 wfjm
    port map (
308
      CLK        => CLK,
309
      DM_STAT_DP => DM_STAT_DP_L,
310
      DM_STAT_VM => DM_STAT_VM,
311
      DM_STAT_CO => DM_STAT_CO,
312
      DM_STAT_SY => DM_STAT_SY
313
    );
314
-- synthesis translate_on
315
 
316 2 wfjm
end syn;

powered by: WebSVN 2.1.0

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