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

Subversion Repositories w11

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

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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