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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.74/] [rtl/] [vlib/] [rlink/] [tb/] [tbd_rlink_sp1c.vhd] - Blame information for rev 38

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 wfjm
-- $Id: tbd_rlink_sp1c.vhd 596 2014-10-17 19:50:07Z mueller $
2 2 wfjm
--
3 27 wfjm
-- Copyright 2007-2014 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 16 wfjm
-- Module Name:    tbd_rlink_sp1c - syn
16 9 wfjm
-- Description:    Wrapper for rlink_core plus rlink_serport with an interface
17
--                 compatible to the rlink_core only module.
18 2 wfjm
--                 NOTE: this implementation is a hack, should be redone
19
--                 using configurations.
20
--
21 16 wfjm
-- Dependencies:   tbu_rlink_sp1c [UUT]
22 2 wfjm
--                 serport_uart_tx
23
--                 serport_uart_rx
24
--                 byte2cdata
25
--                 cdata2byte
26 17 wfjm
--                 simlib/simclkcnt
27 2 wfjm
--
28 16 wfjm
-- To test:        rlink_sp1c
29 2 wfjm
--
30
-- Target Devices: generic
31 27 wfjm
-- Tool versions:  xst 8.2-14.7; ghdl 0.18-0.31
32 9 wfjm
--
33 2 wfjm
-- Revision History: 
34
-- Date         Rev Version  Comment
35 27 wfjm
-- 2014-08-28   588   4.0    use new rlink v4 iface and 4 bit STAT
36 17 wfjm
-- 2011-12-23   444   3.2    use simclkcnt instead of simbus global
37 16 wfjm
-- 2011-12-22   442   3.1    renamed and retargeted to tbu_rlink_sp1c
38 13 wfjm
-- 2011-11-19   427   3.0.5  now numeric_std clean
39 9 wfjm
-- 2010-12-28   350   3.0.4  use CLKDIV/CDINIT=0;
40
-- 2010-12-26   348   3.0.3  add RTS/CTS ports for tbu_;
41
-- 2010-12-24   347   3.0.2  rename: CP_*->RL->*
42
-- 2010-12-22   346   3.0.1  removed proc_moni, use .rlmon cmd in test bench
43
-- 2010-12-05   343   3.0    rri->rlink renames; port to rbus V3 protocol;
44 2 wfjm
-- 2010-06-06   301   2.3    use NCOMM=4 (new eop,nak commas)
45
-- 2010-05-02   287   2.2.2  ren CE_XSEC->CE_INT,RP_STAT->RB_STAT,AP_LAM->RB_LAM
46
--                           drop RP_IINT signal from interfaces
47
-- 2010-04-24   281   2.2.1  use serport_uart_[tr]x directly again
48
-- 2010-04-03   274   2.2    add CE_USEC
49
-- 2009-03-14   197   2.1    remove records in interface to allow _ssim usage
50
-- 2008-08-24   162   2.0    with new rb_mreq/rb_sres interface
51
-- 2007-11-25    98   1.1    added RP_IINT support; use entity rather arch
52
--                           name to switch core/serport;
53
--                           use serport_uart_[tr]x_tb to allow that UUT is a
54
--                           [sft]sim model compiled with keep hierarchy
55
-- 2007-07-02    63   1.0    Initial version 
56
------------------------------------------------------------------------------
57
 
58
library ieee;
59
use ieee.std_logic_1164.all;
60 13 wfjm
use ieee.numeric_std.all;
61 2 wfjm
use ieee.std_logic_textio.all;
62
use std.textio.all;
63
 
64
use work.slvtypes.all;
65 9 wfjm
use work.rlinklib.all;
66 2 wfjm
use work.comlib.all;
67 19 wfjm
use work.serportlib.all;
68 9 wfjm
use work.simlib.all;
69
use work.simbus.all;
70 2 wfjm
 
71 16 wfjm
entity tbd_rlink_sp1c is                -- rlink_sp1c tb design
72 9 wfjm
                                        -- implements tbd_rlink_gen
