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

Subversion Repositories w11

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

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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