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

Subversion Repositories w11

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 wfjm
-- $Id: 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:    rri_serport - syn
16
-- Description:    rri: serport adapter
17
--
18
-- Dependencies:   serport/serport_uart_rxtx_ab
19
--                 comlib/byte2cdata
20
--                 comlib/cdata2byte
21
--                 memlib/fifo_1c_dram
22
--
23
-- Test bench:     tb/tb_rri_serport
24
--
25
-- Target Devices: generic
26
-- Tool versions:  xst 8.1, 8.2, 9.1, 9.2, 11.4; ghdl 0.18-0.26
27
-- Revision History: 
28
-- Date         Rev Version  Comment
29
-- 2010-06-06   301   2.3    use NCOMM=4 (new eop,nak commas)
30
-- 2010-06-03   300   2.2.1  use FAWIDTH=5 
31
-- 2010-05-02   287   2.2    drop RTSFLUSH generic
32
-- 2010-04-18   279   2.1    rewrite flow control, drop RTSFBUF generic
33
-- 2010-04-03   274   2.0    flow control interfaces: RTSFLUSH, CTS_N, RTS_N
34
-- 2007-06-24    60   1.0    Initial version 
35
------------------------------------------------------------------------------
36
 
37
library ieee;
38
use ieee.std_logic_1164.all;
39
use ieee.std_logic_arith.all;
40
 
41
use work.slvtypes.all;
42
use work.genlib.all;
43
use work.memlib.all;
44
use work.comlib.all;
45
use work.serport.all;
46
use work.rrilib.all;
47
 
48
entity rri_serport is                   -- rri serport adapter
49
  generic (
50
    CPREF : slv4 :=  "1000";            -- comma prefix
51
    FAWIDTH : positive :=  5;           -- rx fifo address port width
52
    CDWIDTH : positive := 13;           -- clk divider width
53
    CDINIT : natural   := 15);          -- clk divider initial/reset setting
54
  port (
55
    CLK  : in slbit;                    -- clock
56
    CE_USEC : in slbit;                 -- 1 usec clock enable
57
    CE_MSEC : in slbit;                 -- 1 msec clock enable
58
    RESET : in slbit;                   -- reset
59
    RXSD : in slbit;                    -- receive serial data (board view)
60
    TXSD : out slbit;                   -- transmit serial data (board view)
61
    CTS_N : in slbit := '0';            -- clear to send   (act.low, board view)
62
    RTS_N : out slbit;                  -- request to send (act.low, board view)
63
    CP_DI : out slv9;                   -- comm port: data in
64
    CP_ENA : out slbit;                 -- comm port: data enable
65
    CP_BUSY : in slbit;                 -- comm port: data busy
66
    CP_DO : in slv9;                    -- comm port: data out
67
    CP_VAL : in slbit;                  -- comm port: data valid
68
    CP_HOLD : out slbit;                -- comm port: data hold
69
    CP_FLUSH : in slbit := '0'          -- comm port: data flush
70
  );
71
end rri_serport;
72
 
73
 
74
architecture syn of rri_serport is
75
 
76
  signal LRESET : slbit := '0';
77
  signal RXDATA : slv8 := (others=>'0');
78
  signal RXVAL : slbit := '0';
79
  signal TXDATA : slv8 := (others=>'0');
80
  signal TXENA : slbit := '0';
81
  signal TXBUSY : slbit := '0';
82
  signal ABACT : slbit := '0';
83
  signal FIFO_DI : slv9 := (others=>'0');
84
  signal FIFO_ENA : slbit := '0';
85
  signal FIFO_BUSY : slbit := '0';
86
  signal FIFO_SIZE : slv(FAWIDTH downto 0) := (others=>'0');
87
  signal CD2B_HOLD : slbit := '0';
88
 
89
  signal R_FIFOBLOCK : slbit := '0';       -- fifo block flag  
90
  signal FLUSH_PULSE : slbit := '0';       -- rri flush as 2-3 usec pulse
91
 
92
  constant NCOMM : positive := 4;