73 2 wfjm
  port (
74
    CLK  : in slbit;                    -- clock
75 9 wfjm
    CE_INT : in slbit;                  -- rlink ito time unit clock enable
76 2 wfjm
    CE_USEC : in slbit;                 -- 1 usec clock enable
77
    RESET  : in slbit;                  -- reset
78 9 wfjm
    RL_DI : in slv9;                    -- rlink: data in
79
    RL_ENA : in slbit;                  -- rlink: data enable
80
    RL_BUSY : out slbit;                -- rlink: data busy
81
    RL_DO : out slv9;                   -- rlink: data out
82
    RL_VAL : out slbit;                 -- rlink: data valid
83
    RL_HOLD : in slbit;                 -- rlink: data hold
84
    RB_MREQ_aval : out slbit;           -- rbus: request - aval
85
    RB_MREQ_re : out slbit;             -- rbus: request - re
86 2 wfjm
    RB_MREQ_we : out slbit;             -- rbus: request - we
87
    RB_MREQ_initt : out slbit;          -- rbus: request - init; avoid name coll
88 27 wfjm
    RB_MREQ_addr : out slv16;           -- rbus: request - addr
89 2 wfjm
    RB_MREQ_din : out slv16;            -- rbus: request - din
90
    RB_SRES_ack : in slbit;             -- rbus: response - ack
91
    RB_SRES_busy : in slbit;            -- rbus: response - busy
92
    RB_SRES_err : in slbit;             -- rbus: response - err
93
    RB_SRES_dout : in slv16;            -- rbus: response - dout
94
    RB_LAM : in slv16;                  -- rbus: look at me
95 27 wfjm
    RB_STAT : in slv4;                  -- rbus: status flags
96 2 wfjm
    TXRXACT : out slbit                 -- txrx active flag
97
  );
98 16 wfjm
end entity tbd_rlink_sp1c;
99 2 wfjm
 
100
 
101 16 wfjm
architecture syn of tbd_rlink_sp1c is
102 9 wfjm
 
103
  constant CDWIDTH : positive := 13;
104 16 wfjm
  constant c_cdinit : natural := 0;   -- NOTE: change in tbu_rlink_sp1c !!
105 2 wfjm
 
106
  signal RRI_RXSD : slbit := '0';
107
  signal RRI_TXSD : slbit := '0';
108 9 wfjm
  signal RTS_N : slbit := '0';
109 2 wfjm
  signal RXDATA : slv8 := (others=>'0');
110
  signal RXVAL : slbit := '0';
111
  signal RXACT : slbit := '0';
112
  signal TXDATA : slv8 := (others=>'0');
113
  signal TXENA : slbit := '0';
114
  signal TXBUSY : slbit := '0';
115 13 wfjm
  signal CLKDIV : slv13 := slv(to_unsigned(c_cdinit,CDWIDTH));
116 17 wfjm
  signal CLK_CYCLE : integer := 0;
117
 
118 16 wfjm
component tbu_rlink_sp1c is             -- rlink core+serport combo
119 2 wfjm
  port (
120
    CLK  : in slbit;                    -- clock
121 9 wfjm
    CE_INT : in slbit;                  -- rlink ito time unit clock enable
122 2 wfjm
    CE_USEC : in slbit;                 -- 1 usec clock enable
123
    CE_MSEC : in slbit;                 -- 1 msec clock enable
124
    RESET  : in slbit;                  -- reset
125 9 wfjm
    RXSD : in slbit;                    -- receive serial data      (board view)
126
    TXSD : out slbit;                   -- transmit serial data     (board view)
127
    CTS_N : in slbit;                   -- clear to send   (act.low, board view)
128
    RTS_N : out slbit;                  -- request to send (act.low, board view)
129
    RB_MREQ_aval : out slbit;           -- rbus: request - aval
130
    RB_MREQ_re : out slbit;             -- rbus: request - re
131 2 wfjm
    RB_MREQ_we : out slbit;             -- rbus: request - we
132
    RB_MREQ_initt : out slbit;          -- rbus: request - init; avoid name coll
133 27 wfjm
    RB_MREQ_addr : out slv16;           -- rbus: request - addr
134 2 wfjm
    RB_MREQ_din : out slv16;            -- rbus: request - din
135
    RB_SRES_ack : in slbit;             -- rbus: response - ack
136
    RB_SRES_busy : in slbit;            -- rbus: response - busy
137
    RB_SRES_err : in slbit;             -- rbus: response - err
138
    RB_SRES_dout : in slv16;            -- rbus: response - dout
139
    RB_LAM : in slv16;                  -- rbus: look at me
140 27 wfjm
    RB_STAT : in slv4                   -- rbus: status flags
141 2 wfjm
  );
142
end component;
143
 
144
begin
145
 
146 27 wfjm
  TBU : tbu_rlink_sp1c
