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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.6/] [rtl/] [vlib/] [serport/] [serportlib.vhd] - Blame information for rev 12

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

Line No. Rev Author Line
1 12 wfjm
-- $Id: serport.vhd 389 2011-07-07 21:59:00Z mueller $
2 2 wfjm
--
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
-- Package Name:   serport
16
-- Description:    serial port interface components
17
--
18
-- Dependencies:   -
19 9 wfjm
-- Tool versions:  xst 8.1, 8.2, 9.1, 9.2, 11.4, 12.1; ghdl 0.18-0.29
20
--
21 2 wfjm
-- Revision History: 
22
-- Date         Rev Version  Comment
23 9 wfjm
-- 2010-12-26   348   1.2.1  add ABCLKDIV to serport_uart_rxtx_ab
24 2 wfjm
-- 2010-04-10   276   1.2    add clock divider constant defs
25
-- 2007-10-22    88   1.1    renames (in prev revs); remove std_logic_unsigned
26
-- 2007-06-03    45   1.0    Initial version 
27
------------------------------------------------------------------------------
28
 
29
library ieee;
30
use ieee.std_logic_1164.all;
31
 
32
use work.slvtypes.all;
33
 
34
package serport is
35
 
36
-- clock divider constants assume 50 MHz clock
37
 
38
  constant serport_clkdiv_009600 : integer := 5208-1; -- 50000000/  9600=5208.33
39
  constant serport_clkdiv_019200 : integer := 2604-1; -- 50000000/ 19200=2604.16
40
  constant serport_clkdiv_038400 : integer := 1302-1; -- 50000000/ 38400=1302.08
41
  constant serport_clkdiv_057600 : integer :=  868-1; -- 50000000/ 57600= 868.05
42
  constant serport_clkdiv_115200 : integer :=  434-1; -- 50000000/115200= 434.02
43
  constant serport_clkdiv_230400 : integer :=  217-1; -- 50000000/230400= 217.01
44
  constant serport_clkdiv_460800 : integer :=  109-1; -- 50000000/460800= 108.51
45
  constant serport_clkdiv_500000 : integer :=  100-1; -- 50000000/500000= 100
46
  constant serport_clkdiv_576000 : integer :=   87-1; -- 50000000/576000=  86.80
47
  constant serport_clkdiv_921600 : integer :=   54-1; -- 50000000/921600=  54.25
48
  constant serport_clkdiv_1M     : integer :=   50-1; -- 50000000/1M    =  50
49
  constant serport_clkdiv_2M     : integer :=   24-1; -- 50000000/2M    =  25
50
 
51
component serport_uart_rxtx is          -- serial port uart: rx+tx combo
52
  generic (
53
    CDWIDTH : positive := 13);          -- clk divider width
54
  port (
55
    CLK : in slbit;                     -- clock
56
    RESET : in slbit;                   -- reset
57
    CLKDIV : in slv(CDWIDTH-1 downto 0); -- clock divider setting
58
    RXSD : in slbit;                    -- receive serial data (uart view)
59
    RXDATA : out slv8;                  -- receiver data out
60
    RXVAL : out slbit;                  -- receiver data valid
61
    RXERR : out slbit;                  -- receiver data error (frame error)
62
    RXACT : out slbit;                  -- receiver active
63
    TXSD : out slbit;                   -- transmit serial data (uart view)
64
    TXDATA : in slv8;                   -- transmit data in
65
    TXENA : in slbit;                   -- transmit data enable
66
    TXBUSY : out slbit                  -- transmit busy
67
  );
68
end component;
69
 
70
component serport_uart_rx is            -- serial port uart: receive part
71
  generic (
72
    CDWIDTH : positive := 13);          -- clk divider width
73
  port (
74
    CLK : in slbit;                     -- clock
75
    RESET : in slbit;                   -- reset
76
    CLKDIV : in slv(CDWIDTH-1 downto 0); -- clock divider setting
77
    RXSD : in slbit;                    -- receive serial data (uart view)
78
    RXDATA : out slv8;                  -- receiver data out
79
    RXVAL : out slbit;                  -- receiver data valid
80
    RXERR : out slbit;                  -- receiver data error (frame error)
81
    RXACT : out slbit                   -- receiver active
82
  );
83
end component;
84
 
85
component serport_uart_tx is            -- serial port uart: transmit part
86
  generic (
87
    CDWIDTH : positive := 13);          -- clk divider width
88
  port (
89
    CLK : in slbit;                     -- clock
90
    RESET : in slbit;                   -- reset
91
    CLKDIV : in slv(CDWIDTH-1 downto 0); -- clock divider setting
92
    TXSD : out slbit;                   -- transmit serial data (uart view)
93
    TXDATA : in slv8;                   -- transmit data in
94
    TXENA : in slbit;                   -- transmit data enable
95
    TXBUSY : out slbit                  -- transmit busy
96
  );
97
end component;
98
 
99
component serport_uart_rxtx_ab is       -- serial port uart: rx+tx+autobaud
100
  generic (
101
    CDWIDTH : positive := 13;           -- clk divider width
102
    CDINIT: natural := 15);             -- clk divider initial/reset setting
103
  port (
104
    CLK : in slbit;                     -- clock
105
    CE_MSEC : in slbit;                 -- 1 msec clock enable
106
    RESET : in slbit;                   -- reset
107
    RXSD : in slbit;                    -- receive serial data (uart view)
108
    RXDATA : out slv8;                  -- receiver data out
109
    RXVAL : out slbit;                  -- receiver data valid
110
    RXERR : out slbit;                  -- receiver data error (frame error)
111
    RXACT : out slbit;                  -- receiver active
112
    TXSD : out slbit;                   -- transmit serial data (uart view)
113
    TXDATA : in slv8;                   -- transmit data in
114
    TXENA : in slbit;                   -- transmit data enable
115
    TXBUSY : out slbit;                 -- transmit busy
116
    ABACT : out slbit;                  -- autobaud active; if 1 clkdiv invalid
117 9 wfjm
    ABDONE : out slbit;                 -- autobaud resync done
118
    ABCLKDIV : out slv(CDWIDTH-1 downto 0) -- autobaud clock divider setting
119 2 wfjm
  );
120
end component;
121
 
122
component serport_uart_autobaud is      -- serial port uart: autobauder
123
  generic (
124
    CDWIDTH : positive := 13;           -- clk divider width
125
    CDINIT: natural := 15);             -- clk divider initial/reset setting
126
  port (
127
    CLK : in slbit;                     -- clock
128
    CE_MSEC : in slbit;                 -- 1 msec clock enable
129
    RESET : in slbit;                   -- reset
130
    RXSD : in slbit;                    -- receive serial data (uart view)
131
    CLKDIV : out slv(CDWIDTH-1 downto 0); -- clock divider setting
132
    ACT : out slbit;                    -- active; if 1 clkdiv is invalid
133
    DONE : out slbit                    -- resync done
134
  );
135
end component;
136
 
137 12 wfjm
end package serport;

powered by: WebSVN 2.1.0

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