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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [rtl/] [sys_gen/] [tst_rlink_cuff/] [tst_rlink_cuff.vhd] - Blame information for rev 33

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 wfjm
-- $Id: tst_rlink_cuff.vhd 666 2015-04-12 21:17:54Z mueller $
2 17 wfjm
--
3 30 wfjm
-- Copyright 2012-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 17 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:    tst_rlink_cuff - syn
16
-- Description:    tester for rlink over cuff
17
--
18
-- Dependencies:   vlib/rlink/rlink_core8
19
--                 vlib/rlink/rlink_rlbmux
20
--                 vlib/serport/serport_1clock
21
--                 ../tst_rlink/rbd_tst_rlink
22
--                 vlib/rbus/rb_sres_or_2
23
--                 vlib/genlib/led_pulse_stretch
24
--
25
-- Test bench:     -
26
--
27
-- Target Devices: generic
28 27 wfjm
-- Tool versions:  xst 13.3-14.7; ghdl 0.29-0.31
29 17 wfjm
--
30
-- Revision History: 
31
-- Date         Rev Version  Comment
32 30 wfjm
-- 2015-04-11   666   1.2    rearrange XON handling
33 27 wfjm
-- 2014-08-28   588   1.1    use new rlink v4 iface generics and 4 bit STAT
34 17 wfjm
-- 2013-01-02   467   1.0.1  use 64 usec led pulse width
35
-- 2012-12-29   466   1.0    Initial version
36
------------------------------------------------------------------------------
37
 
38
library ieee;
39
use ieee.std_logic_1164.all;
40
use ieee.numeric_std.all;
41
 
42
use work.slvtypes.all;
43
use work.genlib.all;
44
use work.rblib.all;
45
use work.rlinklib.all;
46 19 wfjm
use work.serportlib.all;
47 17 wfjm
use work.fx2lib.all;
48
use work.sys_conf.all;
49
 
50
-- ----------------------------------------------------------------------------
51
 
52
entity tst_rlink_cuff is                -- tester for rlink over cuff
53
  port (
54
    CLK : in slbit;                     -- clock
55
    RESET : in slbit;                   -- reset
56
    CE_USEC : in slbit;                 -- usec pulse
57
    CE_MSEC : in slbit;                 -- msec pulse
58
    RB_MREQ_TOP : out rb_mreq_type;     -- rbus: request
59
    RB_SRES_TOP : in rb_sres_type;      -- rbus: response from top level
60
    SWI : in slv8;                      -- hio: switches
61
    BTN : in slv4;                      -- hio: buttons
62
    LED : out slv8;                     -- hio: leds
63
    DSP_DAT : out slv16;                -- hio: display data
64
    DSP_DP : out slv4;                  -- hio: display decimal points
65
    RXSD : in slbit;                    -- receive serial data (uart view)
66
    TXSD : out slbit;                   -- transmit serial data (uart view)
67
    RTS_N : out slbit;                  -- receive rts (uart view, act.low)
68
    CTS_N : in slbit;                   -- transmit cts (uart view, act.low)
69
    FX2_RXDATA : in slv8;               -- fx2: receiver data out
70
    FX2_RXVAL : in slbit;               -- fx2: receiver data valid
71
    FX2_RXHOLD : out slbit;             -- fx2: receiver data hold
72
    FX2_TXDATA : out slv8;              -- fx2: transmit data in
73
    FX2_TXENA : out slbit;              -- fx2: transmit data enable
74
    FX2_TXBUSY : in slbit;              -- fx2: transmit busy
75
    FX2_TX2DATA : out slv8;             -- fx2: transmit 2 data in
76
    FX2_TX2ENA : out slbit;             -- fx2: transmit 2 data enable
77
    FX2_TX2BUSY : in slbit;             -- fx2: transmit 2 busy
78
    FX2_MONI : in fx2ctl_moni_type      -- fx2: fx2ctl monitor
79
  );
80
end tst_rlink_cuff;
81
 
82
architecture syn of tst_rlink_cuff is
83
 
84
  signal RB_MREQ : rb_mreq_type := rb_mreq_init;
85
  signal RB_SRES : rb_sres_type := rb_sres_init;
86
  signal RB_SRES_TST : rb_sres_type := rb_sres_init;
87
 
88
  signal RB_LAM  : slv16 := (others=>'0');
