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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.5/] [rtl/] [vlib/] [rri/] [tb/] [tbd_rri_serport.vhd] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 wfjm
-- $Id: tbd_rri_serport.vhd 314 2010-07-09 17:38:41Z mueller $
2
--
3
-- Copyright 2007-2010 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:    tbd_rri_serport - syn
16
-- Description:    Wrapper for rri_core plus rri_serport with an interface
17
--                 compatible to the rri_core only module.
18
--                 NOTE: this implementation is a hack, should be redone
19
--                 using configurations.
20
--
21
-- Dependencies:   tbu_rri_serport [UUT]
22
--                 serport_uart_tx
23
--                 serport_uart_rx
24
--                 byte2cdata
25
--                 cdata2byte
26
--
27
-- To test:        rri_serport
28
--
29
-- Target Devices: generic
30
-- Tool versions:  xst 8.1, 8.2, 9.1, 9.2; ghdl 0.18-0.25
31
-- Revision History: 
32
-- Date         Rev Version  Comment
33
-- 2010-06-06   301   2.3    use NCOMM=4 (new eop,nak commas)
34
-- 2010-05-02   287   2.2.2  ren CE_XSEC->CE_INT,RP_STAT->RB_STAT,AP_LAM->RB_LAM
35
--                           drop RP_IINT signal from interfaces
36
-- 2010-04-24   281   2.2.1  use serport_uart_[tr]x directly again
37
-- 2010-04-03   274   2.2    add CE_USEC
38
-- 2009-03-14   197   2.1    remove records in interface to allow _ssim usage
39
-- 2008-08-24   162   2.0    with new rb_mreq/rb_sres interface
40
-- 2007-11-25    98   1.1    added RP_IINT support; use entity rather arch
41
--                           name to switch core/serport;
42
--                           use serport_uart_[tr]x_tb to allow that UUT is a
43
--                           [sft]sim model compiled with keep hierarchy
44
-- 2007-07-02    63   1.0    Initial version 
45
------------------------------------------------------------------------------
46
 
47
library ieee;
48
use ieee.std_logic_1164.all;
49
use ieee.std_logic_arith.all;
50
-- synthesis translate_off
51
use ieee.std_logic_textio.all;
52
use std.textio.all;
53
-- synthesis translate_on
54
 
55
use work.slvtypes.all;
56
use work.rrilib.all;
57
use work.comlib.all;
58
use work.serport.all;
59
 
60
entity tbd_rri_serport is               -- rri_core+rri_serport tb design
61
                                        -- implements tbd_rri_gen
62
  port (
63
    CLK  : in slbit;                    -- clock
64
    CE_INT : in slbit;                  -- rri ito time unit clock enable
65
    CE_USEC : in slbit;                 -- 1 usec clock enable
66
    RESET  : in slbit;                  -- reset
67
    CP_DI : in slv9;                    -- comm port: data in
68
    CP_ENA : in slbit;                  -- comm port: data enable
69
    CP_BUSY : out slbit;                -- comm port: data busy
70
    CP_DO : out slv9;                   -- comm port: data out
71
    CP_VAL : out slbit;                 -- comm port: data valid
72
    CP_HOLD : in slbit;                 -- comm port: data hold
73
    RB_MREQ_req : out slbit;            -- rbus: request - req
74
    RB_MREQ_we : out slbit;             -- rbus: request - we
75
    RB_MREQ_initt : out slbit;          -- rbus: request - init; avoid name coll
76
    RB_MREQ_addr : out slv8;            -- rbus: request - addr
77
    RB_MREQ_din : out slv16;            -- rbus: request - din
78
    RB_SRES_ack : in slbit;             -- rbus: response - ack
79
    RB_SRES_busy : in slbit;            -- rbus: response - busy
80
    RB_SRES_err : in slbit;             -- rbus: response - err
81
    RB_SRES_dout : in slv16;            -- rbus: response - dout
82
    RB_LAM : in slv16;                  -- rbus: look at me
83
    RB_STAT : in slv3;                  -- rbus: status flags
84
    TXRXACT : out slbit                 -- txrx active flag
85
  );
86
end entity tbd_rri_serport;
87
 
88
 
89
architecture syn of tbd_rri_serport is
90
 
91
  signal RRI_RXSD : slbit := '0';
92
  signal RRI_TXSD : slbit := '0';
93
  signal RXDATA : slv8 := (others=>'0');
94
  signal RXVAL : slbit := '0';
95
  signal RXACT : slbit := '0';
96
  signal TXDATA : slv8 := (others=>'0');
97
  signal TXENA : slbit := '0';
98
  signal TXBUSY : slbit := '0';
99
  signal CLKDIV : slv13 := conv_std_logic_vector(1,13);
100
                           -- NOTE: change also CDINIT in tbu_rri_serport !!
101
 