147 2 wfjm
    port map (
148
      CLK          => CLK,
149
      CE_INT       => CE_INT,
150
      CE_USEC      => CE_USEC,
151
      CE_MSEC      => '1',
152
      RESET        => RESET,
153
      RXSD         => RRI_RXSD,
154
      TXSD         => RRI_TXSD,
155 9 wfjm
      CTS_N        => '0',
156
      RTS_N        => RTS_N,
157
      RB_MREQ_aval => RB_MREQ_aval,
158
      RB_MREQ_re   => RB_MREQ_re,
159 2 wfjm
      RB_MREQ_we   => RB_MREQ_we,
160
      RB_MREQ_initt=> RB_MREQ_initt,
161
      RB_MREQ_addr => RB_MREQ_addr,
162
      RB_MREQ_din  => RB_MREQ_din,
163
      RB_SRES_ack  => RB_SRES_ack,
164
      RB_SRES_busy => RB_SRES_busy,
165
      RB_SRES_err  => RB_SRES_err,
166
      RB_SRES_dout => RB_SRES_dout,
167
      RB_LAM       => RB_LAM,
168
      RB_STAT      => RB_STAT
169
    );
170
 
171
  UARTRX : serport_uart_rx
172
    generic map (
173 9 wfjm
      CDWIDTH => CDWIDTH)
174 2 wfjm
    port map (
175
      CLK    => CLK,
176
      RESET  => RESET,
177
      CLKDIV => CLKDIV,
178
      RXSD   => RRI_TXSD,
179
      RXDATA => RXDATA,
180
      RXVAL  => RXVAL,
181
      RXERR  => open,
182
      RXACT  => RXACT
183
    );
184
 
185
  UARTTX : serport_uart_tx
186
    generic map (
187 9 wfjm
      CDWIDTH => CDWIDTH)
188 2 wfjm
    port map (
189
      CLK    => CLK,
190
      RESET  => RESET,
191
      CLKDIV => CLKDIV,
192
      TXSD   => RRI_RXSD,
193
      TXDATA => TXDATA,
194
      TXENA  => TXENA,
195
      TXBUSY => TXBUSY
196
    );
197
 
198
  TXRXACT <= RXACT or TXBUSY;
199
 
200
  B2CD : byte2cdata                     -- byte stream -> 9bit comma,data
201
    port map (
202
      CLK   => CLK,
203
      RESET => RESET,
204
      DI    => RXDATA,
205
      ENA   => RXVAL,
206 27 wfjm
      ERR   => '0',
207 2 wfjm
      BUSY  => open,
208 9 wfjm
      DO    => RL_DO,
209
      VAL   => RL_VAL,
210
      HOLD  => RL_HOLD
211 2 wfjm
    );
212
 
213
  CD2B : cdata2byte                     -- 9bit comma,data -> byte stream
214
    port map (
215 27 wfjm
      CLK     => CLK,
216
      RESET   => RESET,
217
      ESCXON  => '0',
218
      ESCFILL => '0',
219
      DI      => RL_DI,
220
      ENA     => RL_ENA,
221
      BUSY    => RL_BUSY,
222
      DO      => TXDATA,
223
      VAL     => TXENA,
224
      HOLD    => TXBUSY
225 2 wfjm
    );
226 9 wfjm
 
227 17 wfjm
  CLKCNT : simclkcnt port map (CLK => CLK, CLK_CYCLE => CLK_CYCLE);
228
 
229 2 wfjm
  proc_moni: process
230
    variable oline : line;
231 9 wfjm
    variable rts_last : slbit := '0';
232
    variable ncycle : integer := 0;
233 2 wfjm
  begin
234 9 wfjm
    loop
235 13 wfjm
      wait until rising_edge(CLK);      -- check at end of clock cycle
236 9 wfjm
      if RTS_N /= rts_last then
237 17 wfjm
        writetimestamp(oline, CLK_CYCLE, ": rts  ");
238 9 wfjm
        write(oline, string'(" RTS_N "));
239
        write(oline, rts_last, right, 1);
240
        write(oline, string'(" -> "));
241
        write(oline, RTS_N, right, 1);
242
        write(oline, string'(" after "));
243
        write(oline, ncycle, right, 5);
244
        write(oline, string'(" cycles"));
245 2 wfjm
        writeline(output, oline);
246 9 wfjm
        rts_last := RTS_N;
247
        ncycle   := 0;
248 2 wfjm
      end if;
249 9 wfjm
      ncycle := ncycle + 1;
250 2 wfjm
    end loop;
251
  end process proc_moni;
252
 
253
end syn;

powered by: WebSVN 2.1.0

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