93
 
94
begin
95
 
96
  UART : serport_uart_rxtx_ab           -- uart, rx+tx+autobauder combo
97
  generic map (
98
    CDWIDTH => CDWIDTH,
99
    CDINIT  => CDINIT)
100
  port map (
101
    CLK     => CLK,
102
    CE_MSEC => CE_MSEC,
103
    RESET   => RESET,
104
    RXSD    => RXSD,
105
    RXDATA  => RXDATA,
106
    RXVAL   => RXVAL,
107
    RXERR   => open,
108
    RXACT   => open,
109
    TXSD    => TXSD,
110
    TXDATA  => TXDATA,
111
    TXENA   => TXENA,
112
    TXBUSY  => TXBUSY,
113
    ABACT   => ABACT,
114
    ABDONE  => open
115
  );
116
 
117
  LRESET <= RESET or ABACT;
118
 
119
  B2CD : byte2cdata                     -- byte stream -> 9bit comma,data
120
  generic map (
121
    CPREF => CPREF,
122
    NCOMM => NCOMM)
123
  port map (
124
    CLK   => CLK,
125
    RESET => LRESET,
126
    DI    => RXDATA,
127
    ENA   => RXVAL,
128
    BUSY  => open,
129
    DO    => FIFO_DI,
130
    VAL   => FIFO_ENA,
131
    HOLD  => FIFO_BUSY
132
  );
133
 
134
  CD2B : cdata2byte                     -- 9bit comma,data -> byte stream
135
  generic map (
136
    CPREF => CPREF,
137
    NCOMM => NCOMM)
138
  port map (
139
    CLK   => CLK,
140
    RESET => LRESET,
141
    DI    => CP_DO,
142
    ENA   => CP_VAL,
143
    BUSY  => CP_HOLD,
144
    DO    => TXDATA,
145
    VAL   => TXENA,
146
    HOLD  => CD2B_HOLD
147
  );
148
 
149
  FIFO : fifo_1c_dram                   -- fifo, 1 clock, dram based
150
  generic map (
151
    AWIDTH => FAWIDTH,
152
    DWIDTH => 9)
153
  port map (
154
    CLK   => CLK,
155
    RESET => LRESET,
156
    DI    => FIFO_DI,
157
    ENA   => FIFO_ENA,
158
    BUSY  => FIFO_BUSY,
159
    DO    => CP_DI,
160
    VAL   => CP_ENA,
161
    HOLD  => CP_BUSY,
162
    SIZE  => FIFO_SIZE
163
  );
164
 
165
-- re-write later, use RB_MREQ internal init to set parameters which
166
-- control the flush logic.
167
--
168
--DOFLUSH: if RTSFLUSH generate
169
--
170
--  PGEN : timer
171
--  generic map (
172
--    TWIDTH => 1,
173
--    RETRIG => true)
174
--  port map (
175
--    CLK   => CLK,
176
--    CE    => CE_USEC,
177
--    DELAY => "1",
178
--    START => CP_FLUSH,
179
--    STOP  => RESET,
180
--    BUSY  => FLUSH_PULSE
181
--  );
182
--end generate DOFLUSH;
183
 
184
  proc_fifoblock: process (CLK)
185
  begin
186
 
187
    if CLK'event and CLK='1' then
188
      if unsigned(FIFO_SIZE) >= 3*2**(FAWIDTH-2) then   -- more than 3/4 full
189
        R_FIFOBLOCK <= '1';                               -- block
190
      elsif unsigned(FIFO_SIZE) < 2**(FAWIDTH-1) then   -- less than 1/2 full
191
        R_FIFOBLOCK <= '0';                               -- unblock
192
      end if;
193
    end if;
194
 
195
  end process proc_fifoblock;
196
 
197
  RTS_N     <= R_FIFOBLOCK or FLUSH_PULSE;
198
 
199
  CD2B_HOLD <= TXBUSY or CTS_N;
200
 
201
end syn;

powered by: WebSVN 2.1.0

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