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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [rtl/] [bplib/] [fx2rlink/] [rlink_sp1c_fx2.vhd] - Blame information for rev 33

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 wfjm
-- $Id: rlink_sp1c_fx2.vhd 672 2015-05-02 21:58:28Z mueller $
2 20 wfjm
--
3 30 wfjm
-- Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 20 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:    rlink_sp1c_fx2 - syn
16
-- Description:    rlink_core8 + serport_1clock + fx2 combo
17
--
18
-- Dependencies:   rlinklib/rlink_core8
19
--                 serport/serport_1clock
20
--                 rlinklib/rlink_rlbmux
21
--                 fx2lib/fx2_2fifoctl_ic
22 30 wfjm
--                 rbus/rbd_rbmon
23
--                 rbus/rb_sres_or_2
24 20 wfjm
--
25
-- Test bench:     -
26
--
27
-- Target Devices: generic
28 30 wfjm
-- Tool versions:  xst 13.1-14.7; viv 2014.4; ghdl 0.29-0.31
29 20 wfjm
--
30
-- Synthesized (xst):
31
-- Date         Rev  ise         Target      flop lutl lutm slic t peri ifa ofa
32 30 wfjm
-- 2015-05-02   672 14.7  131013 xc6slx16-2   618  875   90  340 s  7.2   -   -
33 20 wfjm
-- 2013-04-20   509 13.3    O76d xc3s1200e-4  441  903  128  637 s  8.7   -   -
34
--
35
-- Revision History: 
36
-- Date         Rev Version  Comment
37 30 wfjm
-- 2015-05-02   672   1.3    add rbd_rbmon (optional via generics)
38
-- 2015-04-11   666   1.2    drop ENAESC, rearrange XON handling
39 27 wfjm
-- 2014-08-28   588   1.1    use new rlink v4 iface generics and 4 bit STAT
40 20 wfjm
-- 2013-04-20   509   1.0    Initial version (derived from rlink_sp1c)
41
------------------------------------------------------------------------------
42
 
43
library ieee;
44
use ieee.std_logic_1164.all;
45
use ieee.numeric_std.all;
46
 
47
use work.slvtypes.all;
48
use work.rblib.all;
49 30 wfjm
use work.rbdlib.all;
50 20 wfjm
use work.rlinklib.all;
51
use work.serportlib.all;
52
use work.fx2lib.all;
53
 
