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

Subversion Repositories m16c5x

[/] [m16c5x/] [trunk/] [RTL/] [Src/] [M16C5x_UART.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 MichaelA
////////////////////////////////////////////////////////////////////////////////
2
//
3
//  Copyright 2013 by Michael A. Morris, dba M. A. Morris & Associates
4
//
5
//  All rights reserved. The source code contained herein is publicly released
6
//  under the terms and conditions of the GNU Lesser Public License. No part of
7
//  this source code may be reproduced or transmitted in any form or by any
8
//  means, electronic or mechanical, including photocopying, recording, or any
9
//  information storage and retrieval system in violation of the license under
10
//  which the source code is released.
11
//
12
//  The source code contained herein is free; it may be redistributed and/or
13
//  modified in accordance with the terms of the GNU Lesser General Public
14
//  License as published by the Free Software Foundation; either version 2.1 of
15
//  the GNU Lesser General Public License, or any later version.
16
//
17
//  The source code contained herein is freely released WITHOUT ANY WARRANTY;
18
//  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
19
//  PARTICULAR PURPOSE. (Refer to the GNU Lesser General Public License for
20
//  more details.)
21
//
22
//  A copy of the GNU Lesser General Public License should have been received
23
//  along with the source code contained herein; if not, a copy can be obtained
24
//  by writing to:
25
//
26
//  Free Software Foundation, Inc.
27
//  51 Franklin Street, Fifth Floor
28
//  Boston, MA  02110-1301 USA
29
//
30
//  Further, no use of this source code is permitted in any form or means
31
//  without inclusion of this banner prominently in any derived works.
32
//
33
//  Michael A. Morris
34
//  Huntsville, AL
35
//
36
////////////////////////////////////////////////////////////////////////////////
37
 
38
`timescale 1ns / 1ps
39
 
40
////////////////////////////////////////////////////////////////////////////////
41
// Company:         M. A. Morris & Associates 
42
// Engineer:        Michael A. Morris
43
// 
44
// Create Date:     20:13:40 07/06/2013 
45
// Design Name:     M16C5x Microcontroller based on PIC16C5x-compatible core
46
// Module Name:     M16C5x_UART.v 
47
// Project Name:    M16C5x 
48
// Target Devices:  SRAM-based FPGAs
49
// Tool versions:   Xilinx ISE 10.1i SP3
50
//
51
// Description:
52
//
53
//  This module implements a UART for use with the M16C5x soft-core processor.
54
//  The module is based on existing modules developed for use with the NXP ARM
55
//  LPC213x/LPC214x processor's Synchronous Serial Peripheral interface. A 16-
56
//  bit frame size is used. The SSPx_Slv module is an SSP-compatible serial
57
//  slave I/F that can be connected to an SPI Master interface. The SSPx_Slv
58
//  controls the synchronous serial interface transactions to/from the SSP_UART
59
//  which is attached. Additional modules can be attached to the SSPx_Slv, but
60
//  select logic would need to be incorporated to select the additional modules
61
//  based on the RA, register address, control field. The SSP_UART attached 
62
//  requires 4 addresses, and RA has a range from 0 to 7, i.e. 3 bits. 
63
//
64
//  The UART and its SSP interface is optimized to transfer 4 control signals 
65
//  and 12 data bits. Standard MSB first shifting is expected by the SSPx_Slv
66
//  module. This allows on the fly decoding of the 3 address bits and the WnR
67
//  write control signal.
68
//
69
//  The 12-bit data format, more fully described in the headers of the SSPx_Slv
70
//  and SSP_UART modules, allows efficient control of the UART over a serial
71
//  link. On every 16-bit serial transfer, the UART provides status information
72
//  regarding the UART's transmitter and UART's receiver. This allows the pro-
73
//  grammer access to critical status information with a minimal number of
74
//  transfers. Transmit and Receive FIFOs are part of the implementation pro-
75
//  vided, and these elements provide buffering which further reduces the work-
76
//  load on the processor to which the SSP_UART is attached.
77
//
78
// Dependencies:    SSPx_Slv.v
79
//                  SSP_UART.v
80
//                      re1ce.v
81
//                      DPSFmnCE.v
82
//                      UART_BRG.v
83
//                      UART_TXSM.v
84
//                      UART_RXSM.v
85
//                      UART_RTO.v
86
//                      UART_INT.v
87
//                          redet.v
88
//
89
// Revision:
90
// 
91
//  1.00    13G06   MAM     File Created
92
//
93
//  1.00    13G14   MAM     Improved parameterization. Added/pulled parameters
94
//                          to allow all relevant options to be set through the
95
//                          instantiation interface.
96
//
97
// Additional Comments: 
98
//
99
////////////////////////////////////////////////////////////////////////////////
100
 
101
module M16C5x_UART #(
102
    // SSP_UART Default BRR Settings Parameters
103
 
104
    parameter pPS_Default  = 4'h1,          // see baud rate tables SSP_UART
105
    parameter pDiv_Default = 8'hEF,         // see baud rate tables SSP_UART
106
 
107
    // SSP_UART Default Receive Time Out Character Delay Count
108
 
109
    parameter pRTOChrDlyCnt = 3,
110
 
111
    // SSP_UART FIFO Configuration Parameters
112
 
113
    parameter pTF_Depth = 0,                // Tx FIFO Depth: 2**(TF_Depth + 4)
114
    parameter pRF_Depth = 3,                // Rx FIFO Depth: 2**(RF_Depth + 4)
115
    parameter pTF_Init  = "Src/UART_TF.coe",    // Tx FIFO Memory Initialization 
116
    parameter pRF_Init  = "Src/UART_RF.coe"     // Rx FIFO Memory Initialization 
117
)(
118
    input   Rst,        // System Reset
119
 
120
    input   Clk_UART,   // UART Clock - expected to be 48 MHz
121
 
122
    //  SPI Mode 0/3 Interface
123
 
124
    input   SSEL,       // Slave Select
125
    input   SCK,        // Serial Shift Clock
126
    input   MOSI,       // Serial Data Input:  Master Out/Slave In
127
    output  MISO,       // Serial Data Output: Master In/Slave Out
128
 
129
    //  UART External Interface
130
 
131
    output  TxD,        // Transmit Data
132
    output  RTS,        // Request to Send
133
    input   RxD,        // Receive Data
134
    input   CTS,        // Clear to Send
135
 
136
    output  DE,         // Drive Enable for RS-485 Modes
137
 
138
    output  IRQ         // Interrupt Request
139
);
140
 
141
////////////////////////////////////////////////////////////////////////////////
142
//
143
//  Declarations
144
//
145
 
146
wire    [2:0] RA;
147
wire    WnR;
148
wire    En;
149
wire    EOC;
150
wire    [11:0] DI;
151
wire    [11:0] DO;
152
 
153
wire    TxD_232;
154
wire    TxD_485;
155
 
156
////////////////////////////////////////////////////////////////////////////////
157
//
158
//  Implementation
159
//
160
 
161
//  Instatiate a 16-bit Synchronous Serial Peripheral Slave Interface Controller
162
 
163
SSPx_Slv    SSP_Slv (
164
                .Rst(Rst),
165
 
166
                .SSEL(SSEL),
167
                .SCK(SCK),
168
                .MOSI(MOSI),
169
                .MISO(MISO),
170
 
171
                .RA(RA),
172
                .WnR(WnR),
173
                .En(En),
174
                .EOC(EOC),
175
                .DI(DI),
176
                .DO(DO),
177
 
178
                .BC()
179
            );
180
 
181
//  Instantiate UART compatible with 16-bit SSP Slave Interface Controller
182
 
183
SSP_UART    #(
184
                .pPS_Default(pPS_Default),
185
                .pDiv_Default(pDiv_Default),
186
                .pRTOChrDlyCnt(pRTOChrDlyCnt),
187
                .pTF_Depth(pTF_Depth),
188
                .pRF_Depth(pRF_Depth),
189
                .pTF_Init(pTF_Init),
190
                .pRF_Init(pRF_Init)
191
            ) UART (
192
                .Rst(Rst),
193
                .Clk(Clk_UART),
194
 
195
                .SSP_SSEL(SSEL),
196
                .SSP_SCK(SCK),
197
                .SSP_RA(RA),
198
                .SSP_WnR(WnR),
199
                .SSP_En(En),
200
                .SSP_EOC(EOC),
201
                .SSP_DI(DI),
202
                .SSP_DO(DO),
203
 
204
                .TxD_232(TxD_232),
205
                .RxD_232(RxD),
206
                .xRTS(RTS),
207
                .xCTS(CTS),
208
 
209
                .TxD_485(TxD_485),
210
                .RxD_485(RxD),
211
                .xDE(DE),
212
 
213
                .IRQ(IRQ),
214
 
215
                .TxIdle(),
216
                .RxIdle()
217
            );
218
 
219
assign TxD = TxD_232 & TxD_485;
220
 
221
endmodule

powered by: WebSVN 2.1.0

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