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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [rtl/] [vlib/] [serport/] [serport_master.vhd] - Blame information for rev 36

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 wfjm
-- $Id: serport_master.vhd 666 2015-04-12 21:17:54Z mueller $
2
--
3
-- Copyright 2015- 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:    serport_master - syn
16
-- Description:    serial port: serial port module, master side
17
--
18
-- Dependencies:   serport_uart_rxtx_ab
19
--                 serport_xonrx
20
--                 serport_xontx
21
-- Test bench:     -
22
-- Target Devices: generic
23
-- Tool versions:  ise 14.7; viv 2014.4; ghdl 0.31
24
--
25
-- Synthesized (xst):
26
-- Date         Rev  ise         Target      flop lutl lutm slic t peri
27
-- 2015-04-12   666 14.7  131013 xc6slx16-2   104  171    0   63 s  6.4
28
--
29
-- Revision History: 
30
-- Date         Rev Version  Comment
31
-- 2015-04-12   666   1.0    Initial version
32
------------------------------------------------------------------------------
33
 
34
library ieee;
35
use ieee.std_logic_1164.all;
36
use ieee.numeric_std.all;
37
 
38
use work.slvtypes.all;
39
use work.serportlib.all;
40
 
41
entity serport_master is                -- serial port module, 1 clock domain
42
  generic (
43
    CDWIDTH : positive := 13);          -- clk divider width
44
  port (
45
    CLK : in slbit;                     -- clock
46
    RESET : in slbit;                   -- reset
47
    CLKDIV : in slv(CDWIDTH-1 downto 0); -- clock divider setting
48
    ENAXON : in slbit := '0';           -- enable xon/xoff handling
49
    ENAESC : in slbit := '0';           -- enable xon/xoff escaping
50
    RXDATA : out slv8;                  -- receiver data out
51
    RXVAL : out slbit;                  -- receiver data valid
52
    RXERR : out slbit;                  -- receiver data error (frame error)
53
    RXOK : in slbit := '1';             -- rx channel ok
54
    TXDATA : in slv8;                   -- transmit data in
55
    TXENA : in slbit;                   -- transmit data enable
56
    TXBUSY : out slbit;                 -- transmit busy
57
    RXSD : in slbit;                    -- receive serial data (uart view)
58
    TXSD : out slbit;                   -- transmit serial data (uart view)
59
    RXRTS_N : out slbit;                -- receive rts (uart view, act.low)
60
    TXCTS_N : in slbit := '0'           -- transmit cts (uart view, act.low)
61
  );
62
end serport_master;
63
 
64
 
65
architecture syn of serport_master is
66
 
67
  signal UART_RXDATA : slv8 := (others=>'0');
68
  signal UART_RXVAL : slbit := '0';
69
  signal UART_TXDATA : slv8 := (others=>'0');
70
  signal UART_TXENA : slbit := '0';
71
  signal UART_TXBUSY : slbit := '0';
72
 
73
  signal XONTX_TXENA : slbit := '0';
74
  signal XONTX_TXBUSY : slbit := '0';
75
 
76
  signal TXOK : slbit := '0';
77
 
78
begin
79
 
80
  UART : serport_uart_rxtx             -- uart, rx+tx combo
81
  generic map (
82
    CDWIDTH => CDWIDTH)
83
  port map (
84
    CLK        => CLK,
85
    RESET      => RESET,
86
    CLKDIV     => CLKDIV,
87
    RXSD       => RXSD,
88
    RXDATA     => UART_RXDATA,
89
    RXVAL      => UART_RXVAL,
90
    RXERR      => RXERR,
91
    RXACT      => open,
92
    TXSD       => TXSD,
93
    TXDATA     => UART_TXDATA,
94
    TXENA      => UART_TXENA,
95
    TXBUSY     => UART_TXBUSY
96
  );
97
 
98
  XONRX : serport_xonrx                 --  xon/xoff logic rx path
99
  port map (
100
    CLK         => CLK,
101
    RESET       => RESET,
102
    ENAXON      => ENAXON,
103
    ENAESC      => ENAESC,
104
    UART_RXDATA => UART_RXDATA,
105
    UART_RXVAL  => UART_RXVAL,
106
    RXDATA      => RXDATA,
107
    RXVAL       => RXVAL,
108
    RXHOLD      => '0',
109
    RXOVR       => open,
110
    TXOK        => TXOK
111
  );
112
 
113
  XONTX : serport_xontx                 --  xon/xoff logic tx path
114
  port map (
115
    CLK         => CLK,
116
    RESET       => RESET,
117
    ENAXON      => ENAXON,
118
    ENAESC      => ENAESC,
119
    UART_TXDATA => UART_TXDATA,
120
    UART_TXENA  => XONTX_TXENA,
121
    UART_TXBUSY => XONTX_TXBUSY,
122
    TXDATA      => TXDATA,
123
    TXENA       => TXENA,
124
    TXBUSY      => TXBUSY,
125
    RXOK        => RXOK,
126
    TXOK        => TXOK
127
  );
128
 
129
  RXRTS_N <= not RXOK;
130
 
131
  proc_cts: process (TXCTS_N, XONTX_TXENA, UART_TXBUSY)
132
  begin
133
    if TXCTS_N = '0' then               -- transmit cts asserted
134
      UART_TXENA   <= XONTX_TXENA;
135
      XONTX_TXBUSY <= UART_TXBUSY;
136
    else                                -- transmit cts not asserted
137
      UART_TXENA   <= '0';
138
      XONTX_TXBUSY <= '1';
139
    end if;
140
  end process proc_cts;
141
 
142
end syn;

powered by: WebSVN 2.1.0

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