54
entity rlink_sp1c_fx2 is                -- rlink_core8+serport_1clk+fx2_ic combo
55
  generic (
56 27 wfjm
    BTOWIDTH : positive :=  5;          -- rbus timeout counter width
57
    RTAWIDTH : positive := 12;          -- retransmit buffer address width
58
    SYSID : slv32 := (others=>'0');     -- rlink system id
59 20 wfjm
    IFAWIDTH : natural :=  5;           -- ser input fifo addr width  (0=none)
60
    OFAWIDTH : natural :=  5;           -- ser output fifo addr width (0=none)
61
    PETOWIDTH : positive := 10;         -- fx2 packet end time-out counter width
62
    CCWIDTH :   positive :=  5;         -- fx2 chunk counter width
63 27 wfjm
    ENAPIN_RLMON : integer := -1;       -- SB_CNTL for rlmon  (-1=none)
64
    ENAPIN_RLBMON: integer := -1;       -- SB_CNTL for rlbmon (-1=none)
65
    ENAPIN_RBMON : integer := -1;       -- SB_CNTL for rbmon  (-1=none)
66 20 wfjm
    CDWIDTH : positive := 13;           -- clk divider width
67 30 wfjm
    CDINIT : natural   := 15;           -- clk divider initial/reset setting
68
    RBMON_AWIDTH : natural := 0;        -- rbmon: buffer size, (0=none)
69
    RBMON_RBADDR : slv16 := slv(to_unsigned(16#ffe8#,16))); -- rbmon: base addr
70 20 wfjm
  port (
71
    CLK  : in slbit;                    -- clock
72
    CE_USEC : in slbit;                 -- 1 usec clock enable
73
    CE_MSEC : in slbit;                 -- 1 msec clock enable
74 27 wfjm
    CE_INT : in slbit := '0';           -- rri ato time unit clock enable
75 20 wfjm
    RESET  : in slbit;                  -- reset
76
    ENAXON : in slbit;                  -- enable xon/xoff handling
77
    ENAFX2 : in slbit;                  -- enable fx2 usage
78
    RXSD : in slbit;                    -- receive serial data      (board view)
79
    TXSD : out slbit;                   -- transmit serial data     (board view)
80
    CTS_N : in slbit := '0';            -- clear to send   (act.low, board view)
81
    RTS_N : out slbit;                  -- request to send (act.low, board view)
82
    RB_MREQ : out rb_mreq_type;         -- rbus: request
83
    RB_SRES : in rb_sres_type;          -- rbus: response
84
    RB_LAM : in slv16;                  -- rbus: look at me
85 27 wfjm
    RB_STAT : in slv4;                  -- rbus: status flags
86 20 wfjm
    RL_MONI : out rl_moni_type;         -- rlink_core: monitor port
87
    RLB_MONI : out rlb_moni_type;       -- rlink 8b: monitor port
88
    SER_MONI : out serport_moni_type;   -- ser: monitor port
89
    FX2_MONI : out fx2ctl_moni_type;    -- fx2: monitor port
90
    I_FX2_IFCLK : in slbit;             -- fx2: interface clock
91
    O_FX2_FIFO : out slv2;              -- fx2: fifo address
92
    I_FX2_FLAG : in slv4;               -- fx2: fifo flags
93
    O_FX2_SLRD_N : out slbit;           -- fx2: read enable    (act.low)
94
    O_FX2_SLWR_N : out slbit;           -- fx2: write enable   (act.low)
95
    O_FX2_SLOE_N : out slbit;           -- fx2: output enable  (act.low)
96
    O_FX2_PKTEND_N : out slbit;         -- fx2: packet end     (act.low)
97
    IO_FX2_DATA : inout slv8            -- fx2: data lines
98
  );
99
end entity rlink_sp1c_fx2;
100
 
101
 
102
architecture syn of rlink_sp1c_fx2 is
103
 
104
  signal RLB_DI : slv8 := (others=>'0');
105
  signal RLB_ENA : slbit := '0';
106
  signal RLB_BUSY : slbit := '0';
107
  signal RLB_DO : slv8 := (others=>'0');
108
  signal RLB_VAL : slbit := '0';
109
  signal RLB_HOLD : slbit := '0';
110
 
111
  signal SER_RXDATA : slv8 := (others=>'0');
112
  signal SER_RXVAL  : slbit := '0';
113
  signal SER_RXHOLD : slbit := '0';
114
  signal SER_TXDATA : slv8 := (others=>'0');
115
  signal SER_TXENA  : slbit := '0';
116
  signal SER_TXBUSY : slbit := '0';
117
 
118
  signal FX2_RXDATA   : slv8 := (others=>'0');
119
  signal FX2_RXVAL    : slbit := '0';
120
  signal FX2_RXHOLD   : slbit := '0';
121
  signal FX2_RXAEMPTY : slbit := '0';
122
  signal FX2_TXDATA   : slv8 := (others=>'0');
123
  signal FX2_TXENA    : slbit := '0';
124
  signal FX2_TXBUSY   : slbit := '0';
125
  signal FX2_TXAFULL  : slbit := '0';
126
 
127 30 wfjm
  signal RB_MREQ_M     : rb_mreq_type := rb_mreq_init;
128
  signal RB_SRES_M     : rb_sres_type := rb_sres_init;
129
  signal RB_SRES_RBMON : rb_sres_type := rb_sres_init;
130
 
131 20 wfjm
begin
132
 
133 30 wfjm
  CORE : rlink_core8                    -- rlink master ----------------------
134 20 wfjm
    generic map (
135 27 wfjm
      BTOWIDTH     => BTOWIDTH,
136
      RTAWIDTH     => RTAWIDTH,
137
      SYSID        => SYSID,
138 20 wfjm
      ENAPIN_RLMON => ENAPIN_RLMON,
139 27 wfjm
      ENAPIN_RLBMON=> ENAPIN_RLBMON,
140 20 wfjm
      ENAPIN_RBMON => ENAPIN_RBMON)
141
    port map (
142
      CLK        => CLK,
143
      CE_INT     => CE_INT,
144
      RESET      => RESET,
145 30 wfjm
      ESCXON     => ENAXON,
146
      ESCFILL    => '0',                -- not used in FX2 enabled boards
147 20 wfjm
      RLB_DI     => RLB_DI,
148
      RLB_ENA    => RLB_ENA,
149
      RLB_BUSY   => RLB_BUSY,
150
      RLB_DO     => RLB_DO,
151
      RLB_VAL    => RLB_VAL,
152
      RLB_HOLD   => RLB_HOLD,
153
      RL_MONI    => RL_MONI,
154 30 wfjm
      RB_MREQ    => RB_MREQ_M,
155
      RB_SRES    => RB_SRES_M,
156 20 wfjm
      RB_LAM     => RB_LAM,
157
      RB_STAT    => RB_STAT
158
    );
159
 
160 30 wfjm
  SERPORT : serport_1clock              -- serport interface -----------------
161 20 wfjm
    generic map (
162
      CDWIDTH   => CDWIDTH,
163
      CDINIT    => CDINIT,
164
      RXFAWIDTH => IFAWIDTH,
165
      TXFAWIDTH => OFAWIDTH)
166
    port map (
167
      CLK      => CLK,
168
      CE_MSEC  => CE_MSEC,
169
      RESET    => RESET,
170
      ENAXON   => ENAXON,
171 30 wfjm
      ENAESC   => '0',                  -- escaping now in rlink_core8
172 20 wfjm
      RXDATA   => SER_RXDATA,
173
      RXVAL    => SER_RXVAL,
174
      RXHOLD   => SER_RXHOLD,
175
      TXDATA   => SER_TXDATA,
176
      TXENA    => SER_TXENA,
177
      TXBUSY   => SER_TXBUSY,
178
      MONI     => SER_MONI,
179
      RXSD     => RXSD,
180
      TXSD     => TXSD,
181
      RXRTS_N  => RTS_N,
182
      TXCTS_N  => CTS_N
183
    );
184
 
185 30 wfjm
  RLBMUX : rlink_rlbmux                 -- rlink control mux -----------------
186 20 wfjm
    port map (
187
      SEL       => ENAFX2,
188
      RLB_DI    => RLB_DI,
189
      RLB_ENA   => RLB_ENA,
190
      RLB_BUSY  => RLB_BUSY,
191
      RLB_DO    => RLB_DO,
192
      RLB_VAL   => RLB_VAL,
193
      RLB_HOLD  => RLB_HOLD,
194
      P0_RXDATA => SER_RXDATA,
195
      P0_RXVAL  => SER_RXVAL,
196
      P0_RXHOLD => SER_RXHOLD,
197
      P0_TXDATA => SER_TXDATA,
198
      P0_TXENA  => SER_TXENA,
199
      P0_TXBUSY => SER_TXBUSY,
200
      P1_RXDATA => FX2_RXDATA,
201
      P1_RXVAL  => FX2_RXVAL,
202
      P1_RXHOLD => FX2_RXHOLD,
203
      P1_TXDATA => FX2_TXDATA,
204
      P1_TXENA  => FX2_TXENA,
205
      P1_TXBUSY => FX2_TXBUSY
206
    );
207
 
208 30 wfjm
  RLB_MONI.rxval  <= RLB_VAL;
209
  RLB_MONI.rxhold <= RLB_HOLD;
210
  RLB_MONI.txena  <= RLB_ENA;
211
  RLB_MONI.txbusy <= RLB_BUSY;
212
 
213
  FX2CNTL : fx2_2fifoctl_ic             -- FX2 interface ---------------------
214 20 wfjm
    generic map (
215
      RXFAWIDTH  => 5,
216
      TXFAWIDTH  => 5,
217
      PETOWIDTH  => PETOWIDTH,
218
      CCWIDTH    => CCWIDTH,
219
      RXAEMPTY_THRES => 1,
220
      TXAFULL_THRES  => 1)
221
    port map (
222
      CLK      => CLK,
223
      RESET    => RESET,
224
      RXDATA   => FX2_RXDATA,
225
      RXVAL    => FX2_RXVAL,
226
      RXHOLD   => FX2_RXHOLD,
227
      RXAEMPTY => FX2_RXAEMPTY,
228
      TXDATA   => FX2_TXDATA,
229
      TXENA    => FX2_TXENA,
230
      TXBUSY   => FX2_TXBUSY,
231
      TXAFULL  => FX2_TXAFULL,
232
      MONI           => FX2_MONI,
233
      I_FX2_IFCLK    => I_FX2_IFCLK,
234
      O_FX2_FIFO     => O_FX2_FIFO,
235
      I_FX2_FLAG     => I_FX2_FLAG,
236
      O_FX2_SLRD_N   => O_FX2_SLRD_N,
237
      O_FX2_SLWR_N   => O_FX2_SLWR_N,
238
      O_FX2_SLOE_N   => O_FX2_SLOE_N,
239
      O_FX2_PKTEND_N => O_FX2_PKTEND_N,
240
      IO_FX2_DATA    => IO_FX2_DATA
241
    );
242
 
243 30 wfjm
  RBMON : if RBMON_AWIDTH > 0 generate  -- rbus monitor --------------
244
  begin
245
    I0 : rbd_rbmon
246
      generic map (
247
        RB_ADDR => RBMON_RBADDR,
248
        AWIDTH  => RBMON_AWIDTH)
249
      port map (
250
        CLK         => CLK,
251
        RESET       => RESET,
252
        RB_MREQ     => RB_MREQ_M,
253
        RB_SRES     => RB_SRES_RBMON,
254
        RB_SRES_SUM => RB_SRES_M
255
      );
256
  end generate RBMON;
257
 
258
  RB_SRES_OR : rb_sres_or_2             -- rbus or ---------------------------
259
    port map (
260
      RB_SRES_1  => RB_SRES,
261
      RB_SRES_2  => RB_SRES_RBMON,
262
      RB_SRES_OR => RB_SRES_M
263
    );
264
 
265
  RB_MREQ         <= RB_MREQ_M;         -- setup output signals
266 20 wfjm
 
267
end syn;

powered by: WebSVN 2.1.0

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