89 27 wfjm
  signal RB_STAT : slv4  := (others=>'0');
90 17 wfjm
 
91
  signal SER_MONI : serport_moni_type := serport_moni_init;
92
  signal STAT     : slv8  := (others=>'0');
93
 
94
  signal RLB_DI   : slv8 := (others=>'0');
95
  signal RLB_ENA  : slbit := '0';
96
  signal RLB_BUSY : slbit := '0';
97
  signal RLB_DO   : slv8 := (others=>'0');
98
  signal RLB_VAL  : slbit := '0';
99
  signal RLB_HOLD : slbit := '0';
100
 
101
  signal SER_RXDATA : slv8 := (others=>'0');
102
  signal SER_RXVAL  : slbit := '0';
103
  signal SER_RXHOLD : slbit := '0';
104
  signal SER_TXDATA : slv8 := (others=>'0');
105
  signal SER_TXENA  : slbit := '0';
106
  signal SER_TXBUSY : slbit := '0';
107
 
108
  signal FX2_TX2ENA_L : slbit := '0';
109
  signal FX2_TXENA_L : slbit := '0';
110
 
111
  signal FX2_TX2ENA_LED : slbit := '0';
112
  signal FX2_TXENA_LED : slbit := '0';
113
  signal FX2_RXVAL_LED : slbit := '0';
114
 
115
  signal R_LEDDIV : slv6 := (others=>'0');   -- clock divider for LED pulses
116
  signal R_LEDCE : slbit := '0';             -- ce every 64 usec
117
 
118
begin
119
 
120
  RLCORE : rlink_core8
121
    generic map (
122 27 wfjm
      BTOWIDTH     => 6,
123
      RTAWIDTH     => 12,
124
      SYSID        => (others=>'0'),
125 17 wfjm
      ENAPIN_RLMON => sbcntl_sbf_rlmon,
126
      ENAPIN_RBMON => sbcntl_sbf_rbmon)
127
    port map (
128
      CLK        => CLK,
129
      CE_INT     => CE_MSEC,
130
      RESET      => RESET,
131 30 wfjm
      ESCXON     => SWI(1),
132
      ESCFILL    => '0',
133 17 wfjm
      RLB_DI     => RLB_DI,
134
      RLB_ENA    => RLB_ENA,
135
      RLB_BUSY   => RLB_BUSY,
136
      RLB_DO     => RLB_DO,
137
      RLB_VAL    => RLB_VAL,
138
      RLB_HOLD   => RLB_HOLD,
139
      RL_MONI    => open,
140
      RB_MREQ    => RB_MREQ,
141
      RB_SRES    => RB_SRES,
142
      RB_LAM     => RB_LAM,
143
      RB_STAT    => RB_STAT
144
    );
145
 
146
  RLBMUX : rlink_rlbmux
147
    port map (
148
      SEL       => SWI(2),
149
      RLB_DI    => RLB_DI,
150
      RLB_ENA   => RLB_ENA,
151
      RLB_BUSY  => RLB_BUSY,
152
      RLB_DO    => RLB_DO,
153
      RLB_VAL   => RLB_VAL,
154
      RLB_HOLD  => RLB_HOLD,
155
      P0_RXDATA => SER_RXDATA,
156
      P0_RXVAL  => SER_RXVAL,
157
      P0_RXHOLD => SER_RXHOLD,
158
      P0_TXDATA => SER_TXDATA,
159
      P0_TXENA  => SER_TXENA,
160
      P0_TXBUSY => SER_TXBUSY,
161
      P1_RXDATA => FX2_RXDATA,
162
      P1_RXVAL  => FX2_RXVAL,
163
      P1_RXHOLD => FX2_RXHOLD,
164
      P1_TXDATA => FX2_TXDATA,
165
      P1_TXENA  => FX2_TXENA_L,
166
      P1_TXBUSY => FX2_TXBUSY
167
    );
168
 
169
  SERPORT : serport_1clock
170
    generic map (
171
      CDWIDTH   => 15,
172
      CDINIT    => sys_conf_ser2rri_cdinit,
173
      RXFAWIDTH =>  5,
174
      TXFAWIDTH =>  5)