102
component tbu_rri_serport is            -- rri core+serport combo
103
  port (
104
    CLK  : in slbit;                    -- clock
105
    CE_INT : in slbit;                  -- rri ito time unit clock enable
106
    CE_USEC : in slbit;                 -- 1 usec clock enable
107
    CE_MSEC : in slbit;                 -- 1 msec clock enable
108
    RESET  : in slbit;                  -- reset
109
    RXSD : in slbit;                    -- receive serial data (uart view)
110
    TXSD : out slbit;                   -- transmit serial data (uart view)
111
    RB_MREQ_req : out slbit;            -- rbus: request - req
112
    RB_MREQ_we : out slbit;             -- rbus: request - we
113
    RB_MREQ_initt : out slbit;          -- rbus: request - init; avoid name coll
114
    RB_MREQ_addr : out slv8;            -- rbus: request - addr
115
    RB_MREQ_din : out slv16;            -- rbus: request - din
116
    RB_SRES_ack : in slbit;             -- rbus: response - ack
117
    RB_SRES_busy : in slbit;            -- rbus: response - busy
118
    RB_SRES_err : in slbit;             -- rbus: response - err
119
    RB_SRES_dout : in slv16;            -- rbus: response - dout
120
    RB_LAM : in slv16;                  -- rbus: look at me
121
    RB_STAT : in slv3                   -- rbus: status flags
122
  );
123
end component;
124
 
125
  constant CPREF : slv4 := "1000";
126
  constant NCOMM : positive := 4;
127
 
128
begin
129
 
130
  UUT : tbu_rri_serport
131
    port map (
132
      CLK          => CLK,
133
      CE_INT       => CE_INT,
134
      CE_USEC      => CE_USEC,
135
      CE_MSEC      => '1',
136
      RESET        => RESET,
137
      RXSD         => RRI_RXSD,
138
      TXSD         => RRI_TXSD,
139
      RB_MREQ_req  => RB_MREQ_req,
140
      RB_MREQ_we   => RB_MREQ_we,
141
      RB_MREQ_initt=> RB_MREQ_initt,
142
      RB_MREQ_addr => RB_MREQ_addr,
143
      RB_MREQ_din  => RB_MREQ_din,
144
      RB_SRES_ack  => RB_SRES_ack,
145
      RB_SRES_busy => RB_SRES_busy,
146
      RB_SRES_err  => RB_SRES_err,
147
      RB_SRES_dout => RB_SRES_dout,
148
      RB_LAM       => RB_LAM,
149
      RB_STAT      => RB_STAT
150
    );
151
 
152
  UARTRX : serport_uart_rx
153
    generic map (
154
      CDWIDTH => 13)
155
    port map (
156
      CLK    => CLK,
157
      RESET  => RESET,
158
      CLKDIV => CLKDIV,
159
      RXSD   => RRI_TXSD,
160
      RXDATA => RXDATA,
161
      RXVAL  => RXVAL,
162
      RXERR  => open,
163
      RXACT  => RXACT
164
    );
165
 
166
  UARTTX : serport_uart_tx
167
    generic map (
168
      CDWIDTH => 13)
169
    port map (
170
      CLK    => CLK,
171
      RESET  => RESET,
172
      CLKDIV => CLKDIV,
173
      TXSD   => RRI_RXSD,
174
      TXDATA => TXDATA,
175
      TXENA  => TXENA,
176
      TXBUSY => TXBUSY
177
    );
178
 
179
  TXRXACT <= RXACT or TXBUSY;
180
 
181
  B2CD : byte2cdata                     -- byte stream -> 9bit comma,data
182
    generic map (
183
      CPREF => CPREF,
184
      NCOMM => NCOMM)
185
    port map (
186
      CLK   => CLK,
187
      RESET => RESET,
188
      DI    => RXDATA,
189
      ENA   => RXVAL,
190
      BUSY  => open,
191
      DO    => CP_DO,
192
      VAL   => CP_VAL,
193
      HOLD  => CP_HOLD
194
    );
195
 
196
  CD2B : cdata2byte                     -- 9bit comma,data -> byte stream
197
    generic map (
198
      CPREF => CPREF,
199
      NCOMM => NCOMM)
200
    port map (
201
      CLK   => CLK,
202
      RESET => RESET,
203
      DI    => CP_DI,
204
      ENA   => CP_ENA,
205
      BUSY  => CP_BUSY,
206
      DO    => TXDATA,
207
      VAL   => TXENA,
208
      HOLD  => TXBUSY
209
    );
210
 
211
-- synthesis translate_off
212
  proc_moni: process
213
    variable oline : line;
214
    constant c2out_time : time := 10 ns;  -- FIXME - this isn't modular !!!
215
 
216
  begin
217
 
218
    loop
219
      wait until CLK'event and CLK='1';
220
      wait for c2out_time;
221
 
222
      if TXENA='1' and TXBUSY='0' then
223
        write(oline, now, right, 12);
224
        write(oline, string'("       "));
225
        write(oline, string'(":   tx  "));
226
        write(oline, string'("  "));
227
        write(oline, TXDATA, right, 9);
228
        writeline(output, oline);
229
      end if;
230
 
231
      if RXVAL = '1' then
232
        write(oline, now, right, 12);
233
        write(oline, string'("       "));
234
        write(oline, string'(":   rx  "));
235
        write(oline, string'("  "));
236
        write(oline, RXDATA, right, 9);
237
        writeline(output, oline);
238
      end if;
239
 
240
    end loop;
241
 
242
  end process proc_moni;
243
-- synthesis translate_on
244
 
245
 
246
end syn;

powered by: WebSVN 2.1.0

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