175
    port map (
176
      CLK      => CLK,
177
      CE_MSEC  => CE_MSEC,
178
      RESET    => RESET,
179
      ENAXON   => SWI(1),
180 30 wfjm
      ENAESC   => '0',                  -- escaping now in rlink_core8
181 17 wfjm
      RXDATA   => SER_RXDATA,
182
      RXVAL    => SER_RXVAL,
183
      RXHOLD   => SER_RXHOLD,
184
      TXDATA   => SER_TXDATA,
185
      TXENA    => SER_TXENA,
186
      TXBUSY   => SER_TXBUSY,
187
      MONI     => SER_MONI,
188
      RXSD     => RXSD,
189
      TXSD     => TXSD,
190
      RXRTS_N  => RTS_N,
191
      TXCTS_N  => CTS_N
192
    );
193
 
194
  RBDTST : entity work.rbd_tst_rlink
195
    port map (
196
      CLK         => CLK,
197
      RESET       => RESET,
198
      CE_USEC     => CE_USEC,
199
      RB_MREQ     => RB_MREQ,
200
      RB_SRES     => RB_SRES_TST,
201
      RB_LAM      => RB_LAM,
202
      RB_STAT     => RB_STAT,
203
      RB_SRES_TOP => RB_SRES,
204
      RXSD        => RXSD,
205
      RXACT       => SER_MONI.rxact,
206
      STAT        => STAT
207
    );
208
 
209
  RB_SRES_OR1 : rb_sres_or_2
210
    port map (
211
      RB_SRES_1  => RB_SRES_TOP,
212
      RB_SRES_2  => RB_SRES_TST,
213
      RB_SRES_OR => RB_SRES
214
    );
215
 
216
  TX2ENA_PSTR : led_pulse_stretch
217
    port map (
218
      CLK        => CLK,
219
      CE_INT     => R_LEDCE,
220
      RESET      => '0',
221
      DIN        => FX2_TX2ENA_L,
222
      POUT       => FX2_TX2ENA_LED
223
    );
224
  TXENA_PSTR : led_pulse_stretch
225
    port map (
226
      CLK        => CLK,
227
      CE_INT     => R_LEDCE,
228
      RESET      => '0',
229
      DIN        => FX2_TXENA_L,
230
      POUT       => FX2_TXENA_LED
231
    );
232
  RXVAL_PSTR : led_pulse_stretch
233
    port map (
234
      CLK        => CLK,
235
      CE_INT     => R_LEDCE,
236
      RESET      => '0',
237
      DIN        => FX2_RXVAL,
238
      POUT       => FX2_RXVAL_LED
239
    );
240
 
241
  proc_clkdiv: process (CLK)
242
  begin
243
 
244
    if rising_edge(CLK) then
245
      R_LEDCE  <= '0';
246
      if CE_USEC = '1' then
247
        R_LEDDIV <= slv(unsigned(R_LEDDIV) - 1);
248
        if unsigned(R_LEDDIV) = 0 then
249
          R_LEDCE <= '1';
250
        end if;
251
      end if;
252
    end if;
253
 
254
  end process proc_clkdiv;
255
 
256
  proc_hiomux : process (SWI, SER_MONI, STAT, FX2_TX2BUSY,
257
                         FX2_TX2ENA_LED, FX2_TXENA_LED, FX2_RXVAL_LED)
258
  begin
259
 
260
    DSP_DAT   <= SER_MONI.abclkdiv;
261
 
262
    LED(7) <= SER_MONI.abact;
263
    LED(6 downto 2) <= (others=>'0');
264
    LED(1) <= STAT(1);
265
    LED(0) <= STAT(0);
266
 
267
    if SWI(2) = '0' then
268
      DSP_DP(3) <= not SER_MONI.txok;
269
      DSP_DP(2) <= SER_MONI.txact;
270
      DSP_DP(1) <= not SER_MONI.rxok;
271
      DSP_DP(0) <= SER_MONI.rxact;
272
    else
273
      DSP_DP(3) <= FX2_TX2BUSY;
274
      DSP_DP(2) <= FX2_TX2ENA_LED;
275
      DSP_DP(1) <= FX2_TXENA_LED;
276
      DSP_DP(0) <= FX2_RXVAL_LED;
277
    end if;
278
 
279
  end process proc_hiomux;
280
 
281
  RB_MREQ_TOP <= RB_MREQ;
282
  FX2_TX2ENA  <= FX2_TX2ENA_L;
283
  FX2_TXENA   <= FX2_TXENA_L;
284
 
285
end syn;

powered by: WebSVN 2.1.0

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